Commit c84d86a0 authored by Jakub Kicinski's avatar Jakub Kicinski

Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue

Tony Nguyen says:

====================
100GbE Intel Wired LAN Driver Updates 2022-03-14

Jacob Keller says:

The ice_virtchnl_pf.c file has become a single place for a lot of
virtualization functionality. This includes most of the virtchnl message
handling, integration with kernel hooks like the .ndo operations, reset
logic, and more.

We are planning in the future to implement and support Scalable IOV in the
ice driver. To do this, much (but not all) of the code in ice_virtchnl_pf.c
will want to be reused.

Rather than dump all of the Scalable IOV implementation into
ice_virtchnl_pf.c it makes sense to house it in a separate file. But that
still leaves all of the Single Root IOV code littered among more generic
logic.

The long term goal is to re-organize the code such that generic re-usable
code is split into separate files. The ice_sriov.c file would end up
containing all of the Single Root IOV implementation specific details, while
ice_vf_lib.[ch] and ice_virtchnl.[ch] contain the generic pieces.

As a first step, notice that ice_sriov.c currently does not contain much of
the SR-IOV implementation. This is housed primarily in ice_virtchnl_pf.c

The code in ice_sriov.c is really generic and relates to the VF mailbox,
including mailbox overflow detection.

Rename ice_sriov.c to ice_vf_mbx.c, and then rename ice_virtchnl_pf.c to
ice_sriov.c

A later series will finish the refactor by splitting ice_sriov.c into
multiple files, moving the generic code into ice_vf_lib.c and ice_virtchnl.c

To prepare for that series, perform some basic cleanup and other refactors
that we've accumulated during this development cycle.

This series builds on top of the recent hash table refactor work.

* '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue:
  ice: use ice_is_vf_trusted helper function
  ice: log an error message when eswitch fails to configure
  ice: cleanup error logging for ice_ena_vfs
  ice: move ice_set_vf_port_vlan near other .ndo ops
  ice: refactor spoofchk control code in ice_sriov.c
  ice: rename ICE_MAX_VF_COUNT to avoid confusion
  ice: remove unused definitions from ice_sriov.h
  ice: convert vf->vc_ops to a const pointer
  ice: remove circular header dependencies on ice.h
  ice: rename ice_virtchnl_pf.c to ice_sriov.c
  ice: rename ice_sriov.c to ice_vf_mbx.c
====================

