| From 653bcc0dc2d883ada531cbfc2b560742de6fd72b Mon Sep 17 00:00:00 2001 |
| From: Manish Chopra <manishc@marvell.com> |
| Date: Mon, 28 Jan 2019 10:05:04 -0800 |
| Subject: qed: Fix bug in tx promiscuous mode settings |
| |
| [ Upstream commit 9e71a15d8b5bbce25c637f7f8833cd3f45b65646 ] |
| |
| When running tx switched traffic between VNICs |
| created via a bridge(to which VFs are added), |
| adapter drops the unicast packets in tx flow due to |
| VNIC's ucast mac being unknown to it. But VF interfaces |
| being in promiscuous mode should have caused adapter |
| to accept all the unknown ucast packets. Later, it |
| was found that driver doesn't really configure tx |
| promiscuous mode settings to accept all unknown unicast macs. |
| |
| This patch fixes tx promiscuous mode settings to accept all |
| unknown/unmatched unicast macs and works out the scenario. |
| |
| Signed-off-by: Manish Chopra <manishc@marvell.com> |
| Signed-off-by: Ariel Elior <aelior@marvell.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/qlogic/qed/qed_l2.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/ethernet/qlogic/qed/qed_l2.c b/drivers/net/ethernet/qlogic/qed/qed_l2.c |
| index 67c02ea93906..b8baa6fcef8e 100644 |
| --- a/drivers/net/ethernet/qlogic/qed/qed_l2.c |
| +++ b/drivers/net/ethernet/qlogic/qed/qed_l2.c |
| @@ -609,6 +609,10 @@ qed_sp_update_accept_mode(struct qed_hwfn *p_hwfn, |
| (!!(accept_filter & QED_ACCEPT_MCAST_MATCHED) && |
| !!(accept_filter & QED_ACCEPT_MCAST_UNMATCHED))); |
| |
| + SET_FIELD(state, ETH_VPORT_TX_MODE_UCAST_ACCEPT_ALL, |
| + (!!(accept_filter & QED_ACCEPT_UCAST_MATCHED) && |
| + !!(accept_filter & QED_ACCEPT_UCAST_UNMATCHED))); |
| + |
| SET_FIELD(state, ETH_VPORT_TX_MODE_BCAST_ACCEPT_ALL, |
| !!(accept_filter & QED_ACCEPT_BCAST)); |
| |
| @@ -2688,7 +2692,8 @@ static int qed_configure_filter_rx_mode(struct qed_dev *cdev, |
| if (type == QED_FILTER_RX_MODE_TYPE_PROMISC) { |
| accept_flags.rx_accept_filter |= QED_ACCEPT_UCAST_UNMATCHED | |
| QED_ACCEPT_MCAST_UNMATCHED; |
| - accept_flags.tx_accept_filter |= QED_ACCEPT_MCAST_UNMATCHED; |
| + accept_flags.tx_accept_filter |= QED_ACCEPT_UCAST_UNMATCHED | |
| + QED_ACCEPT_MCAST_UNMATCHED; |
| } else if (type == QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC) { |
| accept_flags.rx_accept_filter |= QED_ACCEPT_MCAST_UNMATCHED; |
| accept_flags.tx_accept_filter |= QED_ACCEPT_MCAST_UNMATCHED; |
| -- |
| 2.19.1 |
| |