Skip to content

Commit 1978d5a

Browse files
committed
octeontx2-af: Use separate handlers for interrupts
jira LE-1907 cve CVE-2024-27030 Rebuild_History Non-Buildable kernel-5.14.0-427.28.1.el9_4 commit-author Subbaraya Sundeep <sbhatta@marvell.com> commit 50e60de For PF to AF interrupt vector and VF to AF vector same interrupt handler is registered which is causing race condition. When two interrupts are raised to two CPUs at same time then two cores serve same event corrupting the data. Fixes: 7304ac4 ("octeontx2-af: Add mailbox IRQ and msg handlers") Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net> (cherry picked from commit 50e60de) Signed-off-by: Jonathan Maple <jmaple@ciq.com>
1 parent 78193d6 commit 1978d5a

File tree

1 file changed

+14
-3
lines changed
  • drivers/net/ethernet/marvell/octeontx2/af

1 file changed

+14
-3
lines changed

drivers/net/ethernet/marvell/octeontx2/af/rvu.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2512,10 +2512,9 @@ static void rvu_queue_work(struct mbox_wq_info *mw, int first,
25122512
}
25132513
}
25142514

2515-
static irqreturn_t rvu_mbox_intr_handler(int irq, void *rvu_irq)
2515+
static irqreturn_t rvu_mbox_pf_intr_handler(int irq, void *rvu_irq)
25162516
{
25172517
struct rvu *rvu = (struct rvu *)rvu_irq;
2518-
int vfs = rvu->vfs;
25192518
u64 intr;
25202519

25212520
intr = rvu_read64(rvu, BLKADDR_RVUM, RVU_AF_PFAF_MBOX_INT);
@@ -2529,6 +2528,18 @@ static irqreturn_t rvu_mbox_intr_handler(int irq, void *rvu_irq)
25292528

25302529
rvu_queue_work(&rvu->afpf_wq_info, 0, rvu->hw->total_pfs, intr);
25312530

2531+
return IRQ_HANDLED;
2532+
}
2533+
2534+
static irqreturn_t rvu_mbox_intr_handler(int irq, void *rvu_irq)
2535+
{
2536+
struct rvu *rvu = (struct rvu *)rvu_irq;
2537+
int vfs = rvu->vfs;
2538+
u64 intr;
2539+
2540+
/* Sync with mbox memory region */
2541+
rmb();
2542+
25322543
/* Handle VF interrupts */
25332544
if (vfs > 64) {
25342545
intr = rvupf_read64(rvu, RVU_PF_VFPF_MBOX_INTX(1));
@@ -2862,7 +2873,7 @@ static int rvu_register_interrupts(struct rvu *rvu)
28622873
/* Register mailbox interrupt handler */
28632874
sprintf(&rvu->irq_name[RVU_AF_INT_VEC_MBOX * NAME_SIZE], "RVUAF Mbox");
28642875
ret = request_irq(pci_irq_vector(rvu->pdev, RVU_AF_INT_VEC_MBOX),
2865-
rvu_mbox_intr_handler, 0,
2876+
rvu_mbox_pf_intr_handler, 0,
28662877
&rvu->irq_name[RVU_AF_INT_VEC_MBOX * NAME_SIZE], rvu);
28672878
if (ret) {
28682879
dev_err(rvu->dev,

0 commit comments

Comments
 (0)