Skip to content

Commit

Permalink
Revert "igb: reduce CPU0 latency when updating statistics"
Browse files Browse the repository at this point in the history
This reverts commit 5936131.

Due to problems found in additional testing, this causes an illegal
context switch in the RCU read-side critical section.

CC: Dave Jones <davej@codemonkey.org.uk>
CC: Cong Wang <xiyou.wangcong@gmail.com>
CC: Jan Jablonsky <jan.jablonsky@thalesgroup.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jeff Kirsher authored and David S. Miller committed Jan 15, 2019
1 parent 5be9956 commit 5642e27
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 10 deletions.
2 changes: 1 addition & 1 deletion drivers/net/ethernet/intel/igb/igb.h
Original file line number Diff line number Diff line change
Expand Up @@ -515,7 +515,7 @@ struct igb_adapter {
/* OS defined structs */
struct pci_dev *pdev;

struct mutex stats64_lock;
spinlock_t stats64_lock;
struct rtnl_link_stats64 stats64;

/* structs defined in e1000_hw.h */
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/ethernet/intel/igb/igb_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -2295,7 +2295,7 @@ static void igb_get_ethtool_stats(struct net_device *netdev,
int i, j;
char *p;

mutex_lock(&adapter->stats64_lock);
spin_lock(&adapter->stats64_lock);
igb_update_stats(adapter);

for (i = 0; i < IGB_GLOBAL_STATS_LEN; i++) {
Expand Down Expand Up @@ -2338,7 +2338,7 @@ static void igb_get_ethtool_stats(struct net_device *netdev,
} while (u64_stats_fetch_retry_irq(&ring->rx_syncp, start));
i += IGB_RX_QUEUE_STATS_LEN;
}
mutex_unlock(&adapter->stats64_lock);
spin_unlock(&adapter->stats64_lock);
}

static void igb_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
Expand Down
14 changes: 7 additions & 7 deletions drivers/net/ethernet/intel/igb/igb_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2203,9 +2203,9 @@ void igb_down(struct igb_adapter *adapter)
del_timer_sync(&adapter->phy_info_timer);

/* record the stats before reset*/
mutex_lock(&adapter->stats64_lock);
spin_lock(&adapter->stats64_lock);
igb_update_stats(adapter);
mutex_unlock(&adapter->stats64_lock);
spin_unlock(&adapter->stats64_lock);

adapter->link_speed = 0;
adapter->link_duplex = 0;
Expand Down Expand Up @@ -3840,7 +3840,7 @@ static int igb_sw_init(struct igb_adapter *adapter)
adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN;

spin_lock_init(&adapter->nfc_lock);
mutex_init(&adapter->stats64_lock);
spin_lock_init(&adapter->stats64_lock);
#ifdef CONFIG_PCI_IOV
switch (hw->mac.type) {
case e1000_82576:
Expand Down Expand Up @@ -5406,9 +5406,9 @@ static void igb_watchdog_task(struct work_struct *work)
}
}

mutex_lock(&adapter->stats64_lock);
spin_lock(&adapter->stats64_lock);
igb_update_stats(adapter);
mutex_unlock(&adapter->stats64_lock);
spin_unlock(&adapter->stats64_lock);

for (i = 0; i < adapter->num_tx_queues; i++) {
struct igb_ring *tx_ring = adapter->tx_ring[i];
Expand Down Expand Up @@ -6235,10 +6235,10 @@ static void igb_get_stats64(struct net_device *netdev,
{
struct igb_adapter *adapter = netdev_priv(netdev);

mutex_lock(&adapter->stats64_lock);
spin_lock(&adapter->stats64_lock);
igb_update_stats(adapter);
memcpy(stats, &adapter->stats64, sizeof(*stats));
mutex_unlock(&adapter->stats64_lock);
spin_unlock(&adapter->stats64_lock);
}

/**
Expand Down

0 comments on commit 5642e27

Please sign in to comment.