summaryrefslogtreecommitdiff
path: root/Documentation/hwmon/tmp401
diff options
context:
space:
mode:
authorNeil Horman <nhorman@tuxdriver.com>2016-02-18 16:10:57 -0500
committerSasha Levin <sasha.levin@oracle.com>2016-03-04 10:25:51 -0500
commit00731a62f0f167760ff7a536a30b9eb441794aaf (patch)
treedce9adc0ac7d06d6a7943c2797823be9a4a945cb /Documentation/hwmon/tmp401
parentfdbc49cb20c7711e07010acd7bcf5e6839cf2a86 (diff)
sctp: Fix port hash table size computation
[ Upstream commit d9749fb5942f51555dc9ce1ac0dbb1806960a975 ] Dmitry Vyukov noted recently that the sctp_port_hashtable had an error in its size computation, observing that the current method never guaranteed that the hashsize (measured in number of entries) would be a power of two, which the input hash function for that table requires. The root cause of the problem is that two values need to be computed (one, the allocation order of the storage requries, as passed to __get_free_pages, and two the number of entries for the hash table). Both need to be ^2, but for different reasons, and the existing code is simply computing one order value, and using it as the basis for both, which is wrong (i.e. it assumes that ((1<<order)*PAGE_SIZE)/sizeof(bucket) is still ^2 when its not). To fix this, we change the logic slightly. We start by computing a goal allocation order (which is limited by the maximum size hash table we want to support. Then we attempt to allocate that size table, decreasing the order until a successful allocation is made. Then, with the resultant successful order we compute the number of buckets that hash table supports, which we then round down to the nearest power of two, giving us the number of entries the table actually supports. I've tested this locally here, using non-debug and spinlock-debug kernels, and the number of entries in the hashtable consistently work out to be powers of two in all cases. Signed-off-by: Neil Horman <nhorman@tuxdriver.com> Reported-by: Dmitry Vyukov <dvyukov@google.com> CC: Dmitry Vyukov <dvyukov@google.com> CC: Vladislav Yasevich <vyasevich@gmail.com> CC: "David S. Miller" <davem@davemloft.net> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Diffstat (limited to 'Documentation/hwmon/tmp401')
0 files changed, 0 insertions, 0 deletions