]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commit - mm/percpu.c
mm/percpu.c: correct max_distance calculation for pcpu_embed_first_chunk()
authorzijun_hu <zijun_hu@htc.com>
Wed, 5 Oct 2016 13:19:11 +0000 (21:19 +0800)
committerTejun Heo <tj@kernel.org>
Wed, 5 Oct 2016 15:52:54 +0000 (11:52 -0400)
commit93c76b6b2faaad7bfbc0cda840763aa4819ef26e
treeaf612304a46abb22e4821e2ea373d9556b170564
parent799bc3c51b2b120ca6e59e702ede23fff2efaf43
mm/percpu.c: correct max_distance calculation for pcpu_embed_first_chunk()

pcpu_embed_first_chunk() calculates the range a percpu chunk spans into
@max_distance and uses it to ensure that a chunk is not too big compared
to the total vmalloc area. However, during calculation, it used incorrect
top address by adding a unit size to the highest group's base address.

This can make the calculated max_distance slightly smaller than the actual
distance although given the scale of values involved the error is very
unlikely to have an actual impact.

Fix this issue by adding the group's size instead of a unit size.

BTW, The type of variable max_distance is changed from size_t to unsigned
long too based on below consideration:
 - type unsigned long usually have same width with IP core registers and
   can be applied at here very well
 - make @max_distance type consistent with the operand calculated against
   it such as @ai->groups[i].base_offset and macro VMALLOC_TOTAL
 - type unsigned long is more universal then size_t, size_t is type defined
   to unsigned int or unsigned long among various ARCHs usually

Signed-off-by: zijun_hu <zijun_hu@htc.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
mm/percpu.c