]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob
2fab22c5b2122805669b04cac979439716b89b74
[thirdparty/kernel/stable-queue.git] /
1 From 6b292a04c694573a302686323fe15b1c7e673e5b Mon Sep 17 00:00:00 2001
2 From: Thomas Gleixner <tglx@linutronix.de>
3 Date: Fri, 29 Apr 2022 15:54:24 +0200
4 Subject: pci_irq_vector() can't be used in atomic context any longer. This conflicts with the usage of this function in nic_mbx_intr_handler().
5 =?UTF-8?q?age=20of=20this=20function=20in=20nic=5Fmbx=5Fintr=5Fhandler().?=
6
7 From: Thomas Gleixner <tglx@linutronix.de>
8
9 commit 6b292a04c694573a302686323fe15b1c7e673e5b upstream.
10
11 Cache the Linux interrupt numbers in struct nicpf and use that cache in the
12 interrupt handler to select the mailbox.
13
14 Fixes: 495c66aca3da ("genirq/msi: Convert to new functions")
15 Reported-by: Ondrej Mosnacek <omosnace@redhat.com>
16 Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
17 Cc: Sunil Goutham <sgoutham@marvell.com>
18 Cc: "David S. Miller" <davem@davemloft.net>
19 Cc: Jakub Kicinski <kuba@kernel.org>
20 Cc: Paolo Abeni <pabeni@redhat.com>
21 Cc: netdev@vger.kernel.org
22 Cc: stable@vger.kernel.org
23 Link: https://bugzilla.redhat.com/show_bug.cgi?id=2041772
24 Signed-off-by: David S. Miller <davem@davemloft.net>
25 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
26 ---
27 drivers/net/ethernet/cavium/thunder/nic_main.c | 16 ++++++++--------
28 1 file changed, 8 insertions(+), 8 deletions(-)
29
30 --- a/drivers/net/ethernet/cavium/thunder/nic_main.c
31 +++ b/drivers/net/ethernet/cavium/thunder/nic_main.c
32 @@ -59,7 +59,7 @@ struct nicpf {
33
34 /* MSI-X */
35 u8 num_vec;
36 - bool irq_allocated[NIC_PF_MSIX_VECTORS];
37 + unsigned int irq_allocated[NIC_PF_MSIX_VECTORS];
38 char irq_name[NIC_PF_MSIX_VECTORS][20];
39 };
40
41 @@ -1150,7 +1150,7 @@ static irqreturn_t nic_mbx_intr_handler(
42 u64 intr;
43 u8 vf;
44
45 - if (irq == pci_irq_vector(nic->pdev, NIC_PF_INTR_ID_MBOX0))
46 + if (irq == nic->irq_allocated[NIC_PF_INTR_ID_MBOX0])
47 mbx = 0;
48 else
49 mbx = 1;
50 @@ -1176,14 +1176,14 @@ static void nic_free_all_interrupts(stru
51
52 for (irq = 0; irq < nic->num_vec; irq++) {
53 if (nic->irq_allocated[irq])
54 - free_irq(pci_irq_vector(nic->pdev, irq), nic);
55 - nic->irq_allocated[irq] = false;
56 + free_irq(nic->irq_allocated[irq], nic);
57 + nic->irq_allocated[irq] = 0;
58 }
59 }
60
61 static int nic_register_interrupts(struct nicpf *nic)
62 {
63 - int i, ret;
64 + int i, ret, irq;
65 nic->num_vec = pci_msix_vec_count(nic->pdev);
66
67 /* Enable MSI-X */
68 @@ -1201,13 +1201,13 @@ static int nic_register_interrupts(struc
69 sprintf(nic->irq_name[i],
70 "NICPF Mbox%d", (i - NIC_PF_INTR_ID_MBOX0));
71
72 - ret = request_irq(pci_irq_vector(nic->pdev, i),
73 - nic_mbx_intr_handler, 0,
74 + irq = pci_irq_vector(nic->pdev, i);
75 + ret = request_irq(irq, nic_mbx_intr_handler, 0,
76 nic->irq_name[i], nic);
77 if (ret)
78 goto fail;
79
80 - nic->irq_allocated[i] = true;
81 + nic->irq_allocated[i] = irq;
82 }
83
84 /* Enable mailbox interrupt */