Commit f32ed8eb authored by Qi Liu's avatar Qi Liu Committed by Will Deacon

drivers/perf: Prevent forced unbinding of PMU drivers

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: default avatarQi Liu <liuqi115@huawei.com>
Reviewed-by: default avatarJohn Garry <john.garry@huawei.com>
Link: https://lore.kernel.org/r/1594975763-32966-1-git-send-email-liuqi115@huawei.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
parent bd024e82
...@@ -1718,6 +1718,7 @@ static struct platform_driver cci_pmu_driver = { ...@@ -1718,6 +1718,7 @@ static struct platform_driver cci_pmu_driver = {
.driver = { .driver = {
.name = DRIVER_NAME, .name = DRIVER_NAME,
.of_match_table = arm_cci_pmu_matches, .of_match_table = arm_cci_pmu_matches,
.suppress_bind_attrs = true,
}, },
.probe = cci_pmu_probe, .probe = cci_pmu_probe,
.remove = cci_pmu_remove, .remove = cci_pmu_remove,
......
...@@ -1545,6 +1545,7 @@ static struct platform_driver arm_ccn_driver = { ...@@ -1545,6 +1545,7 @@ static struct platform_driver arm_ccn_driver = {
.driver = { .driver = {
.name = "arm-ccn", .name = "arm-ccn",
.of_match_table = arm_ccn_match, .of_match_table = arm_ccn_match,
.suppress_bind_attrs = true,
}, },
.probe = arm_ccn_probe, .probe = arm_ccn_probe,
.remove = arm_ccn_remove, .remove = arm_ccn_remove,
......
...@@ -757,6 +757,7 @@ static struct platform_driver dsu_pmu_driver = { ...@@ -757,6 +757,7 @@ static struct platform_driver dsu_pmu_driver = {
.driver = { .driver = {
.name = DRVNAME, .name = DRVNAME,
.of_match_table = of_match_ptr(dsu_pmu_of_match), .of_match_table = of_match_ptr(dsu_pmu_of_match),
.suppress_bind_attrs = true,
}, },
.probe = dsu_pmu_device_probe, .probe = dsu_pmu_device_probe,
.remove = dsu_pmu_device_remove, .remove = dsu_pmu_device_remove,
......
...@@ -860,6 +860,7 @@ static void smmu_pmu_shutdown(struct platform_device *pdev) ...@@ -860,6 +860,7 @@ static void smmu_pmu_shutdown(struct platform_device *pdev)
static struct platform_driver smmu_pmu_driver = { static struct platform_driver smmu_pmu_driver = {
.driver = { .driver = {
.name = "arm-smmu-v3-pmcg", .name = "arm-smmu-v3-pmcg",
.suppress_bind_attrs = true,
}, },
.probe = smmu_pmu_probe, .probe = smmu_pmu_probe,
.remove = smmu_pmu_remove, .remove = smmu_pmu_remove,
......
...@@ -1226,6 +1226,7 @@ static struct platform_driver arm_spe_pmu_driver = { ...@@ -1226,6 +1226,7 @@ static struct platform_driver arm_spe_pmu_driver = {
.driver = { .driver = {
.name = DRVNAME, .name = DRVNAME,
.of_match_table = of_match_ptr(arm_spe_pmu_of_match), .of_match_table = of_match_ptr(arm_spe_pmu_of_match),
.suppress_bind_attrs = true,
}, },
.probe = arm_spe_pmu_device_probe, .probe = arm_spe_pmu_device_probe,
.remove = arm_spe_pmu_device_remove, .remove = arm_spe_pmu_device_remove,
......
...@@ -707,6 +707,7 @@ static struct platform_driver imx_ddr_pmu_driver = { ...@@ -707,6 +707,7 @@ static struct platform_driver imx_ddr_pmu_driver = {
.driver = { .driver = {
.name = "imx-ddr-pmu", .name = "imx-ddr-pmu",
.of_match_table = imx_ddr_pmu_dt_ids, .of_match_table = imx_ddr_pmu_dt_ids,
.suppress_bind_attrs = true,
}, },
.probe = ddr_perf_probe, .probe = ddr_perf_probe,
.remove = ddr_perf_remove, .remove = ddr_perf_remove,
......
...@@ -419,6 +419,7 @@ static struct platform_driver hisi_ddrc_pmu_driver = { ...@@ -419,6 +419,7 @@ static struct platform_driver hisi_ddrc_pmu_driver = {
.driver = { .driver = {
.name = "hisi_ddrc_pmu", .name = "hisi_ddrc_pmu",
.acpi_match_table = ACPI_PTR(hisi_ddrc_pmu_acpi_match), .acpi_match_table = ACPI_PTR(hisi_ddrc_pmu_acpi_match),
.suppress_bind_attrs = true,
}, },
.probe = hisi_ddrc_pmu_probe, .probe = hisi_ddrc_pmu_probe,
.remove = hisi_ddrc_pmu_remove, .remove = hisi_ddrc_pmu_remove,
......
...@@ -431,6 +431,7 @@ static struct platform_driver hisi_hha_pmu_driver = { ...@@ -431,6 +431,7 @@ static struct platform_driver hisi_hha_pmu_driver = {
.driver = { .driver = {
.name = "hisi_hha_pmu", .name = "hisi_hha_pmu",
.acpi_match_table = ACPI_PTR(hisi_hha_pmu_acpi_match), .acpi_match_table = ACPI_PTR(hisi_hha_pmu_acpi_match),
.suppress_bind_attrs = true,
}, },
.probe = hisi_hha_pmu_probe, .probe = hisi_hha_pmu_probe,
.remove = hisi_hha_pmu_remove, .remove = hisi_hha_pmu_remove,
......
...@@ -421,6 +421,7 @@ static struct platform_driver hisi_l3c_pmu_driver = { ...@@ -421,6 +421,7 @@ static struct platform_driver hisi_l3c_pmu_driver = {
.driver = { .driver = {
.name = "hisi_l3c_pmu", .name = "hisi_l3c_pmu",
.acpi_match_table = ACPI_PTR(hisi_l3c_pmu_acpi_match), .acpi_match_table = ACPI_PTR(hisi_l3c_pmu_acpi_match),
.suppress_bind_attrs = true,
}, },
.probe = hisi_l3c_pmu_probe, .probe = hisi_l3c_pmu_probe,
.remove = hisi_l3c_pmu_remove, .remove = hisi_l3c_pmu_remove,
......
...@@ -1028,6 +1028,7 @@ static struct platform_driver l2_cache_pmu_driver = { ...@@ -1028,6 +1028,7 @@ static struct platform_driver l2_cache_pmu_driver = {
.driver = { .driver = {
.name = "qcom-l2cache-pmu", .name = "qcom-l2cache-pmu",
.acpi_match_table = ACPI_PTR(l2_cache_pmu_acpi_match), .acpi_match_table = ACPI_PTR(l2_cache_pmu_acpi_match),
.suppress_bind_attrs = true,
}, },
.probe = l2_cache_pmu_probe, .probe = l2_cache_pmu_probe,
.remove = l2_cache_pmu_remove, .remove = l2_cache_pmu_remove,
......
...@@ -814,6 +814,7 @@ static struct platform_driver qcom_l3_cache_pmu_driver = { ...@@ -814,6 +814,7 @@ static struct platform_driver qcom_l3_cache_pmu_driver = {
.driver = { .driver = {
.name = "qcom-l3cache-pmu", .name = "qcom-l3cache-pmu",
.acpi_match_table = ACPI_PTR(qcom_l3_cache_pmu_acpi_match), .acpi_match_table = ACPI_PTR(qcom_l3_cache_pmu_acpi_match),
.suppress_bind_attrs = true,
}, },
.probe = qcom_l3_cache_pmu_probe, .probe = qcom_l3_cache_pmu_probe,
}; };
......
...@@ -1017,6 +1017,7 @@ static struct platform_driver tx2_uncore_driver = { ...@@ -1017,6 +1017,7 @@ static struct platform_driver tx2_uncore_driver = {
.driver = { .driver = {
.name = "tx2-uncore-pmu", .name = "tx2-uncore-pmu",
.acpi_match_table = ACPI_PTR(tx2_uncore_acpi_match), .acpi_match_table = ACPI_PTR(tx2_uncore_acpi_match),
.suppress_bind_attrs = true,
}, },
.probe = tx2_uncore_probe, .probe = tx2_uncore_probe,
.remove = tx2_uncore_remove, .remove = tx2_uncore_remove,
......
...@@ -1975,6 +1975,7 @@ static struct platform_driver xgene_pmu_driver = { ...@@ -1975,6 +1975,7 @@ static struct platform_driver xgene_pmu_driver = {
.name = "xgene-pmu", .name = "xgene-pmu",
.of_match_table = xgene_pmu_of_match, .of_match_table = xgene_pmu_of_match,
.acpi_match_table = ACPI_PTR(xgene_pmu_acpi_match), .acpi_match_table = ACPI_PTR(xgene_pmu_acpi_match),
.suppress_bind_attrs = true,
}, },
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment