mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
octeontx2-pf: Fix promisc mcam entry action
[ Upstream commitdbda436824
] Current implementation is such that, promisc mcam entry action is set as multicast even when there are no trusted VFs. multicast action causes the hardware to copy packet data, which reduces the performance. This patch fixes this issue by setting the promisc mcam entry action to unicast instead of multicast when there are no trusted VFs. The same change is made for the 'allmulti' mcam entry action. Fixes:ffd2f89ad0
("octeontx2-pf: Enable promisc/allmulti match MCAM entries.") Signed-off-by: Hariprasad Kelam <hkelam@marvell.com> Signed-off-by: Sunil Kovvuri Goutham <sgoutham@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
34b630626a
commit
d0f0786f8c
@ -1638,6 +1638,21 @@ static void otx2_free_hw_resources(struct otx2_nic *pf)
|
||||
mutex_unlock(&mbox->lock);
|
||||
}
|
||||
|
||||
static bool otx2_promisc_use_mce_list(struct otx2_nic *pfvf)
|
||||
{
|
||||
int vf;
|
||||
|
||||
/* The AF driver will determine whether to allow the VF netdev or not */
|
||||
if (is_otx2_vf(pfvf->pcifunc))
|
||||
return true;
|
||||
|
||||
/* check if there are any trusted VFs associated with the PF netdev */
|
||||
for (vf = 0; vf < pci_num_vf(pfvf->pdev); vf++)
|
||||
if (pfvf->vf_configs[vf].trusted)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static void otx2_do_set_rx_mode(struct otx2_nic *pf)
|
||||
{
|
||||
struct net_device *netdev = pf->netdev;
|
||||
@ -1670,7 +1685,8 @@ static void otx2_do_set_rx_mode(struct otx2_nic *pf)
|
||||
if (netdev->flags & (IFF_ALLMULTI | IFF_MULTICAST))
|
||||
req->mode |= NIX_RX_MODE_ALLMULTI;
|
||||
|
||||
req->mode |= NIX_RX_MODE_USE_MCE;
|
||||
if (otx2_promisc_use_mce_list(pf))
|
||||
req->mode |= NIX_RX_MODE_USE_MCE;
|
||||
|
||||
otx2_sync_mbox_msg(&pf->mbox);
|
||||
mutex_unlock(&pf->mbox.lock);
|
||||
@ -2634,11 +2650,14 @@ static int otx2_ndo_set_vf_trust(struct net_device *netdev, int vf,
|
||||
pf->vf_configs[vf].trusted = enable;
|
||||
rc = otx2_set_vf_permissions(pf, vf, OTX2_TRUSTED_VF);
|
||||
|
||||
if (rc)
|
||||
if (rc) {
|
||||
pf->vf_configs[vf].trusted = !enable;
|
||||
else
|
||||
} else {
|
||||
netdev_info(pf->netdev, "VF %d is %strusted\n",
|
||||
vf, enable ? "" : "not ");
|
||||
otx2_set_rx_mode(netdev);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user