@@ -1500,6 +1500,9 @@ static const struct devlink_param rvu_af_dl_params[] = {
15001500 BIT (DEVLINK_PARAM_CMODE_RUNTIME ),
15011501 rvu_af_dl_dwrr_mtu_get , rvu_af_dl_dwrr_mtu_set ,
15021502 rvu_af_dl_dwrr_mtu_validate ),
1503+ };
1504+
1505+ static const struct devlink_param rvu_af_dl_param_exact_match [] = {
15031506 DEVLINK_PARAM_DRIVER (RVU_AF_DEVLINK_PARAM_ID_NPC_EXACT_FEATURE_DISABLE ,
15041507 "npc_exact_feature_disable" , DEVLINK_PARAM_TYPE_STRING ,
15051508 BIT (DEVLINK_PARAM_CMODE_RUNTIME ),
@@ -1556,7 +1559,6 @@ int rvu_register_dl(struct rvu *rvu)
15561559{
15571560 struct rvu_devlink * rvu_dl ;
15581561 struct devlink * dl ;
1559- size_t size ;
15601562 int err ;
15611563
15621564 dl = devlink_alloc (& rvu_devlink_ops , sizeof (struct rvu_devlink ),
@@ -1578,21 +1580,32 @@ int rvu_register_dl(struct rvu *rvu)
15781580 goto err_dl_health ;
15791581 }
15801582
1583+ err = devlink_params_register (dl , rvu_af_dl_params , ARRAY_SIZE (rvu_af_dl_params ));
1584+ if (err ) {
1585+ dev_err (rvu -> dev ,
1586+ "devlink params register failed with error %d" , err );
1587+ goto err_dl_health ;
1588+ }
1589+
15811590 /* Register exact match devlink only for CN10K-B */
1582- size = ARRAY_SIZE (rvu_af_dl_params );
15831591 if (!rvu_npc_exact_has_match_table (rvu ))
1584- size -= 1 ;
1592+ goto done ;
15851593
1586- err = devlink_params_register (dl , rvu_af_dl_params , size );
1594+ err = devlink_params_register (dl , rvu_af_dl_param_exact_match ,
1595+ ARRAY_SIZE (rvu_af_dl_param_exact_match ));
15871596 if (err ) {
15881597 dev_err (rvu -> dev ,
1589- "devlink params register failed with error %d" , err );
1590- goto err_dl_health ;
1598+ "devlink exact match params register failed with error %d" , err );
1599+ goto err_dl_exact_match ;
15911600 }
15921601
1602+ done :
15931603 devlink_register (dl );
15941604 return 0 ;
15951605
1606+ err_dl_exact_match :
1607+ devlink_params_unregister (dl , rvu_af_dl_params , ARRAY_SIZE (rvu_af_dl_params ));
1608+
15961609err_dl_health :
15971610 rvu_health_reporters_destroy (rvu );
15981611 devlink_free (dl );
@@ -1605,8 +1618,14 @@ void rvu_unregister_dl(struct rvu *rvu)
16051618 struct devlink * dl = rvu_dl -> dl ;
16061619
16071620 devlink_unregister (dl );
1608- devlink_params_unregister (dl , rvu_af_dl_params ,
1609- ARRAY_SIZE (rvu_af_dl_params ));
1621+
1622+ devlink_params_unregister (dl , rvu_af_dl_params , ARRAY_SIZE (rvu_af_dl_params ));
1623+
1624+ /* Unregister exact match devlink only for CN10K-B */
1625+ if (rvu_npc_exact_has_match_table (rvu ))
1626+ devlink_params_unregister (dl , rvu_af_dl_param_exact_match ,
1627+ ARRAY_SIZE (rvu_af_dl_param_exact_match ));
1628+
16101629 rvu_health_reporters_destroy (rvu );
16111630 devlink_free (dl );
16121631}
0 commit comments