backports: backport netdev_rss_key_fill()

netdev_rss_key_fill() uses net_get_random_once() and since
this depends on static keys and we've decided to only backport
that only down to 3.5 as that is when static key stuff settled we
only backport netdev_rss_key_fill() down to 3.5 as well. For details
on the net_get_random_once() / static key stuff refer to backports
commit 8cb8816d.

Backporting netdev_rss_key_fill requires us to throw in the
netdev_rss_key within our own backports module. We don't backport
the ability to query this *yet though*, but if we really wanted to
we can provide an interface for that:

For *packaging* [0] we have no other option but to currently provide
our own querying interface, that's silly though, in the future
if we extend sysctl interfaces to allow dynamic extensions we
could just peg what we need also within the backports module to
allow seemless integration. With shiny new *kernel integration*
support [1] though we can enable cherry picking the sysctl components,
and apply it to the older kernel -- however this would pose a change
in compartamentalized backporting strategy as currently used. It would
seem a allowing dynamic extensions to an existing sysctl interface
would be more efficient and would allow packaging to also take
advantage of this effort.

[0] https://backports.wiki.kernel.org/index.php/Documentation/packaging
[1] https://backports.wiki.kernel.org/index.php/Documentation/integration

commit 960fb622f85180f36d3aff82af53e2be3db2f888
Author: Eric Dumazet <edumazet@google.com>
Date:   Sun Nov 16 06:23:05 2014 -0800

    net: provide a per host RSS key generic infrastructure

    RSS (Receive Side Scaling) typically uses Toeplitz hash and a 40 or 52 bytes
    RSS key.

    Some drivers use a constant (and well known key), some drivers use a random
    key per port, making bonding setups hard to tune. Well known keys increase
    attack surface, considering that number of queues is usually a power of two.

    This patch provides infrastructure to help drivers doing the right thing.

    netdev_rss_key_fill() should be used by drivers to initialize their RSS key,
    even if they provide ethtool -X support to let user redefine the key later.

    A new /proc/sys/net/core/netdev_rss_key file can be used to get the host
    RSS key even for drivers not providing ethtool -x support, in case some
    applications want to precisely setup flows to match some RX queues.

    Tested:

    myhost:~# cat /proc/sys/net/core/netdev_rss_key
    11:63:99:bb:79:fb:a5:a7:07:45:b2:20:bf:02:42:2d:08:1a:dd:19:2b:6b:23:ac:56:28:9d:70:c3:ac:e8:16:4b:b7:c1:10:53:a4:78:41:36:40:74:b6:15:ca:27:44:aa:b3:4d:72

    myhost:~# ethtool -x eth0
    RX flow hash indirection table for eth0 with 8 RX ring(s):
        0:      0     1     2     3     4     5     6     7
    RSS hash key:
    11:63:99:bb:79:fb:a5:a7:07:45:b2:20:bf:02:42:2d:08:1a:dd:19:2b:6b:23:ac:56:28:9d:70:c3:ac:e8:16:4b:b7:c1:10:53:a4:78:41

    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

mcgrof@drvbp1 ~/backports (git::master)$ time ./gentree.py \
	/home/mcgrof/linux-next /home/mcgrof/build/backports-20141117
Copy original source files ...
Applying patches from patches to /home/mcgrof/build/backports-20141117
...
Modify Kconfig tree ...
Rewrite Makefiles and Kconfig files ...
Done!

real    1m28.499s
user    13m25.112s
sys     0m47.804s

mcgrof@drvbp1 ~/build/backports-20141117 $ time \
	/home/mcgrof/backports/devel/ckmake --allyesconfig
1   3.0.101             [  OK  ]
2   3.1.10              [  OK  ]
3   3.2.62              [  OK  ]
4   3.3.8               [  OK  ]
5   3.4.104             [  OK  ]
6   3.5.7               [  OK  ]
7   3.6.11              [  OK  ]
8   3.7.10              [  OK  ]
9   3.8.13              [  OK  ]
10  3.9.11              [  OK  ]
11  3.10.58             [  OK  ]
12  3.11.10             [  OK  ]
13  3.12.31             [  OK  ]
14  3.13.11             [  OK  ]
15  3.14.22             [  OK  ]
16  3.15.10             [  OK  ]
17  3.16.6              [  OK  ]
18  3.17.1              [  OK  ]
19  3.18-rc1            [  OK  ]

real    42m18.874s
user    1179m40.500s
sys     138m54.452s

Cc: Eric Dumazet <edumazet@google.com>
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
3 files changed