i40e: Fix for recursive RTNL lock during PROMISC change
authorAnjali Singhai <anjali.singhai@intel.com>
Mon, 28 Sep 2015 20:37:12 +0000 (13:37 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 29 Sep 2015 00:43:23 +0000 (17:43 -0700)
commit30e2561b95295258890b4e0366ce867e04d34a97
tree1c47ee8a4e8de32e665a72a73ec059dc0b388d90
parent5804474311912c1b80601a1afee052e8df962cd4
i40e: Fix for recursive RTNL lock during PROMISC change

The sync_vsi_filters function can be called directly under RTNL
or through the timer subtask without one. This was causing a deadlock.

If sync_vsi_filters is called from a thread which held the lock,
and in another thread the PROMISC setting got changed we would
be executing the PROMISC change in the thread which already held
the lock alongside the other filter update. The PROMISC change
requires a reset if we are on a VEB, which requires it to be called
under RTNL.

Earlier the driver would call reset for PROMISC change without
checking if we were already under RTNL and would try to grab it
causing a deadlock. This patch changes the flow to see if we are
already under RTNL before trying to grab it.

Signed-off-by: Anjali Singhai Jain <anjali.singhai@intel.com>
Signed-off-by: Kiran Patil <kiran.patil@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e.h
drivers/net/ethernet/intel/i40e/i40e_debugfs.c
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c