diff mbox series

[v3,net-next,11/11] sfc_ef100: add nic-type for VFs, and bind to them

Message ID 56e8d601-1dbd-f49e-369c-6cbed4d896bf@solarflare.com
State Accepted
Delegated to: David Miller
Headers show
Series sfc: driver for EF100 family NICs, part 2 | expand

Commit Message

Edward Cree Aug. 3, 2020, 8:40 p.m. UTC
We don't yet have a .sriov_configure() to create them, though.

Signed-off-by: Edward Cree <ecree@solarflare.com>
---
 drivers/net/ethernet/sfc/ef100.c     |  2 +
 drivers/net/ethernet/sfc/ef100_nic.c | 77 ++++++++++++++++++++++++++++
 drivers/net/ethernet/sfc/ef100_nic.h |  2 +
 3 files changed, 81 insertions(+)

Comments

kernel test robot Aug. 4, 2020, 1:16 a.m. UTC | #1
Hi Edward,

I love your patch! Yet something to improve:

[auto build test ERROR on net-next/master]

url:    https://github.com/0day-ci/linux/commits/Edward-Cree/sfc-driver-for-EF100-family-NICs-part-2/20200804-044345
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git bd0b33b24897ba9ddad221e8ac5b6f0e38a2e004
config: x86_64-randconfig-a015-20200803 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0
reproduce (this is a W=1 build):
        # save the attached .config to linux build tree
        make W=1 ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/net/ethernet/sfc/ef100_nic.c:835:3: error: 'const struct efx_nic_type' has no member named 'filter_rfs_expire_one'
     835 |  .filter_rfs_expire_one = efx_mcdi_filter_rfs_expire_one,
         |   ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/sfc/ef100_nic.c:835:27: error: initialization of 'void (*)(struct efx_nic *, u32)' {aka 'void (*)(struct efx_nic *, unsigned int)'} from incompatible pointer type 'bool (*)(struct efx_nic *, u32,  unsigned int)' {aka '_Bool (*)(struct efx_nic *, unsigned int,  unsigned int)'} [-Werror=incompatible-pointer-types]
     835 |  .filter_rfs_expire_one = efx_mcdi_filter_rfs_expire_one,
         |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/sfc/ef100_nic.c:835:27: note: (near initialization for 'ef100_vf_nic_type.ptp_write_host_time')
   cc1: some warnings being treated as errors

