Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

RDMA/ionic: Fix build failure on SPARC due to xchg() operand size

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>

authored by

Abhijit Gangurde and committed by
Leon Romanovsky
ed9836c0 8ca7eada

+5 -5
+4 -4
drivers/infiniband/hw/ionic/ionic_admin.c
··· 945 945 npolled, 0); 946 946 queue_work(ionic_evt_workq, &eq->work); 947 947 } else { 948 - xchg(&eq->armed, true); 948 + xchg(&eq->armed, 1); 949 949 ionic_intr_credits(eq->dev->lif_cfg.intr_ctrl, eq->intr, 950 950 0, IONIC_INTR_CRED_UNMASK); 951 951 } ··· 954 954 static irqreturn_t ionic_poll_eq_isr(int irq, void *eqptr) 955 955 { 956 956 struct ionic_eq *eq = eqptr; 957 - bool was_armed; 957 + int was_armed; 958 958 u32 npolled; 959 959 960 - was_armed = xchg(&eq->armed, false); 960 + was_armed = xchg(&eq->armed, 0); 961 961 962 962 if (unlikely(!eq->enable) || !was_armed) 963 963 return IRQ_HANDLED; ··· 968 968 npolled, 0); 969 969 queue_work(ionic_evt_workq, &eq->work); 970 970 } else { 971 - xchg(&eq->armed, true); 971 + xchg(&eq->armed, 1); 972 972 ionic_intr_credits(eq->dev->lif_cfg.intr_ctrl, eq->intr, 973 973 0, IONIC_INTR_CRED_UNMASK); 974 974 }
+1 -1
drivers/infiniband/hw/ionic/ionic_ibdev.h
··· 126 126 127 127 struct ionic_queue q; 128 128 129 - bool armed; 129 + int armed; 130 130 bool enable; 131 131 132 132 struct work_struct work;