mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 19:29:37 +00:00
drivers/perf: Prevent forced unbinding of PMU drivers
[ Upstream commit f32ed8eb0e
]
Forcefully unbinding PMU drivers during perf sampling will lead to
a kernel panic, because the perf upper-layer framework call a NULL
pointer in this situation.
To solve this issue, "suppress_bind_attrs" should be set to true, so
that bind/unbind can be disabled via sysfs and prevent unbinding PMU
drivers during perf sampling.
Signed-off-by: Qi Liu <liuqi115@huawei.com>
Reviewed-by: John Garry <john.garry@huawei.com>
Link: https://lore.kernel.org/r/1594975763-32966-1-git-send-email-liuqi115@huawei.com
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
0821295b23
commit
5345ede4ac
13 changed files with 13 additions and 0 deletions
|
@ -1720,6 +1720,7 @@ static struct platform_driver cci_pmu_driver = {
|
|||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.of_match_table = arm_cci_pmu_matches,
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = cci_pmu_probe,
|
||||
.remove = cci_pmu_remove,
|
||||
|
|
|
@ -1545,6 +1545,7 @@ static struct platform_driver arm_ccn_driver = {
|
|||
.driver = {
|
||||
.name = "arm-ccn",
|
||||
.of_match_table = arm_ccn_match,
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = arm_ccn_probe,
|
||||
.remove = arm_ccn_remove,
|
||||
|
|
|
@ -759,6 +759,7 @@ static struct platform_driver dsu_pmu_driver = {
|
|||
.driver = {
|
||||
.name = DRVNAME,
|
||||
.of_match_table = of_match_ptr(dsu_pmu_of_match),
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = dsu_pmu_device_probe,
|
||||
.remove = dsu_pmu_device_remove,
|
||||
|
|
|
@ -861,6 +861,7 @@ static void smmu_pmu_shutdown(struct platform_device *pdev)
|
|||
static struct platform_driver smmu_pmu_driver = {
|
||||
.driver = {
|
||||
.name = "arm-smmu-v3-pmcg",
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = smmu_pmu_probe,
|
||||
.remove = smmu_pmu_remove,
|
||||
|
|
|
@ -1228,6 +1228,7 @@ static struct platform_driver arm_spe_pmu_driver = {
|
|||
.driver = {
|
||||
.name = DRVNAME,
|
||||
.of_match_table = of_match_ptr(arm_spe_pmu_of_match),
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = arm_spe_pmu_device_probe,
|
||||
.remove = arm_spe_pmu_device_remove,
|
||||
|
|
|
@ -646,6 +646,7 @@ static struct platform_driver imx_ddr_pmu_driver = {
|
|||
.driver = {
|
||||
.name = "imx-ddr-pmu",
|
||||
.of_match_table = imx_ddr_pmu_dt_ids,
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = ddr_perf_probe,
|
||||
.remove = ddr_perf_remove,
|
||||
|
|
|
@ -420,6 +420,7 @@ static struct platform_driver hisi_ddrc_pmu_driver = {
|
|||
.driver = {
|
||||
.name = "hisi_ddrc_pmu",
|
||||
.acpi_match_table = ACPI_PTR(hisi_ddrc_pmu_acpi_match),
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = hisi_ddrc_pmu_probe,
|
||||
.remove = hisi_ddrc_pmu_remove,
|
||||
|
|
|
@ -431,6 +431,7 @@ static struct platform_driver hisi_hha_pmu_driver = {
|
|||
.driver = {
|
||||
.name = "hisi_hha_pmu",
|
||||
.acpi_match_table = ACPI_PTR(hisi_hha_pmu_acpi_match),
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = hisi_hha_pmu_probe,
|
||||
.remove = hisi_hha_pmu_remove,
|
||||
|
|
|
@ -421,6 +421,7 @@ static struct platform_driver hisi_l3c_pmu_driver = {
|
|||
.driver = {
|
||||
.name = "hisi_l3c_pmu",
|
||||
.acpi_match_table = ACPI_PTR(hisi_l3c_pmu_acpi_match),
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = hisi_l3c_pmu_probe,
|
||||
.remove = hisi_l3c_pmu_remove,
|
||||
|
|
|
@ -1028,6 +1028,7 @@ static struct platform_driver l2_cache_pmu_driver = {
|
|||
.driver = {
|
||||
.name = "qcom-l2cache-pmu",
|
||||
.acpi_match_table = ACPI_PTR(l2_cache_pmu_acpi_match),
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = l2_cache_pmu_probe,
|
||||
.remove = l2_cache_pmu_remove,
|
||||
|
|
|
@ -814,6 +814,7 @@ static struct platform_driver qcom_l3_cache_pmu_driver = {
|
|||
.driver = {
|
||||
.name = "qcom-l3cache-pmu",
|
||||
.acpi_match_table = ACPI_PTR(qcom_l3_cache_pmu_acpi_match),
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = qcom_l3_cache_pmu_probe,
|
||||
};
|
||||
|
|
|
@ -816,6 +816,7 @@ static struct platform_driver tx2_uncore_driver = {
|
|||
.driver = {
|
||||
.name = "tx2-uncore-pmu",
|
||||
.acpi_match_table = ACPI_PTR(tx2_uncore_acpi_match),
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = tx2_uncore_probe,
|
||||
.remove = tx2_uncore_remove,
|
||||
|
|
|
@ -1981,6 +1981,7 @@ static struct platform_driver xgene_pmu_driver = {
|
|||
.name = "xgene-pmu",
|
||||
.of_match_table = xgene_pmu_of_match,
|
||||
.acpi_match_table = ACPI_PTR(xgene_pmu_acpi_match),
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue