summaryrefslogtreecommitdiffstats
path: root/mm/kasan
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>2022-05-12 20:23:08 -0700
committerAndrew Morton <akpm@linux-foundation.org>2022-05-13 07:20:18 -0700
commit3f80492001aa64ac585016050ace8680611c2e20 (patch)
treef3b095abf054739c033724b6e0588fe8df5aa808 /mm/kasan
parentfe573327ffb1deba802c91dd1d4ff41dafa97a0e (diff)
downloadlinux-stable-3f80492001aa64ac585016050ace8680611c2e20.tar.gz
linux-stable-3f80492001aa64ac585016050ace8680611c2e20.tar.bz2
linux-stable-3f80492001aa64ac585016050ace8680611c2e20.zip
mm/vmalloc: use raw_cpu_ptr() for vmap_block_queue access
The per-CPU resource vmap_block_queue is accessed via get_cpu_var(). That macro disables preemption and then loads the pointer from the current CPU. This doesn't work on PREEMPT_RT because a spinlock_t is later accessed within the preempt-disable section. There is no need to disable preemption while accessing the per-CPU struct vmap_block_queue because the list is protected with a spinlock_t. The per-CPU struct is also accessed cross-CPU in purge_fragmented_blocks(). It is possible that by using raw_cpu_ptr() the code migrates to another CPU and uses struct from another CPU. This is fine because the list is locked and the locked section is very short. Use raw_cpu_ptr() to access vmap_block_queue. Link: https://lkml.kernel.org/r/YnKx3duAB53P7ojN@linutronix.de Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Uladzislau Rezki (Sony) <urezki@gmail.com> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'mm/kasan')
0 files changed, 0 insertions, 0 deletions