diff options
Diffstat (limited to 'drivers/xen/pcpu.c')
| -rw-r--r-- | drivers/xen/pcpu.c | 20 | 
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/xen/pcpu.c b/drivers/xen/pcpu.c index fd3a644b0855..b3e3d1bb37f3 100644 --- a/drivers/xen/pcpu.c +++ b/drivers/xen/pcpu.c @@ -58,6 +58,7 @@ struct pcpu {  	struct list_head list;  	struct device dev;  	uint32_t cpu_id; +	uint32_t acpi_id;  	uint32_t flags;  }; @@ -249,6 +250,7 @@ static struct pcpu *create_and_register_pcpu(struct xenpf_pcpuinfo *info)  	INIT_LIST_HEAD(&pcpu->list);  	pcpu->cpu_id = info->xen_cpuid; +	pcpu->acpi_id = info->acpi_id;  	pcpu->flags = info->flags;  	/* Need hold on xen_pcpu_lock before pcpu list manipulations */ @@ -381,3 +383,21 @@ err1:  	return ret;  }  arch_initcall(xen_pcpu_init); + +#ifdef CONFIG_ACPI +bool __init xen_processor_present(uint32_t acpi_id) +{ +	const struct pcpu *pcpu; +	bool online = false; + +	mutex_lock(&xen_pcpu_lock); +	list_for_each_entry(pcpu, &xen_pcpus, list) +		if (pcpu->acpi_id == acpi_id) { +			online = pcpu->flags & XEN_PCPU_FLAGS_ONLINE; +			break; +		} +	mutex_unlock(&xen_pcpu_lock); + +	return online; +} +#endif  |