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) "SVM: " 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 22 #include <asm/irq_remapping.h> 23 24 #include "trace.h" 25 #include "lapic.h" 26 #include "x86.h" 27 #include "irq.h" 28 #include "svm.h" 29 30 #define SVM_AVIC_DOORBELL 0xc001011b 31 32 #define AVIC_HPA_MASK ~((0xFFFULL << 52) | 0xFFF) 33 34 /* 35 * 0xff is broadcast, so the max index allowed for physical APIC ID 36 * table is 0xfe. APIC IDs above 0xff are reserved. 37 */ 38 #define AVIC_MAX_PHYSICAL_ID_COUNT 255 39 40 #define AVIC_UNACCEL_ACCESS_WRITE_MASK 1 41 #define AVIC_UNACCEL_ACCESS_OFFSET_MASK 0xFF0 42 #define AVIC_UNACCEL_ACCESS_VECTOR_MASK 0xFFFFFFFF 43 44 /* AVIC GATAG is encoded using VM and VCPU IDs */ 45 #define AVIC_VCPU_ID_BITS 8 46 #define AVIC_VCPU_ID_MASK ((1 << AVIC_VCPU_ID_BITS) - 1) 47 48 #define AVIC_VM_ID_BITS 24 49 #define AVIC_VM_ID_NR (1 << AVIC_VM_ID_BITS) 50 #define AVIC_VM_ID_MASK ((1 << AVIC_VM_ID_BITS) - 1) 51 52 #define AVIC_GATAG(x, y) (((x & AVIC_VM_ID_MASK) << AVIC_VCPU_ID_BITS) | \ 53 (y & AVIC_VCPU_ID_MASK)) 54 #define AVIC_GATAG_TO_VMID(x) ((x >> AVIC_VCPU_ID_BITS) & AVIC_VM_ID_MASK) 55 #define AVIC_GATAG_TO_VCPUID(x) (x & AVIC_VCPU_ID_MASK) 56 57 /* Note: 58 * This hash table is used to map VM_ID to a struct kvm_svm, 59 * when handling AMD IOMMU GALOG notification to schedule in 60 * a particular vCPU. 61 */ 62 #define SVM_VM_DATA_HASH_BITS 8 63 static DEFINE_HASHTABLE(svm_vm_data_hash, SVM_VM_DATA_HASH_BITS); 64 static u32 next_vm_id = 0; 65 static bool next_vm_id_wrapped = 0; 66 static DEFINE_SPINLOCK(svm_vm_data_hash_lock); 67 68 /* 69 * This is a wrapper of struct amd_iommu_ir_data. 70 */ 71 struct amd_svm_iommu_ir { 72 struct list_head node; /* Used by SVM for per-vcpu ir_list */ 73 void *data; /* Storing pointer to struct amd_ir_data */ 74 }; 75 76 enum avic_ipi_failure_cause { 77 AVIC_IPI_FAILURE_INVALID_INT_TYPE, 78 AVIC_IPI_FAILURE_TARGET_NOT_RUNNING, 79 AVIC_IPI_FAILURE_INVALID_TARGET, 80 AVIC_IPI_FAILURE_INVALID_BACKING_PAGE, 81 }; 82 83 /* Note: 84 * This function is called from IOMMU driver to notify 85 * SVM to schedule in a particular vCPU of a particular VM. 86 */ 87 int avic_ga_log_notifier(u32 ga_tag) 88 { 89 unsigned long flags; 90 struct kvm_svm *kvm_svm; 91 struct kvm_vcpu *vcpu = NULL; 92 u32 vm_id = AVIC_GATAG_TO_VMID(ga_tag); 93 u32 vcpu_id = AVIC_GATAG_TO_VCPUID(ga_tag); 94 95 pr_debug("SVM: %s: vm_id=%#x, vcpu_id=%#x\n", __func__, vm_id, vcpu_id); 96 trace_kvm_avic_ga_log(vm_id, vcpu_id); 97 98 spin_lock_irqsave(&svm_vm_data_hash_lock, flags); 99 hash_for_each_possible(svm_vm_data_hash, kvm_svm, hnode, vm_id) { 100 if (kvm_svm->avic_vm_id != vm_id) 101 continue; 102 vcpu = kvm_get_vcpu_by_id(&kvm_svm->kvm, vcpu_id); 103 break; 104 } 105 spin_unlock_irqrestore(&svm_vm_data_hash_lock, flags); 106 107 /* Note: 108 * At this point, the IOMMU should have already set the pending 109 * bit in the vAPIC backing page. So, we just need to schedule 110 * in the vcpu. 111 */ 112 if (vcpu) 113 kvm_vcpu_wake_up(vcpu); 114 115 return 0; 116 } 117 118 void avic_vm_destroy(struct kvm *kvm) 119 { 120 unsigned long flags; 121 struct kvm_svm *kvm_svm = to_kvm_svm(kvm); 122 123 if (!enable_apicv) 124 return; 125 126 if (kvm_svm->avic_logical_id_table_page) 127 __free_page(kvm_svm->avic_logical_id_table_page); 128 if (kvm_svm->avic_physical_id_table_page) 129 __free_page(kvm_svm->avic_physical_id_table_page); 130 131 spin_lock_irqsave(&svm_vm_data_hash_lock, flags); 132 hash_del(&kvm_svm->hnode); 133 spin_unlock_irqrestore(&svm_vm_data_hash_lock, flags); 134 } 135 136 int avic_vm_init(struct kvm *kvm) 137 { 138 unsigned long flags; 139 int err = -ENOMEM; 140 struct kvm_svm *kvm_svm = to_kvm_svm(kvm); 141 struct kvm_svm *k2; 142 struct page *p_page; 143 struct page *l_page; 144 u32 vm_id; 145 146 if (!enable_apicv) 147 return 0; 148 149 /* Allocating physical APIC ID table (4KB) */ 150 p_page = alloc_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO); 151 if (!p_page) 152 goto free_avic; 153 154 kvm_svm->avic_physical_id_table_page = p_page; 155 156 /* Allocating logical APIC ID table (4KB) */ 157 l_page = alloc_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO); 158 if (!l_page) 159 goto free_avic; 160 161 kvm_svm->avic_logical_id_table_page = l_page; 162 163 spin_lock_irqsave(&svm_vm_data_hash_lock, flags); 164 again: 165 vm_id = next_vm_id = (next_vm_id + 1) & AVIC_VM_ID_MASK; 166 if (vm_id == 0) { /* id is 1-based, zero is not okay */ 167 next_vm_id_wrapped = 1; 168 goto again; 169 } 170 /* Is it still in use? Only possible if wrapped at least once */ 171 if (next_vm_id_wrapped) { 172 hash_for_each_possible(svm_vm_data_hash, k2, hnode, vm_id) { 173 if (k2->avic_vm_id == vm_id) 174 goto again; 175 } 176 } 177 kvm_svm->avic_vm_id = vm_id; 178 hash_add(svm_vm_data_hash, &kvm_svm->hnode, kvm_svm->avic_vm_id); 179 spin_unlock_irqrestore(&svm_vm_data_hash_lock, flags); 180 181 return 0; 182 183 free_avic: 184 avic_vm_destroy(kvm); 185 return err; 186 } 187 188 void avic_init_vmcb(struct vcpu_svm *svm) 189 { 190 struct vmcb *vmcb = svm->vmcb; 191 struct kvm_svm *kvm_svm = to_kvm_svm(svm->vcpu.kvm); 192 phys_addr_t bpa = __sme_set(page_to_phys(svm->avic_backing_page)); 193 phys_addr_t lpa = __sme_set(page_to_phys(kvm_svm->avic_logical_id_table_page)); 194 phys_addr_t ppa = __sme_set(page_to_phys(kvm_svm->avic_physical_id_table_page)); 195 196 vmcb->control.avic_backing_page = bpa & AVIC_HPA_MASK; 197 vmcb->control.avic_logical_id = lpa & AVIC_HPA_MASK; 198 vmcb->control.avic_physical_id = ppa & AVIC_HPA_MASK; 199 vmcb->control.avic_physical_id |= AVIC_MAX_PHYSICAL_ID_COUNT; 200 vmcb->control.avic_vapic_bar = APIC_DEFAULT_PHYS_BASE & VMCB_AVIC_APIC_BAR_MASK; 201 202 if (kvm_apicv_activated(svm->vcpu.kvm)) 203 vmcb->control.int_ctl |= AVIC_ENABLE_MASK; 204 else 205 vmcb->control.int_ctl &= ~AVIC_ENABLE_MASK; 206 } 207 208 static u64 *avic_get_physical_id_entry(struct kvm_vcpu *vcpu, 209 unsigned int index) 210 { 211 u64 *avic_physical_id_table; 212 struct kvm_svm *kvm_svm = to_kvm_svm(vcpu->kvm); 213 214 if (index >= AVIC_MAX_PHYSICAL_ID_COUNT) 215 return NULL; 216 217 avic_physical_id_table = page_address(kvm_svm->avic_physical_id_table_page); 218 219 return &avic_physical_id_table[index]; 220 } 221 222 /* 223 * Note: 224 * AVIC hardware walks the nested page table to check permissions, 225 * but does not use the SPA address specified in the leaf page 226 * table entry since it uses address in the AVIC_BACKING_PAGE pointer 227 * field of the VMCB. Therefore, we set up the 228 * APIC_ACCESS_PAGE_PRIVATE_MEMSLOT (4KB) here. 229 */ 230 static int avic_alloc_access_page(struct kvm *kvm) 231 { 232 void __user *ret; 233 int r = 0; 234 235 mutex_lock(&kvm->slots_lock); 236 237 if (kvm->arch.apic_access_memslot_enabled) 238 goto out; 239 240 ret = __x86_set_memory_region(kvm, 241 APIC_ACCESS_PAGE_PRIVATE_MEMSLOT, 242 APIC_DEFAULT_PHYS_BASE, 243 PAGE_SIZE); 244 if (IS_ERR(ret)) { 245 r = PTR_ERR(ret); 246 goto out; 247 } 248 249 kvm->arch.apic_access_memslot_enabled = true; 250 out: 251 mutex_unlock(&kvm->slots_lock); 252 return r; 253 } 254 255 static int avic_init_backing_page(struct kvm_vcpu *vcpu) 256 { 257 u64 *entry, new_entry; 258 int id = vcpu->vcpu_id; 259 struct vcpu_svm *svm = to_svm(vcpu); 260 261 if (id >= AVIC_MAX_PHYSICAL_ID_COUNT) 262 return -EINVAL; 263 264 if (!vcpu->arch.apic->regs) 265 return -EINVAL; 266 267 if (kvm_apicv_activated(vcpu->kvm)) { 268 int ret; 269 270 ret = avic_alloc_access_page(vcpu->kvm); 271 if (ret) 272 return ret; 273 } 274 275 svm->avic_backing_page = virt_to_page(vcpu->arch.apic->regs); 276 277 /* Setting AVIC backing page address in the phy APIC ID table */ 278 entry = avic_get_physical_id_entry(vcpu, id); 279 if (!entry) 280 return -EINVAL; 281 282 new_entry = __sme_set((page_to_phys(svm->avic_backing_page) & 283 AVIC_PHYSICAL_ID_ENTRY_BACKING_PAGE_MASK) | 284 AVIC_PHYSICAL_ID_ENTRY_VALID_MASK); 285 WRITE_ONCE(*entry, new_entry); 286 287 svm->avic_physical_id_cache = entry; 288 289 return 0; 290 } 291 292 static void avic_kick_target_vcpus(struct kvm *kvm, struct kvm_lapic *source, 293 u32 icrl, u32 icrh) 294 { 295 struct kvm_vcpu *vcpu; 296 unsigned long i; 297 298 /* 299 * Wake any target vCPUs that are blocking, i.e. waiting for a wake 300 * event. There's no need to signal doorbells, as hardware has handled 301 * vCPUs that were in guest at the time of the IPI, and vCPUs that have 302 * since entered the guest will have processed pending IRQs at VMRUN. 303 */ 304 kvm_for_each_vcpu(i, vcpu, kvm) { 305 if (kvm_apic_match_dest(vcpu, source, icrl & APIC_SHORT_MASK, 306 GET_APIC_DEST_FIELD(icrh), 307 icrl & APIC_DEST_MASK)) 308 kvm_vcpu_wake_up(vcpu); 309 } 310 } 311 312 int avic_incomplete_ipi_interception(struct kvm_vcpu *vcpu) 313 { 314 struct vcpu_svm *svm = to_svm(vcpu); 315 u32 icrh = svm->vmcb->control.exit_info_1 >> 32; 316 u32 icrl = svm->vmcb->control.exit_info_1; 317 u32 id = svm->vmcb->control.exit_info_2 >> 32; 318 u32 index = svm->vmcb->control.exit_info_2 & 0xFF; 319 struct kvm_lapic *apic = vcpu->arch.apic; 320 321 trace_kvm_avic_incomplete_ipi(vcpu->vcpu_id, icrh, icrl, id, index); 322 323 switch (id) { 324 case AVIC_IPI_FAILURE_INVALID_INT_TYPE: 325 /* 326 * AVIC hardware handles the generation of 327 * IPIs when the specified Message Type is Fixed 328 * (also known as fixed delivery mode) and 329 * the Trigger Mode is edge-triggered. The hardware 330 * also supports self and broadcast delivery modes 331 * specified via the Destination Shorthand(DSH) 332 * field of the ICRL. Logical and physical APIC ID 333 * formats are supported. All other IPI types cause 334 * a #VMEXIT, which needs to emulated. 335 */ 336 kvm_lapic_reg_write(apic, APIC_ICR2, icrh); 337 kvm_lapic_reg_write(apic, APIC_ICR, icrl); 338 break; 339 case AVIC_IPI_FAILURE_TARGET_NOT_RUNNING: 340 /* 341 * At this point, we expect that the AVIC HW has already 342 * set the appropriate IRR bits on the valid target 343 * vcpus. So, we just need to kick the appropriate vcpu. 344 */ 345 avic_kick_target_vcpus(vcpu->kvm, apic, icrl, icrh); 346 break; 347 case AVIC_IPI_FAILURE_INVALID_TARGET: 348 WARN_ONCE(1, "Invalid IPI target: index=%u, vcpu=%d, icr=%#0x:%#0x\n", 349 index, vcpu->vcpu_id, icrh, icrl); 350 break; 351 case AVIC_IPI_FAILURE_INVALID_BACKING_PAGE: 352 WARN_ONCE(1, "Invalid backing page\n"); 353 break; 354 default: 355 pr_err("Unknown IPI interception\n"); 356 } 357 358 return 1; 359 } 360 361 static u32 *avic_get_logical_id_entry(struct kvm_vcpu *vcpu, u32 ldr, bool flat) 362 { 363 struct kvm_svm *kvm_svm = to_kvm_svm(vcpu->kvm); 364 int index; 365 u32 *logical_apic_id_table; 366 int dlid = GET_APIC_LOGICAL_ID(ldr); 367 368 if (!dlid) 369 return NULL; 370 371 if (flat) { /* flat */ 372 index = ffs(dlid) - 1; 373 if (index > 7) 374 return NULL; 375 } else { /* cluster */ 376 int cluster = (dlid & 0xf0) >> 4; 377 int apic = ffs(dlid & 0x0f) - 1; 378 379 if ((apic < 0) || (apic > 7) || 380 (cluster >= 0xf)) 381 return NULL; 382 index = (cluster << 2) + apic; 383 } 384 385 logical_apic_id_table = (u32 *) page_address(kvm_svm->avic_logical_id_table_page); 386 387 return &logical_apic_id_table[index]; 388 } 389 390 static int avic_ldr_write(struct kvm_vcpu *vcpu, u8 g_physical_id, u32 ldr) 391 { 392 bool flat; 393 u32 *entry, new_entry; 394 395 flat = kvm_lapic_get_reg(vcpu->arch.apic, APIC_DFR) == APIC_DFR_FLAT; 396 entry = avic_get_logical_id_entry(vcpu, ldr, flat); 397 if (!entry) 398 return -EINVAL; 399 400 new_entry = READ_ONCE(*entry); 401 new_entry &= ~AVIC_LOGICAL_ID_ENTRY_GUEST_PHYSICAL_ID_MASK; 402 new_entry |= (g_physical_id & AVIC_LOGICAL_ID_ENTRY_GUEST_PHYSICAL_ID_MASK); 403 new_entry |= AVIC_LOGICAL_ID_ENTRY_VALID_MASK; 404 WRITE_ONCE(*entry, new_entry); 405 406 return 0; 407 } 408 409 static void avic_invalidate_logical_id_entry(struct kvm_vcpu *vcpu) 410 { 411 struct vcpu_svm *svm = to_svm(vcpu); 412 bool flat = svm->dfr_reg == APIC_DFR_FLAT; 413 u32 *entry = avic_get_logical_id_entry(vcpu, svm->ldr_reg, flat); 414 415 if (entry) 416 clear_bit(AVIC_LOGICAL_ID_ENTRY_VALID_BIT, (unsigned long *)entry); 417 } 418 419 static int avic_handle_ldr_update(struct kvm_vcpu *vcpu) 420 { 421 int ret = 0; 422 struct vcpu_svm *svm = to_svm(vcpu); 423 u32 ldr = kvm_lapic_get_reg(vcpu->arch.apic, APIC_LDR); 424 u32 id = kvm_xapic_id(vcpu->arch.apic); 425 426 if (ldr == svm->ldr_reg) 427 return 0; 428 429 avic_invalidate_logical_id_entry(vcpu); 430 431 if (ldr) 432 ret = avic_ldr_write(vcpu, id, ldr); 433 434 if (!ret) 435 svm->ldr_reg = ldr; 436 437 return ret; 438 } 439 440 static int avic_handle_apic_id_update(struct kvm_vcpu *vcpu) 441 { 442 u64 *old, *new; 443 struct vcpu_svm *svm = to_svm(vcpu); 444 u32 id = kvm_xapic_id(vcpu->arch.apic); 445 446 if (vcpu->vcpu_id == id) 447 return 0; 448 449 old = avic_get_physical_id_entry(vcpu, vcpu->vcpu_id); 450 new = avic_get_physical_id_entry(vcpu, id); 451 if (!new || !old) 452 return 1; 453 454 /* We need to move physical_id_entry to new offset */ 455 *new = *old; 456 *old = 0ULL; 457 to_svm(vcpu)->avic_physical_id_cache = new; 458 459 /* 460 * Also update the guest physical APIC ID in the logical 461 * APIC ID table entry if already setup the LDR. 462 */ 463 if (svm->ldr_reg) 464 avic_handle_ldr_update(vcpu); 465 466 return 0; 467 } 468 469 static void avic_handle_dfr_update(struct kvm_vcpu *vcpu) 470 { 471 struct vcpu_svm *svm = to_svm(vcpu); 472 u32 dfr = kvm_lapic_get_reg(vcpu->arch.apic, APIC_DFR); 473 474 if (svm->dfr_reg == dfr) 475 return; 476 477 avic_invalidate_logical_id_entry(vcpu); 478 svm->dfr_reg = dfr; 479 } 480 481 static int avic_unaccel_trap_write(struct vcpu_svm *svm) 482 { 483 struct kvm_lapic *apic = svm->vcpu.arch.apic; 484 u32 offset = svm->vmcb->control.exit_info_1 & 485 AVIC_UNACCEL_ACCESS_OFFSET_MASK; 486 487 switch (offset) { 488 case APIC_ID: 489 if (avic_handle_apic_id_update(&svm->vcpu)) 490 return 0; 491 break; 492 case APIC_LDR: 493 if (avic_handle_ldr_update(&svm->vcpu)) 494 return 0; 495 break; 496 case APIC_DFR: 497 avic_handle_dfr_update(&svm->vcpu); 498 break; 499 default: 500 break; 501 } 502 503 kvm_lapic_reg_write(apic, offset, kvm_lapic_get_reg(apic, offset)); 504 505 return 1; 506 } 507 508 static bool is_avic_unaccelerated_access_trap(u32 offset) 509 { 510 bool ret = false; 511 512 switch (offset) { 513 case APIC_ID: 514 case APIC_EOI: 515 case APIC_RRR: 516 case APIC_LDR: 517 case APIC_DFR: 518 case APIC_SPIV: 519 case APIC_ESR: 520 case APIC_ICR: 521 case APIC_LVTT: 522 case APIC_LVTTHMR: 523 case APIC_LVTPC: 524 case APIC_LVT0: 525 case APIC_LVT1: 526 case APIC_LVTERR: 527 case APIC_TMICT: 528 case APIC_TDCR: 529 ret = true; 530 break; 531 default: 532 break; 533 } 534 return ret; 535 } 536 537 int avic_unaccelerated_access_interception(struct kvm_vcpu *vcpu) 538 { 539 struct vcpu_svm *svm = to_svm(vcpu); 540 int ret = 0; 541 u32 offset = svm->vmcb->control.exit_info_1 & 542 AVIC_UNACCEL_ACCESS_OFFSET_MASK; 543 u32 vector = svm->vmcb->control.exit_info_2 & 544 AVIC_UNACCEL_ACCESS_VECTOR_MASK; 545 bool write = (svm->vmcb->control.exit_info_1 >> 32) & 546 AVIC_UNACCEL_ACCESS_WRITE_MASK; 547 bool trap = is_avic_unaccelerated_access_trap(offset); 548 549 trace_kvm_avic_unaccelerated_access(vcpu->vcpu_id, offset, 550 trap, write, vector); 551 if (trap) { 552 /* Handling Trap */ 553 WARN_ONCE(!write, "svm: Handling trap read.\n"); 554 ret = avic_unaccel_trap_write(svm); 555 } else { 556 /* Handling Fault */ 557 ret = kvm_emulate_instruction(vcpu, 0); 558 } 559 560 return ret; 561 } 562 563 int avic_init_vcpu(struct vcpu_svm *svm) 564 { 565 int ret; 566 struct kvm_vcpu *vcpu = &svm->vcpu; 567 568 if (!enable_apicv || !irqchip_in_kernel(vcpu->kvm)) 569 return 0; 570 571 ret = avic_init_backing_page(vcpu); 572 if (ret) 573 return ret; 574 575 INIT_LIST_HEAD(&svm->ir_list); 576 spin_lock_init(&svm->ir_list_lock); 577 svm->dfr_reg = APIC_DFR_FLAT; 578 579 return ret; 580 } 581 582 void avic_post_state_restore(struct kvm_vcpu *vcpu) 583 { 584 if (avic_handle_apic_id_update(vcpu) != 0) 585 return; 586 avic_handle_dfr_update(vcpu); 587 avic_handle_ldr_update(vcpu); 588 } 589 590 void svm_set_virtual_apic_mode(struct kvm_vcpu *vcpu) 591 { 592 return; 593 } 594 595 void svm_hwapic_irr_update(struct kvm_vcpu *vcpu, int max_irr) 596 { 597 } 598 599 void svm_hwapic_isr_update(struct kvm_vcpu *vcpu, int max_isr) 600 { 601 } 602 603 static int svm_set_pi_irte_mode(struct kvm_vcpu *vcpu, bool activate) 604 { 605 int ret = 0; 606 unsigned long flags; 607 struct amd_svm_iommu_ir *ir; 608 struct vcpu_svm *svm = to_svm(vcpu); 609 610 if (!kvm_arch_has_assigned_device(vcpu->kvm)) 611 return 0; 612 613 /* 614 * Here, we go through the per-vcpu ir_list to update all existing 615 * interrupt remapping table entry targeting this vcpu. 616 */ 617 spin_lock_irqsave(&svm->ir_list_lock, flags); 618 619 if (list_empty(&svm->ir_list)) 620 goto out; 621 622 list_for_each_entry(ir, &svm->ir_list, node) { 623 if (activate) 624 ret = amd_iommu_activate_guest_mode(ir->data); 625 else 626 ret = amd_iommu_deactivate_guest_mode(ir->data); 627 if (ret) 628 break; 629 } 630 out: 631 spin_unlock_irqrestore(&svm->ir_list_lock, flags); 632 return ret; 633 } 634 635 void svm_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu) 636 { 637 struct vcpu_svm *svm = to_svm(vcpu); 638 struct vmcb *vmcb = svm->vmcb01.ptr; 639 bool activated = kvm_vcpu_apicv_active(vcpu); 640 641 if (!enable_apicv) 642 return; 643 644 if (activated) { 645 /** 646 * During AVIC temporary deactivation, guest could update 647 * APIC ID, DFR and LDR registers, which would not be trapped 648 * by avic_unaccelerated_access_interception(). In this case, 649 * we need to check and update the AVIC logical APIC ID table 650 * accordingly before re-activating. 651 */ 652 avic_post_state_restore(vcpu); 653 vmcb->control.int_ctl |= AVIC_ENABLE_MASK; 654 } else { 655 vmcb->control.int_ctl &= ~AVIC_ENABLE_MASK; 656 } 657 vmcb_mark_dirty(vmcb, VMCB_AVIC); 658 659 if (activated) 660 avic_vcpu_load(vcpu, vcpu->cpu); 661 else 662 avic_vcpu_put(vcpu); 663 664 svm_set_pi_irte_mode(vcpu, activated); 665 } 666 667 void svm_load_eoi_exitmap(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap) 668 { 669 return; 670 } 671 672 int svm_deliver_avic_intr(struct kvm_vcpu *vcpu, int vec) 673 { 674 if (!vcpu->arch.apicv_active) 675 return -1; 676 677 kvm_lapic_set_irr(vec, vcpu->arch.apic); 678 679 /* 680 * Pairs with the smp_mb_*() after setting vcpu->guest_mode in 681 * vcpu_enter_guest() to ensure the write to the vIRR is ordered before 682 * the read of guest_mode, which guarantees that either VMRUN will see 683 * and process the new vIRR entry, or that the below code will signal 684 * the doorbell if the vCPU is already running in the guest. 685 */ 686 smp_mb__after_atomic(); 687 688 /* 689 * Signal the doorbell to tell hardware to inject the IRQ if the vCPU 690 * is in the guest. If the vCPU is not in the guest, hardware will 691 * automatically process AVIC interrupts at VMRUN. 692 */ 693 if (vcpu->mode == IN_GUEST_MODE) { 694 int cpu = READ_ONCE(vcpu->cpu); 695 696 /* 697 * Note, the vCPU could get migrated to a different pCPU at any 698 * point, which could result in signalling the wrong/previous 699 * pCPU. But if that happens the vCPU is guaranteed to do a 700 * VMRUN (after being migrated) and thus will process pending 701 * interrupts, i.e. a doorbell is not needed (and the spurious 702 * one is harmless). 703 */ 704 if (cpu != get_cpu()) 705 wrmsrl(SVM_AVIC_DOORBELL, kvm_cpu_get_apicid(cpu)); 706 put_cpu(); 707 } else { 708 /* 709 * Wake the vCPU if it was blocking. KVM will then detect the 710 * pending IRQ when checking if the vCPU has a wake event. 711 */ 712 kvm_vcpu_wake_up(vcpu); 713 } 714 715 return 0; 716 } 717 718 bool svm_dy_apicv_has_pending_interrupt(struct kvm_vcpu *vcpu) 719 { 720 return false; 721 } 722 723 static void svm_ir_list_del(struct vcpu_svm *svm, struct amd_iommu_pi_data *pi) 724 { 725 unsigned long flags; 726 struct amd_svm_iommu_ir *cur; 727 728 spin_lock_irqsave(&svm->ir_list_lock, flags); 729 list_for_each_entry(cur, &svm->ir_list, node) { 730 if (cur->data != pi->ir_data) 731 continue; 732 list_del(&cur->node); 733 kfree(cur); 734 break; 735 } 736 spin_unlock_irqrestore(&svm->ir_list_lock, flags); 737 } 738 739 static int svm_ir_list_add(struct vcpu_svm *svm, struct amd_iommu_pi_data *pi) 740 { 741 int ret = 0; 742 unsigned long flags; 743 struct amd_svm_iommu_ir *ir; 744 745 /** 746 * In some cases, the existing irte is updated and re-set, 747 * so we need to check here if it's already been * added 748 * to the ir_list. 749 */ 750 if (pi->ir_data && (pi->prev_ga_tag != 0)) { 751 struct kvm *kvm = svm->vcpu.kvm; 752 u32 vcpu_id = AVIC_GATAG_TO_VCPUID(pi->prev_ga_tag); 753 struct kvm_vcpu *prev_vcpu = kvm_get_vcpu_by_id(kvm, vcpu_id); 754 struct vcpu_svm *prev_svm; 755 756 if (!prev_vcpu) { 757 ret = -EINVAL; 758 goto out; 759 } 760 761 prev_svm = to_svm(prev_vcpu); 762 svm_ir_list_del(prev_svm, pi); 763 } 764 765 /** 766 * Allocating new amd_iommu_pi_data, which will get 767 * add to the per-vcpu ir_list. 768 */ 769 ir = kzalloc(sizeof(struct amd_svm_iommu_ir), GFP_KERNEL_ACCOUNT); 770 if (!ir) { 771 ret = -ENOMEM; 772 goto out; 773 } 774 ir->data = pi->ir_data; 775 776 spin_lock_irqsave(&svm->ir_list_lock, flags); 777 list_add(&ir->node, &svm->ir_list); 778 spin_unlock_irqrestore(&svm->ir_list_lock, flags); 779 out: 780 return ret; 781 } 782 783 /* 784 * Note: 785 * The HW cannot support posting multicast/broadcast 786 * interrupts to a vCPU. So, we still use legacy interrupt 787 * remapping for these kind of interrupts. 788 * 789 * For lowest-priority interrupts, we only support 790 * those with single CPU as the destination, e.g. user 791 * configures the interrupts via /proc/irq or uses 792 * irqbalance to make the interrupts single-CPU. 793 */ 794 static int 795 get_pi_vcpu_info(struct kvm *kvm, struct kvm_kernel_irq_routing_entry *e, 796 struct vcpu_data *vcpu_info, struct vcpu_svm **svm) 797 { 798 struct kvm_lapic_irq irq; 799 struct kvm_vcpu *vcpu = NULL; 800 801 kvm_set_msi_irq(kvm, e, &irq); 802 803 if (!kvm_intr_is_single_vcpu(kvm, &irq, &vcpu) || 804 !kvm_irq_is_postable(&irq)) { 805 pr_debug("SVM: %s: use legacy intr remap mode for irq %u\n", 806 __func__, irq.vector); 807 return -1; 808 } 809 810 pr_debug("SVM: %s: use GA mode for irq %u\n", __func__, 811 irq.vector); 812 *svm = to_svm(vcpu); 813 vcpu_info->pi_desc_addr = __sme_set(page_to_phys((*svm)->avic_backing_page)); 814 vcpu_info->vector = irq.vector; 815 816 return 0; 817 } 818 819 /* 820 * svm_update_pi_irte - set IRTE for Posted-Interrupts 821 * 822 * @kvm: kvm 823 * @host_irq: host irq of the interrupt 824 * @guest_irq: gsi of the interrupt 825 * @set: set or unset PI 826 * returns 0 on success, < 0 on failure 827 */ 828 int svm_update_pi_irte(struct kvm *kvm, unsigned int host_irq, 829 uint32_t guest_irq, bool set) 830 { 831 struct kvm_kernel_irq_routing_entry *e; 832 struct kvm_irq_routing_table *irq_rt; 833 int idx, ret = -EINVAL; 834 835 if (!kvm_arch_has_assigned_device(kvm) || 836 !irq_remapping_cap(IRQ_POSTING_CAP)) 837 return 0; 838 839 pr_debug("SVM: %s: host_irq=%#x, guest_irq=%#x, set=%#x\n", 840 __func__, host_irq, guest_irq, set); 841 842 idx = srcu_read_lock(&kvm->irq_srcu); 843 irq_rt = srcu_dereference(kvm->irq_routing, &kvm->irq_srcu); 844 WARN_ON(guest_irq >= irq_rt->nr_rt_entries); 845 846 hlist_for_each_entry(e, &irq_rt->map[guest_irq], link) { 847 struct vcpu_data vcpu_info; 848 struct vcpu_svm *svm = NULL; 849 850 if (e->type != KVM_IRQ_ROUTING_MSI) 851 continue; 852 853 /** 854 * Here, we setup with legacy mode in the following cases: 855 * 1. When cannot target interrupt to a specific vcpu. 856 * 2. Unsetting posted interrupt. 857 * 3. APIC virtualization is disabled for the vcpu. 858 * 4. IRQ has incompatible delivery mode (SMI, INIT, etc) 859 */ 860 if (!get_pi_vcpu_info(kvm, e, &vcpu_info, &svm) && set && 861 kvm_vcpu_apicv_active(&svm->vcpu)) { 862 struct amd_iommu_pi_data pi; 863 864 /* Try to enable guest_mode in IRTE */ 865 pi.base = __sme_set(page_to_phys(svm->avic_backing_page) & 866 AVIC_HPA_MASK); 867 pi.ga_tag = AVIC_GATAG(to_kvm_svm(kvm)->avic_vm_id, 868 svm->vcpu.vcpu_id); 869 pi.is_guest_mode = true; 870 pi.vcpu_data = &vcpu_info; 871 ret = irq_set_vcpu_affinity(host_irq, &pi); 872 873 /** 874 * Here, we successfully setting up vcpu affinity in 875 * IOMMU guest mode. Now, we need to store the posted 876 * interrupt information in a per-vcpu ir_list so that 877 * we can reference to them directly when we update vcpu 878 * scheduling information in IOMMU irte. 879 */ 880 if (!ret && pi.is_guest_mode) 881 svm_ir_list_add(svm, &pi); 882 } else { 883 /* Use legacy mode in IRTE */ 884 struct amd_iommu_pi_data pi; 885 886 /** 887 * Here, pi is used to: 888 * - Tell IOMMU to use legacy mode for this interrupt. 889 * - Retrieve ga_tag of prior interrupt remapping data. 890 */ 891 pi.prev_ga_tag = 0; 892 pi.is_guest_mode = false; 893 ret = irq_set_vcpu_affinity(host_irq, &pi); 894 895 /** 896 * Check if the posted interrupt was previously 897 * setup with the guest_mode by checking if the ga_tag 898 * was cached. If so, we need to clean up the per-vcpu 899 * ir_list. 900 */ 901 if (!ret && pi.prev_ga_tag) { 902 int id = AVIC_GATAG_TO_VCPUID(pi.prev_ga_tag); 903 struct kvm_vcpu *vcpu; 904 905 vcpu = kvm_get_vcpu_by_id(kvm, id); 906 if (vcpu) 907 svm_ir_list_del(to_svm(vcpu), &pi); 908 } 909 } 910 911 if (!ret && svm) { 912 trace_kvm_pi_irte_update(host_irq, svm->vcpu.vcpu_id, 913 e->gsi, vcpu_info.vector, 914 vcpu_info.pi_desc_addr, set); 915 } 916 917 if (ret < 0) { 918 pr_err("%s: failed to update PI IRTE\n", __func__); 919 goto out; 920 } 921 } 922 923 ret = 0; 924 out: 925 srcu_read_unlock(&kvm->irq_srcu, idx); 926 return ret; 927 } 928 929 bool svm_check_apicv_inhibit_reasons(ulong bit) 930 { 931 ulong supported = BIT(APICV_INHIBIT_REASON_DISABLE) | 932 BIT(APICV_INHIBIT_REASON_ABSENT) | 933 BIT(APICV_INHIBIT_REASON_HYPERV) | 934 BIT(APICV_INHIBIT_REASON_NESTED) | 935 BIT(APICV_INHIBIT_REASON_IRQWIN) | 936 BIT(APICV_INHIBIT_REASON_PIT_REINJ) | 937 BIT(APICV_INHIBIT_REASON_X2APIC) | 938 BIT(APICV_INHIBIT_REASON_BLOCKIRQ); 939 940 return supported & BIT(bit); 941 } 942 943 944 static inline int 945 avic_update_iommu_vcpu_affinity(struct kvm_vcpu *vcpu, int cpu, bool r) 946 { 947 int ret = 0; 948 unsigned long flags; 949 struct amd_svm_iommu_ir *ir; 950 struct vcpu_svm *svm = to_svm(vcpu); 951 952 if (!kvm_arch_has_assigned_device(vcpu->kvm)) 953 return 0; 954 955 /* 956 * Here, we go through the per-vcpu ir_list to update all existing 957 * interrupt remapping table entry targeting this vcpu. 958 */ 959 spin_lock_irqsave(&svm->ir_list_lock, flags); 960 961 if (list_empty(&svm->ir_list)) 962 goto out; 963 964 list_for_each_entry(ir, &svm->ir_list, node) { 965 ret = amd_iommu_update_ga(cpu, r, ir->data); 966 if (ret) 967 break; 968 } 969 out: 970 spin_unlock_irqrestore(&svm->ir_list_lock, flags); 971 return ret; 972 } 973 974 void avic_vcpu_load(struct kvm_vcpu *vcpu, int cpu) 975 { 976 u64 entry; 977 /* ID = 0xff (broadcast), ID > 0xff (reserved) */ 978 int h_physical_id = kvm_cpu_get_apicid(cpu); 979 struct vcpu_svm *svm = to_svm(vcpu); 980 981 lockdep_assert_preemption_disabled(); 982 983 /* 984 * Since the host physical APIC id is 8 bits, 985 * we can support host APIC ID upto 255. 986 */ 987 if (WARN_ON(h_physical_id > AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK)) 988 return; 989 990 /* 991 * No need to update anything if the vCPU is blocking, i.e. if the vCPU 992 * is being scheduled in after being preempted. The CPU entries in the 993 * Physical APIC table and IRTE are consumed iff IsRun{ning} is '1'. 994 * If the vCPU was migrated, its new CPU value will be stuffed when the 995 * vCPU unblocks. 996 */ 997 if (kvm_vcpu_is_blocking(vcpu)) 998 return; 999 1000 entry = READ_ONCE(*(svm->avic_physical_id_cache)); 1001 WARN_ON(entry & AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK); 1002 1003 entry &= ~AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK; 1004 entry |= (h_physical_id & AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK); 1005 entry |= AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK; 1006 1007 WRITE_ONCE(*(svm->avic_physical_id_cache), entry); 1008 avic_update_iommu_vcpu_affinity(vcpu, h_physical_id, true); 1009 } 1010 1011 void avic_vcpu_put(struct kvm_vcpu *vcpu) 1012 { 1013 u64 entry; 1014 struct vcpu_svm *svm = to_svm(vcpu); 1015 1016 lockdep_assert_preemption_disabled(); 1017 1018 entry = READ_ONCE(*(svm->avic_physical_id_cache)); 1019 1020 /* Nothing to do if IsRunning == '0' due to vCPU blocking. */ 1021 if (!(entry & AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK)) 1022 return; 1023 1024 avic_update_iommu_vcpu_affinity(vcpu, -1, 0); 1025 1026 entry &= ~AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK; 1027 WRITE_ONCE(*(svm->avic_physical_id_cache), entry); 1028 } 1029 1030 void avic_vcpu_blocking(struct kvm_vcpu *vcpu) 1031 { 1032 if (!kvm_vcpu_apicv_active(vcpu)) 1033 return; 1034 1035 preempt_disable(); 1036 1037 /* 1038 * Unload the AVIC when the vCPU is about to block, _before_ 1039 * the vCPU actually blocks. 1040 * 1041 * Any IRQs that arrive before IsRunning=0 will not cause an 1042 * incomplete IPI vmexit on the source, therefore vIRR will also 1043 * be checked by kvm_vcpu_check_block() before blocking. The 1044 * memory barrier implicit in set_current_state orders writing 1045 * IsRunning=0 before reading the vIRR. The processor needs a 1046 * matching memory barrier on interrupt delivery between writing 1047 * IRR and reading IsRunning; the lack of this barrier might be 1048 * the cause of errata #1235). 1049 */ 1050 avic_vcpu_put(vcpu); 1051 1052 preempt_enable(); 1053 } 1054 1055 void avic_vcpu_unblocking(struct kvm_vcpu *vcpu) 1056 { 1057 int cpu; 1058 1059 if (!kvm_vcpu_apicv_active(vcpu)) 1060 return; 1061 1062 cpu = get_cpu(); 1063 WARN_ON(cpu != vcpu->cpu); 1064 1065 avic_vcpu_load(vcpu, cpu); 1066 1067 put_cpu(); 1068 } 1069