@@ -1584,6 +1584,8 @@ static int iavf_process_aq_command(struct iavf_adapter *adapter)
1584
1584
{
1585
1585
if (adapter -> aq_required & IAVF_FLAG_AQ_GET_CONFIG )
1586
1586
return iavf_send_vf_config_msg (adapter );
1587
+ if (adapter -> aq_required & IAVF_FLAG_AQ_GET_OFFLOAD_VLAN_V2_CAPS )
1588
+ return iavf_send_vf_offload_vlan_v2_msg (adapter );
1587
1589
if (adapter -> aq_required & IAVF_FLAG_AQ_DISABLE_QUEUES ) {
1588
1590
iavf_disable_queues (adapter );
1589
1591
return 0 ;
@@ -1826,6 +1828,59 @@ static void iavf_init_version_check(struct iavf_adapter *adapter)
1826
1828
iavf_change_state (adapter , __IAVF_INIT_FAILED );
1827
1829
}
1828
1830
1831
+ /**
1832
+ * iavf_parse_vf_resource_msg - parse response from VIRTCHNL_OP_GET_VF_RESOURCES
1833
+ * @adapter: board private structure
1834
+ */
1835
+ int iavf_parse_vf_resource_msg (struct iavf_adapter * adapter )
1836
+ {
1837
+ int i , num_req_queues = adapter -> num_req_queues ;
1838
+ struct iavf_vsi * vsi = & adapter -> vsi ;
1839
+
1840
+ for (i = 0 ; i < adapter -> vf_res -> num_vsis ; i ++ ) {
1841
+ if (adapter -> vf_res -> vsi_res [i ].vsi_type == VIRTCHNL_VSI_SRIOV )
1842
+ adapter -> vsi_res = & adapter -> vf_res -> vsi_res [i ];
1843
+ }
1844
+ if (!adapter -> vsi_res ) {
1845
+ dev_err (& adapter -> pdev -> dev , "No LAN VSI found\n" );
1846
+ return - ENODEV ;
1847
+ }
1848
+
1849
+ if (num_req_queues &&
1850
+ num_req_queues > adapter -> vsi_res -> num_queue_pairs ) {
1851
+ /* Problem. The PF gave us fewer queues than what we had
1852
+ * negotiated in our request. Need a reset to see if we can't
1853
+ * get back to a working state.
1854
+ */
1855
+ dev_err (& adapter -> pdev -> dev ,
1856
+ "Requested %d queues, but PF only gave us %d.\n" ,
1857
+ num_req_queues ,
1858
+ adapter -> vsi_res -> num_queue_pairs );
1859
+ adapter -> flags |= IAVF_FLAG_REINIT_ITR_NEEDED ;
1860
+ adapter -> num_req_queues = adapter -> vsi_res -> num_queue_pairs ;
1861
+ iavf_schedule_reset (adapter );
1862
+
1863
+ return - EAGAIN ;
1864
+ }
1865
+ adapter -> num_req_queues = 0 ;
1866
+ adapter -> vsi .id = adapter -> vsi_res -> vsi_id ;
1867
+
1868
+ adapter -> vsi .back = adapter ;
1869
+ adapter -> vsi .base_vector = 1 ;
1870
+ adapter -> vsi .work_limit = IAVF_DEFAULT_IRQ_WORK ;
1871
+ vsi -> netdev = adapter -> netdev ;
1872
+ vsi -> qs_handle = adapter -> vsi_res -> qset_handle ;
1873
+ if (adapter -> vf_res -> vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF ) {
1874
+ adapter -> rss_key_size = adapter -> vf_res -> rss_key_size ;
1875
+ adapter -> rss_lut_size = adapter -> vf_res -> rss_lut_size ;
1876
+ } else {
1877
+ adapter -> rss_key_size = IAVF_HKEY_ARRAY_SIZE ;
1878
+ adapter -> rss_lut_size = IAVF_HLUT_ARRAY_SIZE ;
1879
+ }
1880
+
1881
+ return 0 ;
1882
+ }
1883
+
1829
1884
/**
1830
1885
* iavf_init_get_resources - third step of driver startup
1831
1886
* @adapter: board private structure
@@ -1837,7 +1892,6 @@ static void iavf_init_version_check(struct iavf_adapter *adapter)
1837
1892
**/
1838
1893
static void iavf_init_get_resources (struct iavf_adapter * adapter )
1839
1894
{
1840
- struct net_device * netdev = adapter -> netdev ;
1841
1895
struct pci_dev * pdev = adapter -> pdev ;
1842
1896
struct iavf_hw * hw = & adapter -> hw ;
1843
1897
int err ;
@@ -1855,7 +1909,7 @@ static void iavf_init_get_resources(struct iavf_adapter *adapter)
1855
1909
err = iavf_get_vf_config (adapter );
1856
1910
if (err == IAVF_ERR_ADMIN_QUEUE_NO_WORK ) {
1857
1911
err = iavf_send_vf_config_msg (adapter );
1858
- goto err ;
1912
+ goto err_alloc ;
1859
1913
} else if (err == IAVF_ERR_PARAM ) {
1860
1914
/* We only get ERR_PARAM if the device is in a very bad
1861
1915
* state or if we've been disabled for previous bad
@@ -1870,9 +1924,83 @@ static void iavf_init_get_resources(struct iavf_adapter *adapter)
1870
1924
goto err_alloc ;
1871
1925
}
1872
1926
1873
- err = iavf_process_config (adapter );
1927
+ err = iavf_parse_vf_resource_msg (adapter );
1874
1928
if (err )
1875
1929
goto err_alloc ;
1930
+
1931
+ err = iavf_send_vf_offload_vlan_v2_msg (adapter );
1932
+ if (err == - EOPNOTSUPP ) {
1933
+ /* underlying PF doesn't support VIRTCHNL_VF_OFFLOAD_VLAN_V2, so
1934
+ * go directly to finishing initialization
1935
+ */
1936
+ iavf_change_state (adapter , __IAVF_INIT_CONFIG_ADAPTER );
1937
+ return ;
1938
+ } else if (err ) {
1939
+ dev_err (& pdev -> dev , "Unable to send offload vlan v2 request (%d)\n" ,
1940
+ err );
1941
+ goto err_alloc ;
1942
+ }
1943
+
1944
+ /* underlying PF supports VIRTCHNL_VF_OFFLOAD_VLAN_V2, so update the
1945
+ * state accordingly
1946
+ */
1947
+ iavf_change_state (adapter , __IAVF_INIT_GET_OFFLOAD_VLAN_V2_CAPS );
1948
+ return ;
1949
+
1950
+ err_alloc :
1951
+ kfree (adapter -> vf_res );
1952
+ adapter -> vf_res = NULL ;
1953
+ err :
1954
+ iavf_change_state (adapter , __IAVF_INIT_FAILED );
1955
+ }
1956
+
1957
+ /**
1958
+ * iavf_init_get_offload_vlan_v2_caps - part of driver startup
1959
+ * @adapter: board private structure
1960
+ *
1961
+ * Function processes __IAVF_INIT_GET_OFFLOAD_VLAN_V2_CAPS driver state if the
1962
+ * VF negotiates VIRTCHNL_VF_OFFLOAD_VLAN_V2. If VIRTCHNL_VF_OFFLOAD_VLAN_V2 is
1963
+ * not negotiated, then this state will never be entered.
1964
+ **/
1965
+ static void iavf_init_get_offload_vlan_v2_caps (struct iavf_adapter * adapter )
1966
+ {
1967
+ int ret ;
1968
+
1969
+ WARN_ON (adapter -> state != __IAVF_INIT_GET_OFFLOAD_VLAN_V2_CAPS );
1970
+
1971
+ memset (& adapter -> vlan_v2_caps , 0 , sizeof (adapter -> vlan_v2_caps ));
1972
+
1973
+ ret = iavf_get_vf_vlan_v2_caps (adapter );
1974
+ if (ret ) {
1975
+ if (ret == IAVF_ERR_ADMIN_QUEUE_NO_WORK )
1976
+ iavf_send_vf_offload_vlan_v2_msg (adapter );
1977
+ goto err ;
1978
+ }
1979
+
1980
+ iavf_change_state (adapter , __IAVF_INIT_CONFIG_ADAPTER );
1981
+ return ;
1982
+ err :
1983
+ iavf_change_state (adapter , __IAVF_INIT_FAILED );
1984
+ }
1985
+
1986
+ /**
1987
+ * iavf_init_config_adapter - last part of driver startup
1988
+ * @adapter: board private structure
1989
+ *
1990
+ * After all the supported capabilities are negotiated, then the
1991
+ * __IAVF_INIT_CONFIG_ADAPTER state will finish driver initialization.
1992
+ */
1993
+ static void iavf_init_config_adapter (struct iavf_adapter * adapter )
1994
+ {
1995
+ struct net_device * netdev = adapter -> netdev ;
1996
+ struct pci_dev * pdev = adapter -> pdev ;
1997
+ int err ;
1998
+
1999
+ WARN_ON (adapter -> state != __IAVF_INIT_CONFIG_ADAPTER );
2000
+
2001
+ if (iavf_process_config (adapter ))
2002
+ goto err ;
2003
+
1876
2004
adapter -> current_op = VIRTCHNL_OP_UNKNOWN ;
1877
2005
1878
2006
adapter -> flags |= IAVF_FLAG_RX_CSUM_ENABLED ;
@@ -1962,9 +2090,6 @@ static void iavf_init_get_resources(struct iavf_adapter *adapter)
1962
2090
iavf_free_misc_irq (adapter );
1963
2091
err_sw_init :
1964
2092
iavf_reset_interrupt_capability (adapter );
1965
- err_alloc :
1966
- kfree (adapter -> vf_res );
1967
- adapter -> vf_res = NULL ;
1968
2093
err :
1969
2094
iavf_change_state (adapter , __IAVF_INIT_FAILED );
1970
2095
}
@@ -2013,6 +2138,18 @@ static void iavf_watchdog_task(struct work_struct *work)
2013
2138
queue_delayed_work (iavf_wq , & adapter -> watchdog_task ,
2014
2139
msecs_to_jiffies (1 ));
2015
2140
return ;
2141
+ case __IAVF_INIT_GET_OFFLOAD_VLAN_V2_CAPS :
2142
+ iavf_init_get_offload_vlan_v2_caps (adapter );
2143
+ mutex_unlock (& adapter -> crit_lock );
2144
+ queue_delayed_work (iavf_wq , & adapter -> watchdog_task ,
2145
+ msecs_to_jiffies (1 ));
2146
+ return ;
2147
+ case __IAVF_INIT_CONFIG_ADAPTER :
2148
+ iavf_init_config_adapter (adapter );
2149
+ mutex_unlock (& adapter -> crit_lock );
2150
+ queue_delayed_work (iavf_wq , & adapter -> watchdog_task ,
2151
+ msecs_to_jiffies (1 ));
2152
+ return ;
2016
2153
case __IAVF_INIT_FAILED :
2017
2154
if (++ adapter -> aq_wait_count > IAVF_AQ_MAX_ERR ) {
2018
2155
dev_err (& adapter -> pdev -> dev ,
@@ -2066,10 +2203,13 @@ static void iavf_watchdog_task(struct work_struct *work)
2066
2203
iavf_send_api_ver (adapter );
2067
2204
}
2068
2205
} else {
2206
+ int ret = iavf_process_aq_command (adapter );
2207
+
2069
2208
/* An error will be returned if no commands were
2070
2209
* processed; use this opportunity to update stats
2210
+ * if the error isn't -ENOTSUPP
2071
2211
*/
2072
- if (iavf_process_aq_command ( adapter ) &&
2212
+ if (ret && ret != - EOPNOTSUPP &&
2073
2213
adapter -> state == __IAVF_RUNNING )
2074
2214
iavf_request_stats (adapter );
2075
2215
}
@@ -2308,6 +2448,13 @@ static void iavf_reset_task(struct work_struct *work)
2308
2448
}
2309
2449
2310
2450
adapter -> aq_required |= IAVF_FLAG_AQ_GET_CONFIG ;
2451
+ /* always set since VIRTCHNL_OP_GET_VF_RESOURCES has not been
2452
+ * sent/received yet, so VLAN_V2_ALLOWED() cannot is not reliable here,
2453
+ * however the VIRTCHNL_OP_GET_OFFLOAD_VLAN_V2_CAPS won't be sent until
2454
+ * VIRTCHNL_OP_GET_VF_RESOURCES and VIRTCHNL_VF_OFFLOAD_VLAN_V2 have
2455
+ * been successfully sent and negotiated
2456
+ */
2457
+ adapter -> aq_required |= IAVF_FLAG_AQ_GET_OFFLOAD_VLAN_V2_CAPS ;
2311
2458
adapter -> aq_required |= IAVF_FLAG_AQ_MAP_VECTORS ;
2312
2459
2313
2460
spin_lock_bh (& adapter -> mac_vlan_list_lock );
@@ -3603,39 +3750,10 @@ static int iavf_check_reset_complete(struct iavf_hw *hw)
3603
3750
int iavf_process_config (struct iavf_adapter * adapter )
3604
3751
{
3605
3752
struct virtchnl_vf_resource * vfres = adapter -> vf_res ;
3606
- int i , num_req_queues = adapter -> num_req_queues ;
3607
3753
struct net_device * netdev = adapter -> netdev ;
3608
- struct iavf_vsi * vsi = & adapter -> vsi ;
3609
3754
netdev_features_t hw_enc_features ;
3610
3755
netdev_features_t hw_features ;
3611
3756
3612
- /* got VF config message back from PF, now we can parse it */
3613
- for (i = 0 ; i < vfres -> num_vsis ; i ++ ) {
3614
- if (vfres -> vsi_res [i ].vsi_type == VIRTCHNL_VSI_SRIOV )
3615
- adapter -> vsi_res = & vfres -> vsi_res [i ];
3616
- }
3617
- if (!adapter -> vsi_res ) {
3618
- dev_err (& adapter -> pdev -> dev , "No LAN VSI found\n" );
3619
- return - ENODEV ;
3620
- }
3621
-
3622
- if (num_req_queues &&
3623
- num_req_queues > adapter -> vsi_res -> num_queue_pairs ) {
3624
- /* Problem. The PF gave us fewer queues than what we had
3625
- * negotiated in our request. Need a reset to see if we can't
3626
- * get back to a working state.
3627
- */
3628
- dev_err (& adapter -> pdev -> dev ,
3629
- "Requested %d queues, but PF only gave us %d.\n" ,
3630
- num_req_queues ,
3631
- adapter -> vsi_res -> num_queue_pairs );
3632
- adapter -> flags |= IAVF_FLAG_REINIT_ITR_NEEDED ;
3633
- adapter -> num_req_queues = adapter -> vsi_res -> num_queue_pairs ;
3634
- iavf_schedule_reset (adapter );
3635
- return - ENODEV ;
3636
- }
3637
- adapter -> num_req_queues = 0 ;
3638
-
3639
3757
hw_enc_features = NETIF_F_SG |
3640
3758
NETIF_F_IP_CSUM |
3641
3759
NETIF_F_IPV6_CSUM |
@@ -3716,21 +3834,6 @@ int iavf_process_config(struct iavf_adapter *adapter)
3716
3834
netdev -> features &= ~NETIF_F_GSO ;
3717
3835
}
3718
3836
3719
- adapter -> vsi .id = adapter -> vsi_res -> vsi_id ;
3720
-
3721
- adapter -> vsi .back = adapter ;
3722
- adapter -> vsi .base_vector = 1 ;
3723
- adapter -> vsi .work_limit = IAVF_DEFAULT_IRQ_WORK ;
3724
- vsi -> netdev = adapter -> netdev ;
3725
- vsi -> qs_handle = adapter -> vsi_res -> qset_handle ;
3726
- if (vfres -> vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF ) {
3727
- adapter -> rss_key_size = vfres -> rss_key_size ;
3728
- adapter -> rss_lut_size = vfres -> rss_lut_size ;
3729
- } else {
3730
- adapter -> rss_key_size = IAVF_HKEY_ARRAY_SIZE ;
3731
- adapter -> rss_lut_size = IAVF_HLUT_ARRAY_SIZE ;
3732
- }
3733
-
3734
3837
return 0 ;
3735
3838
}
3736
3839
0 commit comments