| .. | .. |
|---|
| 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 |
|---|