0009-MIPS-make-oprofile-use-cp0_perfcount_irq-if-it-is-se.patch 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. From 88bb1794592e3fe9c8d65ce73ee851e11dbbd26b Mon Sep 17 00:00:00 2001
  2. From: John Crispin <[email protected]>
  3. Date: Wed, 24 Aug 2011 13:24:11 +0200
  4. Subject: [PATCH 09/24] MIPS: make oprofile use cp0_perfcount_irq if it is set
  5. The patch makes the oprofile code use the performance counters irq.
  6. This patch is written by Felix Fietkau.
  7. Signed-off-by: Felix Fietkau <[email protected]>
  8. Signed-off-by: John Crispin <[email protected]>
  9. Cc: [email protected]
  10. ---
  11. arch/mips/oprofile/op_model_mipsxx.c | 12 ++++++++++++
  12. 1 files changed, 12 insertions(+), 0 deletions(-)
  13. diff --git a/arch/mips/oprofile/op_model_mipsxx.c b/arch/mips/oprofile/op_model_mipsxx.c
  14. index 54759f1..86cf234 100644
  15. --- a/arch/mips/oprofile/op_model_mipsxx.c
  16. +++ b/arch/mips/oprofile/op_model_mipsxx.c
  17. @@ -298,6 +298,11 @@ static void reset_counters(void *arg)
  18. }
  19. }
  20. +static irqreturn_t mipsxx_perfcount_int(int irq, void *dev_id)
  21. +{
  22. + return mipsxx_perfcount_handler();
  23. +}
  24. +
  25. static int __init mipsxx_init(void)
  26. {
  27. int counters;
  28. @@ -374,6 +379,10 @@ static int __init mipsxx_init(void)
  29. save_perf_irq = perf_irq;
  30. perf_irq = mipsxx_perfcount_handler;
  31. + if (cp0_perfcount_irq >= 0)
  32. + return request_irq(cp0_perfcount_irq, mipsxx_perfcount_int,
  33. + IRQF_SHARED, "Perfcounter", save_perf_irq);
  34. +
  35. return 0;
  36. }
  37. @@ -381,6 +390,9 @@ static void mipsxx_exit(void)
  38. {
  39. int counters = op_model_mipsxx_ops.num_counters;
  40. + if (cp0_perfcount_irq >= 0)
  41. + free_irq(cp0_perfcount_irq, save_perf_irq);
  42. +
  43. counters = counters_per_cpu_to_total(counters);
  44. on_each_cpu(reset_counters, (void *)(long)counters, 1);
  45. --
  46. 1.7.5.4