diff options
author | Vishwanathapura, Niranjana <niranjana.vishwanathapura@intel.com> | 2017-06-14 22:34:41 +0300 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2017-06-29 19:43:52 +0300 |
commit | 0568c4640e2b12df063d1761fd4d53af24dc4018 (patch) | |
tree | c6f3647bef6a83572caecb27e29c012cfab667e2 /drivers/infiniband/ulp/opa_vnic | |
parent | d4702645838c8e04893383b50406249382b4e6bf (diff) | |
download | linux-0568c4640e2b12df063d1761fd4d53af24dc4018.tar.xz |
IB/opa_vnic: Use GFP_ATOMIC while sending trap
Pass GFP_ATOMIC flag to ib_create_send_mad() while sending trap as it
can be triggered from the atomic context.
Fix the following trace with debug kernel.
BUG: sleeping function called from invalid context at mm/slab.h:432
in_atomic(): 1, irqs_disabled(): 0, pid: 1771, name: NetworkManager
Call Trace:
dump_stack+0x63/0x90
___might_sleep+0xda/0x130
__might_sleep+0x4a/0x90
__kmalloc+0x19e/0x220
? ib_create_send_mad+0xea/0x390 [ib_core]
ib_create_send_mad+0xea/0x390 [ib_core]
opa_vnic_vema_send_trap+0x17b/0x460 [opa_vnic]
opa_vnic_vema_report_event+0x57/0x80 [opa_vnic]
opa_vnic_mac_send_event+0xaa/0xf0 [opa_vnic]
opa_vnic_set_rx_mode+0x17/0x30 [opa_vnic]
__dev_set_rx_mode+0x52/0x90
dev_set_rx_mode+0x26/0x40
__dev_open+0xe8/0x140
Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Niranjana Vishwanathapura <niranjana.vishwanathapura@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/ulp/opa_vnic')
-rw-r--r-- | drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.c b/drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.c index 875694f9a7f9..cf768dd78d1b 100644 --- a/drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.c +++ b/drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.c @@ -794,7 +794,7 @@ void opa_vnic_vema_send_trap(struct opa_vnic_adapter *adapter, send_buf = ib_create_send_mad(port->mad_agent, 1, pkey_idx, 0, IB_MGMT_VENDOR_HDR, IB_MGMT_MAD_DATA, - GFP_KERNEL, OPA_MGMT_BASE_VERSION); + GFP_ATOMIC, OPA_MGMT_BASE_VERSION); if (IS_ERR(send_buf)) { c_err("%s:Couldn't allocate send buf\n", __func__); goto err_sndbuf; |