diff options
author | Somnath Kotur <somnath.kotur@broadcom.com> | 2017-08-31 09:27:33 +0530 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2017-09-22 13:57:33 -0400 |
commit | 74828b128115033ff25d4140d732a05a36eaeaf0 (patch) | |
tree | 42e7744de7c5bfb584cee46d2078214c5c264cdd /drivers/infiniband/hw/bnxt_re/bnxt_re.h | |
parent | bnxt_re: Fix race between the netdev register and unregister events (diff) | |
download | linux-dev-74828b128115033ff25d4140d732a05a36eaeaf0.tar.xz linux-dev-74828b128115033ff25d4140d732a05a36eaeaf0.zip |
bnxt_re: Remove RTNL lock dependency in bnxt_re_query_port
When there is a NETDEV_UNREGISTER event, bnxt_re driver calls
ib_unregister_device() (RTNL lock held).
ib_unregister_device attempts to flush a worker queue scheduled by
ib_core and that queue might have a pending ib_query_port().
ib_query_port in turn calls bnxt_re_query_port(), which while querying the
link speed using ib_get_eth_speed(), tries to acquire the rtnl_lock() which
was already held by NETDEV_UNREGISTER.
Fixing the issue by removing the link speed query from bnxt_re_query_port()
Now the speed is queried post a successful ib_register_device or whenever
there is a NETDEV_CHANGE event.
Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/hw/bnxt_re/bnxt_re.h')
-rw-r--r-- | drivers/infiniband/hw/bnxt_re/bnxt_re.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/bnxt_re/bnxt_re.h b/drivers/infiniband/hw/bnxt_re/bnxt_re.h index a25f9d240880..ecbac91b2e14 100644 --- a/drivers/infiniband/hw/bnxt_re/bnxt_re.h +++ b/drivers/infiniband/hw/bnxt_re/bnxt_re.h @@ -110,6 +110,8 @@ struct bnxt_re_dev { struct delayed_work worker; u8 cur_prio_map; + u8 active_speed; + u8 active_width; /* FP Notification Queue (CQ & SRQ) */ struct tasklet_struct nq_task; |