@@ -2616,7 +2616,7 @@ static void i40e_sync_filters_subtask(struct i40e_pf *pf)
26162616 return ;
26172617 if (!test_and_clear_bit (__I40E_MACVLAN_SYNC_PENDING , pf -> state ))
26182618 return ;
2619- if (test_and_set_bit (__I40E_VF_DISABLE , pf -> state )) {
2619+ if (test_bit (__I40E_VF_DISABLE , pf -> state )) {
26202620 set_bit (__I40E_MACVLAN_SYNC_PENDING , pf -> state );
26212621 return ;
26222622 }
@@ -2634,7 +2634,6 @@ static void i40e_sync_filters_subtask(struct i40e_pf *pf)
26342634 }
26352635 }
26362636 }
2637- clear_bit (__I40E_VF_DISABLE , pf -> state );
26382637}
26392638
26402639/**
@@ -5937,7 +5936,7 @@ static int i40e_add_channel(struct i40e_pf *pf, u16 uplink_seid,
59375936 ch -> enabled_tc = !i40e_is_channel_macvlan (ch ) && enabled_tc ;
59385937 ch -> seid = ctxt .seid ;
59395938 ch -> vsi_number = ctxt .vsi_number ;
5940- ch -> stat_counter_idx = cpu_to_le16 (ctxt .info .stat_counter_idx );
5939+ ch -> stat_counter_idx = le16_to_cpu (ctxt .info .stat_counter_idx );
59415940
59425941 /* copy just the sections touched not the entire info
59435942 * since not all sections are valid as returned by
@@ -7977,8 +7976,8 @@ static inline void
79777976i40e_set_cld_element (struct i40e_cloud_filter * filter ,
79787977 struct i40e_aqc_cloud_filters_element_data * cld )
79797978{
7980- int i , j ;
79817979 u32 ipa ;
7980+ int i ;
79827981
79837982 memset (cld , 0 , sizeof (* cld ));
79847983 ether_addr_copy (cld -> outer_mac , filter -> dst_mac );
@@ -7989,14 +7988,14 @@ i40e_set_cld_element(struct i40e_cloud_filter *filter,
79897988
79907989 if (filter -> n_proto == ETH_P_IPV6 ) {
79917990#define IPV6_MAX_INDEX (ARRAY_SIZE(filter->dst_ipv6) - 1)
7992- for (i = 0 , j = 0 ; i < ARRAY_SIZE (filter -> dst_ipv6 );
7993- i ++ , j += 2 ) {
7991+ for (i = 0 ; i < ARRAY_SIZE (filter -> dst_ipv6 ); i ++ ) {
79947992 ipa = be32_to_cpu (filter -> dst_ipv6 [IPV6_MAX_INDEX - i ]);
7995- ipa = cpu_to_le32 ( ipa );
7996- memcpy ( & cld -> ipaddr .raw_v6 .data [j ], & ipa , sizeof (ipa ) );
7993+
7994+ * ( __le32 * ) & cld -> ipaddr .raw_v6 .data [i * 2 ] = cpu_to_le32 (ipa );
79977995 }
79987996 } else {
79997997 ipa = be32_to_cpu (filter -> dst_ipv4 );
7998+
80007999 memcpy (& cld -> ipaddr .v4 .data , & ipa , sizeof (ipa ));
80018000 }
80028001
@@ -8044,6 +8043,8 @@ int i40e_add_del_cloud_filter(struct i40e_vsi *vsi,
80448043 if (filter -> flags >= ARRAY_SIZE (flag_table ))
80458044 return I40E_ERR_CONFIG ;
80468045
8046+ memset (& cld_filter , 0 , sizeof (cld_filter ));
8047+
80478048 /* copy element needed to add cloud filter from filter */
80488049 i40e_set_cld_element (filter , & cld_filter );
80498050
@@ -8107,10 +8108,13 @@ int i40e_add_del_cloud_filter_big_buf(struct i40e_vsi *vsi,
81078108 return - EOPNOTSUPP ;
81088109
81098110 /* adding filter using src_port/src_ip is not supported at this stage */
8110- if (filter -> src_port || filter -> src_ipv4 ||
8111+ if (filter -> src_port ||
8112+ (filter -> src_ipv4 && filter -> n_proto != ETH_P_IPV6 ) ||
81118113 !ipv6_addr_any (& filter -> ip .v6 .src_ip6 ))
81128114 return - EOPNOTSUPP ;
81138115
8116+ memset (& cld_filter , 0 , sizeof (cld_filter ));
8117+
81148118 /* copy element needed to add cloud filter from filter */
81158119 i40e_set_cld_element (filter , & cld_filter .element );
81168120
@@ -8134,7 +8138,7 @@ int i40e_add_del_cloud_filter_big_buf(struct i40e_vsi *vsi,
81348138 cpu_to_le16 (I40E_AQC_ADD_CLOUD_FILTER_MAC_VLAN_PORT );
81358139 }
81368140
8137- } else if (filter -> dst_ipv4 ||
8141+ } else if (( filter -> dst_ipv4 && filter -> n_proto != ETH_P_IPV6 ) ||
81388142 !ipv6_addr_any (& filter -> ip .v6 .dst_ip6 )) {
81398143 cld_filter .element .flags =
81408144 cpu_to_le16 (I40E_AQC_ADD_CLOUD_FILTER_IP_PORT );
@@ -8928,18 +8932,17 @@ void i40e_do_reset(struct i40e_pf *pf, u32 reset_flags, bool lock_acquired)
89288932 dev_dbg (& pf -> pdev -> dev , "PFR requested\n" );
89298933 i40e_handle_reset_warning (pf , lock_acquired );
89308934
8931- dev_info (& pf -> pdev -> dev ,
8932- pf -> flags & I40E_FLAG_DISABLE_FW_LLDP ?
8933- "FW LLDP is disabled\n" :
8934- "FW LLDP is enabled\n" );
8935-
89368935 } else if (reset_flags & I40E_PF_RESET_AND_REBUILD_FLAG ) {
89378936 /* Request a PF Reset
89388937 *
89398938 * Resets PF and reinitializes PFs VSI.
89408939 */
89418940 i40e_prep_for_reset (pf );
89428941 i40e_reset_and_rebuild (pf , true, lock_acquired );
8942+ dev_info (& pf -> pdev -> dev ,
8943+ pf -> flags & I40E_FLAG_DISABLE_FW_LLDP ?
8944+ "FW LLDP is disabled\n" :
8945+ "FW LLDP is enabled\n" );
89438946
89448947 } else if (reset_flags & BIT_ULL (__I40E_REINIT_REQUESTED )) {
89458948 int v ;
@@ -10462,7 +10465,6 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired)
1046210465 int old_recovery_mode_bit = test_bit (__I40E_RECOVERY_MODE , pf -> state );
1046310466 struct i40e_vsi * vsi = pf -> vsi [pf -> lan_vsi ];
1046410467 struct i40e_hw * hw = & pf -> hw ;
10465- u8 set_fc_aq_fail = 0 ;
1046610468 i40e_status ret ;
1046710469 u32 val ;
1046810470 int v ;
@@ -10605,13 +10607,6 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired)
1060510607 i40e_stat_str (& pf -> hw , ret ),
1060610608 i40e_aq_str (& pf -> hw , pf -> hw .aq .asq_last_status ));
1060710609
10608- /* make sure our flow control settings are restored */
10609- ret = i40e_set_fc (& pf -> hw , & set_fc_aq_fail , true);
10610- if (ret )
10611- dev_dbg (& pf -> pdev -> dev , "setting flow control: ret = %s last_status = %s\n" ,
10612- i40e_stat_str (& pf -> hw , ret ),
10613- i40e_aq_str (& pf -> hw , pf -> hw .aq .asq_last_status ));
10614-
1061510610 /* Rebuild the VSIs and VEBs that existed before reset.
1061610611 * They are still in our local switch element arrays, so only
1061710612 * need to rebuild the switch model in the HW.
@@ -12191,6 +12186,8 @@ i40e_status i40e_set_partition_bw_setting(struct i40e_pf *pf)
1219112186 struct i40e_aqc_configure_partition_bw_data bw_data ;
1219212187 i40e_status status ;
1219312188
12189+ memset (& bw_data , 0 , sizeof (bw_data ));
12190+
1219412191 /* Set the valid bit for this PF */
1219512192 bw_data .pf_valid_bits = cpu_to_le16 (BIT (pf -> hw .pf_id ));
1219612193 bw_data .max_bw [pf -> hw .pf_id ] = pf -> max_bw & I40E_ALT_BW_VALUE_MASK ;
@@ -15198,7 +15195,6 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1519815195 int err ;
1519915196 u32 val ;
1520015197 u32 i ;
15201- u8 set_fc_aq_fail ;
1520215198
1520315199 err = pci_enable_device_mem (pdev );
1520415200 if (err )
@@ -15537,24 +15533,6 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1553715533 }
1553815534 INIT_LIST_HEAD (& pf -> vsi [pf -> lan_vsi ]-> ch_list );
1553915535
15540- /* Make sure flow control is set according to current settings */
15541- err = i40e_set_fc (hw , & set_fc_aq_fail , true);
15542- if (set_fc_aq_fail & I40E_SET_FC_AQ_FAIL_GET )
15543- dev_dbg (& pf -> pdev -> dev ,
15544- "Set fc with err %s aq_err %s on get_phy_cap\n" ,
15545- i40e_stat_str (hw , err ),
15546- i40e_aq_str (hw , hw -> aq .asq_last_status ));
15547- if (set_fc_aq_fail & I40E_SET_FC_AQ_FAIL_SET )
15548- dev_dbg (& pf -> pdev -> dev ,
15549- "Set fc with err %s aq_err %s on set_phy_config\n" ,
15550- i40e_stat_str (hw , err ),
15551- i40e_aq_str (hw , hw -> aq .asq_last_status ));
15552- if (set_fc_aq_fail & I40E_SET_FC_AQ_FAIL_UPDATE )
15553- dev_dbg (& pf -> pdev -> dev ,
15554- "Set fc with err %s aq_err %s on get_link_info\n" ,
15555- i40e_stat_str (hw , err ),
15556- i40e_aq_str (hw , hw -> aq .asq_last_status ));
15557-
1555815536 /* if FDIR VSI was set up, start it now */
1555915537 for (i = 0 ; i < pf -> num_alloc_vsi ; i ++ ) {
1556015538 if (pf -> vsi [i ] && pf -> vsi [i ]-> type == I40E_VSI_FDIR ) {
@@ -15611,6 +15589,8 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1561115589 if (err ) {
1561215590 dev_info (& pdev -> dev ,
1561315591 "setup of misc vector failed: %d\n" , err );
15592+ i40e_cloud_filter_exit (pf );
15593+ i40e_fdir_teardown (pf );
1561415594 goto err_vsis ;
1561515595 }
1561615596 }
0 commit comments