i40iw: Remove link dependency on i40e
Subsystems (3)
PATCH 1/1 i40iw: Remove link dependency on i40e
From: Sindhu Devale <[email protected]>
Currently i40iw is dependent on i40e symbols i40e_register_client and i40e_unregister_client due to which i40iw cannot be loaded without i40e being loaded.
This patch allows rdma driver to build and load without linking to LAN driver and without LAN driver being loaded first. Once the LAN driver is loaded, the rdma driver is notified through the netdevice notifiers to register as client to the LAN driver. Add function pointers to IDC register/unregister in the private VSI structure. This allows a RDMA driver to build without linking to I40E.
--- drivers/infiniband/hw/i40iw/i40iw.h | 24 +++ drivers/infiniband/hw/i40iw/i40iw_main.c | 141 ++++++++++++++++-- drivers/infiniband/hw/i40iw/i40iw_utils.c | 5 +- drivers/net/ethernet/intel/i40e/i40e.h | 1 + drivers/net/ethernet/intel/i40e/i40e_client.h | 9 ++ drivers/net/ethernet/intel/i40e/i40e_main.c | 6 + 6 files changed, 173 insertions(+), 13 deletions(-)
drivers/infiniband/hw/i40iw/i40iw.h +24 -0
@@ -119,6 +119,30 @@#define I40IW_CQP_COMPL_SQ_WQE_FLUSHED 3#define I40IW_CQP_COMPL_RQ_SQ_WQE_FLUSHED 4 +enum I40IW_IDC_STATE { +I40IW_STATE_INVALID , +I40IW_STATE_VALID , +I40IW_STATE_REG_FAILED +}; + +struct i40iw_peer { +struct module *module; +#define MAX_PEER_NAME_SIZE 8 +char name[MAX_PEER_NAME_SIZE ]; +enum I40IW_IDC_STATE state; +atomic_t ref_count; +int (*idc_reg_peer_driver)(struct i40e_client *i40iw_client); +int (*idc_unreg_peer_driver)(struct i40e_client *i40iw_client); +}; + +struct i40iw_peer_drv { +struct i40e_client i40iw_client; +struct i40iw_peer peer; +}; + +bool i40iw_is_new_peer (struct net_device *netdev); +void i40iw_reg_peer (void ); +struct i40iw_cqp_compl_info {u32 op_ret_val;u16 maj_err_code;
drivers/infiniband/hw/i40iw/i40iw_main.c +129 -12
186 lines not on this page · raw message
drivers/infiniband/hw/i40iw/i40iw_utils.c +4 -1
@@ -314,8 +314,11 @@ int i40iw_netdevice_event(struct notifier_block *notifier, event_netdev =netdev_notifier_info_to_dev (ptr); hdl =i40iw_find_netdev (event_netdev); -if (!hdl) +if (!hdl) { +if (i40iw_is_new_peer (event_netdev)) +i40iw_reg_peer ();return NOTIFY_DONE ; + } iwdev = &hdl->device;if (iwdev->init_state <RDMA_DEV_REGISTERED || iwdev->closing)
drivers/net/ethernet/intel/i40e/i40e.h +1 -0
@@ -789,6 +789,7 @@ struct i40e_vsi { }____cacheline_internodealigned_in_smp ;struct i40e_netdev_priv { +struct idc_srv_provider prov_callbacks;struct i40e_vsi *vsi; };
drivers/net/ethernet/intel/i40e/i40e_client.h +9 -0
@@ -44,6 +44,15 @@ struct i40e_client;#define I40E_QUEUE_TYPE_PE_AEQ 0x80#define I40E_QUEUE_INVALID_IDX 0xFFFF +#define IDC_SIGNATURE 0x494e54454c494443ULL/* INTELIDC */ +struct idc_srv_provider { +u64 signature; +u8 version; +u8 rsvd[7 ]; +int (*idc_reg_peer_driver)(struct i40e_client *client); +int (*idc_unreg_peer_driver)(struct i40e_client *client); +}; +struct i40e_qv_info {u32 v_idx;/* msix_vector */ u16 ceq_idx;
drivers/net/ethernet/intel/i40e/i40e_main.c +6 -0
@@ -11913,6 +11913,12 @@ static int i40e_config_netdev(struct i40e_vsi *vsi) np =netdev_priv (netdev); np->vsi = vsi; + np->prov_callbacks.signature =IDC_SIGNATURE ; + np->prov_callbacks.version =0 ; +memset (np->prov_callbacks.rsvd,0 ,sizeof (np->prov_callbacks.rsvd)); + np->prov_callbacks.idc_reg_peer_driver = i40e_register_client; + np->prov_callbacks.idc_unreg_peer_driver = i40e_unregister_client; + hw_enc_features =NETIF_F_SG |NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
Signature · 1 line
2.17.0
Bowers
PATCH 1/1 i40iw: Remove link dependency on i40e
Quoted 22 lines
-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On Behalf Of Devale Sindhu
Sent: Monday, May 21, 2018 10:04 AM
To: intel-wired-lan at lists.osuosl.org
Cc: Devale, Sindhu <[email protected]>
Subject: [Intel-wired-lan] [PATCH] i40iw: Remove link dependency on i40eFrom: Sindhu Devale <[email protected]>
Currently i40iw is dependent on i40e symbols
i40e_register_clientandi40e_unregister_clientdue to which i40iw cannot be loaded without i40e being loaded.This patch allows rdma driver to build and load without linking to LAN driver and without LAN driver being loaded first. Once the LAN driver is loaded, the rdma driver is notified through the netdevice notifiers to register as client to the LAN driver. Add function pointers to IDC register/unregister in the private VSI structure. This allows a RDMA driver to build without linking to I40E.
Signed-off-by Devale Sindhu <[email protected]>
Quoted 8 lines
--- drivers/infiniband/hw/i40iw/i40iw.h | 24 +++ drivers/infiniband/hw/i40iw/i40iw_main.c | 141 ++++++++++++++++-- drivers/infiniband/hw/i40iw/i40iw_utils.c | 5 +- drivers/net/ethernet/intel/i40e/i40e.h | 1 + drivers/net/ethernet/intel/i40e/i40e_client.h | 9 ++ drivers/net/ethernet/intel/i40e/i40e_main.c | 6 + 6 files changed, 173 insertions(+), 13 deletions(-)