vim +835 drivers/net/ethernet/sfc/ef100_nic.c

   785	
   786	const struct efx_nic_type ef100_vf_nic_type = {
   787		.revision = EFX_REV_EF100,
   788		.is_vf = true,
   789		.probe = ef100_probe_vf,
   790		.offload_features = EF100_OFFLOAD_FEATURES,
   791		.mcdi_max_ver = 2,
   792		.mcdi_request = ef100_mcdi_request,
   793		.mcdi_poll_response = ef100_mcdi_poll_response,
   794		.mcdi_read_response = ef100_mcdi_read_response,
   795		.mcdi_poll_reboot = ef100_mcdi_poll_reboot,
   796		.mcdi_reboot_detected = ef100_mcdi_reboot_detected,
   797		.irq_enable_master = efx_port_dummy_op_void,
   798		.irq_test_generate = efx_ef100_irq_test_generate,
   799		.irq_disable_non_ev = efx_port_dummy_op_void,
   800		.push_irq_moderation = efx_channel_dummy_op_void,
   801		.min_interrupt_mode = EFX_INT_MODE_MSIX,
   802		.map_reset_reason = ef100_map_reset_reason,
   803		.map_reset_flags = ef100_map_reset_flags,
   804		.reset = ef100_reset,
   805		.check_caps = ef100_check_caps,
   806		.ev_probe = ef100_ev_probe,
   807		.ev_init = ef100_ev_init,
   808		.ev_fini = efx_mcdi_ev_fini,
   809		.ev_remove = efx_mcdi_ev_remove,
   810		.irq_handle_msi = ef100_msi_interrupt,
   811		.ev_process = ef100_ev_process,
   812		.ev_read_ack = ef100_ev_read_ack,
   813		.ev_test_generate = efx_ef100_ev_test_generate,
   814		.tx_probe = ef100_tx_probe,
   815		.tx_init = ef100_tx_init,
   816		.tx_write = ef100_tx_write,
   817		.tx_enqueue = ef100_enqueue_skb,
   818		.rx_probe = efx_mcdi_rx_probe,
   819		.rx_init = efx_mcdi_rx_init,
   820		.rx_remove = efx_mcdi_rx_remove,
   821		.rx_write = ef100_rx_write,
   822		.rx_packet = __ef100_rx_packet,
   823		.fini_dmaq = efx_fini_dmaq,
   824		.max_rx_ip_filters = EFX_MCDI_FILTER_TBL_ROWS,
   825		.filter_table_probe = ef100_filter_table_up,
   826		.filter_table_restore = efx_mcdi_filter_table_restore,
   827		.filter_table_remove = ef100_filter_table_down,
   828		.filter_insert = efx_mcdi_filter_insert,
   829		.filter_remove_safe = efx_mcdi_filter_remove_safe,
   830		.filter_get_safe = efx_mcdi_filter_get_safe,
   831		.filter_clear_rx = efx_mcdi_filter_clear_rx,
   832		.filter_count_rx_used = efx_mcdi_filter_count_rx_used,
   833		.filter_get_rx_id_limit = efx_mcdi_filter_get_rx_id_limit,
   834		.filter_get_rx_ids = efx_mcdi_filter_get_rx_ids,
 > 835		.filter_rfs_expire_one = efx_mcdi_filter_rfs_expire_one,
   836	
   837		.rx_prefix_size = ESE_GZ_RX_PKT_PREFIX_LEN,
   838		.rx_hash_offset = ESF_GZ_RX_PREFIX_RSS_HASH_LBN / 8,
   839		.rx_ts_offset = ESF_GZ_RX_PREFIX_PARTIAL_TSTAMP_LBN / 8,
   840		.rx_hash_key_size = 40,
   841		.rx_pull_rss_config = efx_mcdi_rx_pull_rss_config,
   842		.rx_push_rss_config = efx_mcdi_pf_rx_push_rss_config,
   843		.rx_restore_rss_contexts = efx_mcdi_rx_restore_rss_contexts,
   844	
   845		.reconfigure_mac = ef100_reconfigure_mac,
   846		.test_nvram = efx_new_mcdi_nvram_test_all,
   847		.describe_stats = ef100_describe_stats,
   848		.start_stats = efx_mcdi_mac_start_stats,
   849		.update_stats = ef100_update_stats,
   850		.pull_stats = efx_mcdi_mac_pull_stats,
   851		.stop_stats = efx_mcdi_mac_stop_stats,
   852	
   853		.mem_bar = NULL,
   854		.mem_map_size = NULL,
   855	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
David Miller Aug. 4, 2020, 1:30 a.m. UTC | #2
From: kernel test robot <lkp@intel.com>
Date: Tue, 4 Aug 2020 09:16:30 +0800

>    drivers/net/ethernet/sfc/ef100_nic.c:835:3: error: 'const struct efx_nic_type' has no member named 'filter_rfs_expire_one'
>      835 |  .filter_rfs_expire_one = efx_mcdi_filter_rfs_expire_one,
>          |   ^~~~~~~~~~~~~~~~~~~~~
>>> drivers/net/ethernet/sfc/ef100_nic.c:835:27: error: initialization of 'void (*)(struct efx_nic *, u32)' {aka 'void (*)(struct efx_nic *, unsigned int)'} from incompatible pointer type 'bool (*)(struct efx_nic *, u32,  unsigned int)' {aka '_Bool (*)(struct efx_nic *, unsigned int,  unsigned int)'} [-Werror=incompatible-pointer-types]
>      835 |  .filter_rfs_expire_one = efx_mcdi_filter_rfs_expire_one,
>          |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I fixed this in my tree as follows:

====================
From da7955405fb25c11a541234b32d06d9c09f81be6 Mon Sep 17 00:00:00 2001
From: "David S. Miller" <davem@davemloft.net>
Date: Mon, 3 Aug 2020 18:29:39 -0700
Subject: [PATCH] sfc: Fix build with CONFIG_RFS_ACCEL disabled.

   drivers/net/ethernet/sfc/ef100_nic.c:835:3: error: 'const struct efx_nic_type' has no member named 'filter_rfs_expire_one'
     835 |  .filter_rfs_expire_one = efx_mcdi_filter_rfs_expire_one,
         |   ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/sfc/ef100_nic.c:835:27: error: initialization of 'void (*)(struct efx_nic *, u32)' {aka 'void (*)(struct efx_nic *, unsigned int)'} from incompatible pointer type 'bool (*)(struct efx_nic *, u32,  unsigned int)' {aka '_Bool (*)(struct efx_nic *, unsigned int,  unsigned int)'} [-Werror=incompatible-pointer-types]
     835 |  .filter_rfs_expire_one = efx_mcdi_filter_rfs_expire_one,
         |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
 drivers/net/ethernet/sfc/ef100_nic.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/ethernet/sfc/ef100_nic.c b/drivers/net/ethernet/sfc/ef100_nic.c
index 8a2126fec078..36598d0542ed 100644
--- a/drivers/net/ethernet/sfc/ef100_nic.c
+++ b/drivers/net/ethernet/sfc/ef100_nic.c
@@ -832,7 +832,9 @@ const struct efx_nic_type ef100_vf_nic_type = {
 	.filter_count_rx_used = efx_mcdi_filter_count_rx_used,
 	.filter_get_rx_id_limit = efx_mcdi_filter_get_rx_id_limit,
 	.filter_get_rx_ids = efx_mcdi_filter_get_rx_ids,
+#ifdef CONFIG_RFS_ACCEL
 	.filter_rfs_expire_one = efx_mcdi_filter_rfs_expire_one,
+#endif
 
 	.rx_prefix_size = ESE_GZ_RX_PKT_PREFIX_LEN,
 	.rx_hash_offset = ESF_GZ_RX_PREFIX_RSS_HASH_LBN / 8,
Edward Cree Aug. 4, 2020, 1:31 p.m. UTC | #3
On 04/08/2020 02:30, David Miller wrote:
> I fixed this in my tree as follows:
LGTM.  Thanks for fixing, and thanks robot for catching it.
diff mbox series

Patch

diff --git a/drivers/net/ethernet/sfc/ef100.c b/drivers/net/ethernet/sfc/ef100.c
index de611c0f94e7..9729983f4840 100644
--- a/drivers/net/ethernet/sfc/ef100.c
+++ b/drivers/net/ethernet/sfc/ef100.c
@@ -527,6 +527,8 @@  static int ef100_pci_probe(struct pci_dev *pci_dev,
 static const struct pci_device_id ef100_pci_table[] = {
 	{PCI_DEVICE(PCI_VENDOR_ID_XILINX, 0x0100),  /* Riverhead PF */
 		.driver_data = (unsigned long) &ef100_pf_nic_type },
+	{PCI_DEVICE(PCI_VENDOR_ID_XILINX, 0x1100),  /* Riverhead VF */
+		.driver_data = (unsigned long) &ef100_vf_nic_type },
 	{0}                     /* end of list */
 };
 
diff --git a/drivers/net/ethernet/sfc/ef100_nic.c b/drivers/net/ethernet/sfc/ef100_nic.c
index 10748efbf98e..8a2126fec078 100644
--- a/drivers/net/ethernet/sfc/ef100_nic.c
+++ b/drivers/net/ethernet/sfc/ef100_nic.c
@@ -783,6 +783,78 @@  const struct efx_nic_type ef100_pf_nic_type = {
 
 };
 
+const struct efx_nic_type ef100_vf_nic_type = {
+	.revision = EFX_REV_EF100,
+	.is_vf = true,
+	.probe = ef100_probe_vf,
+	.offload_features = EF100_OFFLOAD_FEATURES,
+	.mcdi_max_ver = 2,
+	.mcdi_request = ef100_mcdi_request,
+	.mcdi_poll_response = ef100_mcdi_poll_response,
+	.mcdi_read_response = ef100_mcdi_read_response,
+	.mcdi_poll_reboot = ef100_mcdi_poll_reboot,
+	.mcdi_reboot_detected = ef100_mcdi_reboot_detected,
+	.irq_enable_master = efx_port_dummy_op_void,
+	.irq_test_generate = efx_ef100_irq_test_generate,
+	.irq_disable_non_ev = efx_port_dummy_op_void,
+	.push_irq_moderation = efx_channel_dummy_op_void,
+	.min_interrupt_mode = EFX_INT_MODE_MSIX,
+	.map_reset_reason = ef100_map_reset_reason,
+	.map_reset_flags = ef100_map_reset_flags,
+	.reset = ef100_reset,
+	.check_caps = ef100_check_caps,
+	.ev_probe = ef100_ev_probe,
+	.ev_init = ef100_ev_init,
+	.ev_fini = efx_mcdi_ev_fini,
+	.ev_remove = efx_mcdi_ev_remove,
+	.irq_handle_msi = ef100_msi_interrupt,
+	.ev_process = ef100_ev_process,
+	.ev_read_ack = ef100_ev_read_ack,
+	.ev_test_generate = efx_ef100_ev_test_generate,
+	.tx_probe = ef100_tx_probe,
+	.tx_init = ef100_tx_init,
+	.tx_write = ef100_tx_write,
+	.tx_enqueue = ef100_enqueue_skb,
+	.rx_probe = efx_mcdi_rx_probe,
+	.rx_init = efx_mcdi_rx_init,
+	.rx_remove = efx_mcdi_rx_remove,
+	.rx_write = ef100_rx_write,
+	.rx_packet = __ef100_rx_packet,
+	.fini_dmaq = efx_fini_dmaq,
+	.max_rx_ip_filters = EFX_MCDI_FILTER_TBL_ROWS,
+	.filter_table_probe = ef100_filter_table_up,
+	.filter_table_restore = efx_mcdi_filter_table_restore,
+	.filter_table_remove = ef100_filter_table_down,
+	.filter_insert = efx_mcdi_filter_insert,
+	.filter_remove_safe = efx_mcdi_filter_remove_safe,
+	.filter_get_safe = efx_mcdi_filter_get_safe,
+	.filter_clear_rx = efx_mcdi_filter_clear_rx,
+	.filter_count_rx_used = efx_mcdi_filter_count_rx_used,
+	.filter_get_rx_id_limit = efx_mcdi_filter_get_rx_id_limit,
+	.filter_get_rx_ids = efx_mcdi_filter_get_rx_ids,
+	.filter_rfs_expire_one = efx_mcdi_filter_rfs_expire_one,
+
+	.rx_prefix_size = ESE_GZ_RX_PKT_PREFIX_LEN,
+	.rx_hash_offset = ESF_GZ_RX_PREFIX_RSS_HASH_LBN / 8,
+	.rx_ts_offset = ESF_GZ_RX_PREFIX_PARTIAL_TSTAMP_LBN / 8,
+	.rx_hash_key_size = 40,
+	.rx_pull_rss_config = efx_mcdi_rx_pull_rss_config,
+	.rx_push_rss_config = efx_mcdi_pf_rx_push_rss_config,
+	.rx_restore_rss_contexts = efx_mcdi_rx_restore_rss_contexts,
+
+	.reconfigure_mac = ef100_reconfigure_mac,
+	.test_nvram = efx_new_mcdi_nvram_test_all,
+	.describe_stats = ef100_describe_stats,
+	.start_stats = efx_mcdi_mac_start_stats,
+	.update_stats = ef100_update_stats,
+	.pull_stats = efx_mcdi_mac_pull_stats,
+	.stop_stats = efx_mcdi_mac_stop_stats,
+
+	.mem_bar = NULL,
+	.mem_map_size = NULL,
+
+};
+
 static int compare_versions(const char *a, const char *b)
 {
 	int a_major, a_minor, a_point, a_patch;
@@ -1178,6 +1250,11 @@  int ef100_probe_pf(struct efx_nic *efx)
 	return rc;
 }
 
+int ef100_probe_vf(struct efx_nic *efx)
+{
+	return ef100_probe_main(efx);
+}
+
 void ef100_remove(struct efx_nic *efx)
 {
 	struct ef100_nic_data *nic_data = efx->nic_data;
diff --git a/drivers/net/ethernet/sfc/ef100_nic.h b/drivers/net/ethernet/sfc/ef100_nic.h
index 4a64c9438493..e799688d5264 100644
--- a/drivers/net/ethernet/sfc/ef100_nic.h
+++ b/drivers/net/ethernet/sfc/ef100_nic.h
@@ -13,8 +13,10 @@ 
 #include "nic_common.h"
 
 extern const struct efx_nic_type ef100_pf_nic_type;
+extern const struct efx_nic_type ef100_vf_nic_type;
 
 int ef100_probe_pf(struct efx_nic *efx);
+int ef100_probe_vf(struct efx_nic *efx);
 void ef100_remove(struct efx_nic *efx);
 
 enum {