Skip to content

Commit a96e60a

Browse files
jbuddhabgregkh
authored andcommitted
soc: xilinx: rename cpu_number1 to dummy_cpu_number
[ Upstream commit 4a95449 ] The per cpu variable cpu_number1 is passed to xlnx_event_handler as argument "dev_id", but it is not used in this function. So drop the initialization of this variable and rename it to dummy_cpu_number. This patch is to fix the following call trace when the kernel option CONFIG_DEBUG_ATOMIC_SLEEP is enabled: BUG: sleeping function called from invalid context at include/linux/sched/mm.h:274 in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 1, name: swapper/0 preempt_count: 1, expected: 0 CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.1.0 #53 Hardware name: Xilinx Versal vmk180 Eval board rev1.1 (QSPI) (DT) Call trace: dump_backtrace+0xd0/0xe0 show_stack+0x18/0x40 dump_stack_lvl+0x7c/0xa0 dump_stack+0x18/0x34 __might_resched+0x10c/0x140 __might_sleep+0x4c/0xa0 __kmem_cache_alloc_node+0xf4/0x168 kmalloc_trace+0x28/0x38 __request_percpu_irq+0x74/0x138 xlnx_event_manager_probe+0xf8/0x298 platform_probe+0x68/0xd8 Fixes: daed80e ("soc: xilinx: Fix for call trace due to the usage of smp_processor_id()") Signed-off-by: Jay Buddhabhatti <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Michal Simek <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent adc0b5c commit a96e60a

File tree

1 file changed

+4
-11
lines changed

1 file changed

+4
-11
lines changed

drivers/soc/xilinx/xlnx_event_manager.c

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Xilinx Event Management Driver
44
*
55
* Copyright (C) 2021 Xilinx, Inc.
6+
* Copyright (C) 2024 Advanced Micro Devices, Inc.
67
*
78
* Abhyuday Godhasara <[email protected]>
89
*/
@@ -19,7 +20,7 @@
1920
#include <linux/platform_device.h>
2021
#include <linux/slab.h>
2122

22-
static DEFINE_PER_CPU_READ_MOSTLY(int, cpu_number1);
23+
static DEFINE_PER_CPU_READ_MOSTLY(int, dummy_cpu_number);
2324

2425
static int virq_sgi;
2526
static int event_manager_availability = -EACCES;
@@ -555,7 +556,6 @@ static void xlnx_disable_percpu_irq(void *data)
555556
static int xlnx_event_init_sgi(struct platform_device *pdev)
556557
{
557558
int ret = 0;
558-
int cpu;
559559
/*
560560
* IRQ related structures are used for the following:
561561
* for each SGI interrupt ensure its mapped by GIC IRQ domain
@@ -592,11 +592,8 @@ static int xlnx_event_init_sgi(struct platform_device *pdev)
592592
sgi_fwspec.param[0] = sgi_num;
593593
virq_sgi = irq_create_fwspec_mapping(&sgi_fwspec);
594594

595-
cpu = get_cpu();
596-
per_cpu(cpu_number1, cpu) = cpu;
597595
ret = request_percpu_irq(virq_sgi, xlnx_event_handler, "xlnx_event_mgmt",
598-
&cpu_number1);
599-
put_cpu();
596+
&dummy_cpu_number);
600597

601598
WARN_ON(ret);
602599
if (ret) {
@@ -612,16 +609,12 @@ static int xlnx_event_init_sgi(struct platform_device *pdev)
612609

613610
static void xlnx_event_cleanup_sgi(struct platform_device *pdev)
614611
{
615-
int cpu = smp_processor_id();
616-
617-
per_cpu(cpu_number1, cpu) = cpu;
618-
619612
cpuhp_remove_state(CPUHP_AP_ONLINE_DYN);
620613

621614
on_each_cpu(xlnx_disable_percpu_irq, NULL, 1);
622615

623616
irq_clear_status_flags(virq_sgi, IRQ_PER_CPU);
624-
free_percpu_irq(virq_sgi, &cpu_number1);
617+
free_percpu_irq(virq_sgi, &dummy_cpu_number);
625618
irq_dispose_mapping(virq_sgi);
626619
}
627620

0 commit comments

Comments
 (0)