Link: https://lore.kernel.org/r/20220315011155.2166817-1-anthony.l.nguyen@intel.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents abe2fec8 1261691d
...@@ -36,9 +36,9 @@ ice-y := ice_main.o \ ...@@ -36,9 +36,9 @@ ice-y := ice_main.o \
ice-$(CONFIG_PCI_IOV) += \ ice-$(CONFIG_PCI_IOV) += \
ice_virtchnl_allowlist.o \ ice_virtchnl_allowlist.o \
ice_virtchnl_fdir.o \ ice_virtchnl_fdir.o \
ice_sriov.o \ ice_vf_mbx.o \
ice_vf_vsi_vlan_ops.o \ ice_vf_vsi_vlan_ops.o \
ice_virtchnl_pf.o ice_sriov.o
ice-$(CONFIG_PTP_1588_CLOCK) += ice_ptp.o ice_ptp_hw.o ice-$(CONFIG_PTP_1588_CLOCK) += ice_ptp.o ice_ptp_hw.o
ice-$(CONFIG_TTY) += ice_gnss.o ice-$(CONFIG_TTY) += ice_gnss.o
ice-$(CONFIG_DCB) += ice_dcb.o ice_dcb_nl.o ice_dcb_lib.o ice-$(CONFIG_DCB) += ice_dcb.o ice_dcb_nl.o ice_dcb_lib.o
......
...@@ -52,9 +52,6 @@ ...@@ -52,9 +52,6 @@
#include <net/udp_tunnel.h> #include <net/udp_tunnel.h>
#include <net/vxlan.h> #include <net/vxlan.h>
#include <net/gtp.h> #include <net/gtp.h>
#if IS_ENABLED(CONFIG_DCB)
#include <scsi/iscsi_proto.h>
#endif /* CONFIG_DCB */
#include "ice_devids.h" #include "ice_devids.h"
#include "ice_type.h" #include "ice_type.h"
#include "ice_txrx.h" #include "ice_txrx.h"
...@@ -64,8 +61,8 @@ ...@@ -64,8 +61,8 @@
#include "ice_flow.h" #include "ice_flow.h"
#include "ice_sched.h" #include "ice_sched.h"
#include "ice_idc_int.h" #include "ice_idc_int.h"
#include "ice_virtchnl_pf.h"
#include "ice_sriov.h" #include "ice_sriov.h"
#include "ice_vf_mbx.h"
#include "ice_ptp.h" #include "ice_ptp.h"
#include "ice_fdir.h" #include "ice_fdir.h"
#include "ice_xsk.h" #include "ice_xsk.h"
......
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
#ifndef _ICE_ARFS_H_ #ifndef _ICE_ARFS_H_
#define _ICE_ARFS_H_ #define _ICE_ARFS_H_
#include "ice_fdir.h"
enum ice_arfs_fltr_state { enum ice_arfs_fltr_state {
ICE_ARFS_INACTIVE, ICE_ARFS_INACTIVE,
ICE_ARFS_ACTIVE, ICE_ARFS_ACTIVE,
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#include "ice_base.h" #include "ice_base.h"
#include "ice_lib.h" #include "ice_lib.h"
#include "ice_dcb_lib.h" #include "ice_dcb_lib.h"
#include "ice_virtchnl_pf.h" #include "ice_sriov.h"
static bool ice_alloc_rx_buf_zc(struct ice_rx_ring *rx_ring) static bool ice_alloc_rx_buf_zc(struct ice_rx_ring *rx_ring)
{ {
......
...@@ -6,12 +6,12 @@ ...@@ -6,12 +6,12 @@
#include <linux/bitfield.h> #include <linux/bitfield.h>
#include "ice.h"
#include "ice_type.h" #include "ice_type.h"
#include "ice_nvm.h" #include "ice_nvm.h"
#include "ice_flex_pipe.h" #include "ice_flex_pipe.h"
#include "ice_switch.h"
#include <linux/avf/virtchnl.h> #include <linux/avf/virtchnl.h>
#include "ice_switch.h"
#include "ice_fdir.h"
#define ICE_SQ_SEND_DELAY_TIME_MS 10 #define ICE_SQ_SEND_DELAY_TIME_MS 10
#define ICE_SQ_SEND_MAX_EXECUTE 3 #define ICE_SQ_SEND_MAX_EXECUTE 3
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#define _ICE_DCB_H_ #define _ICE_DCB_H_
#include "ice_type.h" #include "ice_type.h"
#include <scsi/iscsi_proto.h>
#define ICE_DCBX_STATUS_NOT_STARTED 0 #define ICE_DCBX_STATUS_NOT_STARTED 0
#define ICE_DCBX_STATUS_IN_PROGRESS 1 #define ICE_DCBX_STATUS_IN_PROGRESS 1
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "ice_common.h" #include "ice_common.h"
#include "ice_flex_pipe.h" #include "ice_flex_pipe.h"
#include "ice_flow.h" #include "ice_flow.h"
#include "ice.h"
/* For supporting double VLAN mode, it is necessary to enable or disable certain /* For supporting double VLAN mode, it is necessary to enable or disable certain
* boost tcam entries. The metadata labels names that match the following * boost tcam entries. The metadata labels names that match the following
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include "ice_common.h" #include "ice_common.h"
#include "ice_flow.h" #include "ice_flow.h"
#include <net/gre.h>
/* Describe properties of a protocol header field */ /* Describe properties of a protocol header field */
struct ice_flow_field_info { struct ice_flow_field_info {
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#ifndef _ICE_FLOW_H_ #ifndef _ICE_FLOW_H_
#define _ICE_FLOW_H_ #define _ICE_FLOW_H_
#include "ice_flex_type.h"
#define ICE_FLOW_ENTRY_HANDLE_INVAL 0 #define ICE_FLOW_ENTRY_HANDLE_INVAL 0
#define ICE_FLOW_FLD_OFF_INVAL 0xffff #define ICE_FLOW_FLD_OFF_INVAL 0xffff
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#define _ICE_IDC_INT_H_ #define _ICE_IDC_INT_H_
#include <linux/net/intel/iidc.h> #include <linux/net/intel/iidc.h>
#include "ice.h"
struct ice_pf; struct ice_pf;
......
...@@ -48,6 +48,21 @@ static DEFINE_IDA(ice_aux_ida); ...@@ -48,6 +48,21 @@ static DEFINE_IDA(ice_aux_ida);
DEFINE_STATIC_KEY_FALSE(ice_xdp_locking_key); DEFINE_STATIC_KEY_FALSE(ice_xdp_locking_key);
EXPORT_SYMBOL(ice_xdp_locking_key); EXPORT_SYMBOL(ice_xdp_locking_key);
/**
* ice_hw_to_dev - Get device pointer from the hardware structure
* @hw: pointer to the device HW structure
*
* Used to access the device pointer from compilation units which can't easily
* include the definition of struct ice_pf without leading to circular header
* dependencies.
*/
struct device *ice_hw_to_dev(struct ice_hw *hw)
{
struct ice_pf *pf = container_of(hw, struct ice_pf, hw);
return &pf->pdev->dev;
}
static struct workqueue_struct *ice_wq; static struct workqueue_struct *ice_wq;
static const struct net_device_ops ice_netdev_safe_mode_ops; static const struct net_device_ops ice_netdev_safe_mode_ops;
static const struct net_device_ops ice_netdev_ops; static const struct net_device_ops ice_netdev_ops;
...@@ -3739,7 +3754,7 @@ static void ice_set_pf_caps(struct ice_pf *pf) ...@@ -3739,7 +3754,7 @@ static void ice_set_pf_caps(struct ice_pf *pf)
if (func_caps->common_cap.sr_iov_1_1) { if (func_caps->common_cap.sr_iov_1_1) {
set_bit(ICE_FLAG_SRIOV_CAPABLE, pf->flags); set_bit(ICE_FLAG_SRIOV_CAPABLE, pf->flags);
pf->vfs.num_supported = min_t(int, func_caps->num_allocd_vfs, pf->vfs.num_supported = min_t(int, func_caps->num_allocd_vfs,
ICE_MAX_VF_COUNT); ICE_MAX_SRIOV_VFS);
} }
clear_bit(ICE_FLAG_RSS_ENA, pf->flags); clear_bit(ICE_FLAG_RSS_ENA, pf->flags);
if (func_caps->common_cap.rss_table_size) if (func_caps->common_cap.rss_table_size)
......
...@@ -5,7 +5,14 @@ ...@@ -5,7 +5,14 @@
#define _ICE_OSDEP_H_ #define _ICE_OSDEP_H_
#include <linux/types.h> #include <linux/types.h>
#include <linux/ctype.h>
#include <linux/delay.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/bitops.h>
#include <linux/ethtool.h>
#include <linux/etherdevice.h>
#include <linux/if_ether.h>
#include <linux/pci_ids.h>
#ifndef CONFIG_64BIT #ifndef CONFIG_64BIT
#include <linux/io-64-nonatomic-lo-hi.h> #include <linux/io-64-nonatomic-lo-hi.h>
#endif #endif
...@@ -25,8 +32,8 @@ struct ice_dma_mem { ...@@ -25,8 +32,8 @@ struct ice_dma_mem {
size_t size; size_t size;
}; };
#define ice_hw_to_dev(ptr) \ struct ice_hw;
(&(container_of((ptr), struct ice_pf, hw))->pdev->dev) struct device *ice_hw_to_dev(struct ice_hw *hw);
#ifdef CONFIG_DYNAMIC_DEBUG #ifdef CONFIG_DYNAMIC_DEBUG
#define ice_debug(hw, type, fmt, args...) \ #define ice_debug(hw, type, fmt, args...) \
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#include "ice.h" #include "ice.h"
#include "ice_eswitch.h" #include "ice_eswitch.h"
#include "ice_devlink.h" #include "ice_devlink.h"
#include "ice_virtchnl_pf.h" #include "ice_sriov.h"
#include "ice_tc_lib.h" #include "ice_tc_lib.h"
/** /**
...@@ -339,7 +339,7 @@ static int ice_repr_add(struct ice_vf *vf) ...@@ -339,7 +339,7 @@ static int ice_repr_add(struct ice_vf *vf)
devlink_port_type_eth_set(&vf->devlink_port, repr->netdev); devlink_port_type_eth_set(&vf->devlink_port, repr->netdev);
ice_vc_change_ops_to_repr(&vf->vc_ops); ice_virtchnl_set_repr_ops(vf);
return 0; return 0;
...@@ -384,7 +384,7 @@ static void ice_repr_rem(struct ice_vf *vf) ...@@ -384,7 +384,7 @@ static void ice_repr_rem(struct ice_vf *vf)
kfree(vf->repr); kfree(vf->repr);
vf->repr = NULL; vf->repr = NULL;
ice_vc_set_dflt_vf_ops(&vf->vc_ops); ice_virtchnl_set_dflt_ops(vf);
} }
/** /**
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#define _ICE_REPR_H_ #define _ICE_REPR_H_
#include <net/dst_metadata.h> #include <net/dst_metadata.h>
#include "ice.h"
struct ice_repr { struct ice_repr {
struct ice_vsi *src_vsi; struct ice_vsi *src_vsi;
......
This diff is collapsed.
This diff is collapsed.
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#define ICE_CHNL_MAX_TC 16 #define ICE_CHNL_MAX_TC 16
#include "ice_hw_autogen.h" #include "ice_hw_autogen.h"
#include "ice_devids.h"
#include "ice_osdep.h" #include "ice_osdep.h"
#include "ice_controlq.h" #include "ice_controlq.h"
#include "ice_lan_tx_rx.h" #include "ice_lan_tx_rx.h"
......
This diff is collapsed.
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2018, Intel Corporation. */
#ifndef _ICE_VF_MBX_H_
#define _ICE_VF_MBX_H_
#include "ice_type.h"
#include "ice_controlq.h"
/* Defining the mailbox message threshold as 63 asynchronous
* pending messages. Normal VF functionality does not require
* sending more than 63 asynchronous pending message.
*/
#define ICE_ASYNC_VF_MSG_THRESHOLD 63
#ifdef CONFIG_PCI_IOV
int
ice_aq_send_msg_to_vf(struct ice_hw *hw, u16 vfid, u32 v_opcode, u32 v_retval,
u8 *msg, u16 msglen, struct ice_sq_cd *cd);
u32 ice_conv_link_speed_to_virtchnl(bool adv_link_support, u16 link_speed);
int
ice_mbx_vf_state_handler(struct ice_hw *hw, struct ice_mbx_data *mbx_data,
u16 vf_id, bool *is_mal_vf);
int
ice_mbx_clear_malvf(struct ice_mbx_snapshot *snap, unsigned long *all_malvfs,
u16 bitmap_len, u16 vf_id);
int ice_mbx_init_snapshot(struct ice_hw *hw, u16 vf_count);
void ice_mbx_deinit_snapshot(struct ice_hw *hw);
int
ice_mbx_report_malvf(struct ice_hw *hw, unsigned long *all_malvfs,
u16 bitmap_len, u16 vf_id, bool *report_malvf);
#else /* CONFIG_PCI_IOV */
static inline int
ice_aq_send_msg_to_vf(struct ice_hw __always_unused *hw,
u16 __always_unused vfid, u32 __always_unused v_opcode,
u32 __always_unused v_retval, u8 __always_unused *msg,
u16 __always_unused msglen,
struct ice_sq_cd __always_unused *cd)
{
return 0;
}
static inline u32
ice_conv_link_speed_to_virtchnl(bool __always_unused adv_link_support,
u16 __always_unused link_speed)
{
return 0;
}
#endif /* CONFIG_PCI_IOV */
#endif /* _ICE_VF_MBX_H_ */
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "ice_vlan_mode.h" #include "ice_vlan_mode.h"
#include "ice.h" #include "ice.h"
#include "ice_vf_vsi_vlan_ops.h" #include "ice_vf_vsi_vlan_ops.h"
#include "ice_virtchnl_pf.h" #include "ice_sriov.h"
static int static int
noop_vlan_arg(struct ice_vsi __always_unused *vsi, noop_vlan_arg(struct ice_vsi __always_unused *vsi,
......
This diff is collapsed.
This diff is collapsed.
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
#ifndef _ICE_XSK_H_ #ifndef _ICE_XSK_H_
#define _ICE_XSK_H_ #define _ICE_XSK_H_
#include "ice_txrx.h" #include "ice_txrx.h"
#include "ice.h"
#define PKTS_PER_BATCH 8 #define PKTS_PER_BATCH 8
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment