@@ -3729,6 +3729,7 @@ static int dpaa2_eth_setup_rx_flow(struct dpaa2_eth_priv *priv,
3729
3729
MEM_TYPE_PAGE_ORDER0 , NULL );
3730
3730
if (err ) {
3731
3731
dev_err (dev , "xdp_rxq_info_reg_mem_model failed\n" );
3732
+ xdp_rxq_info_unreg (& fq -> channel -> xdp_rxq );
3732
3733
return err ;
3733
3734
}
3734
3735
@@ -4221,17 +4222,25 @@ static int dpaa2_eth_bind_dpni(struct dpaa2_eth_priv *priv)
4221
4222
return - EINVAL ;
4222
4223
}
4223
4224
if (err )
4224
- return err ;
4225
+ goto out ;
4225
4226
}
4226
4227
4227
4228
err = dpni_get_qdid (priv -> mc_io , 0 , priv -> mc_token ,
4228
4229
DPNI_QUEUE_TX , & priv -> tx_qdid );
4229
4230
if (err ) {
4230
4231
dev_err (dev , "dpni_get_qdid() failed\n" );
4231
- return err ;
4232
+ goto out ;
4232
4233
}
4233
4234
4234
4235
return 0 ;
4236
+
4237
+ out :
4238
+ while (i -- ) {
4239
+ if (priv -> fq [i ].type == DPAA2_RX_FQ &&
4240
+ xdp_rxq_info_is_reg (& priv -> fq [i ].channel -> xdp_rxq ))
4241
+ xdp_rxq_info_unreg (& priv -> fq [i ].channel -> xdp_rxq );
4242
+ }
4243
+ return err ;
4235
4244
}
4236
4245
4237
4246
/* Allocate rings for storing incoming frame descriptors */
@@ -4588,6 +4597,17 @@ static void dpaa2_eth_del_ch_napi(struct dpaa2_eth_priv *priv)
4588
4597
}
4589
4598
}
4590
4599
4600
+ static void dpaa2_eth_free_rx_xdp_rxq (struct dpaa2_eth_priv * priv )
4601
+ {
4602
+ int i ;
4603
+
4604
+ for (i = 0 ; i < priv -> num_fqs ; i ++ ) {
4605
+ if (priv -> fq [i ].type == DPAA2_RX_FQ &&
4606
+ xdp_rxq_info_is_reg (& priv -> fq [i ].channel -> xdp_rxq ))
4607
+ xdp_rxq_info_unreg (& priv -> fq [i ].channel -> xdp_rxq );
4608
+ }
4609
+ }
4610
+
4591
4611
static int dpaa2_eth_probe (struct fsl_mc_device * dpni_dev )
4592
4612
{
4593
4613
struct device * dev ;
@@ -4786,6 +4806,7 @@ static int dpaa2_eth_probe(struct fsl_mc_device *dpni_dev)
4786
4806
free_percpu (priv -> percpu_stats );
4787
4807
err_alloc_percpu_stats :
4788
4808
dpaa2_eth_del_ch_napi (priv );
4809
+ dpaa2_eth_free_rx_xdp_rxq (priv );
4789
4810
err_bind :
4790
4811
dpaa2_eth_free_dpbp (priv );
4791
4812
err_dpbp_setup :
@@ -4840,6 +4861,7 @@ static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev)
4840
4861
free_percpu (priv -> percpu_extras );
4841
4862
4842
4863
dpaa2_eth_del_ch_napi (priv );
4864
+ dpaa2_eth_free_rx_xdp_rxq (priv );
4843
4865
dpaa2_eth_free_dpbp (priv );
4844
4866
dpaa2_eth_free_dpio (priv );
4845
4867
dpaa2_eth_free_dpni (priv );
0 commit comments