.. | .. |
---|
58 | 58 | struct list_head list; |
---|
59 | 59 | struct device dev; |
---|
60 | 60 | uint32_t cpu_id; |
---|
| 61 | + uint32_t acpi_id; |
---|
61 | 62 | uint32_t flags; |
---|
62 | 63 | }; |
---|
63 | 64 | |
---|
.. | .. |
---|
249 | 250 | |
---|
250 | 251 | INIT_LIST_HEAD(&pcpu->list); |
---|
251 | 252 | pcpu->cpu_id = info->xen_cpuid; |
---|
| 253 | + pcpu->acpi_id = info->acpi_id; |
---|
252 | 254 | pcpu->flags = info->flags; |
---|
253 | 255 | |
---|
254 | 256 | /* Need hold on xen_pcpu_lock before pcpu list manipulations */ |
---|
.. | .. |
---|
416 | 418 | return ret; |
---|
417 | 419 | } |
---|
418 | 420 | arch_initcall(xen_pcpu_init); |
---|
| 421 | + |
---|
| 422 | +#ifdef CONFIG_ACPI |
---|
| 423 | +bool __init xen_processor_present(uint32_t acpi_id) |
---|
| 424 | +{ |
---|
| 425 | + const struct pcpu *pcpu; |
---|
| 426 | + bool online = false; |
---|
| 427 | + |
---|
| 428 | + mutex_lock(&xen_pcpu_lock); |
---|
| 429 | + list_for_each_entry(pcpu, &xen_pcpus, list) |
---|
| 430 | + if (pcpu->acpi_id == acpi_id) { |
---|
| 431 | + online = pcpu->flags & XEN_PCPU_FLAGS_ONLINE; |
---|
| 432 | + break; |
---|
| 433 | + } |
---|
| 434 | + mutex_unlock(&xen_pcpu_lock); |
---|
| 435 | + |
---|
| 436 | + return online; |
---|
| 437 | +} |
---|
| 438 | +#endif |
---|