mirror_ubuntu-kernels/drivers/net/ethernet/intel/i40e
Guilherme G. Piccoli 7f6c553902 i40e: use valid online CPU on q_vector initialization
Currently, the q_vector initialization routine sets the affinity_mask
of a q_vector based on v_idx value. Meaning a loop iterates on v_idx,
which is an incremental value, and the cpumask is created based on
this value.

This is a problem in systems with multiple logical CPUs per core (like in
SMT scenarios). If we disable some logical CPUs, by turning SMT off for
example, we will end up with a sparse cpu_online_mask, i.e., only the first
CPU in a core is online, and incremental filling in q_vector cpumask might
lead to multiple offline CPUs being assigned to q_vectors.

Example: if we have a system with 8 cores each one containing 8 logical
CPUs (SMT == 8 in this case), we have 64 CPUs in total. But if SMT is
disabled, only the 1st CPU in each core remains online, so the
cpu_online_mask in this case would have only 8 bits set, in a sparse way.

In general case, when SMT is off the cpu_online_mask has only C bits set:
0, 1*N, 2*N, ..., C*(N-1)  where
C == # of cores;
N == # of logical CPUs per core.
In our example, only bits 0, 8, 16, 24, 32, 40, 48, 56 would be set.

This patch changes the way q_vector's affinity_mask is created: it iterates
on v_idx, but consumes the CPU index from the cpu_online_mask instead of
just using the v_idx incremental value.

No functional changes were introduced.

Signed-off-by: Guilherme G Piccoli <gpiccoli@linux.vnet.ibm.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2016-07-14 23:39:12 -07:00
..
i40e_adminq_cmd.h i40e: Add support for disabling all link and change bits needed for PHY interactions 2016-05-13 21:36:59 -07:00
i40e_adminq.c i40e: Remove HMC AQ API implementation 2016-05-01 17:03:55 -07:00
i40e_adminq.h i40e: Move NVM variable out of AQ struct 2016-04-06 18:45:11 -07:00
i40e_alloc.h
i40e_client.c i40e: Add support for client interface for IWARP driver 2016-02-29 17:10:52 -05:00
i40e_client.h i40e: constify i40e_client_ops structure 2016-05-05 23:32:59 -07:00
i40e_common.c i40e: Correct UDP packet header for non_tunnel-ipv6 2016-05-13 23:56:13 -07:00
i40e_dcb_nl.c i40e: Change some messages from info to debug only 2015-10-15 01:58:41 -07:00
i40e_dcb.c i40e: refactor DCB function 2016-02-16 19:04:08 -08:00
i40e_dcb.h i40e: Add parsing for CEE DCBX TLVs 2015-10-08 15:11:38 -07:00
i40e_debugfs.c i40e/i40evf: Remove unused hardware receive descriptor code 2016-05-05 22:59:54 -07:00
i40e_devids.h i40e: Add DeviceID for X722 QSFP+ 2016-04-27 13:05:29 -07:00
i40e_diag.c i40e: use BIT and BIT_ULL macros 2015-07-23 05:33:55 -07:00
i40e_diag.h
i40e_ethtool.c i40e: Refactor ethtool get_settings 2016-05-13 23:32:15 -07:00
i40e_fcoe.c i40e/i40evf: Faster RX via avoiding FCoE 2016-04-06 18:26:23 -07:00
i40e_fcoe.h i40e: use BIT and BIT_ULL macros 2015-07-23 05:33:55 -07:00
i40e_hmc.c i40e: fix an uninitialized variable bug 2016-05-14 00:21:51 -07:00
i40e_hmc.h i40e: use BIT and BIT_ULL macros 2015-07-23 05:33:55 -07:00
i40e_lan_hmc.c i40e: use explicit cast from u16 to u8 2015-12-12 21:08:26 -08:00
i40e_lan_hmc.h i40e/i40evf: Big endian fixes for handling HMC 2014-06-26 04:44:57 -07:00
i40e_main.c i40e: use valid online CPU on q_vector initialization 2016-07-14 23:39:12 -07:00
i40e_nvm.c i40e: Specify AQ event opcode to wait for 2016-04-26 09:15:39 -07:00
i40e_osdep.h move io-64-nonatomic*.h out of asm-generic 2015-10-15 00:21:07 +02:00
i40e_prototype.h i40e: Add vf-true-promisc-support priv flag 2016-05-13 22:48:46 -07:00
i40e_ptp.c i40e: change Rx hang message into a WARN_ONCE 2016-05-13 23:44:59 -07:00
i40e_register.h i40e: Expose some registers to program parser, FD and RSS logic 2016-02-18 23:49:31 -08:00
i40e_status.h
i40e_txrx.c i40e/i40evf: Fix i40e_rx_checksum 2016-07-14 23:17:45 -07:00
i40e_txrx.h i40e/i40evf: Remove unused hardware receive descriptor code 2016-05-05 22:59:54 -07:00
i40e_type.h i40e/i40evf: fix I40E_MASK signed shift overflow warnings 2016-05-01 17:05:08 -07:00
i40e_virtchnl_pf.c i40e: don't add broadcast filter for VFs 2016-05-14 00:11:48 -07:00
i40e_virtchnl_pf.h i40e: Use consistent type for vf_id 2016-05-01 17:05:06 -07:00
i40e_virtchnl.h i40e: Add RSS configuration to virtual channel 2016-04-06 18:55:18 -07:00
i40e.h i40e: Add vf-true-promisc-support priv flag 2016-05-13 22:48:46 -07:00
Makefile i40e: Add support for client interface for IWARP driver 2016-02-29 17:10:52 -05:00