]> git.baikalelectronics.ru Git - kernel.git/commit
bnxt_re: Remove RTNL lock dependency in bnxt_re_query_port
authorSomnath Kotur <somnath.kotur@broadcom.com>
Thu, 31 Aug 2017 03:57:33 +0000 (09:27 +0530)
committerDoug Ledford <dledford@redhat.com>
Fri, 22 Sep 2017 17:57:33 +0000 (13:57 -0400)
commit33a5ccad97b699e29ab6b652f3a5fc05a1ac05f0
tree42e7744de7c5bfb584cee46d2078214c5c264cdd
parente76719416660408b68aadd1c05914b02a17da1f0
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>
drivers/infiniband/hw/bnxt_re/bnxt_re.h
drivers/infiniband/hw/bnxt_re/ib_verbs.c
drivers/infiniband/hw/bnxt_re/main.c