Thread (49 messages) 49 messages, 15 authors, 2016-04-02

Re: [PATCH v2 net-next] net/core: generic support for disabling netdev features down stack

From: Jarod Wilson <hidden>
Date: 2015-11-03 13:57:13
Also in: lkml

Geert Uytterhoeven wrote:
On Tue, Nov 3, 2015 at 11:03 AM, Nikolay Aleksandrov
[off-list ref]  wrote:
quoted
On 11/03/2015 03:55 AM, Jarod Wilson wrote:
[snip]
quoted
+#define for_each_netdev_feature(mask_addr, feature)                          \
+     int bit;                                                                \
+     for_each_set_bit(bit, (unsigned long *)mask_addr, NETDEV_FEATURE_COUNT) \
+             feature = __NETIF_F_BIT(bit);
+
^
This is broken, it will not work for more than a single feature.
Indeed it is.

This is used as:

         for_each_netdev_feature(&upper_disables, feature) {
         ...
         }

which expands to:

         int bit;
         for_each_set_bit(bit, (unsigned long *)mask_addr, NETDEV_FEATURE_COUNT)
                 feature = __NETIF_F_BIT(bit);
         {
                 ...
         }

Note the assignment to "feature" happens outside the {}-delimited block.
And the block is always executed once.
Bah, crap, I was still staring at the code not seeing it, thank you for 
the detailed cluebat. I'll fix that up right now.

-- 
Jarod Wilson
jarod@redhat.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help