| From aad9a43d2681fbe68a3bce140dd5ba7bd1b664ed Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 4 May 2022 11:09:14 +0300 |
| Subject: net: Fix features skip in for_each_netdev_feature() |
| |
| From: Tariq Toukan <tariqt@nvidia.com> |
| |
| [ Upstream commit 85db6352fc8a158a893151baa1716463d34a20d0 ] |
| |
| The find_next_netdev_feature() macro gets the "remaining length", |
| not bit index. |
| Passing "bit - 1" for the following iteration is wrong as it skips |
| the adjacent bit. Pass "bit" instead. |
| |
| Fixes: 3b89ea9c5902 ("net: Fix for_each_netdev_feature on Big endian") |
| Signed-off-by: Tariq Toukan <tariqt@nvidia.com> |
| Reviewed-by: Gal Pressman <gal@nvidia.com> |
| Link: https://lore.kernel.org/r/20220504080914.1918-1-tariqt@nvidia.com |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| include/linux/netdev_features.h | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h |
| index b692edeb0b90..27abbd7fbb2b 100644 |
| --- a/include/linux/netdev_features.h |
| +++ b/include/linux/netdev_features.h |
| @@ -139,7 +139,7 @@ enum { |
| #define NETIF_F_BUSY_POLL __NETIF_F(BUSY_POLL) |
| #define NETIF_F_HW_TC __NETIF_F(HW_TC) |
| |
| -/* Finds the next feature with the highest number of the range of start till 0. |
| +/* Finds the next feature with the highest number of the range of start-1 till 0. |
| */ |
| static inline int find_next_netdev_feature(u64 feature, unsigned long start) |
| { |
| @@ -158,7 +158,7 @@ static inline int find_next_netdev_feature(u64 feature, unsigned long start) |
| for ((bit) = find_next_netdev_feature((mask_addr), \ |
| NETDEV_FEATURE_COUNT); \ |
| (bit) >= 0; \ |
| - (bit) = find_next_netdev_feature((mask_addr), (bit) - 1)) |
| + (bit) = find_next_netdev_feature((mask_addr), (bit))) |
| |
| /* Features valid for ethtool to change */ |
| /* = all defined minus driver/device-class-related */ |
| -- |
| 2.35.1 |
| |