From: Sasha Levin Date: Mon, 24 Feb 2025 01:25:35 +0000 (-0500) Subject: Fixes for 6.12 X-Git-Tag: v6.6.80~25^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=777ead4b04f7715a57d7c73eec3bf8534a7f99b1;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 6.12 Signed-off-by: Sasha Levin --- diff --git a/queue-6.12/irqchip-jcore-aic-clocksource-drivers-jcore-fix-jcor.patch b/queue-6.12/irqchip-jcore-aic-clocksource-drivers-jcore-fix-jcor.patch new file mode 100644 index 0000000000..bdb0e986ac --- /dev/null +++ b/queue-6.12/irqchip-jcore-aic-clocksource-drivers-jcore-fix-jcor.patch @@ -0,0 +1,99 @@ +From 5e56c13da760b93659910cb9d015a5bbe48a5294 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 16 Feb 2025 18:55:45 +0100 +Subject: irqchip/jcore-aic, clocksource/drivers/jcore: Fix jcore-pit interrupt + request + +From: Artur Rojek + +[ Upstream commit d7e3fd658248f257006227285095d190e70ee73a ] + +The jcore-aic irqchip does not have separate interrupt numbers reserved for +cpu-local vs global interrupts. Therefore the device drivers need to +request the given interrupt as per CPU interrupt. + +69a9dcbd2d65 ("clocksource/drivers/jcore: Use request_percpu_irq()") +converted the clocksource driver over to request_percpu_irq(), but failed +to do add all the required changes, resulting in a failure to register PIT +interrupts. + +Fix this by: + + 1) Explicitly mark the interrupt via irq_set_percpu_devid() in + jcore_pit_init(). + + 2) Enable and disable the per CPU interrupt in the CPU hotplug callbacks. + + 3) Pass the correct per-cpu cookie to the irq handler by using + handle_percpu_devid_irq() instead of handle_percpu_irq() in + handle_jcore_irq(). + +[ tglx: Massage change log ] + +Fixes: 69a9dcbd2d65 ("clocksource/drivers/jcore: Use request_percpu_irq()") +Signed-off-by: Artur Rojek +Signed-off-by: Thomas Gleixner +Acked-by: Uros Bizjak +Link: https://lore.kernel.org/all/20250216175545.35079-3-contact@artur-rojek.eu +Signed-off-by: Sasha Levin +--- + drivers/clocksource/jcore-pit.c | 15 ++++++++++++++- + drivers/irqchip/irq-jcore-aic.c | 2 +- + 2 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/drivers/clocksource/jcore-pit.c b/drivers/clocksource/jcore-pit.c +index a3fe98cd38382..82815428f8f92 100644 +--- a/drivers/clocksource/jcore-pit.c ++++ b/drivers/clocksource/jcore-pit.c +@@ -114,6 +114,18 @@ static int jcore_pit_local_init(unsigned cpu) + pit->periodic_delta = DIV_ROUND_CLOSEST(NSEC_PER_SEC, HZ * buspd); + + clockevents_config_and_register(&pit->ced, freq, 1, ULONG_MAX); ++ enable_percpu_irq(pit->ced.irq, IRQ_TYPE_NONE); ++ ++ return 0; ++} ++ ++static int jcore_pit_local_teardown(unsigned cpu) ++{ ++ struct jcore_pit *pit = this_cpu_ptr(jcore_pit_percpu); ++ ++ pr_info("Local J-Core PIT teardown on cpu %u\n", cpu); ++ ++ disable_percpu_irq(pit->ced.irq); + + return 0; + } +@@ -168,6 +180,7 @@ static int __init jcore_pit_init(struct device_node *node) + return -ENOMEM; + } + ++ irq_set_percpu_devid(pit_irq); + err = request_percpu_irq(pit_irq, jcore_timer_interrupt, + "jcore_pit", jcore_pit_percpu); + if (err) { +@@ -237,7 +250,7 @@ static int __init jcore_pit_init(struct device_node *node) + + cpuhp_setup_state(CPUHP_AP_JCORE_TIMER_STARTING, + "clockevents/jcore:starting", +- jcore_pit_local_init, NULL); ++ jcore_pit_local_init, jcore_pit_local_teardown); + + return 0; + } +diff --git a/drivers/irqchip/irq-jcore-aic.c b/drivers/irqchip/irq-jcore-aic.c +index b9dcc8e78c750..1f613eb7b7f03 100644 +--- a/drivers/irqchip/irq-jcore-aic.c ++++ b/drivers/irqchip/irq-jcore-aic.c +@@ -38,7 +38,7 @@ static struct irq_chip jcore_aic; + static void handle_jcore_irq(struct irq_desc *desc) + { + if (irqd_is_per_cpu(irq_desc_get_irq_data(desc))) +- handle_percpu_irq(desc); ++ handle_percpu_devid_irq(desc); + else + handle_simple_irq(desc); + } +-- +2.39.5 + diff --git a/queue-6.12/series b/queue-6.12/series index 0f79e318c2..45a993d90e 100644 --- a/queue-6.12/series +++ b/queue-6.12/series @@ -102,3 +102,4 @@ nvme-tcp-fix-connect-failure-on-receiving-partial-ic.patch nvme-ioctl-add-missing-space-in-err-message.patch bpf-skip-non-exist-keys-in-generic_map_lookup_batch.patch drm-nouveau-pmu-fix-gp10b-firmware-guard.patch +irqchip-jcore-aic-clocksource-drivers-jcore-fix-jcor.patch