Message ID | 20221018092841.32206-1-pieter.jansen-van-vuuren@amd.com (mailing list archive) |
---|---|
State | Accepted |
Commit | c2bf23e4a5af37a4d77901d9ff14c50a269f143d |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] sfc: include vport_id in filter spec hash and equal() | expand |
Hello: This patch was applied to netdev/net.git (master) by Jakub Kicinski <kuba@kernel.org>: On Tue, 18 Oct 2022 10:28:41 +0100 you wrote: > From: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com> > > Filters on different vports are qualified by different implicit MACs and/or > VLANs, so shouldn't be considered equal even if their other match fields > are identical. > > Fixes: 7c460d9be610 ("sfc: Extend and abstract efx_filter_spec to cover Huntington/EF10") > Co-developed-by: Edward Cree <ecree.xilinx@gmail.com> > Signed-off-by: Edward Cree <ecree.xilinx@gmail.com> > Signed-off-by: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com> > Reviewed-by: Martin Habets <habetsm.xilinx@gmail.com> > > [...] Here is the summary with links: - [net] sfc: include vport_id in filter spec hash and equal() https://git.kernel.org/netdev/net/c/c2bf23e4a5af You are awesome, thank you!
diff --git a/drivers/net/ethernet/sfc/filter.h b/drivers/net/ethernet/sfc/filter.h index be72e71da027..5f201a547e5b 100644 --- a/drivers/net/ethernet/sfc/filter.h +++ b/drivers/net/ethernet/sfc/filter.h @@ -162,9 +162,9 @@ struct efx_filter_spec { u32 priority:2; u32 flags:6; u32 dmaq_id:12; - u32 vport_id; u32 rss_context; - __be16 outer_vid __aligned(4); /* allow jhash2() of match values */ + u32 vport_id; + __be16 outer_vid; __be16 inner_vid; u8 loc_mac[ETH_ALEN]; u8 rem_mac[ETH_ALEN]; diff --git a/drivers/net/ethernet/sfc/rx_common.c b/drivers/net/ethernet/sfc/rx_common.c index 4826e6a7e4ce..9220afeddee8 100644 --- a/drivers/net/ethernet/sfc/rx_common.c +++ b/drivers/net/ethernet/sfc/rx_common.c @@ -660,17 +660,17 @@ bool efx_filter_spec_equal(const struct efx_filter_spec *left, (EFX_FILTER_FLAG_RX | EFX_FILTER_FLAG_TX))) return false; - return memcmp(&left->outer_vid, &right->outer_vid, + return memcmp(&left->vport_id, &right->vport_id, sizeof(struct efx_filter_spec) - - offsetof(struct efx_filter_spec, outer_vid)) == 0; + offsetof(struct efx_filter_spec, vport_id)) == 0; } u32 efx_filter_spec_hash(const struct efx_filter_spec *spec) { - BUILD_BUG_ON(offsetof(struct efx_filter_spec, outer_vid) & 3); - return jhash2((const u32 *)&spec->outer_vid, + BUILD_BUG_ON(offsetof(struct efx_filter_spec, vport_id) & 3); + return jhash2((const u32 *)&spec->vport_id, (sizeof(struct efx_filter_spec) - - offsetof(struct efx_filter_spec, outer_vid)) / 4, + offsetof(struct efx_filter_spec, vport_id)) / 4, 0); }