FILE
vgic-v3.c
File preview with syntax highlighting.
linux-6.19.14/arch/arm64/kvm/vgic/vgic-v3.c
1// SPDX-License-Identifier: GPL-2.0-only 2 3#include <linux/irqchip/arm-gic-v3.h> 4#include <linux/irq.h> 5#include <linux/irqdomain.h> 6#include <linux/kstrtox.h> 7#include <linux/kvm.h> 8#include <linux/kvm_host.h> 9#include <linux/string_choices.h> 10#include <kvm/arm_vgic.h> 11#include <asm/kvm_hyp.h> 12#include <asm/kvm_mmu.h> 13#include <asm/kvm_asm.h> 14 15#include "vgic-mmio.h" 16#include "vgic.h" 17 18static bool group0_trap; 19static bool group1_trap; 20static bool common_trap; 21static bool dir_trap; 22static bool gicv4_enable; 23 24void vgic_v3_configure_hcr(struct kvm_vcpu *vcpu, 25 struct ap_list_summary *als) 26{ 27 struct vgic_v3_cpu_if *cpuif = &vcpu->arch.vgic_cpu.vgic_v3; 28 29 if (!irqchip_in_kernel(vcpu->kvm)) 30 return; 31 32 cpuif->vgic_hcr = ICH_HCR_EL2_En; 33 34 if (irqs_pending_outside_lrs(als)) 35 cpuif->vgic_hcr |= ICH_HCR_EL2_NPIE; 36 if (irqs_active_outside_lrs(als)) 37 cpuif->vgic_hcr |= ICH_HCR_EL2_LRENPIE; 38 if (irqs_outside_lrs(als)) 39 cpuif->vgic_hcr |= ICH_HCR_EL2_UIE; 40 41 if (!als->nr_sgi) 42 cpuif->vgic_hcr |= ICH_HCR_EL2_vSGIEOICount; 43 44 cpuif->vgic_hcr |= (cpuif->vgic_vmcr & ICH_VMCR_ENG0_MASK) ? 45 ICH_HCR_EL2_VGrp0DIE : ICH_HCR_EL2_VGrp0EIE; 46 cpuif->vgic_hcr |= (cpuif->vgic_vmcr & ICH_VMCR_ENG1_MASK) ? 47 ICH_HCR_EL2_VGrp1DIE : ICH_HCR_EL2_VGrp1EIE; 48 49 /* 50 * Dealing with EOImode=1 is a massive source of headache. Not 51 * only do we need to track that we have active interrupts 52 * outside of the LRs and force DIR to be trapped, we also 53 * need to deal with SPIs that can be deactivated on another 54 * CPU. 55 * 56 * On systems that do not implement TDIR, force the bit in the 57 * shadow state anyway to avoid IPI-ing on these poor sods. 58 * 59 * Note that we set the trap irrespective of EOIMode, as that 60 * can change behind our back without any warning... 61 */ 62 if (!cpus_have_final_cap(ARM64_HAS_ICH_HCR_EL2_TDIR) || 63 irqs_active_outside_lrs(als) || 64 atomic_read(&vcpu->kvm->arch.vgic.active_spis)) 65 cpuif->vgic_hcr |= ICH_HCR_EL2_TDIR; 66} 67 68static bool lr_signals_eoi_mi(u64 lr_val) 69{ 70 return !(lr_val & ICH_LR_STATE) && (lr_val & ICH_LR_EOI) && 71 !(lr_val & ICH_LR_HW); 72} 73 74static void vgic_v3_fold_lr(struct kvm_vcpu *vcpu, u64 val) 75{ 76 struct vgic_irq *irq; 77 bool is_v2_sgi = false; 78 bool deactivated; 79 u32 intid; 80 81 if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) { 82 intid = val & ICH_LR_VIRTUAL_ID_MASK; 83 } else { 84 intid = val & GICH_LR_VIRTUALID; 85 is_v2_sgi = vgic_irq_is_sgi(intid); 86 } 87 88 irq = vgic_get_vcpu_irq(vcpu, intid); 89 if (!irq) /* An LPI could have been unmapped. */ 90 return; 91 92 scoped_guard(raw_spinlock, &irq->irq_lock) { 93 /* Always preserve the active bit for !LPIs, note deactivation */ 94 if (irq->intid >= VGIC_MIN_LPI) 95 val &= ~ICH_LR_ACTIVE_BIT; 96 deactivated = irq->active && !(val & ICH_LR_ACTIVE_BIT); 97 irq->active = !!(val & ICH_LR_ACTIVE_BIT); 98 99 /* Edge is the only case where we preserve the pending bit */ 100 if (irq->config == VGIC_CONFIG_EDGE && 101 (val & ICH_LR_PENDING_BIT)) 102 irq->pending_latch = true; 103 104 /* 105 * Clear soft pending state when level irqs have been acked. 106 */ 107 if (irq->config == VGIC_CONFIG_LEVEL && !(val & ICH_LR_STATE)) 108 irq->pending_latch = false; 109 110 if (is_v2_sgi) { 111 u8 cpuid = FIELD_GET(GICH_LR_PHYSID_CPUID, val); 112 113 if (irq->active) 114 irq->active_source = cpuid; 115 116 if (val & ICH_LR_PENDING_BIT) 117 irq->source |= BIT(cpuid); 118 } 119 120 /* Handle resampling for mapped interrupts if required */ 121 vgic_irq_handle_resampling(irq, deactivated, val & ICH_LR_PENDING_BIT); 122 123 irq->on_lr = false; 124 } 125 126 /* Notify fds when the guest EOI'ed a level-triggered SPI, and drop the refcount */ 127 if (deactivated && lr_signals_eoi_mi(val) && vgic_valid_spi(vcpu->kvm, intid)) { 128 kvm_notify_acked_irq(vcpu->kvm, 0, 129 intid - VGIC_NR_PRIVATE_IRQS); 130 atomic_dec_if_positive(&vcpu->kvm->arch.vgic.active_spis); 131 } 132 133 vgic_put_irq(vcpu->kvm, irq); 134} 135 136static u64 vgic_v3_compute_lr(struct kvm_vcpu *vcpu, struct vgic_irq *irq); 137 138static void vgic_v3_deactivate_phys(u32 intid) 139{ 140 if (cpus_have_final_cap(ARM64_HAS_GICV5_LEGACY)) 141 gic_insn(intid | FIELD_PREP(GICV5_GIC_CDDI_TYPE_MASK, 1), CDDI); 142 else 143 gic_write_dir(intid); 144} 145 146void vgic_v3_fold_lr_state(struct kvm_vcpu *vcpu) 147{ 148 struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu; 149 struct vgic_v3_cpu_if *cpuif = &vgic_cpu->vgic_v3; 150 u32 eoicount = FIELD_GET(ICH_HCR_EL2_EOIcount, cpuif->vgic_hcr); 151 struct vgic_irq *irq = *host_data_ptr(last_lr_irq); 152 153 DEBUG_SPINLOCK_BUG_ON(!irqs_disabled()); 154 155 for (int lr = 0; lr < cpuif->used_lrs; lr++) 156 vgic_v3_fold_lr(vcpu, cpuif->vgic_lr[lr]); 157 158 /* 159 * EOIMode=0: use EOIcount to emulate deactivation. We are 160 * guaranteed to deactivate in reverse order of the activation, so 161 * just pick one active interrupt after the other in the tail part 162 * of the ap_list, past the LRs, and replay the deactivation as if 163 * the CPU was doing it. We also rely on priority drop to have taken 164 * place, and the list to be sorted by priority. 165 */ 166 list_for_each_entry_continue(irq, &vgic_cpu->ap_list_head, ap_list) { 167 u64 lr; 168 169 /* 170 * I would have loved to write this using a scoped_guard(), 171 * but using 'continue' here is a total train wreck. 172 */ 173 if (!eoicount) { 174 break; 175 } else { 176 guard(raw_spinlock)(&irq->irq_lock); 177 178 if (!(likely(vgic_target_oracle(irq) == vcpu) && 179 irq->active)) 180 continue; 181 182 lr = vgic_v3_compute_lr(vcpu, irq) & ~ICH_LR_ACTIVE_BIT; 183 } 184 185 if (lr & ICH_LR_HW) 186 vgic_v3_deactivate_phys(FIELD_GET(ICH_LR_PHYS_ID_MASK, lr)); 187 188 vgic_v3_fold_lr(vcpu, lr); 189 eoicount--; 190 } 191 192 cpuif->used_lrs = 0; 193} 194 195void vgic_v3_deactivate(struct kvm_vcpu *vcpu, u64 val) 196{ 197 struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu; 198 struct vgic_v3_cpu_if *cpuif = &vgic_cpu->vgic_v3; 199 u32 model = vcpu->kvm->arch.vgic.vgic_model; 200 struct kvm_vcpu *target_vcpu = NULL; 201 bool mmio = false, is_v2_sgi; 202 struct vgic_irq *irq; 203 unsigned long flags; 204 u64 lr = 0; 205 u8 cpuid; 206 207 /* Snapshot CPUID, and remove it from the INTID */ 208 cpuid = FIELD_GET(GENMASK_ULL(12, 10), val); 209 val &= ~GENMASK_ULL(12, 10); 210 211 is_v2_sgi = (model == KVM_DEV_TYPE_ARM_VGIC_V2 && 212 val < VGIC_NR_SGIS); 213 214 /* 215 * We only deal with DIR when EOIMode==1, and only for SGI, 216 * PPI or SPI. 217 */ 218 if (!(cpuif->vgic_vmcr & ICH_VMCR_EOIM_MASK) || 219 val >= vcpu->kvm->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS) 220 return; 221 222 /* Make sure we're in the same context as LR handling */ 223 local_irq_save(flags); 224 225 irq = vgic_get_vcpu_irq(vcpu, val); 226 if (WARN_ON_ONCE(!irq)) 227 goto out; 228 229 /* 230 * EOIMode=1: we must rely on traps to handle deactivate of 231 * overflowing interrupts, as there is no ordering guarantee and 232 * EOIcount isn't being incremented. Priority drop will have taken 233 * place, as ICV_EOIxR_EL1 only affects the APRs and not the LRs. 234 * 235 * Three possibities: 236 * 237 * - The irq is not queued on any CPU, and there is nothing to 238 * do, 239 * 240 * - Or the irq is in an LR, meaning that its state is not 241 * directly observable. Treat it bluntly by making it as if 242 * this was a write to GICD_ICACTIVER, which will force an 243 * exit on all vcpus. If it hurts, don't do that. 244 * 245 * - Or the irq is active, but not in an LR, and we can 246 * directly deactivate it by building a pseudo-LR, fold it, 247 * and queue a request to prune the resulting ap_list, 248 * 249 * Special care must be taken to match the source CPUID when 250 * deactivating a GICv2 SGI. 251 */ 252 scoped_guard(raw_spinlock, &irq->irq_lock) { 253 target_vcpu = irq->vcpu; 254 255 /* Not on any ap_list? */ 256 if (!target_vcpu) 257 goto put; 258 259 /* 260 * Urgh. We're deactivating something that we cannot 261 * observe yet... Big hammer time. 262 */ 263 if (irq->on_lr) { 264 mmio = true; 265 goto put; 266 } 267 268 /* GICv2 SGI: check that the cpuid matches */ 269 if (is_v2_sgi && irq->active_source != cpuid) { 270 target_vcpu = NULL; 271 goto put; 272 } 273 274 /* (with a Dalek voice) DEACTIVATE!!!! */ 275 lr = vgic_v3_compute_lr(vcpu, irq) & ~ICH_LR_ACTIVE_BIT; 276 } 277 278 if (lr & ICH_LR_HW) 279 vgic_v3_deactivate_phys(FIELD_GET(ICH_LR_PHYS_ID_MASK, lr)); 280 281 vgic_v3_fold_lr(vcpu, lr); 282 283put: 284 vgic_put_irq(vcpu->kvm, irq); 285 286out: 287 local_irq_restore(flags); 288 289 if (mmio) 290 vgic_mmio_write_cactive(vcpu, (val / 32) * 4, 4, BIT(val % 32)); 291 292 /* Force the ap_list to be pruned */ 293 if (target_vcpu) 294 kvm_make_request(KVM_REQ_VGIC_PROCESS_UPDATE, target_vcpu); 295} 296 297/* Requires the irq to be locked already */ 298static u64 vgic_v3_compute_lr(struct kvm_vcpu *vcpu, struct vgic_irq *irq) 299{ 300 u32 model = vcpu->kvm->arch.vgic.vgic_model; 301 u64 val = irq->intid; 302 bool allow_pending = true, is_v2_sgi; 303 304 WARN_ON(irq->on_lr); 305 306 is_v2_sgi = (vgic_irq_is_sgi(irq->intid) && 307 model == KVM_DEV_TYPE_ARM_VGIC_V2); 308 309 if (irq->active) { 310 val |= ICH_LR_ACTIVE_BIT; 311 if (is_v2_sgi) 312 val |= irq->active_source << GICH_LR_PHYSID_CPUID_SHIFT; 313 if (vgic_irq_is_multi_sgi(irq)) { 314 allow_pending = false; 315 val |= ICH_LR_EOI; 316 } 317 } 318 319 if (irq->hw && !vgic_irq_needs_resampling(irq)) { 320 val |= ICH_LR_HW; 321 val |= ((u64)irq->hwintid) << ICH_LR_PHYS_ID_SHIFT; 322 /* 323 * Never set pending+active on a HW interrupt, as the 324 * pending state is kept at the physical distributor 325 * level. 326 */ 327 if (irq->active) 328 allow_pending = false; 329 } else { 330 if (irq->config == VGIC_CONFIG_LEVEL) { 331 val |= ICH_LR_EOI; 332 333 /* 334 * Software resampling doesn't work very well 335 * if we allow P+A, so let's not do that. 336 */ 337 if (irq->active) 338 allow_pending = false; 339 } 340 } 341 342 if (allow_pending && irq_is_pending(irq)) { 343 val |= ICH_LR_PENDING_BIT; 344 345 if (is_v2_sgi) { 346 u32 src = ffs(irq->source); 347 348 if (WARN_RATELIMIT(!src, "No SGI source for INTID %d\n", 349 irq->intid)) 350 return 0; 351 352 val |= (src - 1) << GICH_LR_PHYSID_CPUID_SHIFT; 353 if (irq->source & ~BIT(src - 1)) 354 val |= ICH_LR_EOI; 355 } 356 } 357 358 if (irq->group) 359 val |= ICH_LR_GROUP; 360 361 val |= (u64)irq->priority << ICH_LR_PRIORITY_SHIFT; 362 363 return val; 364} 365 366void vgic_v3_populate_lr(struct kvm_vcpu *vcpu, struct vgic_irq *irq, int lr) 367{ 368 u32 model = vcpu->kvm->arch.vgic.vgic_model; 369 u64 val = vgic_v3_compute_lr(vcpu, irq); 370 371 vcpu->arch.vgic_cpu.vgic_v3.vgic_lr[lr] = val; 372 373 if (val & ICH_LR_PENDING_BIT) { 374 if (irq->config == VGIC_CONFIG_EDGE) 375 irq->pending_latch = false; 376 377 if (vgic_irq_is_sgi(irq->intid) && 378 model == KVM_DEV_TYPE_ARM_VGIC_V2) { 379 u32 src = ffs(irq->source); 380 381 irq->source &= ~BIT(src - 1); 382 if (irq->source) 383 irq->pending_latch = true; 384 } 385 } 386 387 /* 388 * Level-triggered mapped IRQs are special because we only observe 389 * rising edges as input to the VGIC. We therefore lower the line 390 * level here, so that we can take new virtual IRQs. See 391 * vgic_v3_fold_lr_state for more info. 392 */ 393 if (vgic_irq_is_mapped_level(irq) && (val & ICH_LR_PENDING_BIT)) 394 irq->line_level = false; 395 396 irq->on_lr = true; 397} 398 399void vgic_v3_clear_lr(struct kvm_vcpu *vcpu, int lr) 400{ 401 vcpu->arch.vgic_cpu.vgic_v3.vgic_lr[lr] = 0; 402} 403 404void vgic_v3_set_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp) 405{ 406 struct vgic_v3_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v3; 407 u32 model = vcpu->kvm->arch.vgic.vgic_model; 408 u32 vmcr; 409 410 if (model == KVM_DEV_TYPE_ARM_VGIC_V2) { 411 vmcr = (vmcrp->ackctl << ICH_VMCR_ACK_CTL_SHIFT) & 412 ICH_VMCR_ACK_CTL_MASK; 413 vmcr |= (vmcrp->fiqen << ICH_VMCR_FIQ_EN_SHIFT) & 414 ICH_VMCR_FIQ_EN_MASK; 415 } else { 416 /* 417 * When emulating GICv3 on GICv3 with SRE=1 on the 418 * VFIQEn bit is RES1 and the VAckCtl bit is RES0. 419 */ 420 vmcr = ICH_VMCR_FIQ_EN_MASK; 421 } 422 423 vmcr |= (vmcrp->cbpr << ICH_VMCR_CBPR_SHIFT) & ICH_VMCR_CBPR_MASK; 424 vmcr |= (vmcrp->eoim << ICH_VMCR_EOIM_SHIFT) & ICH_VMCR_EOIM_MASK; 425 vmcr |= (vmcrp->abpr << ICH_VMCR_BPR1_SHIFT) & ICH_VMCR_BPR1_MASK; 426 vmcr |= (vmcrp->bpr << ICH_VMCR_BPR0_SHIFT) & ICH_VMCR_BPR0_MASK; 427 vmcr |= (vmcrp->pmr << ICH_VMCR_PMR_SHIFT) & ICH_VMCR_PMR_MASK; 428 vmcr |= (vmcrp->grpen0 << ICH_VMCR_ENG0_SHIFT) & ICH_VMCR_ENG0_MASK; 429 vmcr |= (vmcrp->grpen1 << ICH_VMCR_ENG1_SHIFT) & ICH_VMCR_ENG1_MASK; 430 431 cpu_if->vgic_vmcr = vmcr; 432} 433 434void vgic_v3_get_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp) 435{ 436 struct vgic_v3_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v3; 437 u32 model = vcpu->kvm->arch.vgic.vgic_model; 438 u32 vmcr; 439 440 vmcr = cpu_if->vgic_vmcr; 441 442 if (model == KVM_DEV_TYPE_ARM_VGIC_V2) { 443 vmcrp->ackctl = (vmcr & ICH_VMCR_ACK_CTL_MASK) >> 444 ICH_VMCR_ACK_CTL_SHIFT; 445 vmcrp->fiqen = (vmcr & ICH_VMCR_FIQ_EN_MASK) >> 446 ICH_VMCR_FIQ_EN_SHIFT; 447 } else { 448 /* 449 * When emulating GICv3 on GICv3 with SRE=1 on the 450 * VFIQEn bit is RES1 and the VAckCtl bit is RES0. 451 */ 452 vmcrp->fiqen = 1; 453 vmcrp->ackctl = 0; 454 } 455 456 vmcrp->cbpr = (vmcr & ICH_VMCR_CBPR_MASK) >> ICH_VMCR_CBPR_SHIFT; 457 vmcrp->eoim = (vmcr & ICH_VMCR_EOIM_MASK) >> ICH_VMCR_EOIM_SHIFT; 458 vmcrp->abpr = (vmcr & ICH_VMCR_BPR1_MASK) >> ICH_VMCR_BPR1_SHIFT; 459 vmcrp->bpr = (vmcr & ICH_VMCR_BPR0_MASK) >> ICH_VMCR_BPR0_SHIFT; 460 vmcrp->pmr = (vmcr & ICH_VMCR_PMR_MASK) >> ICH_VMCR_PMR_SHIFT; 461 vmcrp->grpen0 = (vmcr & ICH_VMCR_ENG0_MASK) >> ICH_VMCR_ENG0_SHIFT; 462 vmcrp->grpen1 = (vmcr & ICH_VMCR_ENG1_MASK) >> ICH_VMCR_ENG1_SHIFT; 463} 464 465#define INITIAL_PENDBASER_VALUE \ 466 (GIC_BASER_CACHEABILITY(GICR_PENDBASER, INNER, RaWb) | \ 467 GIC_BASER_CACHEABILITY(GICR_PENDBASER, OUTER, SameAsInner) | \ 468 GIC_BASER_SHAREABILITY(GICR_PENDBASER, InnerShareable)) 469 470void vgic_v3_reset(struct kvm_vcpu *vcpu) 471{ 472 struct vgic_v3_cpu_if *vgic_v3 = &vcpu->arch.vgic_cpu.vgic_v3; 473 474 /* 475 * By forcing VMCR to zero, the GIC will restore the binary 476 * points to their reset values. Anything else resets to zero 477 * anyway. 478 */ 479 vgic_v3->vgic_vmcr = 0; 480 481 /* 482 * If we are emulating a GICv3, we do it in an non-GICv2-compatible 483 * way, so we force SRE to 1 to demonstrate this to the guest. 484 * Also, we don't support any form of IRQ/FIQ bypass. 485 * This goes with the spec allowing the value to be RAO/WI. 486 */ 487 if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) { 488 vgic_v3->vgic_sre = (ICC_SRE_EL1_DIB | 489 ICC_SRE_EL1_DFB | 490 ICC_SRE_EL1_SRE); 491 vcpu->arch.vgic_cpu.pendbaser = INITIAL_PENDBASER_VALUE; 492 } else { 493 vgic_v3->vgic_sre = 0; 494 } 495 496 vcpu->arch.vgic_cpu.num_id_bits = FIELD_GET(ICH_VTR_EL2_IDbits, 497 kvm_vgic_global_state.ich_vtr_el2); 498 vcpu->arch.vgic_cpu.num_pri_bits = FIELD_GET(ICH_VTR_EL2_PRIbits, 499 kvm_vgic_global_state.ich_vtr_el2) + 1; 500} 501 502void vcpu_set_ich_hcr(struct kvm_vcpu *vcpu) 503{ 504 struct vgic_v3_cpu_if *vgic_v3 = &vcpu->arch.vgic_cpu.vgic_v3; 505 506 if (!vgic_is_v3(vcpu->kvm)) 507 return; 508 509 /* Hide GICv3 sysreg if necessary */ 510 if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V2 || 511 !irqchip_in_kernel(vcpu->kvm)) 512 vgic_v3->vgic_hcr |= (ICH_HCR_EL2_TALL0 | ICH_HCR_EL2_TALL1 | 513 ICH_HCR_EL2_TC); 514} 515 516int vgic_v3_lpi_sync_pending_status(struct kvm *kvm, struct vgic_irq *irq) 517{ 518 struct kvm_vcpu *vcpu; 519 int byte_offset, bit_nr; 520 gpa_t pendbase, ptr; 521 bool status; 522 u8 val; 523 int ret; 524 unsigned long flags; 525 526retry: 527 vcpu = irq->target_vcpu; 528 if (!vcpu) 529 return 0; 530 531 pendbase = GICR_PENDBASER_ADDRESS(vcpu->arch.vgic_cpu.pendbaser); 532 533 byte_offset = irq->intid / BITS_PER_BYTE; 534 bit_nr = irq->intid % BITS_PER_BYTE; 535 ptr = pendbase + byte_offset; 536 537 ret = kvm_read_guest_lock(kvm, ptr, &val, 1); 538 if (ret) 539 return ret; 540 541 status = val & (1 << bit_nr); 542 543 raw_spin_lock_irqsave(&irq->irq_lock, flags); 544 if (irq->target_vcpu != vcpu) { 545 raw_spin_unlock_irqrestore(&irq->irq_lock, flags); 546 goto retry; 547 } 548 irq->pending_latch = status; 549 vgic_queue_irq_unlock(vcpu->kvm, irq, flags); 550 551 if (status) { 552 /* clear consumed data */ 553 val &= ~(1 << bit_nr); 554 ret = vgic_write_guest_lock(kvm, ptr, &val, 1); 555 if (ret) 556 return ret; 557 } 558 return 0; 559} 560 561/* 562 * The deactivation of the doorbell interrupt will trigger the 563 * unmapping of the associated vPE. 564 */ 565static void unmap_all_vpes(struct kvm *kvm) 566{ 567 struct vgic_dist *dist = &kvm->arch.vgic; 568 int i; 569 570 for (i = 0; i < dist->its_vm.nr_vpes; i++) 571 free_irq(dist->its_vm.vpes[i]->irq, kvm_get_vcpu(kvm, i)); 572} 573 574static void map_all_vpes(struct kvm *kvm) 575{ 576 struct vgic_dist *dist = &kvm->arch.vgic; 577 int i; 578 579 for (i = 0; i < dist->its_vm.nr_vpes; i++) 580 WARN_ON(vgic_v4_request_vpe_irq(kvm_get_vcpu(kvm, i), 581 dist->its_vm.vpes[i]->irq)); 582} 583 584/* 585 * vgic_v3_save_pending_tables - Save the pending tables into guest RAM 586 * kvm lock and all vcpu lock must be held 587 */ 588int vgic_v3_save_pending_tables(struct kvm *kvm) 589{ 590 struct vgic_dist *dist = &kvm->arch.vgic; 591 struct vgic_irq *irq; 592 gpa_t last_ptr = ~(gpa_t)0; 593 bool vlpi_avail = false; 594 unsigned long index; 595 int ret = 0; 596 u8 val; 597 598 if (unlikely(!vgic_initialized(kvm))) 599 return -ENXIO; 600 601 /* 602 * A preparation for getting any VLPI states. 603 * The above vgic initialized check also ensures that the allocation 604 * and enabling of the doorbells have already been done. 605 */ 606 if (kvm_vgic_global_state.has_gicv4_1) { 607 unmap_all_vpes(kvm); 608 vlpi_avail = true; 609 } 610 611 xa_for_each(&dist->lpi_xa, index, irq) { 612 int byte_offset, bit_nr; 613 struct kvm_vcpu *vcpu; 614 gpa_t pendbase, ptr; 615 bool is_pending; 616 bool stored; 617 618 vcpu = irq->target_vcpu; 619 if (!vcpu) 620 continue; 621 622 pendbase = GICR_PENDBASER_ADDRESS(vcpu->arch.vgic_cpu.pendbaser); 623 624 byte_offset = irq->intid / BITS_PER_BYTE; 625 bit_nr = irq->intid % BITS_PER_BYTE; 626 ptr = pendbase + byte_offset; 627 628 if (ptr != last_ptr) { 629 ret = kvm_read_guest_lock(kvm, ptr, &val, 1); 630 if (ret) 631 goto out; 632 last_ptr = ptr; 633 } 634 635 stored = val & (1U << bit_nr); 636 637 is_pending = irq->pending_latch; 638 639 if (irq->hw && vlpi_avail) 640 vgic_v4_get_vlpi_state(irq, &is_pending); 641 642 if (stored == is_pending) 643 continue; 644 645 if (is_pending) 646 val |= 1 << bit_nr; 647 else 648 val &= ~(1 << bit_nr); 649 650 ret = vgic_write_guest_lock(kvm, ptr, &val, 1); 651 if (ret) 652 goto out; 653 } 654 655out: 656 if (vlpi_avail) 657 map_all_vpes(kvm); 658 659 return ret; 660} 661 662/** 663 * vgic_v3_rdist_overlap - check if a region overlaps with any 664 * existing redistributor region 665 * 666 * @kvm: kvm handle 667 * @base: base of the region 668 * @size: size of region 669 * 670 * Return: true if there is an overlap 671 */ 672bool vgic_v3_rdist_overlap(struct kvm *kvm, gpa_t base, size_t size) 673{ 674 struct vgic_dist *d = &kvm->arch.vgic; 675 struct vgic_redist_region *rdreg; 676 677 list_for_each_entry(rdreg, &d->rd_regions, list) { 678 if ((base + size > rdreg->base) && 679 (base < rdreg->base + vgic_v3_rd_region_size(kvm, rdreg))) 680 return true; 681 } 682 return false; 683} 684 685/* 686 * Check for overlapping regions and for regions crossing the end of memory 687 * for base addresses which have already been set. 688 */ 689bool vgic_v3_check_base(struct kvm *kvm) 690{ 691 struct vgic_dist *d = &kvm->arch.vgic; 692 struct vgic_redist_region *rdreg; 693 694 if (!IS_VGIC_ADDR_UNDEF(d->vgic_dist_base) && 695 d->vgic_dist_base + KVM_VGIC_V3_DIST_SIZE < d->vgic_dist_base) 696 return false; 697 698 list_for_each_entry(rdreg, &d->rd_regions, list) { 699 size_t sz = vgic_v3_rd_region_size(kvm, rdreg); 700 701 if (vgic_check_iorange(kvm, VGIC_ADDR_UNDEF, 702 rdreg->base, SZ_64K, sz)) 703 return false; 704 } 705 706 if (IS_VGIC_ADDR_UNDEF(d->vgic_dist_base)) 707 return true; 708 709 return !vgic_v3_rdist_overlap(kvm, d->vgic_dist_base, 710 KVM_VGIC_V3_DIST_SIZE); 711} 712 713/** 714 * vgic_v3_rdist_free_slot - Look up registered rdist regions and identify one 715 * which has free space to put a new rdist region. 716 * 717 * @rd_regions: redistributor region list head 718 * 719 * A redistributor regions maps n redistributors, n = region size / (2 x 64kB). 720 * Stride between redistributors is 0 and regions are filled in the index order. 721 * 722 * Return: the redist region handle, if any, that has space to map a new rdist 723 * region. 724 */ 725struct vgic_redist_region *vgic_v3_rdist_free_slot(struct list_head *rd_regions) 726{ 727 struct vgic_redist_region *rdreg; 728 729 list_for_each_entry(rdreg, rd_regions, list) { 730 if (!vgic_v3_redist_region_full(rdreg)) 731 return rdreg; 732 } 733 return NULL; 734} 735 736struct vgic_redist_region *vgic_v3_rdist_region_from_index(struct kvm *kvm, 737 u32 index) 738{ 739 struct list_head *rd_regions = &kvm->arch.vgic.rd_regions; 740 struct vgic_redist_region *rdreg; 741 742 list_for_each_entry(rdreg, rd_regions, list) { 743 if (rdreg->index == index) 744 return rdreg; 745 } 746 return NULL; 747} 748 749 750int vgic_v3_map_resources(struct kvm *kvm) 751{ 752 struct vgic_dist *dist = &kvm->arch.vgic; 753 struct kvm_vcpu *vcpu; 754 unsigned long c; 755 756 kvm_for_each_vcpu(c, vcpu, kvm) { 757 struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu; 758 759 if (IS_VGIC_ADDR_UNDEF(vgic_cpu->rd_iodev.base_addr)) { 760 kvm_debug("vcpu %ld redistributor base not set\n", c); 761 return -ENXIO; 762 } 763 } 764 765 if (IS_VGIC_ADDR_UNDEF(dist->vgic_dist_base)) { 766 kvm_debug("Need to set vgic distributor addresses first\n"); 767 return -ENXIO; 768 } 769 770 if (!vgic_v3_check_base(kvm)) { 771 kvm_debug("VGIC redist and dist frames overlap\n"); 772 return -EINVAL; 773 } 774 775 /* 776 * For a VGICv3 we require the userland to explicitly initialize 777 * the VGIC before we need to use it. 778 */ 779 if (!vgic_initialized(kvm)) { 780 return -EBUSY; 781 } 782 783 if (kvm_vgic_global_state.has_gicv4_1) 784 vgic_v4_configure_vsgis(kvm); 785 786 return 0; 787} 788 789DEFINE_STATIC_KEY_FALSE(vgic_v3_cpuif_trap); 790DEFINE_STATIC_KEY_FALSE(vgic_v3_has_v2_compat); 791 792static int __init early_group0_trap_cfg(char *buf) 793{ 794 return kstrtobool(buf, &group0_trap); 795} 796early_param("kvm-arm.vgic_v3_group0_trap", early_group0_trap_cfg); 797 798static int __init early_group1_trap_cfg(char *buf) 799{ 800 return kstrtobool(buf, &group1_trap); 801} 802early_param("kvm-arm.vgic_v3_group1_trap", early_group1_trap_cfg); 803 804static int __init early_common_trap_cfg(char *buf) 805{ 806 return kstrtobool(buf, &common_trap); 807} 808early_param("kvm-arm.vgic_v3_common_trap", early_common_trap_cfg); 809 810static int __init early_gicv4_enable(char *buf) 811{ 812 return kstrtobool(buf, &gicv4_enable); 813} 814early_param("kvm-arm.vgic_v4_enable", early_gicv4_enable); 815 816static const struct midr_range broken_seis[] = { 817 MIDR_ALL_VERSIONS(MIDR_APPLE_M1_ICESTORM), 818 MIDR_ALL_VERSIONS(MIDR_APPLE_M1_FIRESTORM), 819 MIDR_ALL_VERSIONS(MIDR_APPLE_M1_ICESTORM_PRO), 820 MIDR_ALL_VERSIONS(MIDR_APPLE_M1_FIRESTORM_PRO), 821 MIDR_ALL_VERSIONS(MIDR_APPLE_M1_ICESTORM_MAX), 822 MIDR_ALL_VERSIONS(MIDR_APPLE_M1_FIRESTORM_MAX), 823 MIDR_ALL_VERSIONS(MIDR_APPLE_M2_BLIZZARD), 824 MIDR_ALL_VERSIONS(MIDR_APPLE_M2_AVALANCHE), 825 MIDR_ALL_VERSIONS(MIDR_APPLE_M2_BLIZZARD_PRO), 826 MIDR_ALL_VERSIONS(MIDR_APPLE_M2_AVALANCHE_PRO), 827 MIDR_ALL_VERSIONS(MIDR_APPLE_M2_BLIZZARD_MAX), 828 MIDR_ALL_VERSIONS(MIDR_APPLE_M2_AVALANCHE_MAX), 829 {}, 830}; 831 832static bool vgic_v3_broken_seis(void) 833{ 834 return (is_kernel_in_hyp_mode() && 835 is_midr_in_range_list(broken_seis) && 836 (read_sysreg_s(SYS_ICH_VTR_EL2) & ICH_VTR_EL2_SEIS)); 837} 838 839void noinstr kvm_compute_ich_hcr_trap_bits(struct alt_instr *alt, 840 __le32 *origptr, __le32 *updptr, 841 int nr_inst) 842{ 843 u32 insn, oinsn, rd; 844 u64 hcr = 0; 845 846 if (cpus_have_cap(ARM64_WORKAROUND_CAVIUM_30115)) { 847 group0_trap = true; 848 group1_trap = true; 849 } 850 851 if (vgic_v3_broken_seis()) { 852 /* We know that these machines have ICH_HCR_EL2.TDIR */ 853 group0_trap = true; 854 group1_trap = true; 855 dir_trap = true; 856 } 857 858 if (!cpus_have_cap(ARM64_HAS_ICH_HCR_EL2_TDIR)) 859 common_trap = true; 860 861 if (group0_trap) 862 hcr |= ICH_HCR_EL2_TALL0; 863 if (group1_trap) 864 hcr |= ICH_HCR_EL2_TALL1; 865 if (common_trap) 866 hcr |= ICH_HCR_EL2_TC; 867 if (dir_trap) 868 hcr |= ICH_HCR_EL2_TDIR; 869 870 /* Compute target register */ 871 oinsn = le32_to_cpu(*origptr); 872 rd = aarch64_insn_decode_register(AARCH64_INSN_REGTYPE_RD, oinsn); 873 874 /* movz rd, #(val & 0xffff) */ 875 insn = aarch64_insn_gen_movewide(rd, 876 (u16)hcr, 877 0, 878 AARCH64_INSN_VARIANT_64BIT, 879 AARCH64_INSN_MOVEWIDE_ZERO); 880 *updptr = cpu_to_le32(insn); 881} 882 883/** 884 * vgic_v3_probe - probe for a VGICv3 compatible interrupt controller 885 * @info: pointer to the GIC description 886 * 887 * Returns 0 if the VGICv3 has been probed successfully, returns an error code 888 * otherwise 889 */ 890int vgic_v3_probe(const struct gic_kvm_info *info) 891{ 892 u64 ich_vtr_el2 = kvm_call_hyp_ret(__vgic_v3_get_gic_config); 893 bool has_v2; 894 u64 traps; 895 int ret; 896 897 has_v2 = ich_vtr_el2 >> 63; 898 ich_vtr_el2 = (u32)ich_vtr_el2; 899 900 /* 901 * The ListRegs field is 5 bits, but there is an architectural 902 * maximum of 16 list registers. Just ignore bit 4... 903 */ 904 kvm_vgic_global_state.nr_lr = (ich_vtr_el2 & 0xf) + 1; 905 kvm_vgic_global_state.can_emulate_gicv2 = false; 906 kvm_vgic_global_state.ich_vtr_el2 = ich_vtr_el2; 907 908 /* GICv4 support? */ 909 if (info->has_v4) { 910 kvm_vgic_global_state.has_gicv4 = gicv4_enable; 911 kvm_vgic_global_state.has_gicv4_1 = info->has_v4_1 && gicv4_enable; 912 kvm_info("GICv4%s support %s\n", 913 kvm_vgic_global_state.has_gicv4_1 ? ".1" : "", 914 str_enabled_disabled(gicv4_enable)); 915 } 916 917 kvm_vgic_global_state.vcpu_base = 0; 918 919 if (!info->vcpu.start) { 920 kvm_info("GICv3: no GICV resource entry\n"); 921 } else if (!has_v2) { 922 pr_warn(FW_BUG "CPU interface incapable of MMIO access\n"); 923 } else if (!PAGE_ALIGNED(info->vcpu.start)) { 924 pr_warn("GICV physical address 0x%llx not page aligned\n", 925 (unsigned long long)info->vcpu.start); 926 } else if (kvm_get_mode() != KVM_MODE_PROTECTED) { 927 kvm_vgic_global_state.vcpu_base = info->vcpu.start; 928 kvm_vgic_global_state.can_emulate_gicv2 = true; 929 ret = kvm_register_vgic_device(KVM_DEV_TYPE_ARM_VGIC_V2); 930 if (ret) { 931 kvm_err("Cannot register GICv2 KVM device.\n"); 932 return ret; 933 } 934 kvm_info("vgic-v2@%llx\n", info->vcpu.start); 935 } 936 ret = kvm_register_vgic_device(KVM_DEV_TYPE_ARM_VGIC_V3); 937 if (ret) { 938 kvm_err("Cannot register GICv3 KVM device.\n"); 939 kvm_unregister_device_ops(KVM_DEV_TYPE_ARM_VGIC_V2); 940 return ret; 941 } 942 943 if (kvm_vgic_global_state.vcpu_base == 0) 944 kvm_info("disabling GICv2 emulation\n"); 945 946 /* 947 * Flip the static branch if the HW supports v2, even if we're 948 * not using it (such as in protected mode). 949 */ 950 if (has_v2) 951 static_branch_enable(&vgic_v3_has_v2_compat); 952 953 if (vgic_v3_broken_seis()) { 954 kvm_info("GICv3 with broken locally generated SEI\n"); 955 kvm_vgic_global_state.ich_vtr_el2 &= ~ICH_VTR_EL2_SEIS; 956 } 957 958 traps = vgic_ich_hcr_trap_bits(); 959 if (traps) { 960 kvm_info("GICv3 sysreg trapping enabled ([%s%s%s%s], reduced performance)\n", 961 (traps & ICH_HCR_EL2_TALL0) ? "G0" : "", 962 (traps & ICH_HCR_EL2_TALL1) ? "G1" : "", 963 (traps & ICH_HCR_EL2_TC) ? "C" : "", 964 (traps & ICH_HCR_EL2_TDIR) ? "D" : ""); 965 static_branch_enable(&vgic_v3_cpuif_trap); 966 } 967 968 kvm_vgic_global_state.vctrl_base = NULL; 969 kvm_vgic_global_state.type = VGIC_V3; 970 kvm_vgic_global_state.max_gic_vcpus = VGIC_V3_MAX_CPUS; 971 972 return 0; 973} 974 975void vgic_v3_load(struct kvm_vcpu *vcpu) 976{ 977 struct vgic_v3_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v3; 978 979 /* If the vgic is nested, perform the full state loading */ 980 if (vgic_state_is_nested(vcpu)) { 981 vgic_v3_load_nested(vcpu); 982 return; 983 } 984 985 if (likely(!is_protected_kvm_enabled())) 986 kvm_call_hyp(__vgic_v3_restore_vmcr_aprs, cpu_if); 987 988 if (has_vhe()) 989 __vgic_v3_activate_traps(cpu_if); 990 991 WARN_ON(vgic_v4_load(vcpu)); 992} 993 994void vgic_v3_put(struct kvm_vcpu *vcpu) 995{ 996 struct vgic_v3_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v3; 997 998 if (vgic_state_is_nested(vcpu)) { 999 vgic_v3_put_nested(vcpu); 1000 return; 1001 } 1002 1003 if (likely(!is_protected_kvm_enabled())) 1004 kvm_call_hyp(__vgic_v3_save_aprs, cpu_if); 1005 WARN_ON(vgic_v4_put(vcpu)); 1006 1007 if (has_vhe()) 1008 __vgic_v3_deactivate_traps(cpu_if); 1009}
~/
Read-only file preview.