Lines Matching +full:wake +full:- +full:up

1 // SPDX-License-Identifier: GPL-2.0-or-later
49 acpi_mp_wake_mailbox->apic_id = apicid; in acpi_mp_cpu_die()
50 smp_store_release(&acpi_mp_wake_mailbox->command, in acpi_mp_cpu_die()
55 while (READ_ONCE(acpi_mp_wake_mailbox->command) && --timeout) in acpi_mp_cpu_die()
93 return -ENOMEM; in init_transition_pgtable()
100 return -ENOMEM; in init_transition_pgtable()
107 return -ENOMEM; in init_transition_pgtable()
114 return -ENOMEM; in init_transition_pgtable()
137 return -ENOMEM; in acpi_mp_setup_reset()
146 return -ENOMEM; in acpi_mp_setup_reset()
154 return -ENOMEM; in acpi_mp_setup_reset()
159 return -ENOMEM; in acpi_mp_setup_reset()
176 return -EOPNOTSUPP; in acpi_wakeup_cpu()
200 acpi_mp_wake_mailbox->apic_id = apicid; in acpi_wakeup_cpu()
201 acpi_mp_wake_mailbox->wakeup_vector = start_ip; in acpi_wakeup_cpu()
202 smp_store_release(&acpi_mp_wake_mailbox->command, in acpi_wakeup_cpu()
206 * Wait for the CPU to wake up. in acpi_wakeup_cpu()
208 * The CPU being woken up is essentially in a spin loop waiting to be in acpi_wakeup_cpu()
209 * woken up. It should not take long for it wake up and acknowledge by in acpi_wakeup_cpu()
210 * zeroing out ->command. in acpi_wakeup_cpu()
213 * has to wait for a wake up acknowledgment. It also doesn't provide in acpi_wakeup_cpu()
214 * a way to cancel a wake up request if it takes too long. in acpi_wakeup_cpu()
217 * wake up secondary. It can postpone scheduling secondary vCPU in acpi_wakeup_cpu()
218 * indefinitely. Giving up on wake up request and reporting error opens in acpi_wakeup_cpu()
219 * possible attack vector for VMM: it can wake up a secondary CPU when in acpi_wakeup_cpu()
220 * kernel doesn't expect it. Wait until positive result of the wake up in acpi_wakeup_cpu()
223 while (READ_ONCE(acpi_mp_wake_mailbox->command)) in acpi_wakeup_cpu()
242 * already and acpi_wakeup_cpu() uses the cached value to bring up the in acpi_mp_disable_offlining()
248 mp_wake->mailbox_address = 0; in acpi_mp_disable_offlining()
265 return -EINVAL; in acpi_parse_mp_wake()
266 if (end - (unsigned long)mp_wake < ACPI_MADT_MP_WAKEUP_SIZE_V0) in acpi_parse_mp_wake()
267 return -EINVAL; in acpi_parse_mp_wake()
268 if (mp_wake->header.length < ACPI_MADT_MP_WAKEUP_SIZE_V0) in acpi_parse_mp_wake()
269 return -EINVAL; in acpi_parse_mp_wake()
271 acpi_table_print_madt_entry(&header->common); in acpi_parse_mp_wake()
273 acpi_mp_wake_mailbox_paddr = mp_wake->mailbox_address; in acpi_parse_mp_wake()
275 if (mp_wake->version >= ACPI_MADT_MP_WAKEUP_VERSION_V1 && in acpi_parse_mp_wake()
276 mp_wake->header.length >= ACPI_MADT_MP_WAKEUP_SIZE_V1) { in acpi_parse_mp_wake()
277 if (acpi_mp_setup_reset(mp_wake->reset_vector)) { in acpi_parse_mp_wake()