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()
86 return -ENOMEM; in acpi_mp_setup_reset()
93 return -ENOMEM; in acpi_mp_setup_reset()
101 return -ENOMEM; in acpi_mp_setup_reset()
111 info.offset = __START_KERNEL_map - phys_base; in acpi_mp_setup_reset()
116 return -ENOMEM; in acpi_mp_setup_reset()
133 return -EOPNOTSUPP; in acpi_wakeup_cpu()
157 acpi_mp_wake_mailbox->apic_id = apicid; in acpi_wakeup_cpu()
158 acpi_mp_wake_mailbox->wakeup_vector = start_ip; in acpi_wakeup_cpu()
159 smp_store_release(&acpi_mp_wake_mailbox->command, in acpi_wakeup_cpu()
163 * Wait for the CPU to wake up. in acpi_wakeup_cpu()
165 * The CPU being woken up is essentially in a spin loop waiting to be in acpi_wakeup_cpu()
166 * woken up. It should not take long for it wake up and acknowledge by in acpi_wakeup_cpu()
167 * zeroing out ->command. in acpi_wakeup_cpu()
170 * has to wait for a wake up acknowledgment. It also doesn't provide in acpi_wakeup_cpu()
171 * a way to cancel a wake up request if it takes too long. in acpi_wakeup_cpu()
174 * wake up secondary. It can postpone scheduling secondary vCPU in acpi_wakeup_cpu()
175 * indefinitely. Giving up on wake up request and reporting error opens in acpi_wakeup_cpu()
176 * possible attack vector for VMM: it can wake up a secondary CPU when in acpi_wakeup_cpu()
177 * kernel doesn't expect it. Wait until positive result of the wake up in acpi_wakeup_cpu()
180 while (READ_ONCE(acpi_mp_wake_mailbox->command)) in acpi_wakeup_cpu()
199 * already and acpi_wakeup_cpu() uses the cached value to bring up the in acpi_mp_disable_offlining()
205 mp_wake->mailbox_address = 0; in acpi_mp_disable_offlining()
222 return -EINVAL; in acpi_parse_mp_wake()
223 if (end - (unsigned long)mp_wake < ACPI_MADT_MP_WAKEUP_SIZE_V0) in acpi_parse_mp_wake()
224 return -EINVAL; in acpi_parse_mp_wake()
225 if (mp_wake->header.length < ACPI_MADT_MP_WAKEUP_SIZE_V0) in acpi_parse_mp_wake()
226 return -EINVAL; in acpi_parse_mp_wake()
228 acpi_table_print_madt_entry(&header->common); in acpi_parse_mp_wake()
230 acpi_mp_wake_mailbox_paddr = mp_wake->mailbox_address; in acpi_parse_mp_wake()
232 if (mp_wake->version >= ACPI_MADT_MP_WAKEUP_VERSION_V1 && in acpi_parse_mp_wake()
233 mp_wake->header.length >= ACPI_MADT_MP_WAKEUP_SIZE_V1) { in acpi_parse_mp_wake()
234 if (acpi_mp_setup_reset(mp_wake->reset_vector)) { in acpi_parse_mp_wake()