提交 d10d0c69 编写于 作者: J Junhao He 提交者: Zheng Zengkai

drivers/perf: fixed the issue that the kabi value changed

driver inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I5KAX7

--------------------------------------------------------------------------

Fixed the issue that the kabi value changed when the HiSilicon PMU driver
added the enum variable in "enum cpuhp_state{}".

The hisi_pcie_pmu and hisi_cpa_pmu drivers to replace the explicit specify
hotplug events with dynamic allocation hotplug events(CPUHP_AP_ONLINE_DYN).
The states between *CPUHP_AP_ONLINE_DYN* and *CPUHP_AP_ONLINE_DYN_END* are
reserved for the dynamic allocation.
Signed-off-by: NJunhao He <hejunhao3@huawei.com>
Reviewed-by: NYicong Yang <yangyicong@huawei.com>
Reviewed-by: NYang Jihong <yangjihong1@huawei.com>
Reviewed-by: NXiongfeng Wang <wangxiongfeng2@huawei.com>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
上级 0782dd81
...@@ -19,6 +19,9 @@ ...@@ -19,6 +19,9 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/perf_event.h> #include <linux/perf_event.h>
/* Dynamic CPU hotplug state used by PCIe PMU */
static enum cpuhp_state hisi_pcie_pmu_online;
#define DRV_NAME "hisi_pcie_pmu" #define DRV_NAME "hisi_pcie_pmu"
/* Define registers */ /* Define registers */
#define HISI_PCIE_GLOBAL_CTRL 0x00 #define HISI_PCIE_GLOBAL_CTRL 0x00
...@@ -830,7 +833,7 @@ static int hisi_pcie_init_pmu(struct pci_dev *pdev, struct hisi_pcie_pmu *pcie_p ...@@ -830,7 +833,7 @@ static int hisi_pcie_init_pmu(struct pci_dev *pdev, struct hisi_pcie_pmu *pcie_p
if (ret) if (ret)
goto err_iounmap; goto err_iounmap;
ret = cpuhp_state_add_instance(CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE, &pcie_pmu->node); ret = cpuhp_state_add_instance(hisi_pcie_pmu_online, &pcie_pmu->node);
if (ret) { if (ret) {
pci_err(pdev, "Failed to register hotplug: %d\n", ret); pci_err(pdev, "Failed to register hotplug: %d\n", ret);
goto err_irq_unregister; goto err_irq_unregister;
...@@ -845,8 +848,7 @@ static int hisi_pcie_init_pmu(struct pci_dev *pdev, struct hisi_pcie_pmu *pcie_p ...@@ -845,8 +848,7 @@ static int hisi_pcie_init_pmu(struct pci_dev *pdev, struct hisi_pcie_pmu *pcie_p
return ret; return ret;
err_hotplug_unregister: err_hotplug_unregister:
cpuhp_state_remove_instance_nocalls( cpuhp_state_remove_instance_nocalls(hisi_pcie_pmu_online, &pcie_pmu->node);
CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE, &pcie_pmu->node);
err_irq_unregister: err_irq_unregister:
hisi_pcie_pmu_irq_unregister(pdev, pcie_pmu); hisi_pcie_pmu_irq_unregister(pdev, pcie_pmu);
...@@ -862,8 +864,7 @@ static void hisi_pcie_uninit_pmu(struct pci_dev *pdev) ...@@ -862,8 +864,7 @@ static void hisi_pcie_uninit_pmu(struct pci_dev *pdev)
struct hisi_pcie_pmu *pcie_pmu = pci_get_drvdata(pdev); struct hisi_pcie_pmu *pcie_pmu = pci_get_drvdata(pdev);
perf_pmu_unregister(&pcie_pmu->pmu); perf_pmu_unregister(&pcie_pmu->pmu);
cpuhp_state_remove_instance_nocalls( cpuhp_state_remove_instance_nocalls(hisi_pcie_pmu_online, &pcie_pmu->node);
CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE, &pcie_pmu->node);
hisi_pcie_pmu_irq_unregister(pdev, pcie_pmu); hisi_pcie_pmu_irq_unregister(pdev, pcie_pmu);
iounmap(pcie_pmu->base); iounmap(pcie_pmu->base);
} }
...@@ -934,18 +935,19 @@ static int __init hisi_pcie_module_init(void) ...@@ -934,18 +935,19 @@ static int __init hisi_pcie_module_init(void)
{ {
int ret; int ret;
ret = cpuhp_setup_state_multi(CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE, ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
"AP_PERF_ARM_HISI_PCIE_PMU_ONLINE", "perf/hisi/pcie:online",
hisi_pcie_pmu_online_cpu, hisi_pcie_pmu_online_cpu,
hisi_pcie_pmu_offline_cpu); hisi_pcie_pmu_offline_cpu);
if (ret) { if (ret < 0) {
pr_err("Failed to setup PCIe PMU hotplug: %d\n", ret); pr_err("Failed to setup PCIe PMU hotplug: %d\n", ret);
return ret; return ret;
} }
hisi_pcie_pmu_online = ret;
ret = pci_register_driver(&hisi_pcie_pmu_driver); ret = pci_register_driver(&hisi_pcie_pmu_driver);
if (ret) if (ret)
cpuhp_remove_multi_state(CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE); cpuhp_remove_multi_state(hisi_pcie_pmu_online);
return ret; return ret;
} }
...@@ -954,7 +956,7 @@ module_init(hisi_pcie_module_init); ...@@ -954,7 +956,7 @@ module_init(hisi_pcie_module_init);
static void __exit hisi_pcie_module_exit(void) static void __exit hisi_pcie_module_exit(void)
{ {
pci_unregister_driver(&hisi_pcie_pmu_driver); pci_unregister_driver(&hisi_pcie_pmu_driver);
cpuhp_remove_multi_state(CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE); cpuhp_remove_multi_state(hisi_pcie_pmu_online);
} }
module_exit(hisi_pcie_module_exit); module_exit(hisi_pcie_module_exit);
......
...@@ -19,6 +19,9 @@ ...@@ -19,6 +19,9 @@
#include "hisi_uncore_pmu.h" #include "hisi_uncore_pmu.h"
/* Dynamic CPU hotplug state used by CPA PMU */
static enum cpuhp_state hisi_cpa_pmu_online;
/* CPA register definition */ /* CPA register definition */
#define CPA_PERF_CTRL 0x1c00 #define CPA_PERF_CTRL 0x1c00
#define CPA_EVENT_CTRL 0x1c04 #define CPA_EVENT_CTRL 0x1c04
...@@ -334,8 +337,7 @@ static int hisi_cpa_pmu_probe(struct platform_device *pdev) ...@@ -334,8 +337,7 @@ static int hisi_cpa_pmu_probe(struct platform_device *pdev)
/* Power Management should be disabled before using CPA PMU. */ /* Power Management should be disabled before using CPA PMU. */
hisi_cpa_pmu_disable_pm(cpa_pmu); hisi_cpa_pmu_disable_pm(cpa_pmu);
ret = cpuhp_state_add_instance(CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE, ret = cpuhp_state_add_instance(hisi_cpa_pmu_online, &cpa_pmu->node);
&cpa_pmu->node);
if (ret) { if (ret) {
dev_err(&pdev->dev, "Error %d registering hotplug\n", ret); dev_err(&pdev->dev, "Error %d registering hotplug\n", ret);
hisi_cpa_pmu_enable_pm(cpa_pmu); hisi_cpa_pmu_enable_pm(cpa_pmu);
...@@ -345,8 +347,7 @@ static int hisi_cpa_pmu_probe(struct platform_device *pdev) ...@@ -345,8 +347,7 @@ static int hisi_cpa_pmu_probe(struct platform_device *pdev)
ret = perf_pmu_register(&cpa_pmu->pmu, name, -1); ret = perf_pmu_register(&cpa_pmu->pmu, name, -1);
if (ret) { if (ret) {
dev_err(cpa_pmu->dev, "PMU register failed\n"); dev_err(cpa_pmu->dev, "PMU register failed\n");
cpuhp_state_remove_instance_nocalls( cpuhp_state_remove_instance_nocalls(hisi_cpa_pmu_online, &cpa_pmu->node);
CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE, &cpa_pmu->node);
hisi_cpa_pmu_enable_pm(cpa_pmu); hisi_cpa_pmu_enable_pm(cpa_pmu);
return ret; return ret;
} }
...@@ -360,8 +361,7 @@ static int hisi_cpa_pmu_remove(struct platform_device *pdev) ...@@ -360,8 +361,7 @@ static int hisi_cpa_pmu_remove(struct platform_device *pdev)
struct hisi_pmu *cpa_pmu = platform_get_drvdata(pdev); struct hisi_pmu *cpa_pmu = platform_get_drvdata(pdev);
perf_pmu_unregister(&cpa_pmu->pmu); perf_pmu_unregister(&cpa_pmu->pmu);
cpuhp_state_remove_instance_nocalls(CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE, cpuhp_state_remove_instance_nocalls(hisi_cpa_pmu_online, &cpa_pmu->node);
&cpa_pmu->node);
hisi_cpa_pmu_enable_pm(cpa_pmu); hisi_cpa_pmu_enable_pm(cpa_pmu);
return 0; return 0;
} }
...@@ -380,18 +380,19 @@ static int __init hisi_cpa_pmu_module_init(void) ...@@ -380,18 +380,19 @@ static int __init hisi_cpa_pmu_module_init(void)
{ {
int ret; int ret;
ret = cpuhp_setup_state_multi(CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE, ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
"AP_PERF_ARM_HISI_CPA_ONLINE", "pmu/hisi/cpa:online",
hisi_uncore_pmu_online_cpu, hisi_uncore_pmu_online_cpu,
hisi_uncore_pmu_offline_cpu); hisi_uncore_pmu_offline_cpu);
if (ret) { if (ret < 0) {
pr_err("setup hotplug failed: %d\n", ret); pr_err("setup hotplug failed: %d\n", ret);
return ret; return ret;
} }
hisi_cpa_pmu_online = ret;
ret = platform_driver_register(&hisi_cpa_pmu_driver); ret = platform_driver_register(&hisi_cpa_pmu_driver);
if (ret) if (ret)
cpuhp_remove_multi_state(CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE); cpuhp_remove_multi_state(hisi_cpa_pmu_online);
return ret; return ret;
} }
...@@ -400,7 +401,7 @@ module_init(hisi_cpa_pmu_module_init); ...@@ -400,7 +401,7 @@ module_init(hisi_cpa_pmu_module_init);
static void __exit hisi_cpa_pmu_module_exit(void) static void __exit hisi_cpa_pmu_module_exit(void)
{ {
platform_driver_unregister(&hisi_cpa_pmu_driver); platform_driver_unregister(&hisi_cpa_pmu_driver);
cpuhp_remove_multi_state(CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE); cpuhp_remove_multi_state(hisi_cpa_pmu_online);
} }
module_exit(hisi_cpa_pmu_module_exit); module_exit(hisi_cpa_pmu_module_exit);
......
...@@ -173,17 +173,11 @@ enum cpuhp_state { ...@@ -173,17 +173,11 @@ enum cpuhp_state {
CPUHP_AP_PERF_S390_SF_ONLINE, CPUHP_AP_PERF_S390_SF_ONLINE,
CPUHP_AP_PERF_ARM_CCI_ONLINE, CPUHP_AP_PERF_ARM_CCI_ONLINE,
CPUHP_AP_PERF_ARM_CCN_ONLINE, CPUHP_AP_PERF_ARM_CCN_ONLINE,
#ifndef __GENKSYMS__
CPUHP_AP_PERF_ARM_HISI_CPA_ONLINE,
#endif
CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE, CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE,
CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE, CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE,
CPUHP_AP_PERF_ARM_HISI_L3_ONLINE, CPUHP_AP_PERF_ARM_HISI_L3_ONLINE,
CPUHP_AP_PERF_ARM_HISI_PA_ONLINE, CPUHP_AP_PERF_ARM_HISI_PA_ONLINE,
CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE, CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE,
#ifndef __GENKSYMS__
CPUHP_AP_PERF_ARM_HISI_PCIE_PMU_ONLINE,
#endif
CPUHP_AP_PERF_ARM_L2X0_ONLINE, CPUHP_AP_PERF_ARM_L2X0_ONLINE,
CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE, CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE,
CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE, CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册