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

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