Merge branch '10GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-queue
Jeff Kirsher says: ==================== Intel Wired LAN Driver Updates 2018-10-31 This series contains a various collection of fixes. Miroslav Lichvar from Red Hat or should I say IBM now? Updates the PHC timecounter interval for igb so that it gets updated at least once every 550 seconds. Ngai-Mint provides a fix for fm10k to prevent a soft lockup or system crash by adding a new condition to determine if the SM mailbox is in the correct state before proceeding. Jake provides several fm10k fixes, first one marks complier aborts as non-fatal since on some platforms trigger machine check errors when the compile aborts. Added missing device ids to the in-kernel driver. Due to the recent fixes, bumped the driver version. I (Jeff Kirsher) fixed a XFRM_ALGO dependency for both ixgbe and ixgbevf. This fix was based on the original work from Arnd Bergmann, which only fixed ixgbe. Mitch provides a fix for i40e/avf to update the status codes, which resolves an issue between a mis-match between i40e and the iavf driver, which also supports the ice LAN driver. Radoslaw fixes the ixgbe where the driver is logging a message about spoofed packets detected when the VF is re-started with a different MAC address. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
4d3163cf87
16 changed files with 85 additions and 41 deletions
|
@ -200,6 +200,15 @@ config IXGBE_DCB
|
|||
|
||||
If unsure, say N.
|
||||
|
||||
config IXGBE_IPSEC
|
||||
bool "IPSec XFRM cryptography-offload acceleration"
|
||||
depends on IXGBE
|
||||
depends on XFRM_OFFLOAD
|
||||
default y
|
||||
select XFRM_ALGO
|
||||
---help---
|
||||
Enable support for IPSec offload in ixgbe.ko
|
||||
|
||||
config IXGBEVF
|
||||
tristate "Intel(R) 10GbE PCI Express Virtual Function Ethernet support"
|
||||
depends on PCI_MSI
|
||||
|
@ -217,6 +226,15 @@ config IXGBEVF
|
|||
will be called ixgbevf. MSI-X interrupt support is required
|
||||
for this driver to work correctly.
|
||||
|
||||
config IXGBEVF_IPSEC
|
||||
bool "IPSec XFRM cryptography-offload acceleration"
|
||||
depends on IXGBEVF
|
||||
depends on XFRM_OFFLOAD
|
||||
default y
|
||||
select XFRM_ALGO
|
||||
---help---
|
||||
Enable support for IPSec offload in ixgbevf.ko
|
||||
|
||||
config I40E
|
||||
tristate "Intel(R) Ethernet Controller XL710 Family support"
|
||||
imply PTP_1588_CLOCK
|
||||
|
|
|
@ -244,7 +244,8 @@ process_mbx:
|
|||
}
|
||||
|
||||
/* guarantee we have free space in the SM mailbox */
|
||||
if (!hw->mbx.ops.tx_ready(&hw->mbx, FM10K_VFMBX_MSG_MTU)) {
|
||||
if (hw->mbx.state == FM10K_STATE_OPEN &&
|
||||
!hw->mbx.ops.tx_ready(&hw->mbx, FM10K_VFMBX_MSG_MTU)) {
|
||||
/* keep track of how many times this occurs */
|
||||
interface->hw_sm_mbx_full++;
|
||||
|
||||
|
@ -302,6 +303,28 @@ void fm10k_iov_suspend(struct pci_dev *pdev)
|
|||
}
|
||||
}
|
||||
|
||||
static void fm10k_mask_aer_comp_abort(struct pci_dev *pdev)
|
||||
{
|
||||
u32 err_mask;
|
||||
int pos;
|
||||
|
||||
pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ERR);
|
||||
if (!pos)
|
||||
return;
|
||||
|
||||
/* Mask the completion abort bit in the ERR_UNCOR_MASK register,
|
||||
* preventing the device from reporting these errors to the upstream
|
||||
* PCIe root device. This avoids bringing down platforms which upgrade
|
||||
* non-fatal completer aborts into machine check exceptions. Completer
|
||||
* aborts can occur whenever a VF reads a queue it doesn't own.
|
||||
*/
|
||||
pci_read_config_dword(pdev, pos + PCI_ERR_UNCOR_MASK, &err_mask);
|
||||
err_mask |= PCI_ERR_UNC_COMP_ABORT;
|
||||
pci_write_config_dword(pdev, pos + PCI_ERR_UNCOR_MASK, err_mask);
|
||||
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
int fm10k_iov_resume(struct pci_dev *pdev)
|
||||
{
|
||||
struct fm10k_intfc *interface = pci_get_drvdata(pdev);
|
||||
|
@ -317,6 +340,12 @@ int fm10k_iov_resume(struct pci_dev *pdev)
|
|||
if (!iov_data)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Lower severity of completer abort error reporting as
|
||||
* the VFs can trigger this any time they read a queue
|
||||
* that they don't own.
|
||||
*/
|
||||
fm10k_mask_aer_comp_abort(pdev);
|
||||
|
||||
/* allocate hardware resources for the VFs */
|
||||
hw->iov.ops.assign_resources(hw, num_vfs, num_vfs);
|
||||
|
||||
|
@ -460,20 +489,6 @@ void fm10k_iov_disable(struct pci_dev *pdev)
|
|||
fm10k_iov_free_data(pdev);
|
||||
}
|
||||
|
||||
static void fm10k_disable_aer_comp_abort(struct pci_dev *pdev)
|
||||
{
|
||||
u32 err_sev;
|
||||
int pos;
|
||||
|
||||
pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ERR);
|
||||
if (!pos)
|
||||
return;
|
||||
|
||||
pci_read_config_dword(pdev, pos + PCI_ERR_UNCOR_SEVER, &err_sev);
|
||||
err_sev &= ~PCI_ERR_UNC_COMP_ABORT;
|
||||
pci_write_config_dword(pdev, pos + PCI_ERR_UNCOR_SEVER, err_sev);
|
||||
}
|
||||
|
||||
int fm10k_iov_configure(struct pci_dev *pdev, int num_vfs)
|
||||
{
|
||||
int current_vfs = pci_num_vf(pdev);
|
||||
|
@ -495,12 +510,6 @@ int fm10k_iov_configure(struct pci_dev *pdev, int num_vfs)
|
|||
|
||||
/* allocate VFs if not already allocated */
|
||||
if (num_vfs && num_vfs != current_vfs) {
|
||||
/* Disable completer abort error reporting as
|
||||
* the VFs can trigger this any time they read a queue
|
||||
* that they don't own.
|
||||
*/
|
||||
fm10k_disable_aer_comp_abort(pdev);
|
||||
|
||||
err = pci_enable_sriov(pdev, num_vfs);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev,
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
#include "fm10k.h"
|
||||
|
||||
#define DRV_VERSION "0.23.4-k"
|
||||
#define DRV_VERSION "0.26.1-k"
|
||||
#define DRV_SUMMARY "Intel(R) Ethernet Switch Host Interface Driver"
|
||||
const char fm10k_driver_version[] = DRV_VERSION;
|
||||
char fm10k_driver_name[] = "fm10k";
|
||||
|
|
|
@ -23,6 +23,8 @@ static const struct fm10k_info *fm10k_info_tbl[] = {
|
|||
*/
|
||||
static const struct pci_device_id fm10k_pci_tbl[] = {
|
||||
{ PCI_VDEVICE(INTEL, FM10K_DEV_ID_PF), fm10k_device_pf },
|
||||
{ PCI_VDEVICE(INTEL, FM10K_DEV_ID_SDI_FM10420_QDA2), fm10k_device_pf },
|
||||
{ PCI_VDEVICE(INTEL, FM10K_DEV_ID_SDI_FM10420_DA2), fm10k_device_pf },
|
||||
{ PCI_VDEVICE(INTEL, FM10K_DEV_ID_VF), fm10k_device_vf },
|
||||
/* required last entry */
|
||||
{ 0, }
|
||||
|
|
|
@ -15,6 +15,8 @@ struct fm10k_hw;
|
|||
|
||||
#define FM10K_DEV_ID_PF 0x15A4
|
||||
#define FM10K_DEV_ID_VF 0x15A5
|
||||
#define FM10K_DEV_ID_SDI_FM10420_QDA2 0x15D0
|
||||
#define FM10K_DEV_ID_SDI_FM10420_DA2 0x15D5
|
||||
|
||||
#define FM10K_MAX_QUEUES 256
|
||||
#define FM10K_MAX_QUEUES_PF 128
|
||||
|
|
|
@ -3674,7 +3674,7 @@ int i40e_vc_process_vf_msg(struct i40e_pf *pf, s16 vf_id, u32 v_opcode,
|
|||
dev_err(&pf->pdev->dev, "Invalid message from VF %d, opcode %d, len %d\n",
|
||||
local_vf_id, v_opcode, msglen);
|
||||
switch (ret) {
|
||||
case VIRTCHNL_ERR_PARAM:
|
||||
case VIRTCHNL_STATUS_ERR_PARAM:
|
||||
return -EPERM;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
|
|
@ -51,9 +51,15 @@
|
|||
*
|
||||
* The 40 bit 82580 SYSTIM overflows every
|
||||
* 2^40 * 10^-9 / 60 = 18.3 minutes.
|
||||
*
|
||||
* SYSTIM is converted to real time using a timecounter. As
|
||||
* timecounter_cyc2time() allows old timestamps, the timecounter
|
||||
* needs to be updated at least once per half of the SYSTIM interval.
|
||||
* Scheduling of delayed work is not very accurate, so we aim for 8
|
||||
* minutes to be sure the actual interval is shorter than 9.16 minutes.
|
||||
*/
|
||||
|
||||
#define IGB_SYSTIM_OVERFLOW_PERIOD (HZ * 60 * 9)
|
||||
#define IGB_SYSTIM_OVERFLOW_PERIOD (HZ * 60 * 8)
|
||||
#define IGB_PTP_TX_TIMEOUT (HZ * 15)
|
||||
#define INCPERIOD_82576 BIT(E1000_TIMINCA_16NS_SHIFT)
|
||||
#define INCVALUE_82576_MASK GENMASK(E1000_TIMINCA_16NS_SHIFT - 1, 0)
|
||||
|
|
|
@ -17,4 +17,4 @@ ixgbe-$(CONFIG_IXGBE_DCB) += ixgbe_dcb.o ixgbe_dcb_82598.o \
|
|||
ixgbe-$(CONFIG_IXGBE_HWMON) += ixgbe_sysfs.o
|
||||
ixgbe-$(CONFIG_DEBUG_FS) += ixgbe_debugfs.o
|
||||
ixgbe-$(CONFIG_FCOE:m=y) += ixgbe_fcoe.o
|
||||
ixgbe-$(CONFIG_XFRM_OFFLOAD) += ixgbe_ipsec.o
|
||||
ixgbe-$(CONFIG_IXGBE_IPSEC) += ixgbe_ipsec.o
|
||||
|
|
|
@ -769,9 +769,9 @@ struct ixgbe_adapter {
|
|||
#define IXGBE_RSS_KEY_SIZE 40 /* size of RSS Hash Key in bytes */
|
||||
u32 *rss_key;
|
||||
|
||||
#ifdef CONFIG_XFRM_OFFLOAD
|
||||
#ifdef CONFIG_IXGBE_IPSEC
|
||||
struct ixgbe_ipsec *ipsec;
|
||||
#endif /* CONFIG_XFRM_OFFLOAD */
|
||||
#endif /* CONFIG_IXGBE_IPSEC */
|
||||
|
||||
/* AF_XDP zero-copy */
|
||||
struct xdp_umem **xsk_umems;
|
||||
|
@ -1008,7 +1008,7 @@ void ixgbe_store_key(struct ixgbe_adapter *adapter);
|
|||
void ixgbe_store_reta(struct ixgbe_adapter *adapter);
|
||||
s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg,
|
||||
u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm);
|
||||
#ifdef CONFIG_XFRM_OFFLOAD
|
||||
#ifdef CONFIG_IXGBE_IPSEC
|
||||
void ixgbe_init_ipsec_offload(struct ixgbe_adapter *adapter);
|
||||
void ixgbe_stop_ipsec_offload(struct ixgbe_adapter *adapter);
|
||||
void ixgbe_ipsec_restore(struct ixgbe_adapter *adapter);
|
||||
|
@ -1036,5 +1036,5 @@ static inline int ixgbe_ipsec_vf_add_sa(struct ixgbe_adapter *adapter,
|
|||
u32 *mbuf, u32 vf) { return -EACCES; }
|
||||
static inline int ixgbe_ipsec_vf_del_sa(struct ixgbe_adapter *adapter,
|
||||
u32 *mbuf, u32 vf) { return -EACCES; }
|
||||
#endif /* CONFIG_XFRM_OFFLOAD */
|
||||
#endif /* CONFIG_IXGBE_IPSEC */
|
||||
#endif /* _IXGBE_H_ */
|
||||
|
|
|
@ -8694,7 +8694,7 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
|
|||
|
||||
#endif /* IXGBE_FCOE */
|
||||
|
||||
#ifdef CONFIG_XFRM_OFFLOAD
|
||||
#ifdef CONFIG_IXGBE_IPSEC
|
||||
if (skb->sp && !ixgbe_ipsec_tx(tx_ring, first, &ipsec_tx))
|
||||
goto out_drop;
|
||||
#endif
|
||||
|
@ -10190,7 +10190,7 @@ ixgbe_features_check(struct sk_buff *skb, struct net_device *dev,
|
|||
* the TSO, so it's the exception.
|
||||
*/
|
||||
if (skb->encapsulation && !(features & NETIF_F_TSO_MANGLEID)) {
|
||||
#ifdef CONFIG_XFRM_OFFLOAD
|
||||
#ifdef CONFIG_IXGBE_IPSEC
|
||||
if (!skb->sp)
|
||||
#endif
|
||||
features &= ~NETIF_F_TSO;
|
||||
|
@ -10883,7 +10883,7 @@ skip_sriov:
|
|||
if (hw->mac.type >= ixgbe_mac_82599EB)
|
||||
netdev->features |= NETIF_F_SCTP_CRC;
|
||||
|
||||
#ifdef CONFIG_XFRM_OFFLOAD
|
||||
#ifdef CONFIG_IXGBE_IPSEC
|
||||
#define IXGBE_ESP_FEATURES (NETIF_F_HW_ESP | \
|
||||
NETIF_F_HW_ESP_TX_CSUM | \
|
||||
NETIF_F_GSO_ESP)
|
||||
|
|
|
@ -722,8 +722,10 @@ static inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf)
|
|||
ixgbe_set_vmvir(adapter, vfinfo->pf_vlan,
|
||||
adapter->default_up, vf);
|
||||
|
||||
if (vfinfo->spoofchk_enabled)
|
||||
if (vfinfo->spoofchk_enabled) {
|
||||
hw->mac.ops.set_vlan_anti_spoofing(hw, true, vf);
|
||||
hw->mac.ops.set_mac_anti_spoofing(hw, true, vf);
|
||||
}
|
||||
}
|
||||
|
||||
/* reset multicast table array for vf */
|
||||
|
|
|
@ -10,5 +10,5 @@ ixgbevf-objs := vf.o \
|
|||
mbx.o \
|
||||
ethtool.o \
|
||||
ixgbevf_main.o
|
||||
ixgbevf-$(CONFIG_XFRM_OFFLOAD) += ipsec.o
|
||||
ixgbevf-$(CONFIG_IXGBEVF_IPSEC) += ipsec.o
|
||||
|
||||
|
|
|
@ -459,7 +459,7 @@ int ethtool_ioctl(struct ifreq *ifr);
|
|||
|
||||
extern void ixgbevf_write_eitr(struct ixgbevf_q_vector *q_vector);
|
||||
|
||||
#ifdef CONFIG_XFRM_OFFLOAD
|
||||
#ifdef CONFIG_IXGBEVF_IPSEC
|
||||
void ixgbevf_init_ipsec_offload(struct ixgbevf_adapter *adapter);
|
||||
void ixgbevf_stop_ipsec_offload(struct ixgbevf_adapter *adapter);
|
||||
void ixgbevf_ipsec_restore(struct ixgbevf_adapter *adapter);
|
||||
|
@ -482,7 +482,7 @@ static inline int ixgbevf_ipsec_tx(struct ixgbevf_ring *tx_ring,
|
|||
struct ixgbevf_tx_buffer *first,
|
||||
struct ixgbevf_ipsec_tx_data *itd)
|
||||
{ return 0; }
|
||||
#endif /* CONFIG_XFRM_OFFLOAD */
|
||||
#endif /* CONFIG_IXGBEVF_IPSEC */
|
||||
|
||||
void ixgbe_napi_add_all(struct ixgbevf_adapter *adapter);
|
||||
void ixgbe_napi_del_all(struct ixgbevf_adapter *adapter);
|
||||
|
|
|
@ -4150,7 +4150,7 @@ static int ixgbevf_xmit_frame_ring(struct sk_buff *skb,
|
|||
first->tx_flags = tx_flags;
|
||||
first->protocol = vlan_get_protocol(skb);
|
||||
|
||||
#ifdef CONFIG_XFRM_OFFLOAD
|
||||
#ifdef CONFIG_IXGBEVF_IPSEC
|
||||
if (skb->sp && !ixgbevf_ipsec_tx(tx_ring, first, &ipsec_tx))
|
||||
goto out_drop;
|
||||
#endif
|
||||
|
|
|
@ -62,13 +62,19 @@
|
|||
/* Error Codes */
|
||||
enum virtchnl_status_code {
|
||||
VIRTCHNL_STATUS_SUCCESS = 0,
|
||||
VIRTCHNL_ERR_PARAM = -5,
|
||||
VIRTCHNL_STATUS_ERR_PARAM = -5,
|
||||
VIRTCHNL_STATUS_ERR_NO_MEMORY = -18,
|
||||
VIRTCHNL_STATUS_ERR_OPCODE_MISMATCH = -38,
|
||||
VIRTCHNL_STATUS_ERR_CQP_COMPL_ERROR = -39,
|
||||
VIRTCHNL_STATUS_ERR_INVALID_VF_ID = -40,
|
||||
VIRTCHNL_STATUS_NOT_SUPPORTED = -64,
|
||||
VIRTCHNL_STATUS_ERR_ADMIN_QUEUE_ERROR = -53,
|
||||
VIRTCHNL_STATUS_ERR_NOT_SUPPORTED = -64,
|
||||
};
|
||||
|
||||
/* Backward compatibility */
|
||||
#define VIRTCHNL_ERR_PARAM VIRTCHNL_STATUS_ERR_PARAM
|
||||
#define VIRTCHNL_STATUS_NOT_SUPPORTED VIRTCHNL_STATUS_ERR_NOT_SUPPORTED
|
||||
|
||||
#define VIRTCHNL_LINK_SPEED_100MB_SHIFT 0x1
|
||||
#define VIRTCHNL_LINK_SPEED_1000MB_SHIFT 0x2
|
||||
#define VIRTCHNL_LINK_SPEED_10GB_SHIFT 0x3
|
||||
|
@ -831,7 +837,7 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
|
|||
case VIRTCHNL_OP_EVENT:
|
||||
case VIRTCHNL_OP_UNKNOWN:
|
||||
default:
|
||||
return VIRTCHNL_ERR_PARAM;
|
||||
return VIRTCHNL_STATUS_ERR_PARAM;
|
||||
}
|
||||
/* few more checks */
|
||||
if (err_msg_format || valid_len != msglen)
|
||||
|
|
|
@ -8,7 +8,6 @@ config XFRM
|
|||
|
||||
config XFRM_OFFLOAD
|
||||
bool
|
||||
depends on XFRM
|
||||
|
||||
config XFRM_ALGO
|
||||
tristate
|
||||
|
|
Loading…
Reference in a new issue