From: "xiaofeng.yan" <yanxiaofeng7@xxxxxx> function xa_store_irq() has a spinlock as follows: xa_lock_irq() -->spin_lock_irq(&(xa)->xa_lock) GFP_KERNEL flag could cause sleep. So change GFP_KERNEL to GFP_ATOMIC and Romve "gfp_t gfp" in function static inline void *xa_store_irq(struct xarray *xa, unsigned long index, void *entry, gfp_t gfp) Signed-off-by: xiaofeng.yan <yanxiaofeng7@xxxxxx> --- include/linux/xarray.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/linux/xarray.h b/include/linux/xarray.h index 92c0160b3352..aeaf97d5642f 100644 --- a/include/linux/xarray.h +++ b/include/linux/xarray.h @@ -595,7 +595,6 @@ static inline void *xa_store_bh(struct xarray *xa, unsigned long index, * @xa: XArray. * @index: Index into array. * @entry: New entry. - * @gfp: Memory allocation flags. * * This function is like calling xa_store() except it disables interrupts * while holding the array lock. @@ -605,12 +604,12 @@ static inline void *xa_store_bh(struct xarray *xa, unsigned long index, * Return: The old entry at this index or xa_err() if an error happened. */ static inline void *xa_store_irq(struct xarray *xa, unsigned long index, - void *entry, gfp_t gfp) + void *entry) { void *curr; xa_lock_irq(xa); - curr = __xa_store(xa, index, entry, gfp); + curr = __xa_store(xa, index, entry, GFP_ATOMIC); xa_unlock_irq(xa); return curr; -- 2.17.1