linux_dsm_epyc7002/drivers/net/ethernet/intel/igb
Shota Suzuki 72ddef0506 igb: Fix oops caused by missing queue pairing
When initializing igb driver (e.g. 82576, I350), IGB_FLAG_QUEUE_PAIRS is
set if adapter->rss_queues exceeds half of max_rss_queues in
igb_init_queue_configuration().
On the other hand, IGB_FLAG_QUEUE_PAIRS is not set even if the number of
queues exceeds half of max_combined in igb_set_channels() when changing
the number of queues by "ethtool -L".
In this case, if numvecs is larger than MAX_MSIX_ENTRIES (10), the size
of adapter->msix_entries[], an overflow can occur in
igb_set_interrupt_capability(), which in turn leads to an oops.

Fix this problem as follows:
 - When changing the number of queues by "ethtool -L", set
   IGB_FLAG_QUEUE_PAIRS in the same way as initializing igb driver.
 - When increasing the size of q_vector, reallocate it appropriately.
   (With IGB_FLAG_QUEUE_PAIRS set, the size of q_vector gets larger.)

Another possible way to fix this problem is to cap the queues at its
initial number, which is the number of the initial online cpus. But this
is not the optimal way because we cannot increase queues when another
cpu becomes online.

Note that before commit cd14ef54d2 ("igb: Change to use statically
allocated array for MSIx entries"), this problem did not cause oops
but just made the number of queues become 1 because of entering msi_only
mode in igb_set_interrupt_capability().

Fixes: 907b783579 ("igb: Add ethtool support to configure number of channels")
CC: stable <stable@vger.kernel.org>
Signed-off-by: Shota Suzuki <suzuki_shota_t3@lab.ntt.co.jp>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2015-08-18 14:06:03 -07:00
..
e1000_82575.c igb: Fix i354 88E1112 PHY on RCC boards using AutoMediaDetect 2015-07-17 19:59:07 -07:00
e1000_82575.h igb: add flags to set eee advertisement mode 2014-09-06 05:00:39 -07:00
e1000_defines.h igb: disable IPv6 extension header processing 2015-06-26 02:33:33 -07:00
e1000_hw.h igb: remove blocking phy read from inside spinlock 2014-10-02 02:30:39 -07:00
e1000_i210.c igb: Workaround for i210 Errata 25: Slow System Clock 2014-07-10 01:48:28 -07:00
e1000_i210.h igb: Workaround for i210 Errata 25: Slow System Clock 2014-07-10 01:48:28 -07:00
e1000_mac.c igb: Cleanups to fix msleep warnings 2014-04-24 17:41:15 -07:00
e1000_mac.h igb: Cleanups to change comment style on license headers 2014-04-24 17:26:27 -07:00
e1000_mbx.c igb: Cleanups to change comment style on license headers 2014-04-24 17:26:27 -07:00
e1000_mbx.h igb: Cleanups to change comment style on license headers 2014-04-24 17:26:27 -07:00
e1000_nvm.c igb/ixgbe: remove return statements for void functions 2014-05-23 05:28:41 -07:00
e1000_nvm.h igb: Cleanups to change comment style on license headers 2014-04-24 17:26:27 -07:00
e1000_phy.c igb: use ARRAY_SIZE to replace calculating sizeof(a)/sizeof(a[0]) 2015-07-23 05:08:30 -07:00
e1000_phy.h igb: remove redundant PHY power down register write 2014-05-27 02:10:44 -07:00
e1000_regs.h igb: Add message when malformed packets detected by hw 2014-07-24 03:00:37 -07:00
igb_ethtool.c igb: Fix oops caused by missing queue pairing 2015-08-18 14:06:03 -07:00
igb_hwmon.c igb: Cleanups to change comment style on license headers 2014-04-24 17:26:27 -07:00
igb_main.c igb: Fix oops caused by missing queue pairing 2015-08-18 14:06:03 -07:00
igb_ptp.c net: igb: fix the start time for periodic output signals 2015-06-11 16:04:02 -07:00
igb.h igb: Fix oops caused by missing queue pairing 2015-08-18 14:06:03 -07:00
Makefile igb: Update license text to remove FSF address and update copyright. 2014-02-26 15:54:52 -05:00