Merge branch 'smp-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull SMP hotplug notifier removal from Thomas Gleixner: "This is the final cleanup of the hotplug notifier infrastructure. The series has been reintgrated in the last two days because there came a new driver using the old infrastructure via the SCSI tree. Summary: - convert the last leftover drivers utilizing notifiers - fixup for a completely broken hotplug user - prevent setup of already used states - removal of the notifiers - treewide cleanup of hotplug state names - consolidation of state space There is a sphinx based documentation pending, but that needs review from the documentation folks" * 'smp-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: irqchip/armada-xp: Consolidate hotplug state space irqchip/gic: Consolidate hotplug state space coresight/etm3/4x: Consolidate hotplug state space cpu/hotplug: Cleanup state names cpu/hotplug: Remove obsolete cpu hotplug register/unregister functions staging/lustre/libcfs: Convert to hotplug state machine scsi/bnx2i: Convert to hotplug state machine scsi/bnx2fc: Convert to hotplug state machine cpu/hotplug: Prevent overwriting of callbacks x86/msr: Remove bogus cleanup from the error path bus: arm-ccn: Prevent hotplug callback leak perf/x86/intel/cstate: Prevent hotplug callback leak ARM/imx/mmcd: Fix broken cpu hotplug handling scsi: qedi: Convert to hotplug state machine
This commit is contained in:
@@ -339,7 +339,7 @@ static int __init twd_local_timer_common_register(struct device_node *np)
|
||||
}
|
||||
|
||||
cpuhp_setup_state_nocalls(CPUHP_AP_ARM_TWD_STARTING,
|
||||
"AP_ARM_TWD_STARTING",
|
||||
"arm/timer/twd:starting",
|
||||
twd_timer_starting_cpu, twd_timer_dying_cpu);
|
||||
|
||||
twd_get_clock(np);
|
||||
|
@@ -60,6 +60,7 @@
|
||||
|
||||
#define to_mmdc_pmu(p) container_of(p, struct mmdc_pmu, pmu)
|
||||
|
||||
static enum cpuhp_state cpuhp_mmdc_state;
|
||||
static int ddr_type;
|
||||
|
||||
struct fsl_mmdc_devtype_data {
|
||||
@@ -451,8 +452,8 @@ static int imx_mmdc_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct mmdc_pmu *pmu_mmdc = platform_get_drvdata(pdev);
|
||||
|
||||
cpuhp_state_remove_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node);
|
||||
perf_pmu_unregister(&pmu_mmdc->pmu);
|
||||
cpuhp_remove_state_nocalls(CPUHP_ONLINE);
|
||||
kfree(pmu_mmdc);
|
||||
return 0;
|
||||
}
|
||||
@@ -472,6 +473,18 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* The first instance registers the hotplug state */
|
||||
if (!cpuhp_mmdc_state) {
|
||||
ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
|
||||
"perf/arm/mmdc:online", NULL,
|
||||
mmdc_pmu_offline_cpu);
|
||||
if (ret < 0) {
|
||||
pr_err("cpuhp_setup_state_multi failed\n");
|
||||
goto pmu_free;
|
||||
}
|
||||
cpuhp_mmdc_state = ret;
|
||||
}
|
||||
|
||||
mmdc_num = mmdc_pmu_init(pmu_mmdc, mmdc_base, &pdev->dev);
|
||||
if (mmdc_num == 0)
|
||||
name = "mmdc";
|
||||
@@ -485,26 +498,23 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b
|
||||
HRTIMER_MODE_REL);
|
||||
pmu_mmdc->hrtimer.function = mmdc_pmu_timer_handler;
|
||||
|
||||
cpuhp_state_add_instance_nocalls(CPUHP_ONLINE,
|
||||
&pmu_mmdc->node);
|
||||
cpumask_set_cpu(smp_processor_id(), &pmu_mmdc->cpu);
|
||||
ret = cpuhp_setup_state_multi(CPUHP_AP_NOTIFY_ONLINE,
|
||||
"MMDC_ONLINE", NULL,
|
||||
mmdc_pmu_offline_cpu);
|
||||
if (ret) {
|
||||
pr_err("cpuhp_setup_state_multi failure\n");
|
||||
goto pmu_register_err;
|
||||
}
|
||||
cpumask_set_cpu(raw_smp_processor_id(), &pmu_mmdc->cpu);
|
||||
|
||||
/* Register the pmu instance for cpu hotplug */
|
||||
cpuhp_state_add_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node);
|
||||
|
||||
ret = perf_pmu_register(&(pmu_mmdc->pmu), name, -1);
|
||||
platform_set_drvdata(pdev, pmu_mmdc);
|
||||
if (ret)
|
||||
goto pmu_register_err;
|
||||
|
||||
platform_set_drvdata(pdev, pmu_mmdc);
|
||||
return 0;
|
||||
|
||||
pmu_register_err:
|
||||
pr_warn("MMDC Perf PMU failed (%d), disabled\n", ret);
|
||||
cpuhp_state_remove_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node);
|
||||
hrtimer_cancel(&pmu_mmdc->hrtimer);
|
||||
pmu_free:
|
||||
kfree(pmu_mmdc);
|
||||
return ret;
|
||||
}
|
||||
|
@@ -148,7 +148,7 @@ static void __init armada_370_coherency_init(struct device_node *np)
|
||||
of_node_put(cpu_config_np);
|
||||
|
||||
cpuhp_setup_state_nocalls(CPUHP_AP_ARM_MVEBU_COHERENCY,
|
||||
"AP_ARM_MVEBU_COHERENCY",
|
||||
"arm/mvebu/coherency:starting",
|
||||
armada_xp_clear_l2_starting, NULL);
|
||||
exit:
|
||||
set_cpu_coherent();
|
||||
|
@@ -563,7 +563,7 @@ static __init int l2x0_pmu_init(void)
|
||||
|
||||
cpumask_set_cpu(0, &pmu_cpu);
|
||||
ret = cpuhp_setup_state_nocalls(CPUHP_AP_PERF_ARM_L2X0_ONLINE,
|
||||
"AP_PERF_ARM_L2X0_ONLINE", NULL,
|
||||
"perf/arm/l2x0:online", NULL,
|
||||
l2x0_pmu_offline_cpu);
|
||||
if (ret)
|
||||
goto out_pmu;
|
||||
|
@@ -683,7 +683,7 @@ static void __init l2c310_enable(void __iomem *base, unsigned num_lock)
|
||||
|
||||
if (aux & L310_AUX_CTRL_FULL_LINE_ZERO)
|
||||
cpuhp_setup_state(CPUHP_AP_ARM_L2X0_STARTING,
|
||||
"AP_ARM_L2X0_STARTING", l2c310_starting_cpu,
|
||||
"arm/l2x0:starting", l2c310_starting_cpu,
|
||||
l2c310_dying_cpu);
|
||||
}
|
||||
|
||||
|
@@ -799,7 +799,7 @@ static int __init vfp_init(void)
|
||||
}
|
||||
|
||||
cpuhp_setup_state_nocalls(CPUHP_AP_ARM_VFP_STARTING,
|
||||
"AP_ARM_VFP_STARTING", vfp_starting_cpu,
|
||||
"arm/vfp:starting", vfp_starting_cpu,
|
||||
vfp_dying_cpu);
|
||||
|
||||
vfp_vector = vfp_support_entry;
|
||||
|
@@ -412,7 +412,7 @@ static int __init xen_guest_init(void)
|
||||
pvclock_gtod_register_notifier(&xen_pvclock_gtod_notifier);
|
||||
|
||||
return cpuhp_setup_state(CPUHP_AP_ARM_XEN_STARTING,
|
||||
"AP_ARM_XEN_STARTING", xen_starting_cpu,
|
||||
"arm/xen:starting", xen_starting_cpu,
|
||||
xen_dying_cpu);
|
||||
}
|
||||
early_initcall(xen_guest_init);
|
||||
|
Reference in New Issue
Block a user