summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYicong Yang <yangyicong@hisilicon.com>2023-10-10 16:47:28 +0800
committerSuzuki K Poulose <suzuki.poulose@arm.com>2023-11-13 09:43:33 +0000
commite0dd27ad8af00f147ac3c9de88e0687986afc3ea (patch)
tree501d505fb24304ec88424aef5d52ae55c6ece894
parent55e0a2fb0cb5ab7c9c99c1ad4d3e6954de8b73a0 (diff)
downloadlinux-stable-e0dd27ad8af00f147ac3c9de88e0687986afc3ea.tar.gz
linux-stable-e0dd27ad8af00f147ac3c9de88e0687986afc3ea.tar.bz2
linux-stable-e0dd27ad8af00f147ac3c9de88e0687986afc3ea.zip
hwtracing: hisi_ptt: Handle the interrupt in hardirq context
Handle the trace interrupt in the hardirq context, make sure the irq core won't threaded it by declaring IRQF_NO_THREAD and userspace won't balance it by declaring IRQF_NOBALANCING. Otherwise we may violate the synchronization requirements of the perf core, referenced to the change of arm-ccn PMU commit 0811ef7e2f54 ("bus: arm-ccn: fix PMU interrupt flags"). In the interrupt handler we mainly doing 2 things: - Copy the data from the local DMA buffer to the AUX buffer - Commit the data in the AUX buffer Signed-off-by: Yicong Yang <yangyicong@hisilicon.com> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> [ Fixed commit description to suppress checkpatch warning ] Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com> Link: https://lore.kernel.org/r/20231010084731.30450-3-yangyicong@huawei.com
-rw-r--r--drivers/hwtracing/ptt/hisi_ptt.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/hwtracing/ptt/hisi_ptt.c b/drivers/hwtracing/ptt/hisi_ptt.c
index 3045d1894b81..dbed4fd4e296 100644
--- a/drivers/hwtracing/ptt/hisi_ptt.c
+++ b/drivers/hwtracing/ptt/hisi_ptt.c
@@ -342,9 +342,9 @@ static int hisi_ptt_register_irq(struct hisi_ptt *hisi_ptt)
return ret;
hisi_ptt->trace_irq = pci_irq_vector(pdev, HISI_PTT_TRACE_DMA_IRQ);
- ret = devm_request_threaded_irq(&pdev->dev, hisi_ptt->trace_irq,
- NULL, hisi_ptt_isr, 0,
- DRV_NAME, hisi_ptt);
+ ret = devm_request_irq(&pdev->dev, hisi_ptt->trace_irq, hisi_ptt_isr,
+ IRQF_NOBALANCING | IRQF_NO_THREAD, DRV_NAME,
+ hisi_ptt);
if (ret) {
pci_err(pdev, "failed to request irq %d, ret = %d\n",
hisi_ptt->trace_irq, ret);