1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Kernel-based Virtual Machine driver for Linux
4 *
5 * AMD SVM support
6 *
7 * Copyright (C) 2006 Qumranet, Inc.
8 * Copyright 2010 Red Hat, Inc. and/or its affiliates.
9 *
10 * Authors:
11 * Yaniv Kamay <yaniv@qumranet.com>
12 * Avi Kivity <avi@qumranet.com>
13 */
14
15 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
16
17 #include <linux/kvm_types.h>
18 #include <linux/hashtable.h>
19 #include <linux/amd-iommu.h>
20 #include <linux/kvm_host.h>
21 #include <linux/kvm_irqfd.h>
22
23 #include <asm/irq_remapping.h>
24 #include <asm/msr.h>
25
26 #include "trace.h"
27 #include "lapic.h"
28 #include "x86.h"
29 #include "irq.h"
30 #include "svm.h"
31
32 /*
33 * Encode the arbitrary VM ID and the vCPU's _index_ into the GATag so that
34 * KVM can retrieve the correct vCPU from a GALog entry if an interrupt can't
35 * be delivered, e.g. because the vCPU isn't running. Use the vCPU's index
36 * instead of its ID (a.k.a. its default APIC ID), as KVM is guaranteed a fast
37 * lookup on the index, where as vCPUs whose index doesn't match their ID need
38 * to walk the entire xarray of vCPUs in the worst case scenario.
39 *
40 * For the vCPU index, use however many bits are currently allowed for the max
41 * guest physical APIC ID (limited by the size of the physical ID table), and
42 * use whatever bits remain to assign arbitrary AVIC IDs to VMs. Note, the
43 * size of the GATag is defined by hardware (32 bits), but is an opaque value
44 * as far as hardware is concerned.
45 */
46 #define AVIC_VCPU_IDX_MASK AVIC_PHYSICAL_MAX_INDEX_MASK
47
48 #define AVIC_VM_ID_SHIFT HWEIGHT32(AVIC_PHYSICAL_MAX_INDEX_MASK)
49 #define AVIC_VM_ID_MASK (GENMASK(31, AVIC_VM_ID_SHIFT) >> AVIC_VM_ID_SHIFT)
50
51 #define AVIC_GATAG_TO_VMID(x) ((x >> AVIC_VM_ID_SHIFT) & AVIC_VM_ID_MASK)
52 #define AVIC_GATAG_TO_VCPUIDX(x) (x & AVIC_VCPU_IDX_MASK)
53
54 #define __AVIC_GATAG(vm_id, vcpu_idx) ((((vm_id) & AVIC_VM_ID_MASK) << AVIC_VM_ID_SHIFT) | \
55 ((vcpu_idx) & AVIC_VCPU_IDX_MASK))
56 #define AVIC_GATAG(vm_id, vcpu_idx) \
57 ({ \
58 u32 ga_tag = __AVIC_GATAG(vm_id, vcpu_idx); \
59 \
60 WARN_ON_ONCE(AVIC_GATAG_TO_VCPUIDX(ga_tag) != (vcpu_idx)); \
61 WARN_ON_ONCE(AVIC_GATAG_TO_VMID(ga_tag) != (vm_id)); \
62 ga_tag; \
63 })
64
65 static_assert(__AVIC_GATAG(AVIC_VM_ID_MASK, AVIC_VCPU_IDX_MASK) == -1u);
66
67 static bool force_avic;
68 module_param_unsafe(force_avic, bool, 0444);
69
70 /* Note:
71 * This hash table is used to map VM_ID to a struct kvm_svm,
72 * when handling AMD IOMMU GALOG notification to schedule in
73 * a particular vCPU.
74 */
75 #define SVM_VM_DATA_HASH_BITS 8
76 static DEFINE_HASHTABLE(svm_vm_data_hash, SVM_VM_DATA_HASH_BITS);
77 static u32 next_vm_id = 0;
78 static bool next_vm_id_wrapped = 0;
79 static DEFINE_SPINLOCK(svm_vm_data_hash_lock);
80 bool x2avic_enabled;
81
avic_activate_vmcb(struct vcpu_svm * svm)82 static void avic_activate_vmcb(struct vcpu_svm *svm)
83 {
84 struct vmcb *vmcb = svm->vmcb01.ptr;
85
86 vmcb->control.int_ctl &= ~(AVIC_ENABLE_MASK | X2APIC_MODE_MASK);
87 vmcb->control.avic_physical_id &= ~AVIC_PHYSICAL_MAX_INDEX_MASK;
88
89 vmcb->control.int_ctl |= AVIC_ENABLE_MASK;
90
91 /*
92 * Note: KVM supports hybrid-AVIC mode, where KVM emulates x2APIC MSR
93 * accesses, while interrupt injection to a running vCPU can be
94 * achieved using AVIC doorbell. KVM disables the APIC access page
95 * (deletes the memslot) if any vCPU has x2APIC enabled, thus enabling
96 * AVIC in hybrid mode activates only the doorbell mechanism.
97 */
98 if (x2avic_enabled && apic_x2apic_mode(svm->vcpu.arch.apic)) {
99 vmcb->control.int_ctl |= X2APIC_MODE_MASK;
100 vmcb->control.avic_physical_id |= X2AVIC_MAX_PHYSICAL_ID;
101 /* Disabling MSR intercept for x2APIC registers */
102 svm_set_x2apic_msr_interception(svm, false);
103 } else {
104 /*
105 * Flush the TLB, the guest may have inserted a non-APIC
106 * mapping into the TLB while AVIC was disabled.
107 */
108 kvm_make_request(KVM_REQ_TLB_FLUSH_CURRENT, &svm->vcpu);
109
110 /* For xAVIC and hybrid-xAVIC modes */
111 vmcb->control.avic_physical_id |= AVIC_MAX_PHYSICAL_ID;
112 /* Enabling MSR intercept for x2APIC registers */
113 svm_set_x2apic_msr_interception(svm, true);
114 }
115 }
116
avic_deactivate_vmcb(struct vcpu_svm * svm)117 static void avic_deactivate_vmcb(struct vcpu_svm *svm)
118 {
119 struct vmcb *vmcb = svm->vmcb01.ptr;
120
121 vmcb->control.int_ctl &= ~(AVIC_ENABLE_MASK | X2APIC_MODE_MASK);
122 vmcb->control.avic_physical_id &= ~AVIC_PHYSICAL_MAX_INDEX_MASK;
123
124 /*
125 * If running nested and the guest uses its own MSR bitmap, there
126 * is no need to update L0's msr bitmap
127 */
128 if (is_guest_mode(&svm->vcpu) &&
129 vmcb12_is_intercept(&svm->nested.ctl, INTERCEPT_MSR_PROT))
130 return;
131
132 /* Enabling MSR intercept for x2APIC registers */
133 svm_set_x2apic_msr_interception(svm, true);
134 }
135
136 /* Note:
137 * This function is called from IOMMU driver to notify
138 * SVM to schedule in a particular vCPU of a particular VM.
139 */
avic_ga_log_notifier(u32 ga_tag)140 int avic_ga_log_notifier(u32 ga_tag)
141 {
142 unsigned long flags;
143 struct kvm_svm *kvm_svm;
144 struct kvm_vcpu *vcpu = NULL;
145 u32 vm_id = AVIC_GATAG_TO_VMID(ga_tag);
146 u32 vcpu_idx = AVIC_GATAG_TO_VCPUIDX(ga_tag);
147
148 pr_debug("SVM: %s: vm_id=%#x, vcpu_idx=%#x\n", __func__, vm_id, vcpu_idx);
149 trace_kvm_avic_ga_log(vm_id, vcpu_idx);
150
151 spin_lock_irqsave(&svm_vm_data_hash_lock, flags);
152 hash_for_each_possible(svm_vm_data_hash, kvm_svm, hnode, vm_id) {
153 if (kvm_svm->avic_vm_id != vm_id)
154 continue;
155 vcpu = kvm_get_vcpu(&kvm_svm->kvm, vcpu_idx);
156 break;
157 }
158 spin_unlock_irqrestore(&svm_vm_data_hash_lock, flags);
159
160 /* Note:
161 * At this point, the IOMMU should have already set the pending
162 * bit in the vAPIC backing page. So, we just need to schedule
163 * in the vcpu.
164 */
165 if (vcpu)
166 kvm_vcpu_wake_up(vcpu);
167
168 return 0;
169 }
170
avic_vm_destroy(struct kvm * kvm)171 void avic_vm_destroy(struct kvm *kvm)
172 {
173 unsigned long flags;
174 struct kvm_svm *kvm_svm = to_kvm_svm(kvm);
175
176 if (!enable_apicv)
177 return;
178
179 free_page((unsigned long)kvm_svm->avic_logical_id_table);
180 free_page((unsigned long)kvm_svm->avic_physical_id_table);
181
182 spin_lock_irqsave(&svm_vm_data_hash_lock, flags);
183 hash_del(&kvm_svm->hnode);
184 spin_unlock_irqrestore(&svm_vm_data_hash_lock, flags);
185 }
186
avic_vm_init(struct kvm * kvm)187 int avic_vm_init(struct kvm *kvm)
188 {
189 unsigned long flags;
190 int err = -ENOMEM;
191 struct kvm_svm *kvm_svm = to_kvm_svm(kvm);
192 struct kvm_svm *k2;
193 u32 vm_id;
194
195 if (!enable_apicv)
196 return 0;
197
198 kvm_svm->avic_physical_id_table = (void *)get_zeroed_page(GFP_KERNEL_ACCOUNT);
199 if (!kvm_svm->avic_physical_id_table)
200 goto free_avic;
201
202 kvm_svm->avic_logical_id_table = (void *)get_zeroed_page(GFP_KERNEL_ACCOUNT);
203 if (!kvm_svm->avic_logical_id_table)
204 goto free_avic;
205
206 spin_lock_irqsave(&svm_vm_data_hash_lock, flags);
207 again:
208 vm_id = next_vm_id = (next_vm_id + 1) & AVIC_VM_ID_MASK;
209 if (vm_id == 0) { /* id is 1-based, zero is not okay */
210 next_vm_id_wrapped = 1;
211 goto again;
212 }
213 /* Is it still in use? Only possible if wrapped at least once */
214 if (next_vm_id_wrapped) {
215 hash_for_each_possible(svm_vm_data_hash, k2, hnode, vm_id) {
216 if (k2->avic_vm_id == vm_id)
217 goto again;
218 }
219 }
220 kvm_svm->avic_vm_id = vm_id;
221 hash_add(svm_vm_data_hash, &kvm_svm->hnode, kvm_svm->avic_vm_id);
222 spin_unlock_irqrestore(&svm_vm_data_hash_lock, flags);
223
224 return 0;
225
226 free_avic:
227 avic_vm_destroy(kvm);
228 return err;
229 }
230
avic_get_backing_page_address(struct vcpu_svm * svm)231 static phys_addr_t avic_get_backing_page_address(struct vcpu_svm *svm)
232 {
233 return __sme_set(__pa(svm->vcpu.arch.apic->regs));
234 }
235
avic_init_vmcb(struct vcpu_svm * svm,struct vmcb * vmcb)236 void avic_init_vmcb(struct vcpu_svm *svm, struct vmcb *vmcb)
237 {
238 struct kvm_svm *kvm_svm = to_kvm_svm(svm->vcpu.kvm);
239
240 vmcb->control.avic_backing_page = avic_get_backing_page_address(svm);
241 vmcb->control.avic_logical_id = __sme_set(__pa(kvm_svm->avic_logical_id_table));
242 vmcb->control.avic_physical_id = __sme_set(__pa(kvm_svm->avic_physical_id_table));
243 vmcb->control.avic_vapic_bar = APIC_DEFAULT_PHYS_BASE;
244
245 if (kvm_apicv_activated(svm->vcpu.kvm))
246 avic_activate_vmcb(svm);
247 else
248 avic_deactivate_vmcb(svm);
249 }
250
avic_init_backing_page(struct kvm_vcpu * vcpu)251 static int avic_init_backing_page(struct kvm_vcpu *vcpu)
252 {
253 struct kvm_svm *kvm_svm = to_kvm_svm(vcpu->kvm);
254 struct vcpu_svm *svm = to_svm(vcpu);
255 u32 id = vcpu->vcpu_id;
256 u64 new_entry;
257
258 /*
259 * Inhibit AVIC if the vCPU ID is bigger than what is supported by AVIC
260 * hardware. Immediately clear apicv_active, i.e. don't wait until the
261 * KVM_REQ_APICV_UPDATE request is processed on the first KVM_RUN, as
262 * avic_vcpu_load() expects to be called if and only if the vCPU has
263 * fully initialized AVIC.
264 */
265 if ((!x2avic_enabled && id > AVIC_MAX_PHYSICAL_ID) ||
266 (id > X2AVIC_MAX_PHYSICAL_ID)) {
267 kvm_set_apicv_inhibit(vcpu->kvm, APICV_INHIBIT_REASON_PHYSICAL_ID_TOO_BIG);
268 vcpu->arch.apic->apicv_active = false;
269 return 0;
270 }
271
272 BUILD_BUG_ON((AVIC_MAX_PHYSICAL_ID + 1) * sizeof(new_entry) > PAGE_SIZE ||
273 (X2AVIC_MAX_PHYSICAL_ID + 1) * sizeof(new_entry) > PAGE_SIZE);
274
275 if (WARN_ON_ONCE(!vcpu->arch.apic->regs))
276 return -EINVAL;
277
278 if (kvm_apicv_activated(vcpu->kvm)) {
279 int ret;
280
281 /*
282 * Note, AVIC hardware walks the nested page table to check
283 * permissions, but does not use the SPA address specified in
284 * the leaf SPTE since it uses address in the AVIC_BACKING_PAGE
285 * pointer field of the VMCB.
286 */
287 ret = kvm_alloc_apic_access_page(vcpu->kvm);
288 if (ret)
289 return ret;
290 }
291
292 /* Note, fls64() returns the bit position, +1. */
293 BUILD_BUG_ON(__PHYSICAL_MASK_SHIFT >
294 fls64(AVIC_PHYSICAL_ID_ENTRY_BACKING_PAGE_MASK));
295
296 /* Setting AVIC backing page address in the phy APIC ID table */
297 new_entry = avic_get_backing_page_address(svm) |
298 AVIC_PHYSICAL_ID_ENTRY_VALID_MASK;
299 svm->avic_physical_id_entry = new_entry;
300
301 /*
302 * Initialize the real table, as vCPUs must have a valid entry in order
303 * for broadcast IPIs to function correctly (broadcast IPIs ignore
304 * invalid entries, i.e. aren't guaranteed to generate a VM-Exit).
305 */
306 WRITE_ONCE(kvm_svm->avic_physical_id_table[id], new_entry);
307
308 return 0;
309 }
310
avic_ring_doorbell(struct kvm_vcpu * vcpu)311 void avic_ring_doorbell(struct kvm_vcpu *vcpu)
312 {
313 /*
314 * Note, the vCPU could get migrated to a different pCPU at any point,
315 * which could result in signalling the wrong/previous pCPU. But if
316 * that happens the vCPU is guaranteed to do a VMRUN (after being
317 * migrated) and thus will process pending interrupts, i.e. a doorbell
318 * is not needed (and the spurious one is harmless).
319 */
320 int cpu = READ_ONCE(vcpu->cpu);
321
322 if (cpu != get_cpu()) {
323 wrmsrq(MSR_AMD64_SVM_AVIC_DOORBELL, kvm_cpu_get_apicid(cpu));
324 trace_kvm_avic_doorbell(vcpu->vcpu_id, kvm_cpu_get_apicid(cpu));
325 }
326 put_cpu();
327 }
328
329
avic_kick_vcpu(struct kvm_vcpu * vcpu,u32 icrl)330 static void avic_kick_vcpu(struct kvm_vcpu *vcpu, u32 icrl)
331 {
332 vcpu->arch.apic->irr_pending = true;
333 svm_complete_interrupt_delivery(vcpu,
334 icrl & APIC_MODE_MASK,
335 icrl & APIC_INT_LEVELTRIG,
336 icrl & APIC_VECTOR_MASK);
337 }
338
avic_kick_vcpu_by_physical_id(struct kvm * kvm,u32 physical_id,u32 icrl)339 static void avic_kick_vcpu_by_physical_id(struct kvm *kvm, u32 physical_id,
340 u32 icrl)
341 {
342 /*
343 * KVM inhibits AVIC if any vCPU ID diverges from the vCPUs APIC ID,
344 * i.e. APIC ID == vCPU ID.
345 */
346 struct kvm_vcpu *target_vcpu = kvm_get_vcpu_by_id(kvm, physical_id);
347
348 /* Once again, nothing to do if the target vCPU doesn't exist. */
349 if (unlikely(!target_vcpu))
350 return;
351
352 avic_kick_vcpu(target_vcpu, icrl);
353 }
354
avic_kick_vcpu_by_logical_id(struct kvm * kvm,u32 * avic_logical_id_table,u32 logid_index,u32 icrl)355 static void avic_kick_vcpu_by_logical_id(struct kvm *kvm, u32 *avic_logical_id_table,
356 u32 logid_index, u32 icrl)
357 {
358 u32 physical_id;
359
360 if (avic_logical_id_table) {
361 u32 logid_entry = avic_logical_id_table[logid_index];
362
363 /* Nothing to do if the logical destination is invalid. */
364 if (unlikely(!(logid_entry & AVIC_LOGICAL_ID_ENTRY_VALID_MASK)))
365 return;
366
367 physical_id = logid_entry &
368 AVIC_LOGICAL_ID_ENTRY_GUEST_PHYSICAL_ID_MASK;
369 } else {
370 /*
371 * For x2APIC, the logical APIC ID is a read-only value that is
372 * derived from the x2APIC ID, thus the x2APIC ID can be found
373 * by reversing the calculation (stored in logid_index). Note,
374 * bits 31:20 of the x2APIC ID aren't propagated to the logical
375 * ID, but KVM limits the x2APIC ID limited to KVM_MAX_VCPU_IDS.
376 */
377 physical_id = logid_index;
378 }
379
380 avic_kick_vcpu_by_physical_id(kvm, physical_id, icrl);
381 }
382
383 /*
384 * A fast-path version of avic_kick_target_vcpus(), which attempts to match
385 * destination APIC ID to vCPU without looping through all vCPUs.
386 */
avic_kick_target_vcpus_fast(struct kvm * kvm,struct kvm_lapic * source,u32 icrl,u32 icrh,u32 index)387 static int avic_kick_target_vcpus_fast(struct kvm *kvm, struct kvm_lapic *source,
388 u32 icrl, u32 icrh, u32 index)
389 {
390 int dest_mode = icrl & APIC_DEST_MASK;
391 int shorthand = icrl & APIC_SHORT_MASK;
392 struct kvm_svm *kvm_svm = to_kvm_svm(kvm);
393 u32 dest;
394
395 if (shorthand != APIC_DEST_NOSHORT)
396 return -EINVAL;
397
398 if (apic_x2apic_mode(source))
399 dest = icrh;
400 else
401 dest = GET_XAPIC_DEST_FIELD(icrh);
402
403 if (dest_mode == APIC_DEST_PHYSICAL) {
404 /* broadcast destination, use slow path */
405 if (apic_x2apic_mode(source) && dest == X2APIC_BROADCAST)
406 return -EINVAL;
407 if (!apic_x2apic_mode(source) && dest == APIC_BROADCAST)
408 return -EINVAL;
409
410 if (WARN_ON_ONCE(dest != index))
411 return -EINVAL;
412
413 avic_kick_vcpu_by_physical_id(kvm, dest, icrl);
414 } else {
415 u32 *avic_logical_id_table;
416 unsigned long bitmap, i;
417 u32 cluster;
418
419 if (apic_x2apic_mode(source)) {
420 /* 16 bit dest mask, 16 bit cluster id */
421 bitmap = dest & 0xFFFF;
422 cluster = (dest >> 16) << 4;
423 } else if (kvm_lapic_get_reg(source, APIC_DFR) == APIC_DFR_FLAT) {
424 /* 8 bit dest mask*/
425 bitmap = dest;
426 cluster = 0;
427 } else {
428 /* 4 bit desk mask, 4 bit cluster id */
429 bitmap = dest & 0xF;
430 cluster = (dest >> 4) << 2;
431 }
432
433 /* Nothing to do if there are no destinations in the cluster. */
434 if (unlikely(!bitmap))
435 return 0;
436
437 if (apic_x2apic_mode(source))
438 avic_logical_id_table = NULL;
439 else
440 avic_logical_id_table = kvm_svm->avic_logical_id_table;
441
442 /*
443 * AVIC is inhibited if vCPUs aren't mapped 1:1 with logical
444 * IDs, thus each bit in the destination is guaranteed to map
445 * to at most one vCPU.
446 */
447 for_each_set_bit(i, &bitmap, 16)
448 avic_kick_vcpu_by_logical_id(kvm, avic_logical_id_table,
449 cluster + i, icrl);
450 }
451
452 return 0;
453 }
454
avic_kick_target_vcpus(struct kvm * kvm,struct kvm_lapic * source,u32 icrl,u32 icrh,u32 index)455 static void avic_kick_target_vcpus(struct kvm *kvm, struct kvm_lapic *source,
456 u32 icrl, u32 icrh, u32 index)
457 {
458 u32 dest = apic_x2apic_mode(source) ? icrh : GET_XAPIC_DEST_FIELD(icrh);
459 unsigned long i;
460 struct kvm_vcpu *vcpu;
461
462 if (!avic_kick_target_vcpus_fast(kvm, source, icrl, icrh, index))
463 return;
464
465 trace_kvm_avic_kick_vcpu_slowpath(icrh, icrl, index);
466
467 /*
468 * Wake any target vCPUs that are blocking, i.e. waiting for a wake
469 * event. There's no need to signal doorbells, as hardware has handled
470 * vCPUs that were in guest at the time of the IPI, and vCPUs that have
471 * since entered the guest will have processed pending IRQs at VMRUN.
472 */
473 kvm_for_each_vcpu(i, vcpu, kvm) {
474 if (kvm_apic_match_dest(vcpu, source, icrl & APIC_SHORT_MASK,
475 dest, icrl & APIC_DEST_MASK))
476 avic_kick_vcpu(vcpu, icrl);
477 }
478 }
479
avic_incomplete_ipi_interception(struct kvm_vcpu * vcpu)480 int avic_incomplete_ipi_interception(struct kvm_vcpu *vcpu)
481 {
482 struct vcpu_svm *svm = to_svm(vcpu);
483 u32 icrh = svm->vmcb->control.exit_info_1 >> 32;
484 u32 icrl = svm->vmcb->control.exit_info_1;
485 u32 id = svm->vmcb->control.exit_info_2 >> 32;
486 u32 index = svm->vmcb->control.exit_info_2 & 0x1FF;
487 struct kvm_lapic *apic = vcpu->arch.apic;
488
489 trace_kvm_avic_incomplete_ipi(vcpu->vcpu_id, icrh, icrl, id, index);
490
491 switch (id) {
492 case AVIC_IPI_FAILURE_INVALID_TARGET:
493 case AVIC_IPI_FAILURE_INVALID_INT_TYPE:
494 /*
495 * Emulate IPIs that are not handled by AVIC hardware, which
496 * only virtualizes Fixed, Edge-Triggered INTRs, and falls over
497 * if _any_ targets are invalid, e.g. if the logical mode mask
498 * is a superset of running vCPUs.
499 *
500 * The exit is a trap, e.g. ICR holds the correct value and RIP
501 * has been advanced, KVM is responsible only for emulating the
502 * IPI. Sadly, hardware may sometimes leave the BUSY flag set,
503 * in which case KVM needs to emulate the ICR write as well in
504 * order to clear the BUSY flag.
505 */
506 if (icrl & APIC_ICR_BUSY)
507 kvm_apic_write_nodecode(vcpu, APIC_ICR);
508 else
509 kvm_apic_send_ipi(apic, icrl, icrh);
510 break;
511 case AVIC_IPI_FAILURE_TARGET_NOT_RUNNING:
512 /*
513 * At this point, we expect that the AVIC HW has already
514 * set the appropriate IRR bits on the valid target
515 * vcpus. So, we just need to kick the appropriate vcpu.
516 */
517 avic_kick_target_vcpus(vcpu->kvm, apic, icrl, icrh, index);
518 break;
519 case AVIC_IPI_FAILURE_INVALID_BACKING_PAGE:
520 WARN_ONCE(1, "Invalid backing page\n");
521 break;
522 case AVIC_IPI_FAILURE_INVALID_IPI_VECTOR:
523 /* Invalid IPI with vector < 16 */
524 break;
525 default:
526 vcpu_unimpl(vcpu, "Unknown avic incomplete IPI interception\n");
527 }
528
529 return 1;
530 }
531
avic_vcpu_get_apicv_inhibit_reasons(struct kvm_vcpu * vcpu)532 unsigned long avic_vcpu_get_apicv_inhibit_reasons(struct kvm_vcpu *vcpu)
533 {
534 if (is_guest_mode(vcpu))
535 return APICV_INHIBIT_REASON_NESTED;
536 return 0;
537 }
538
avic_get_logical_id_entry(struct kvm_vcpu * vcpu,u32 ldr,bool flat)539 static u32 *avic_get_logical_id_entry(struct kvm_vcpu *vcpu, u32 ldr, bool flat)
540 {
541 struct kvm_svm *kvm_svm = to_kvm_svm(vcpu->kvm);
542 u32 cluster, index;
543
544 ldr = GET_APIC_LOGICAL_ID(ldr);
545
546 if (flat) {
547 cluster = 0;
548 } else {
549 cluster = (ldr >> 4);
550 if (cluster >= 0xf)
551 return NULL;
552 ldr &= 0xf;
553 }
554 if (!ldr || !is_power_of_2(ldr))
555 return NULL;
556
557 index = __ffs(ldr);
558 if (WARN_ON_ONCE(index > 7))
559 return NULL;
560 index += (cluster << 2);
561
562 return &kvm_svm->avic_logical_id_table[index];
563 }
564
avic_ldr_write(struct kvm_vcpu * vcpu,u8 g_physical_id,u32 ldr)565 static void avic_ldr_write(struct kvm_vcpu *vcpu, u8 g_physical_id, u32 ldr)
566 {
567 bool flat;
568 u32 *entry, new_entry;
569
570 flat = kvm_lapic_get_reg(vcpu->arch.apic, APIC_DFR) == APIC_DFR_FLAT;
571 entry = avic_get_logical_id_entry(vcpu, ldr, flat);
572 if (!entry)
573 return;
574
575 new_entry = READ_ONCE(*entry);
576 new_entry &= ~AVIC_LOGICAL_ID_ENTRY_GUEST_PHYSICAL_ID_MASK;
577 new_entry |= (g_physical_id & AVIC_LOGICAL_ID_ENTRY_GUEST_PHYSICAL_ID_MASK);
578 new_entry |= AVIC_LOGICAL_ID_ENTRY_VALID_MASK;
579 WRITE_ONCE(*entry, new_entry);
580 }
581
avic_invalidate_logical_id_entry(struct kvm_vcpu * vcpu)582 static void avic_invalidate_logical_id_entry(struct kvm_vcpu *vcpu)
583 {
584 struct vcpu_svm *svm = to_svm(vcpu);
585 bool flat = svm->dfr_reg == APIC_DFR_FLAT;
586 u32 *entry;
587
588 /* Note: x2AVIC does not use logical APIC ID table */
589 if (apic_x2apic_mode(vcpu->arch.apic))
590 return;
591
592 entry = avic_get_logical_id_entry(vcpu, svm->ldr_reg, flat);
593 if (entry)
594 clear_bit(AVIC_LOGICAL_ID_ENTRY_VALID_BIT, (unsigned long *)entry);
595 }
596
avic_handle_ldr_update(struct kvm_vcpu * vcpu)597 static void avic_handle_ldr_update(struct kvm_vcpu *vcpu)
598 {
599 struct vcpu_svm *svm = to_svm(vcpu);
600 u32 ldr = kvm_lapic_get_reg(vcpu->arch.apic, APIC_LDR);
601 u32 id = kvm_xapic_id(vcpu->arch.apic);
602
603 /* AVIC does not support LDR update for x2APIC */
604 if (apic_x2apic_mode(vcpu->arch.apic))
605 return;
606
607 if (ldr == svm->ldr_reg)
608 return;
609
610 avic_invalidate_logical_id_entry(vcpu);
611
612 svm->ldr_reg = ldr;
613 avic_ldr_write(vcpu, id, ldr);
614 }
615
avic_handle_dfr_update(struct kvm_vcpu * vcpu)616 static void avic_handle_dfr_update(struct kvm_vcpu *vcpu)
617 {
618 struct vcpu_svm *svm = to_svm(vcpu);
619 u32 dfr = kvm_lapic_get_reg(vcpu->arch.apic, APIC_DFR);
620
621 if (svm->dfr_reg == dfr)
622 return;
623
624 avic_invalidate_logical_id_entry(vcpu);
625 svm->dfr_reg = dfr;
626 }
627
avic_unaccel_trap_write(struct kvm_vcpu * vcpu)628 static int avic_unaccel_trap_write(struct kvm_vcpu *vcpu)
629 {
630 u32 offset = to_svm(vcpu)->vmcb->control.exit_info_1 &
631 AVIC_UNACCEL_ACCESS_OFFSET_MASK;
632
633 switch (offset) {
634 case APIC_LDR:
635 avic_handle_ldr_update(vcpu);
636 break;
637 case APIC_DFR:
638 avic_handle_dfr_update(vcpu);
639 break;
640 case APIC_RRR:
641 /* Ignore writes to Read Remote Data, it's read-only. */
642 return 1;
643 default:
644 break;
645 }
646
647 kvm_apic_write_nodecode(vcpu, offset);
648 return 1;
649 }
650
is_avic_unaccelerated_access_trap(u32 offset)651 static bool is_avic_unaccelerated_access_trap(u32 offset)
652 {
653 bool ret = false;
654
655 switch (offset) {
656 case APIC_ID:
657 case APIC_EOI:
658 case APIC_RRR:
659 case APIC_LDR:
660 case APIC_DFR:
661 case APIC_SPIV:
662 case APIC_ESR:
663 case APIC_ICR:
664 case APIC_LVTT:
665 case APIC_LVTTHMR:
666 case APIC_LVTPC:
667 case APIC_LVT0:
668 case APIC_LVT1:
669 case APIC_LVTERR:
670 case APIC_TMICT:
671 case APIC_TDCR:
672 ret = true;
673 break;
674 default:
675 break;
676 }
677 return ret;
678 }
679
avic_unaccelerated_access_interception(struct kvm_vcpu * vcpu)680 int avic_unaccelerated_access_interception(struct kvm_vcpu *vcpu)
681 {
682 struct vcpu_svm *svm = to_svm(vcpu);
683 int ret = 0;
684 u32 offset = svm->vmcb->control.exit_info_1 &
685 AVIC_UNACCEL_ACCESS_OFFSET_MASK;
686 u32 vector = svm->vmcb->control.exit_info_2 &
687 AVIC_UNACCEL_ACCESS_VECTOR_MASK;
688 bool write = (svm->vmcb->control.exit_info_1 >> 32) &
689 AVIC_UNACCEL_ACCESS_WRITE_MASK;
690 bool trap = is_avic_unaccelerated_access_trap(offset);
691
692 trace_kvm_avic_unaccelerated_access(vcpu->vcpu_id, offset,
693 trap, write, vector);
694 if (trap) {
695 /* Handling Trap */
696 WARN_ONCE(!write, "svm: Handling trap read.\n");
697 ret = avic_unaccel_trap_write(vcpu);
698 } else {
699 /* Handling Fault */
700 ret = kvm_emulate_instruction(vcpu, 0);
701 }
702
703 return ret;
704 }
705
avic_init_vcpu(struct vcpu_svm * svm)706 int avic_init_vcpu(struct vcpu_svm *svm)
707 {
708 int ret;
709 struct kvm_vcpu *vcpu = &svm->vcpu;
710
711 INIT_LIST_HEAD(&svm->ir_list);
712 spin_lock_init(&svm->ir_list_lock);
713
714 if (!enable_apicv || !irqchip_in_kernel(vcpu->kvm))
715 return 0;
716
717 ret = avic_init_backing_page(vcpu);
718 if (ret)
719 return ret;
720
721 svm->dfr_reg = APIC_DFR_FLAT;
722
723 return ret;
724 }
725
avic_apicv_post_state_restore(struct kvm_vcpu * vcpu)726 void avic_apicv_post_state_restore(struct kvm_vcpu *vcpu)
727 {
728 avic_handle_dfr_update(vcpu);
729 avic_handle_ldr_update(vcpu);
730 }
731
svm_ir_list_del(struct kvm_kernel_irqfd * irqfd)732 static void svm_ir_list_del(struct kvm_kernel_irqfd *irqfd)
733 {
734 struct kvm_vcpu *vcpu = irqfd->irq_bypass_vcpu;
735 unsigned long flags;
736
737 if (!vcpu)
738 return;
739
740 spin_lock_irqsave(&to_svm(vcpu)->ir_list_lock, flags);
741 list_del(&irqfd->vcpu_list);
742 spin_unlock_irqrestore(&to_svm(vcpu)->ir_list_lock, flags);
743 }
744
avic_pi_update_irte(struct kvm_kernel_irqfd * irqfd,struct kvm * kvm,unsigned int host_irq,uint32_t guest_irq,struct kvm_vcpu * vcpu,u32 vector)745 int avic_pi_update_irte(struct kvm_kernel_irqfd *irqfd, struct kvm *kvm,
746 unsigned int host_irq, uint32_t guest_irq,
747 struct kvm_vcpu *vcpu, u32 vector)
748 {
749 /*
750 * If the IRQ was affined to a different vCPU, remove the IRTE metadata
751 * from the *previous* vCPU's list.
752 */
753 svm_ir_list_del(irqfd);
754
755 if (vcpu) {
756 /*
757 * Try to enable guest_mode in IRTE, unless AVIC is inhibited,
758 * in which case configure the IRTE for legacy mode, but track
759 * the IRTE metadata so that it can be converted to guest mode
760 * if AVIC is enabled/uninhibited in the future.
761 */
762 struct amd_iommu_pi_data pi_data = {
763 .ga_tag = AVIC_GATAG(to_kvm_svm(kvm)->avic_vm_id,
764 vcpu->vcpu_idx),
765 .is_guest_mode = kvm_vcpu_apicv_active(vcpu),
766 .vapic_addr = avic_get_backing_page_address(to_svm(vcpu)),
767 .vector = vector,
768 };
769 struct vcpu_svm *svm = to_svm(vcpu);
770 u64 entry;
771 int ret;
772
773 /*
774 * Prevent the vCPU from being scheduled out or migrated until
775 * the IRTE is updated and its metadata has been added to the
776 * list of IRQs being posted to the vCPU, to ensure the IRTE
777 * isn't programmed with stale pCPU/IsRunning information.
778 */
779 guard(spinlock_irqsave)(&svm->ir_list_lock);
780
781 /*
782 * Update the target pCPU for IOMMU doorbells if the vCPU is
783 * running. If the vCPU is NOT running, i.e. is blocking or
784 * scheduled out, KVM will update the pCPU info when the vCPU
785 * is awakened and/or scheduled in. See also avic_vcpu_load().
786 */
787 entry = svm->avic_physical_id_entry;
788 if (entry & AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK) {
789 pi_data.cpu = entry & AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK;
790 } else {
791 pi_data.cpu = -1;
792 pi_data.ga_log_intr = entry & AVIC_PHYSICAL_ID_ENTRY_GA_LOG_INTR;
793 }
794
795 ret = irq_set_vcpu_affinity(host_irq, &pi_data);
796 if (ret)
797 return ret;
798
799 /*
800 * Revert to legacy mode if the IOMMU didn't provide metadata
801 * for the IRTE, which KVM needs to keep the IRTE up-to-date,
802 * e.g. if the vCPU is migrated or AVIC is disabled.
803 */
804 if (WARN_ON_ONCE(!pi_data.ir_data)) {
805 irq_set_vcpu_affinity(host_irq, NULL);
806 return -EIO;
807 }
808
809 irqfd->irq_bypass_data = pi_data.ir_data;
810 list_add(&irqfd->vcpu_list, &svm->ir_list);
811 return 0;
812 }
813 return irq_set_vcpu_affinity(host_irq, NULL);
814 }
815
816 enum avic_vcpu_action {
817 /*
818 * There is no need to differentiate between activate and deactivate,
819 * as KVM only refreshes AVIC state when the vCPU is scheduled in and
820 * isn't blocking, i.e. the pCPU must always be (in)valid when AVIC is
821 * being (de)activated.
822 */
823 AVIC_TOGGLE_ON_OFF = BIT(0),
824 AVIC_ACTIVATE = AVIC_TOGGLE_ON_OFF,
825 AVIC_DEACTIVATE = AVIC_TOGGLE_ON_OFF,
826
827 /*
828 * No unique action is required to deal with a vCPU that stops/starts
829 * running. A vCPU that starts running by definition stops blocking as
830 * well, and a vCPU that stops running can't have been blocking, i.e.
831 * doesn't need to toggle GALogIntr.
832 */
833 AVIC_START_RUNNING = 0,
834 AVIC_STOP_RUNNING = 0,
835
836 /*
837 * When a vCPU starts blocking, KVM needs to set the GALogIntr flag
838 * int all associated IRTEs so that KVM can wake the vCPU if an IRQ is
839 * sent to the vCPU.
840 */
841 AVIC_START_BLOCKING = BIT(1),
842 };
843
avic_update_iommu_vcpu_affinity(struct kvm_vcpu * vcpu,int cpu,enum avic_vcpu_action action)844 static void avic_update_iommu_vcpu_affinity(struct kvm_vcpu *vcpu, int cpu,
845 enum avic_vcpu_action action)
846 {
847 bool ga_log_intr = (action & AVIC_START_BLOCKING);
848 struct vcpu_svm *svm = to_svm(vcpu);
849 struct kvm_kernel_irqfd *irqfd;
850
851 lockdep_assert_held(&svm->ir_list_lock);
852
853 /*
854 * Here, we go through the per-vcpu ir_list to update all existing
855 * interrupt remapping table entry targeting this vcpu.
856 */
857 if (list_empty(&svm->ir_list))
858 return;
859
860 list_for_each_entry(irqfd, &svm->ir_list, vcpu_list) {
861 void *data = irqfd->irq_bypass_data;
862
863 if (!(action & AVIC_TOGGLE_ON_OFF))
864 WARN_ON_ONCE(amd_iommu_update_ga(data, cpu, ga_log_intr));
865 else if (cpu >= 0)
866 WARN_ON_ONCE(amd_iommu_activate_guest_mode(data, cpu, ga_log_intr));
867 else
868 WARN_ON_ONCE(amd_iommu_deactivate_guest_mode(data));
869 }
870 }
871
__avic_vcpu_load(struct kvm_vcpu * vcpu,int cpu,enum avic_vcpu_action action)872 static void __avic_vcpu_load(struct kvm_vcpu *vcpu, int cpu,
873 enum avic_vcpu_action action)
874 {
875 struct kvm_svm *kvm_svm = to_kvm_svm(vcpu->kvm);
876 int h_physical_id = kvm_cpu_get_apicid(cpu);
877 struct vcpu_svm *svm = to_svm(vcpu);
878 unsigned long flags;
879 u64 entry;
880
881 lockdep_assert_preemption_disabled();
882
883 if (WARN_ON(h_physical_id & ~AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK))
884 return;
885
886 if (WARN_ON_ONCE(vcpu->vcpu_id * sizeof(entry) >= PAGE_SIZE))
887 return;
888
889 /*
890 * Grab the per-vCPU interrupt remapping lock even if the VM doesn't
891 * _currently_ have assigned devices, as that can change. Holding
892 * ir_list_lock ensures that either svm_ir_list_add() will consume
893 * up-to-date entry information, or that this task will wait until
894 * svm_ir_list_add() completes to set the new target pCPU.
895 */
896 spin_lock_irqsave(&svm->ir_list_lock, flags);
897
898 entry = svm->avic_physical_id_entry;
899 WARN_ON_ONCE(entry & AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK);
900
901 entry &= ~(AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK |
902 AVIC_PHYSICAL_ID_ENTRY_GA_LOG_INTR);
903 entry |= (h_physical_id & AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK);
904 entry |= AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK;
905
906 svm->avic_physical_id_entry = entry;
907
908 /*
909 * If IPI virtualization is disabled, clear IsRunning when updating the
910 * actual Physical ID table, so that the CPU never sees IsRunning=1.
911 * Keep the APIC ID up-to-date in the entry to minimize the chances of
912 * things going sideways if hardware peeks at the ID.
913 */
914 if (!enable_ipiv)
915 entry &= ~AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK;
916
917 WRITE_ONCE(kvm_svm->avic_physical_id_table[vcpu->vcpu_id], entry);
918
919 avic_update_iommu_vcpu_affinity(vcpu, h_physical_id, action);
920
921 spin_unlock_irqrestore(&svm->ir_list_lock, flags);
922 }
923
avic_vcpu_load(struct kvm_vcpu * vcpu,int cpu)924 void avic_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
925 {
926 /*
927 * No need to update anything if the vCPU is blocking, i.e. if the vCPU
928 * is being scheduled in after being preempted. The CPU entries in the
929 * Physical APIC table and IRTE are consumed iff IsRun{ning} is '1'.
930 * If the vCPU was migrated, its new CPU value will be stuffed when the
931 * vCPU unblocks.
932 */
933 if (kvm_vcpu_is_blocking(vcpu))
934 return;
935
936 __avic_vcpu_load(vcpu, cpu, AVIC_START_RUNNING);
937 }
938
__avic_vcpu_put(struct kvm_vcpu * vcpu,enum avic_vcpu_action action)939 static void __avic_vcpu_put(struct kvm_vcpu *vcpu, enum avic_vcpu_action action)
940 {
941 struct kvm_svm *kvm_svm = to_kvm_svm(vcpu->kvm);
942 struct vcpu_svm *svm = to_svm(vcpu);
943 unsigned long flags;
944 u64 entry = svm->avic_physical_id_entry;
945
946 lockdep_assert_preemption_disabled();
947
948 if (WARN_ON_ONCE(vcpu->vcpu_id * sizeof(entry) >= PAGE_SIZE))
949 return;
950
951 /*
952 * Take and hold the per-vCPU interrupt remapping lock while updating
953 * the Physical ID entry even though the lock doesn't protect against
954 * multiple writers (see above). Holding ir_list_lock ensures that
955 * either svm_ir_list_add() will consume up-to-date entry information,
956 * or that this task will wait until svm_ir_list_add() completes to
957 * mark the vCPU as not running.
958 */
959 spin_lock_irqsave(&svm->ir_list_lock, flags);
960
961 avic_update_iommu_vcpu_affinity(vcpu, -1, action);
962
963 WARN_ON_ONCE(entry & AVIC_PHYSICAL_ID_ENTRY_GA_LOG_INTR);
964
965 /*
966 * Keep the previous APIC ID in the entry so that a rogue doorbell from
967 * hardware is at least restricted to a CPU associated with the vCPU.
968 */
969 entry &= ~AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK;
970
971 if (enable_ipiv)
972 WRITE_ONCE(kvm_svm->avic_physical_id_table[vcpu->vcpu_id], entry);
973
974 /*
975 * Note! Don't set AVIC_PHYSICAL_ID_ENTRY_GA_LOG_INTR in the table as
976 * it's a synthetic flag that usurps an unused should-be-zero bit.
977 */
978 if (action & AVIC_START_BLOCKING)
979 entry |= AVIC_PHYSICAL_ID_ENTRY_GA_LOG_INTR;
980
981 svm->avic_physical_id_entry = entry;
982
983 spin_unlock_irqrestore(&svm->ir_list_lock, flags);
984 }
985
avic_vcpu_put(struct kvm_vcpu * vcpu)986 void avic_vcpu_put(struct kvm_vcpu *vcpu)
987 {
988 /*
989 * Note, reading the Physical ID entry outside of ir_list_lock is safe
990 * as only the pCPU that has loaded (or is loading) the vCPU is allowed
991 * to modify the entry, and preemption is disabled. I.e. the vCPU
992 * can't be scheduled out and thus avic_vcpu_{put,load}() can't run
993 * recursively.
994 */
995 u64 entry = to_svm(vcpu)->avic_physical_id_entry;
996
997 /*
998 * Nothing to do if IsRunning == '0' due to vCPU blocking, i.e. if the
999 * vCPU is preempted while its in the process of blocking. WARN if the
1000 * vCPU wasn't running and isn't blocking, KVM shouldn't attempt to put
1001 * the AVIC if it wasn't previously loaded.
1002 */
1003 if (!(entry & AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK)) {
1004 if (WARN_ON_ONCE(!kvm_vcpu_is_blocking(vcpu)))
1005 return;
1006
1007 /*
1008 * The vCPU was preempted while blocking, ensure its IRTEs are
1009 * configured to generate GA Log Interrupts.
1010 */
1011 if (!(WARN_ON_ONCE(!(entry & AVIC_PHYSICAL_ID_ENTRY_GA_LOG_INTR))))
1012 return;
1013 }
1014
1015 __avic_vcpu_put(vcpu, kvm_vcpu_is_blocking(vcpu) ? AVIC_START_BLOCKING :
1016 AVIC_STOP_RUNNING);
1017 }
1018
avic_refresh_virtual_apic_mode(struct kvm_vcpu * vcpu)1019 void avic_refresh_virtual_apic_mode(struct kvm_vcpu *vcpu)
1020 {
1021 struct vcpu_svm *svm = to_svm(vcpu);
1022 struct vmcb *vmcb = svm->vmcb01.ptr;
1023
1024 if (!lapic_in_kernel(vcpu) || !enable_apicv)
1025 return;
1026
1027 if (kvm_vcpu_apicv_active(vcpu)) {
1028 /**
1029 * During AVIC temporary deactivation, guest could update
1030 * APIC ID, DFR and LDR registers, which would not be trapped
1031 * by avic_unaccelerated_access_interception(). In this case,
1032 * we need to check and update the AVIC logical APIC ID table
1033 * accordingly before re-activating.
1034 */
1035 avic_apicv_post_state_restore(vcpu);
1036 avic_activate_vmcb(svm);
1037 } else {
1038 avic_deactivate_vmcb(svm);
1039 }
1040 vmcb_mark_dirty(vmcb, VMCB_AVIC);
1041 }
1042
avic_refresh_apicv_exec_ctrl(struct kvm_vcpu * vcpu)1043 void avic_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu)
1044 {
1045 if (!enable_apicv)
1046 return;
1047
1048 /* APICv should only be toggled on/off while the vCPU is running. */
1049 WARN_ON_ONCE(kvm_vcpu_is_blocking(vcpu));
1050
1051 avic_refresh_virtual_apic_mode(vcpu);
1052
1053 if (kvm_vcpu_apicv_active(vcpu))
1054 __avic_vcpu_load(vcpu, vcpu->cpu, AVIC_ACTIVATE);
1055 else
1056 __avic_vcpu_put(vcpu, AVIC_DEACTIVATE);
1057 }
1058
avic_vcpu_blocking(struct kvm_vcpu * vcpu)1059 void avic_vcpu_blocking(struct kvm_vcpu *vcpu)
1060 {
1061 if (!kvm_vcpu_apicv_active(vcpu))
1062 return;
1063
1064 /*
1065 * Unload the AVIC when the vCPU is about to block, _before_ the vCPU
1066 * actually blocks.
1067 *
1068 * Note, any IRQs that arrive before IsRunning=0 will not cause an
1069 * incomplete IPI vmexit on the source; kvm_vcpu_check_block() handles
1070 * this by checking vIRR one last time before blocking. The memory
1071 * barrier implicit in set_current_state orders writing IsRunning=0
1072 * before reading the vIRR. The processor needs a matching memory
1073 * barrier on interrupt delivery between writing IRR and reading
1074 * IsRunning; the lack of this barrier might be the cause of errata #1235).
1075 *
1076 * Clear IsRunning=0 even if guest IRQs are disabled, i.e. even if KVM
1077 * doesn't need to detect events for scheduling purposes. The doorbell
1078 * used to signal running vCPUs cannot be blocked, i.e. will perturb the
1079 * CPU and cause noisy neighbor problems if the VM is sending interrupts
1080 * to the vCPU while it's scheduled out.
1081 */
1082 __avic_vcpu_put(vcpu, AVIC_START_BLOCKING);
1083 }
1084
avic_vcpu_unblocking(struct kvm_vcpu * vcpu)1085 void avic_vcpu_unblocking(struct kvm_vcpu *vcpu)
1086 {
1087 if (!kvm_vcpu_apicv_active(vcpu))
1088 return;
1089
1090 avic_vcpu_load(vcpu, vcpu->cpu);
1091 }
1092
1093 /*
1094 * Note:
1095 * - The module param avic enable both xAPIC and x2APIC mode.
1096 * - Hypervisor can support both xAVIC and x2AVIC in the same guest.
1097 * - The mode can be switched at run-time.
1098 */
avic_hardware_setup(void)1099 bool avic_hardware_setup(void)
1100 {
1101 if (!npt_enabled)
1102 return false;
1103
1104 /* AVIC is a prerequisite for x2AVIC. */
1105 if (!boot_cpu_has(X86_FEATURE_AVIC) && !force_avic) {
1106 if (boot_cpu_has(X86_FEATURE_X2AVIC)) {
1107 pr_warn(FW_BUG "Cannot support x2AVIC due to AVIC is disabled");
1108 pr_warn(FW_BUG "Try enable AVIC using force_avic option");
1109 }
1110 return false;
1111 }
1112
1113 if (cc_platform_has(CC_ATTR_HOST_SEV_SNP) &&
1114 !boot_cpu_has(X86_FEATURE_HV_INUSE_WR_ALLOWED)) {
1115 pr_warn("AVIC disabled: missing HvInUseWrAllowed on SNP-enabled system\n");
1116 return false;
1117 }
1118
1119 if (boot_cpu_has(X86_FEATURE_AVIC)) {
1120 pr_info("AVIC enabled\n");
1121 } else if (force_avic) {
1122 /*
1123 * Some older systems does not advertise AVIC support.
1124 * See Revision Guide for specific AMD processor for more detail.
1125 */
1126 pr_warn("AVIC is not supported in CPUID but force enabled");
1127 pr_warn("Your system might crash and burn");
1128 }
1129
1130 /* AVIC is a prerequisite for x2AVIC. */
1131 x2avic_enabled = boot_cpu_has(X86_FEATURE_X2AVIC);
1132 if (x2avic_enabled)
1133 pr_info("x2AVIC enabled\n");
1134
1135 /*
1136 * Disable IPI virtualization for AMD Family 17h CPUs (Zen1 and Zen2)
1137 * due to erratum 1235, which results in missed VM-Exits on the sender
1138 * and thus missed wake events for blocking vCPUs due to the CPU
1139 * failing to see a software update to clear IsRunning.
1140 */
1141 enable_ipiv = enable_ipiv && boot_cpu_data.x86 != 0x17;
1142
1143 amd_iommu_register_ga_log_notifier(&avic_ga_log_notifier);
1144
1145 return true;
1146 }
1147