mirror of
https://github.com/torvalds/linux
synced 2024-10-08 04:12:40 +00:00
arm64: setup: Switch over to GENERIC_CPU_DEVICES using arch_register_cpu()
To allow ACPI's _STA value to hide CPUs that are present, but not available to online right now due to VMM or firmware policy, the register_cpu() call needs to be made by the ACPI machinery when ACPI is in use. This allows it to hide CPUs that are unavailable from sysfs. Switching to GENERIC_CPU_DEVICES is an intermediate step to allow all five ACPI architectures to be modified at once. Switch over to GENERIC_CPU_DEVICES, and provide an arch_register_cpu() that populates the hotpluggable flag. arch_register_cpu() is also the interface the ACPI machinery expects. The struct cpu in struct cpuinfo_arm64 is never used directly, remove it to use the one GENERIC_CPU_DEVICES provides. This changes the CPUs visible in sysfs from possible to present, but on arm64 smp_prepare_cpus() ensures these are the same. This patch also has the effect of moving the registration of CPUs from subsys to driver core initialisation, prior to any initcalls running. Signed-off-by: James Morse <james.morse@arm.com> Reviewed-by: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk> Reviewed-by: Shaoqin Huang <shahuang@redhat.com> Reviewed-by: Gavin Shan <gshan@redhat.com> Signed-off-by: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/E1r5R3b-00Csza-Ku@rmk-PC.armlinux.org.uk Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ca00f7d999
commit
d127db1a23
|
@ -132,6 +132,7 @@ config ARM64
|
|||
select GENERIC_ARCH_TOPOLOGY
|
||||
select GENERIC_CLOCKEVENTS_BROADCAST
|
||||
select GENERIC_CPU_AUTOPROBE
|
||||
select GENERIC_CPU_DEVICES
|
||||
select GENERIC_CPU_VULNERABILITIES
|
||||
select GENERIC_EARLY_IOREMAP
|
||||
select GENERIC_IDLE_POLL_SETUP
|
||||
|
|
|
@ -38,7 +38,6 @@ struct cpuinfo_32bit {
|
|||
};
|
||||
|
||||
struct cpuinfo_arm64 {
|
||||
struct cpu cpu;
|
||||
struct kobject kobj;
|
||||
u64 reg_ctr;
|
||||
u64 reg_cntfrq;
|
||||
|
|
|
@ -402,19 +402,14 @@ static inline bool cpu_can_disable(unsigned int cpu)
|
|||
return false;
|
||||
}
|
||||
|
||||
static int __init topology_init(void)
|
||||
int arch_register_cpu(int num)
|
||||
{
|
||||
int i;
|
||||
struct cpu *cpu = &per_cpu(cpu_devices, num);
|
||||
|
||||
for_each_possible_cpu(i) {
|
||||
struct cpu *cpu = &per_cpu(cpu_data.cpu, i);
|
||||
cpu->hotpluggable = cpu_can_disable(i);
|
||||
register_cpu(cpu, i);
|
||||
}
|
||||
cpu->hotpluggable = cpu_can_disable(num);
|
||||
|
||||
return 0;
|
||||
return register_cpu(cpu, num);
|
||||
}
|
||||
subsys_initcall(topology_init);
|
||||
|
||||
static void dump_kernel_offset(void)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue