aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Grehan <grehan@FreeBSD.org>2021-10-11 17:49:01 +0000
committerPeter Grehan <grehan@FreeBSD.org>2021-10-22 11:16:12 +0000
commit5a3eb6207a353c3a18da8abcf00a2d75276dd29e (patch)
treebe034100cbfd2e5335beb45f51660c1d286fae77
parent3dc7a1897e0bb9e4b529c01cb3f88e1c387af5e8 (diff)
downloadsrc-5a3eb6207a353c3a18da8abcf00a2d75276dd29e.tar.gz
src-5a3eb6207a353c3a18da8abcf00a2d75276dd29e.zip
igc: correctly update RCTL when changing multicast filters.
Fix clearing of bits in RCTL for the non-bpf/non-allmulti case. Update RCTL after modifying the multicast filter registers as per the Linux driver. This fixes LACP on igc interfaces, where incoming LACP multicasti control packets were being dropped. Reviewed by: kbowling Obtained from: Rubicon Communications, LLC ("Netgate") MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D32574
-rw-r--r--sys/dev/igc/if_igc.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/dev/igc/if_igc.c b/sys/dev/igc/if_igc.c
index 6d94a7c223c7..436493185d5c 100644
--- a/sys/dev/igc/if_igc.c
+++ b/sys/dev/igc/if_igc.c
@@ -1172,12 +1172,12 @@ igc_if_multi_set(if_ctx_t ctx)
reg_rctl |= IGC_RCTL_MPE;
reg_rctl &= ~IGC_RCTL_UPE;
} else
- reg_rctl = ~(IGC_RCTL_UPE | IGC_RCTL_MPE);
-
- IGC_WRITE_REG(&adapter->hw, IGC_RCTL, reg_rctl);
+ reg_rctl &= ~(IGC_RCTL_UPE | IGC_RCTL_MPE);
if (mcnt < MAX_NUM_MULTICAST_ADDRESSES)
igc_update_mc_addr_list(&adapter->hw, mta, mcnt);
+
+ IGC_WRITE_REG(&adapter->hw, IGC_RCTL, reg_rctl);
}
/*********************************************************************