From: Mohammad Shahid <[email protected]>

The DTL buffer is allocated while holding dtl_global_lock, which
is spinlock.

GFP_KERNEL allow direct memory reclaim and may sleep. Combining
GFP_KERNEL with GFP_ATOMIC does not remove the direct reclaim.

Use GFP_ATOMIC alone to ensure the allocation does not sleep
while the spinlock is held.

The issue is reported by script coccinelle call_kern.cocci.

Signed-off-by: Mohammad Shahid <[email protected]>
---
 arch/powerpc/perf/vpa-dtl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/perf/vpa-dtl.c b/arch/powerpc/perf/vpa-dtl.c
index 3e3d65b6c796..3d34417e6aae 100644
--- a/arch/powerpc/perf/vpa-dtl.c
+++ b/arch/powerpc/perf/vpa-dtl.c
@@ -338,7 +338,7 @@ static int vpa_dtl_mem_alloc(int cpu)
        if (!dtl_cache)
                return -ENOMEM;
 
-       buf = kmem_cache_alloc_node(dtl_cache, GFP_KERNEL | GFP_ATOMIC, 
cpu_to_node(cpu));
+       buf = kmem_cache_alloc_node(dtl_cache, GFP_ATOMIC, cpu_to_node(cpu));
        if (!buf) {
                pr_warn("buffer allocation failed for cpu %d\n", cpu);
                return -ENOMEM;
-- 
2.43.0


Reply via email to