Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

octeontx2-af: Fix devlink unregister

Exact match feature is only available in CN10K-B.
Unregister exact match devlink entry only for
this silicon variant.

Fixes: 87e4ea29b030 ("octeontx2-af: Debugsfs support for exact match.")
Signed-off-by: Ratheesh Kannoth <rkannoth@marvell.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Link: https://lore.kernel.org/r/20230131061659.1025137-1-rkannoth@marvell.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Ratheesh Kannoth and committed by
Jakub Kicinski
917d5e04 a2df8463

+28 -9
+28 -9
drivers/net/ethernet/marvell/octeontx2/af/rvu_devlink.c
··· 1500 1500 BIT(DEVLINK_PARAM_CMODE_RUNTIME), 1501 1501 rvu_af_dl_dwrr_mtu_get, rvu_af_dl_dwrr_mtu_set, 1502 1502 rvu_af_dl_dwrr_mtu_validate), 1503 + }; 1504 + 1505 + static const struct devlink_param rvu_af_dl_param_exact_match[] = { 1503 1506 DEVLINK_PARAM_DRIVER(RVU_AF_DEVLINK_PARAM_ID_NPC_EXACT_FEATURE_DISABLE, 1504 1507 "npc_exact_feature_disable", DEVLINK_PARAM_TYPE_STRING, 1505 1508 BIT(DEVLINK_PARAM_CMODE_RUNTIME), ··· 1559 1556 { 1560 1557 struct rvu_devlink *rvu_dl; 1561 1558 struct devlink *dl; 1562 - size_t size; 1563 1559 int err; 1564 1560 1565 1561 dl = devlink_alloc(&rvu_devlink_ops, sizeof(struct rvu_devlink), ··· 1580 1578 goto err_dl_health; 1581 1579 } 1582 1580 1583 - /* Register exact match devlink only for CN10K-B */ 1584 - size = ARRAY_SIZE(rvu_af_dl_params); 1585 - if (!rvu_npc_exact_has_match_table(rvu)) 1586 - size -= 1; 1587 - 1588 - err = devlink_params_register(dl, rvu_af_dl_params, size); 1581 + err = devlink_params_register(dl, rvu_af_dl_params, ARRAY_SIZE(rvu_af_dl_params)); 1589 1582 if (err) { 1590 1583 dev_err(rvu->dev, 1591 1584 "devlink params register failed with error %d", err); 1592 1585 goto err_dl_health; 1593 1586 } 1594 1587 1588 + /* Register exact match devlink only for CN10K-B */ 1589 + if (!rvu_npc_exact_has_match_table(rvu)) 1590 + goto done; 1591 + 1592 + err = devlink_params_register(dl, rvu_af_dl_param_exact_match, 1593 + ARRAY_SIZE(rvu_af_dl_param_exact_match)); 1594 + if (err) { 1595 + dev_err(rvu->dev, 1596 + "devlink exact match params register failed with error %d", err); 1597 + goto err_dl_exact_match; 1598 + } 1599 + 1600 + done: 1595 1601 devlink_register(dl); 1596 1602 return 0; 1603 + 1604 + err_dl_exact_match: 1605 + devlink_params_unregister(dl, rvu_af_dl_params, ARRAY_SIZE(rvu_af_dl_params)); 1597 1606 1598 1607 err_dl_health: 1599 1608 rvu_health_reporters_destroy(rvu); ··· 1618 1605 struct devlink *dl = rvu_dl->dl; 1619 1606 1620 1607 devlink_unregister(dl); 1621 - devlink_params_unregister(dl, rvu_af_dl_params, 1622 - ARRAY_SIZE(rvu_af_dl_params)); 1608 + 1609 + devlink_params_unregister(dl, rvu_af_dl_params, ARRAY_SIZE(rvu_af_dl_params)); 1610 + 1611 + /* Unregister exact match devlink only for CN10K-B */ 1612 + if (rvu_npc_exact_has_match_table(rvu)) 1613 + devlink_params_unregister(dl, rvu_af_dl_param_exact_match, 1614 + ARRAY_SIZE(rvu_af_dl_param_exact_match)); 1615 + 1623 1616 rvu_health_reporters_destroy(rvu); 1624 1617 devlink_free(dl); 1625 1618 }