Patch "MIPS: perf: ath79: Fix perfcount IRQ assignment" has been added to the 4.14-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    MIPS: perf: ath79: Fix perfcount IRQ assignment

to the 4.14-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     mips-perf-ath79-fix-perfcount-irq-assignment.patch
and it can be found in the queue-4.14 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 504238816559b2ea552fb70aadd411ac346f539d
Author: Petr Å tetiar <ynezz@xxxxxxx>
Date:   Fri Apr 12 23:08:32 2019 +0200

    MIPS: perf: ath79: Fix perfcount IRQ assignment
    
    [ Upstream commit a1e8783db8e0d58891681bc1e6d9ada66eae8e20 ]
    
    Currently it's not possible to use perf on ath79 due to genirq flags
    mismatch happening on static virtual IRQ 13 which is used for
    performance counters hardware IRQ 5.
    
    On TP-Link Archer C7v5:
    
               CPU0
      2:          0      MIPS   2  ath9k
      4:        318      MIPS   4  19000000.eth
      7:      55034      MIPS   7  timer
      8:       1236      MISC   3  ttyS0
     12:          0      INTC   1  ehci_hcd:usb1
     13:          0  gpio-ath79   2  keys
     14:          0  gpio-ath79   5  keys
     15:         31  AR724X PCI    1  ath10k_pci
    
     $ perf top
     genirq: Flags mismatch irq 13. 00014c83 (mips_perf_pmu) vs. 00002003 (keys)
    
    On TP-Link Archer C7v4:
    
             CPU0
      4:          0      MIPS   4  19000000.eth
      5:       7135      MIPS   5  1a000000.eth
      7:      98379      MIPS   7  timer
      8:         30      MISC   3  ttyS0
     12:      90028      INTC   0  ath9k
     13:       5520      INTC   1  ehci_hcd:usb1
     14:       4623      INTC   2  ehci_hcd:usb2
     15:      32844  AR724X PCI    1  ath10k_pci
     16:          0  gpio-ath79  16  keys
     23:          0  gpio-ath79  23  keys
    
     $ perf top
     genirq: Flags mismatch irq 13. 00014c80 (mips_perf_pmu) vs. 00000080 (ehci_hcd:usb1)
    
    This problem is happening, because currently statically assigned virtual
    IRQ 13 for performance counters is not claimed during the initialization
    of MIPS PMU during the bootup, so the IRQ subsystem doesn't know, that
    this interrupt isn't available for further use.
    
    So this patch fixes the issue by simply booking hardware IRQ 5 for MIPS PMU.
    
    Tested-by: Kevin 'ldir' Darbyshire-Bryant <ldir@xxxxxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Petr Å tetiar <ynezz@xxxxxxx>
    Acked-by: John Crispin <john@xxxxxxxxxxx>
    Acked-by: Marc Zyngier <marc.zyngier@xxxxxxx>
    Signed-off-by: Paul Burton <paul.burton@xxxxxxxx>
    Cc: linux-mips@xxxxxxxxxxxxxxx
    Cc: Ralf Baechle <ralf@xxxxxxxxxxxxxx>
    Cc: James Hogan <jhogan@xxxxxxxxxx>
    Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
    Cc: Jason Cooper <jason@xxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/mips/ath79/setup.c b/arch/mips/ath79/setup.c
index 26a058d58d37b..c7c31e2148136 100644
--- a/arch/mips/ath79/setup.c
+++ b/arch/mips/ath79/setup.c
@@ -183,12 +183,6 @@ const char *get_system_type(void)
 	return ath79_sys_type;
 }
 
-int get_c0_perfcount_int(void)
-{
-	return ATH79_MISC_IRQ(5);
-}
-EXPORT_SYMBOL_GPL(get_c0_perfcount_int);
-
 unsigned int get_c0_compare_int(void)
 {
 	return CP0_LEGACY_COMPARE_IRQ;
diff --git a/drivers/irqchip/irq-ath79-misc.c b/drivers/irqchip/irq-ath79-misc.c
index aa72907846360..0390603170b40 100644
--- a/drivers/irqchip/irq-ath79-misc.c
+++ b/drivers/irqchip/irq-ath79-misc.c
@@ -22,6 +22,15 @@
 #define AR71XX_RESET_REG_MISC_INT_ENABLE	4
 
 #define ATH79_MISC_IRQ_COUNT			32
+#define ATH79_MISC_PERF_IRQ			5
+
+static int ath79_perfcount_irq;
+
+int get_c0_perfcount_int(void)
+{
+	return ath79_perfcount_irq;
+}
+EXPORT_SYMBOL_GPL(get_c0_perfcount_int);
 
 static void ath79_misc_irq_handler(struct irq_desc *desc)
 {
@@ -113,6 +122,8 @@ static void __init ath79_misc_intc_domain_init(
 {
 	void __iomem *base = domain->host_data;
 
+	ath79_perfcount_irq = irq_create_mapping(domain, ATH79_MISC_PERF_IRQ);
+
 	/* Disable and clear all interrupts */
 	__raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_ENABLE);
 	__raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_STATUS);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux