]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
RDMA/ionic: Fix build failure on SPARC due to xchg() operand size
authorAbhijit Gangurde <abhijit.gangurde@amd.com>
Fri, 19 Sep 2025 12:13:00 +0000 (17:43 +0530)
committerLeon Romanovsky <leon@kernel.org>
Sun, 21 Sep 2025 11:30:37 +0000 (07:30 -0400)
xchg() is used to safely handle the event queue arming.
However SPARC xchg operates only 4B of variable.
Change variable type from bool to int.

Unverified Error/Warning (likely false positive, kindly check if interested):

    ERROR: modpost: "__xchg_called_with_bad_pointer" [drivers/infiniband/hw/ionic/ionic_rdma.ko] undefined!

Error/Warning ids grouped by kconfigs:

recent_errors
`-- sparc-allmodconfig
    `-- ERROR:__xchg_called_with_bad_pointer-drivers-infiniband-hw-ionic-ionic_rdma.ko-undefined

Fixes: f3bdbd42702c ("RDMA/ionic: Create device queues to support admin operations")
Reported-by: Leon Romanovsky <leon@kernel.org>
Closes: https://lore.kernel.org/lkml/20250918180750.GA135135@unreal/
Signed-off-by: Abhijit Gangurde <abhijit.gangurde@amd.com>
Link: https://patch.msgid.link/20250919121301.1113759-1-abhijit.gangurde@amd.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/ionic/ionic_admin.c
drivers/infiniband/hw/ionic/ionic_ibdev.h

index 1ba7a8ecc0733232a7e8358da9ca019b2494c2bf..d9221ef134c43e19910d72abbabdfc5482b24a56 100644 (file)
@@ -945,7 +945,7 @@ static void ionic_poll_eq_work(struct work_struct *work)
                                   npolled, 0);
                queue_work(ionic_evt_workq, &eq->work);
        } else {
-               xchg(&eq->armed, true);
+               xchg(&eq->armed, 1);
                ionic_intr_credits(eq->dev->lif_cfg.intr_ctrl, eq->intr,
                                   0, IONIC_INTR_CRED_UNMASK);
        }
@@ -954,10 +954,10 @@ static void ionic_poll_eq_work(struct work_struct *work)
 static irqreturn_t ionic_poll_eq_isr(int irq, void *eqptr)
 {
        struct ionic_eq *eq = eqptr;
-       bool was_armed;
+       int was_armed;
        u32 npolled;
 
-       was_armed = xchg(&eq->armed, false);
+       was_armed = xchg(&eq->armed, 0);
 
        if (unlikely(!eq->enable) || !was_armed)
                return IRQ_HANDLED;
@@ -968,7 +968,7 @@ static irqreturn_t ionic_poll_eq_isr(int irq, void *eqptr)
                                   npolled, 0);
                queue_work(ionic_evt_workq, &eq->work);
        } else {
-               xchg(&eq->armed, true);
+               xchg(&eq->armed, 1);
                ionic_intr_credits(eq->dev->lif_cfg.intr_ctrl, eq->intr,
                                   0, IONIC_INTR_CRED_UNMASK);
        }
index b7a1a57bae03419a431d6874e7e5780b97dc0fb1..82fda1e3cdb65f731319e80dfbe2a316c6c89f93 100644 (file)
@@ -126,7 +126,7 @@ struct ionic_eq {
 
        struct ionic_queue      q;
 
-       bool                    armed;
+       int                     armed;
        bool                    enable;
 
        struct work_struct      work;