diff options
author | Andre Guedes <andre.guedes@intel.com> | 2020-04-24 13:16:22 -0700 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2020-05-22 18:21:52 -0700 |
commit | 42fc5dc042796a825d9e2db8ee4cd977b12f73d1 (patch) | |
tree | 04f26e92079cff89af8f5e05a3b50266dad31116 /drivers/net/ethernet/intel/igc/igc_main.c | |
parent | acda576f72b8a2eed44aa3840561daa0ce837744 (diff) |
igc: Change adapter->nfc_rule_lock to mutex
This patch changes adapter->nfc_rule_lock type from spin_lock to mutex
so we avoid unnecessary busy waiting on lock contention.
A closer look at the execution context of NFC rule API users shows that
all of them run in process context. The API users are: ethtool ops,
igc_configure(), called when interface is brought up by user or reset
workequeue thread, igc_down(), called when interface is brought down,
and igc_remove(), called when driver is unloaded.
Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/igc/igc_main.c')
-rw-r--r-- | drivers/net/ethernet/intel/igc/igc_main.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c index 9338209cedf2..165263ae8add 100644 --- a/drivers/net/ethernet/intel/igc/igc_main.c +++ b/drivers/net/ethernet/intel/igc/igc_main.c @@ -2539,12 +2539,12 @@ static void igc_flush_nfc_rules(struct igc_adapter *adapter) { struct igc_nfc_rule *rule, *tmp; - spin_lock(&adapter->nfc_rule_lock); + mutex_lock(&adapter->nfc_rule_lock); list_for_each_entry_safe(rule, tmp, &adapter->nfc_rule_list, list) igc_del_nfc_rule(adapter, rule); - spin_unlock(&adapter->nfc_rule_lock); + mutex_unlock(&adapter->nfc_rule_lock); } /** @@ -2583,24 +2583,24 @@ static void igc_restore_nfc_rules(struct igc_adapter *adapter) { struct igc_nfc_rule *rule; - spin_lock(&adapter->nfc_rule_lock); + mutex_lock(&adapter->nfc_rule_lock); list_for_each_entry_reverse(rule, &adapter->nfc_rule_list, list) igc_enable_nfc_rule(adapter, rule); - spin_unlock(&adapter->nfc_rule_lock); + mutex_unlock(&adapter->nfc_rule_lock); } static void igc_nfc_rule_exit(struct igc_adapter *adapter) { struct igc_nfc_rule *rule; - spin_lock(&adapter->nfc_rule_lock); + mutex_lock(&adapter->nfc_rule_lock); list_for_each_entry(rule, &adapter->nfc_rule_list, list) igc_disable_nfc_rule(adapter, rule); - spin_unlock(&adapter->nfc_rule_lock); + mutex_unlock(&adapter->nfc_rule_lock); } static int igc_uc_sync(struct net_device *netdev, const unsigned char *addr) @@ -3573,7 +3573,7 @@ static int igc_sw_init(struct igc_adapter *adapter) VLAN_HLEN; adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN; - spin_lock_init(&adapter->nfc_rule_lock); + mutex_init(&adapter->nfc_rule_lock); INIT_LIST_HEAD(&adapter->nfc_rule_list); adapter->nfc_rule_count = 0; |