aboutsummaryrefslogtreecommitdiffstats
path: root/virt/kvm
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-01-23 00:40:43 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-01-23 00:40:43 -0500
commit7ebd3faa9b5b42caf2d5aa1352a93dcfa0098011 (patch)
treec45acf88b7976dcec117b6a3dbe31a7fe710ef33 /virt/kvm
parentbb1281f2aae08e5ef23eb0692c8833e95579cdf2 (diff)
parent7650b6870930055426abb32cc47d164ccdea49db (diff)
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull KVM updates from Paolo Bonzini: "First round of KVM updates for 3.14; PPC parts will come next week. Nothing major here, just bugfixes all over the place. The most interesting part is the ARM guys' virtualized interrupt controller overhaul, which lets userspace get/set the state and thus enables migration of ARM VMs" * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (67 commits) kvm: make KVM_MMU_AUDIT help text more readable KVM: s390: Fix memory access error detection KVM: nVMX: Update guest activity state field on L2 exits KVM: nVMX: Fix nested_run_pending on activity state HLT KVM: nVMX: Clean up handling of VMX-related MSRs KVM: nVMX: Add tracepoints for nested_vmexit and nested_vmexit_inject KVM: nVMX: Pass vmexit parameters to nested_vmx_vmexit KVM: nVMX: Leave VMX mode on clearing of feature control MSR KVM: VMX: Fix DR6 update on #DB exception KVM: SVM: Fix reading of DR6 KVM: x86: Sync DR7 on KVM_SET_DEBUGREGS add support for Hyper-V reference time counter KVM: remove useless write to vcpu->hv_clock.tsc_timestamp KVM: x86: fix tsc catchup issue with tsc scaling KVM: x86: limit PIT timer frequency KVM: x86: handle invalid root_hpa everywhere kvm: Provide kvm_vcpu_eligible_for_directed_yield() stub kvm: vfio: silence GCC warning KVM: ARM: Remove duplicate include arm/arm64: KVM: relax the requirements of VMA alignment for THP ...
Diffstat (limited to 'virt/kvm')
-rw-r--r--virt/kvm/arm/arch_timer.c34
-rw-r--r--virt/kvm/arm/vgic.c584
-rw-r--r--virt/kvm/ioapic.c2
-rw-r--r--virt/kvm/ioapic.h1
-rw-r--r--virt/kvm/kvm_main.c81
-rw-r--r--virt/kvm/vfio.c6
6 files changed, 617 insertions, 91 deletions
diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c
index c2e1ef4604e8..5081e809821f 100644
--- a/virt/kvm/arm/arch_timer.c
+++ b/virt/kvm/arm/arch_timer.c
@@ -182,6 +182,40 @@ static void kvm_timer_init_interrupt(void *info)
182 enable_percpu_irq(host_vtimer_irq, 0); 182 enable_percpu_irq(host_vtimer_irq, 0);
183} 183}
184 184
185int kvm_arm_timer_set_reg(struct kvm_vcpu *vcpu, u64 regid, u64 value)
186{
187 struct arch_timer_cpu *timer = &vcpu->arch.timer_cpu;
188
189 switch (regid) {
190 case KVM_REG_ARM_TIMER_CTL:
191 timer->cntv_ctl = value;
192 break;
193 case KVM_REG_ARM_TIMER_CNT:
194 vcpu->kvm->arch.timer.cntvoff = kvm_phys_timer_read() - value;
195 break;
196 case KVM_REG_ARM_TIMER_CVAL:
197 timer->cntv_cval = value;
198 break;
199 default:
200 return -1;
201 }
202 return 0;
203}
204
205u64 kvm_arm_timer_get_reg(struct kvm_vcpu *vcpu, u64 regid)
206{
207 struct arch_timer_cpu *timer = &vcpu->arch.timer_cpu;
208
209 switch (regid) {
210 case KVM_REG_ARM_TIMER_CTL:
211 return timer->cntv_ctl;
212 case KVM_REG_ARM_TIMER_CNT:
213 return kvm_phys_timer_read() - vcpu->kvm->arch.timer.cntvoff;
214 case KVM_REG_ARM_TIMER_CVAL:
215 return timer->cntv_cval;
216 }
217 return (u64)-1;
218}
185 219
186static int kvm_timer_cpu_notify(struct notifier_block *self, 220static int kvm_timer_cpu_notify(struct notifier_block *self,
187 unsigned long action, void *cpu) 221 unsigned long action, void *cpu)
diff --git a/virt/kvm/arm/vgic.c b/virt/kvm/arm/vgic.c
index 685fc72fc751..be456ce264d0 100644
--- a/virt/kvm/arm/vgic.c
+++ b/virt/kvm/arm/vgic.c
@@ -71,6 +71,10 @@
71#define VGIC_ADDR_UNDEF (-1) 71#define VGIC_ADDR_UNDEF (-1)
72#define IS_VGIC_ADDR_UNDEF(_x) ((_x) == VGIC_ADDR_UNDEF) 72#define IS_VGIC_ADDR_UNDEF(_x) ((_x) == VGIC_ADDR_UNDEF)
73 73
74#define PRODUCT_ID_KVM 0x4b /* ASCII code K */
75#define IMPLEMENTER_ARM 0x43b
76#define GICC_ARCH_VERSION_V2 0x2
77
74/* Physical address of vgic virtual cpu interface */ 78/* Physical address of vgic virtual cpu interface */
75static phys_addr_t vgic_vcpu_base; 79static phys_addr_t vgic_vcpu_base;
76 80
@@ -312,7 +316,7 @@ static bool handle_mmio_misc(struct kvm_vcpu *vcpu,
312 u32 word_offset = offset & 3; 316 u32 word_offset = offset & 3;
313 317
314 switch (offset & ~3) { 318 switch (offset & ~3) {
315 case 0: /* CTLR */ 319 case 0: /* GICD_CTLR */
316 reg = vcpu->kvm->arch.vgic.enabled; 320 reg = vcpu->kvm->arch.vgic.enabled;
317 vgic_reg_access(mmio, &reg, word_offset, 321 vgic_reg_access(mmio, &reg, word_offset,
318 ACCESS_READ_VALUE | ACCESS_WRITE_VALUE); 322 ACCESS_READ_VALUE | ACCESS_WRITE_VALUE);
@@ -323,15 +327,15 @@ static bool handle_mmio_misc(struct kvm_vcpu *vcpu,
323 } 327 }
324 break; 328 break;
325 329
326 case 4: /* TYPER */ 330 case 4: /* GICD_TYPER */
327 reg = (atomic_read(&vcpu->kvm->online_vcpus) - 1) << 5; 331 reg = (atomic_read(&vcpu->kvm->online_vcpus) - 1) << 5;
328 reg |= (VGIC_NR_IRQS >> 5) - 1; 332 reg |= (VGIC_NR_IRQS >> 5) - 1;
329 vgic_reg_access(mmio, &reg, word_offset, 333 vgic_reg_access(mmio, &reg, word_offset,
330 ACCESS_READ_VALUE | ACCESS_WRITE_IGNORED); 334 ACCESS_READ_VALUE | ACCESS_WRITE_IGNORED);
331 break; 335 break;
332 336
333 case 8: /* IIDR */ 337 case 8: /* GICD_IIDR */
334 reg = 0x4B00043B; 338 reg = (PRODUCT_ID_KVM << 24) | (IMPLEMENTER_ARM << 0);
335 vgic_reg_access(mmio, &reg, word_offset, 339 vgic_reg_access(mmio, &reg, word_offset,
336 ACCESS_READ_VALUE | ACCESS_WRITE_IGNORED); 340 ACCESS_READ_VALUE | ACCESS_WRITE_IGNORED);
337 break; 341 break;
@@ -589,6 +593,156 @@ static bool handle_mmio_sgi_reg(struct kvm_vcpu *vcpu,
589 return false; 593 return false;
590} 594}
591 595
596#define LR_CPUID(lr) \
597 (((lr) & GICH_LR_PHYSID_CPUID) >> GICH_LR_PHYSID_CPUID_SHIFT)
598#define LR_IRQID(lr) \
599 ((lr) & GICH_LR_VIRTUALID)
600
601static void vgic_retire_lr(int lr_nr, int irq, struct vgic_cpu *vgic_cpu)
602{
603 clear_bit(lr_nr, vgic_cpu->lr_used);
604 vgic_cpu->vgic_lr[lr_nr] &= ~GICH_LR_STATE;
605 vgic_cpu->vgic_irq_lr_map[irq] = LR_EMPTY;
606}
607
608/**
609 * vgic_unqueue_irqs - move pending IRQs from LRs to the distributor
610 * @vgic_cpu: Pointer to the vgic_cpu struct holding the LRs
611 *
612 * Move any pending IRQs that have already been assigned to LRs back to the
613 * emulated distributor state so that the complete emulated state can be read
614 * from the main emulation structures without investigating the LRs.
615 *
616 * Note that IRQs in the active state in the LRs get their pending state moved
617 * to the distributor but the active state stays in the LRs, because we don't
618 * track the active state on the distributor side.
619 */
620static void vgic_unqueue_irqs(struct kvm_vcpu *vcpu)
621{
622 struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
623 struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
624 int vcpu_id = vcpu->vcpu_id;
625 int i, irq, source_cpu;
626 u32 *lr;
627
628 for_each_set_bit(i, vgic_cpu->lr_used, vgic_cpu->nr_lr) {
629 lr = &vgic_cpu->vgic_lr[i];
630 irq = LR_IRQID(*lr);
631 source_cpu = LR_CPUID(*lr);
632
633 /*
634 * There are three options for the state bits:
635 *
636 * 01: pending
637 * 10: active
638 * 11: pending and active
639 *
640 * If the LR holds only an active interrupt (not pending) then
641 * just leave it alone.
642 */
643 if ((*lr & GICH_LR_STATE) == GICH_LR_ACTIVE_BIT)
644 continue;
645
646 /*
647 * Reestablish the pending state on the distributor and the
648 * CPU interface. It may have already been pending, but that
649 * is fine, then we are only setting a few bits that were
650 * already set.
651 */
652 vgic_dist_irq_set(vcpu, irq);
653 if (irq < VGIC_NR_SGIS)
654 dist->irq_sgi_sources[vcpu_id][irq] |= 1 << source_cpu;
655 *lr &= ~GICH_LR_PENDING_BIT;
656
657 /*
658 * If there's no state left on the LR (it could still be
659 * active), then the LR does not hold any useful info and can
660 * be marked as free for other use.
661 */
662 if (!(*lr & GICH_LR_STATE))
663 vgic_retire_lr(i, irq, vgic_cpu);
664
665 /* Finally update the VGIC state. */
666 vgic_update_state(vcpu->kvm);
667 }
668}
669
670/* Handle reads of GICD_CPENDSGIRn and GICD_SPENDSGIRn */
671static bool read_set_clear_sgi_pend_reg(struct kvm_vcpu *vcpu,
672 struct kvm_exit_mmio *mmio,
673 phys_addr_t offset)
674{
675 struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
676 int sgi;
677 int min_sgi = (offset & ~0x3) * 4;
678 int max_sgi = min_sgi + 3;
679 int vcpu_id = vcpu->vcpu_id;
680 u32 reg = 0;
681
682 /* Copy source SGIs from distributor side */
683 for (sgi = min_sgi; sgi <= max_sgi; sgi++) {
684 int shift = 8 * (sgi - min_sgi);
685 reg |= (u32)dist->irq_sgi_sources[vcpu_id][sgi] << shift;
686 }
687
688 mmio_data_write(mmio, ~0, reg);
689 return false;
690}
691
692static bool write_set_clear_sgi_pend_reg(struct kvm_vcpu *vcpu,
693 struct kvm_exit_mmio *mmio,
694 phys_addr_t offset, bool set)
695{
696 struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
697 int sgi;
698 int min_sgi = (offset & ~0x3) * 4;
699 int max_sgi = min_sgi + 3;
700 int vcpu_id = vcpu->vcpu_id;
701 u32 reg;
702 bool updated = false;
703
704 reg = mmio_data_read(mmio, ~0);
705
706 /* Clear pending SGIs on the distributor */
707 for (sgi = min_sgi; sgi <= max_sgi; sgi++) {
708 u8 mask = reg >> (8 * (sgi - min_sgi));
709 if (set) {
710 if ((dist->irq_sgi_sources[vcpu_id][sgi] & mask) != mask)
711 updated = true;
712 dist->irq_sgi_sources[vcpu_id][sgi] |= mask;
713 } else {
714 if (dist->irq_sgi_sources[vcpu_id][sgi] & mask)
715 updated = true;
716 dist->irq_sgi_sources[vcpu_id][sgi] &= ~mask;
717 }
718 }
719
720 if (updated)
721 vgic_update_state(vcpu->kvm);
722
723 return updated;
724}
725
726static bool handle_mmio_sgi_set(struct kvm_vcpu *vcpu,
727 struct kvm_exit_mmio *mmio,
728 phys_addr_t offset)
729{
730 if (!mmio->is_write)
731 return read_set_clear_sgi_pend_reg(vcpu, mmio, offset);
732 else
733 return write_set_clear_sgi_pend_reg(vcpu, mmio, offset, true);
734}
735
736static bool handle_mmio_sgi_clear(struct kvm_vcpu *vcpu,
737 struct kvm_exit_mmio *mmio,
738 phys_addr_t offset)
739{
740 if (!mmio->is_write)
741 return read_set_clear_sgi_pend_reg(vcpu, mmio, offset);
742 else
743 return write_set_clear_sgi_pend_reg(vcpu, mmio, offset, false);
744}
745
592/* 746/*
593 * I would have liked to use the kvm_bus_io_*() API instead, but it 747 * I would have liked to use the kvm_bus_io_*() API instead, but it
594 * cannot cope with banked registers (only the VM pointer is passed 748 * cannot cope with banked registers (only the VM pointer is passed
@@ -602,7 +756,7 @@ struct mmio_range {
602 phys_addr_t offset); 756 phys_addr_t offset);
603}; 757};
604 758
605static const struct mmio_range vgic_ranges[] = { 759static const struct mmio_range vgic_dist_ranges[] = {
606 { 760 {
607 .base = GIC_DIST_CTRL, 761 .base = GIC_DIST_CTRL,
608 .len = 12, 762 .len = 12,
@@ -663,20 +817,29 @@ static const struct mmio_range vgic_ranges[] = {
663 .len = 4, 817 .len = 4,
664 .handle_mmio = handle_mmio_sgi_reg, 818 .handle_mmio = handle_mmio_sgi_reg,
665 }, 819 },
820 {
821 .base = GIC_DIST_SGI_PENDING_CLEAR,
822 .len = VGIC_NR_SGIS,
823 .handle_mmio = handle_mmio_sgi_clear,
824 },
825 {
826 .base = GIC_DIST_SGI_PENDING_SET,
827 .len = VGIC_NR_SGIS,
828 .handle_mmio = handle_mmio_sgi_set,
829 },
666 {} 830 {}
667}; 831};
668 832
669static const 833static const
670struct mmio_range *find_matching_range(const struct mmio_range *ranges, 834struct mmio_range *find_matching_range(const struct mmio_range *ranges,
671 struct kvm_exit_mmio *mmio, 835 struct kvm_exit_mmio *mmio,
672 phys_addr_t base) 836 phys_addr_t offset)
673{ 837{
674 const struct mmio_range *r = ranges; 838 const struct mmio_range *r = ranges;
675 phys_addr_t addr = mmio->phys_addr - base;
676 839
677 while (r->len) { 840 while (r->len) {
678 if (addr >= r->base && 841 if (offset >= r->base &&
679 (addr + mmio->len) <= (r->base + r->len)) 842 (offset + mmio->len) <= (r->base + r->len))
680 return r; 843 return r;
681 r++; 844 r++;
682 } 845 }
@@ -713,7 +876,8 @@ bool vgic_handle_mmio(struct kvm_vcpu *vcpu, struct kvm_run *run,
713 return true; 876 return true;
714 } 877 }
715 878
716 range = find_matching_range(vgic_ranges, mmio, base); 879 offset = mmio->phys_addr - base;
880 range = find_matching_range(vgic_dist_ranges, mmio, offset);
717 if (unlikely(!range || !range->handle_mmio)) { 881 if (unlikely(!range || !range->handle_mmio)) {
718 pr_warn("Unhandled access %d %08llx %d\n", 882 pr_warn("Unhandled access %d %08llx %d\n",
719 mmio->is_write, mmio->phys_addr, mmio->len); 883 mmio->is_write, mmio->phys_addr, mmio->len);
@@ -824,8 +988,6 @@ static void vgic_update_state(struct kvm *kvm)
824 } 988 }
825} 989}
826 990
827#define LR_CPUID(lr) \
828 (((lr) & GICH_LR_PHYSID_CPUID) >> GICH_LR_PHYSID_CPUID_SHIFT)
829#define MK_LR_PEND(src, irq) \ 991#define MK_LR_PEND(src, irq) \
830 (GICH_LR_PENDING_BIT | ((src) << GICH_LR_PHYSID_CPUID_SHIFT) | (irq)) 992 (GICH_LR_PENDING_BIT | ((src) << GICH_LR_PHYSID_CPUID_SHIFT) | (irq))
831 993
@@ -847,9 +1009,7 @@ static void vgic_retire_disabled_irqs(struct kvm_vcpu *vcpu)
847 int irq = vgic_cpu->vgic_lr[lr] & GICH_LR_VIRTUALID; 1009 int irq = vgic_cpu->vgic_lr[lr] & GICH_LR_VIRTUALID;
848 1010
849 if (!vgic_irq_is_enabled(vcpu, irq)) { 1011 if (!vgic_irq_is_enabled(vcpu, irq)) {
850 vgic_cpu->vgic_irq_lr_map[irq] = LR_EMPTY; 1012 vgic_retire_lr(lr, irq, vgic_cpu);
851 clear_bit(lr, vgic_cpu->lr_used);
852 vgic_cpu->vgic_lr[lr] &= ~GICH_LR_STATE;
853 if (vgic_irq_is_active(vcpu, irq)) 1013 if (vgic_irq_is_active(vcpu, irq))
854 vgic_irq_clear_active(vcpu, irq); 1014 vgic_irq_clear_active(vcpu, irq);
855 } 1015 }
@@ -1243,15 +1403,19 @@ static irqreturn_t vgic_maintenance_handler(int irq, void *data)
1243 return IRQ_HANDLED; 1403 return IRQ_HANDLED;
1244} 1404}
1245 1405
1406/**
1407 * kvm_vgic_vcpu_init - Initialize per-vcpu VGIC state
1408 * @vcpu: pointer to the vcpu struct
1409 *
1410 * Initialize the vgic_cpu struct and vgic_dist struct fields pertaining to
1411 * this vcpu and enable the VGIC for this VCPU
1412 */
1246int kvm_vgic_vcpu_init(struct kvm_vcpu *vcpu) 1413int kvm_vgic_vcpu_init(struct kvm_vcpu *vcpu)
1247{ 1414{
1248 struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu; 1415 struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
1249 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; 1416 struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
1250 int i; 1417 int i;
1251 1418
1252 if (!irqchip_in_kernel(vcpu->kvm))
1253 return 0;
1254
1255 if (vcpu->vcpu_id >= VGIC_MAX_CPUS) 1419 if (vcpu->vcpu_id >= VGIC_MAX_CPUS)
1256 return -EBUSY; 1420 return -EBUSY;
1257 1421
@@ -1383,10 +1547,22 @@ out:
1383 return ret; 1547 return ret;
1384} 1548}
1385 1549
1550/**
1551 * kvm_vgic_init - Initialize global VGIC state before running any VCPUs
1552 * @kvm: pointer to the kvm struct
1553 *
1554 * Map the virtual CPU interface into the VM before running any VCPUs. We
1555 * can't do this at creation time, because user space must first set the
1556 * virtual CPU interface address in the guest physical address space. Also
1557 * initialize the ITARGETSRn regs to 0 on the emulated distributor.
1558 */
1386int kvm_vgic_init(struct kvm *kvm) 1559int kvm_vgic_init(struct kvm *kvm)
1387{ 1560{
1388 int ret = 0, i; 1561 int ret = 0, i;
1389 1562
1563 if (!irqchip_in_kernel(kvm))
1564 return 0;
1565
1390 mutex_lock(&kvm->lock); 1566 mutex_lock(&kvm->lock);
1391 1567
1392 if (vgic_initialized(kvm)) 1568 if (vgic_initialized(kvm))
@@ -1409,7 +1585,6 @@ int kvm_vgic_init(struct kvm *kvm)
1409 for (i = VGIC_NR_PRIVATE_IRQS; i < VGIC_NR_IRQS; i += 4) 1585 for (i = VGIC_NR_PRIVATE_IRQS; i < VGIC_NR_IRQS; i += 4)
1410 vgic_set_target_reg(kvm, 0, i); 1586 vgic_set_target_reg(kvm, 0, i);
1411 1587
1412 kvm_timer_init(kvm);
1413 kvm->arch.vgic.ready = true; 1588 kvm->arch.vgic.ready = true;
1414out: 1589out:
1415 mutex_unlock(&kvm->lock); 1590 mutex_unlock(&kvm->lock);
@@ -1418,20 +1593,45 @@ out:
1418 1593
1419int kvm_vgic_create(struct kvm *kvm) 1594int kvm_vgic_create(struct kvm *kvm)
1420{ 1595{
1421 int ret = 0; 1596 int i, vcpu_lock_idx = -1, ret = 0;
1597 struct kvm_vcpu *vcpu;
1422 1598
1423 mutex_lock(&kvm->lock); 1599 mutex_lock(&kvm->lock);
1424 1600
1425 if (atomic_read(&kvm->online_vcpus) || kvm->arch.vgic.vctrl_base) { 1601 if (kvm->arch.vgic.vctrl_base) {
1426 ret = -EEXIST; 1602 ret = -EEXIST;
1427 goto out; 1603 goto out;
1428 } 1604 }
1429 1605
1606 /*
1607 * Any time a vcpu is run, vcpu_load is called which tries to grab the
1608 * vcpu->mutex. By grabbing the vcpu->mutex of all VCPUs we ensure
1609 * that no other VCPUs are run while we create the vgic.
1610 */
1611 kvm_for_each_vcpu(i, vcpu, kvm) {
1612 if (!mutex_trylock(&vcpu->mutex))
1613 goto out_unlock;
1614 vcpu_lock_idx = i;
1615 }
1616
1617 kvm_for_each_vcpu(i, vcpu, kvm) {
1618 if (vcpu->arch.has_run_once) {
1619 ret = -EBUSY;
1620 goto out_unlock;
1621 }
1622 }
1623
1430 spin_lock_init(&kvm->arch.vgic.lock); 1624 spin_lock_init(&kvm->arch.vgic.lock);
1431 kvm->arch.vgic.vctrl_base = vgic_vctrl_base; 1625 kvm->arch.vgic.vctrl_base = vgic_vctrl_base;
1432 kvm->arch.vgic.vgic_dist_base = VGIC_ADDR_UNDEF; 1626 kvm->arch.vgic.vgic_dist_base = VGIC_ADDR_UNDEF;
1433 kvm->arch.vgic.vgic_cpu_base = VGIC_ADDR_UNDEF; 1627 kvm->arch.vgic.vgic_cpu_base = VGIC_ADDR_UNDEF;
1434 1628
1629out_unlock:
1630 for (; vcpu_lock_idx >= 0; vcpu_lock_idx--) {
1631 vcpu = kvm_get_vcpu(kvm, vcpu_lock_idx);
1632 mutex_unlock(&vcpu->mutex);
1633 }
1634
1435out: 1635out:
1436 mutex_unlock(&kvm->lock); 1636 mutex_unlock(&kvm->lock);
1437 return ret; 1637 return ret;
@@ -1455,6 +1655,12 @@ static int vgic_ioaddr_assign(struct kvm *kvm, phys_addr_t *ioaddr,
1455{ 1655{
1456 int ret; 1656 int ret;
1457 1657
1658 if (addr & ~KVM_PHYS_MASK)
1659 return -E2BIG;
1660
1661 if (addr & (SZ_4K - 1))
1662 return -EINVAL;
1663
1458 if (!IS_VGIC_ADDR_UNDEF(*ioaddr)) 1664 if (!IS_VGIC_ADDR_UNDEF(*ioaddr))
1459 return -EEXIST; 1665 return -EEXIST;
1460 if (addr + size < addr) 1666 if (addr + size < addr)
@@ -1467,26 +1673,41 @@ static int vgic_ioaddr_assign(struct kvm *kvm, phys_addr_t *ioaddr,
1467 return ret; 1673 return ret;
1468} 1674}
1469 1675
1470int kvm_vgic_set_addr(struct kvm *kvm, unsigned long type, u64 addr) 1676/**
1677 * kvm_vgic_addr - set or get vgic VM base addresses
1678 * @kvm: pointer to the vm struct
1679 * @type: the VGIC addr type, one of KVM_VGIC_V2_ADDR_TYPE_XXX
1680 * @addr: pointer to address value
1681 * @write: if true set the address in the VM address space, if false read the
1682 * address
1683 *
1684 * Set or get the vgic base addresses for the distributor and the virtual CPU
1685 * interface in the VM physical address space. These addresses are properties
1686 * of the emulated core/SoC and therefore user space initially knows this
1687 * information.
1688 */
1689int kvm_vgic_addr(struct kvm *kvm, unsigned long type, u64 *addr, bool write)
1471{ 1690{
1472 int r = 0; 1691 int r = 0;
1473 struct vgic_dist *vgic = &kvm->arch.vgic; 1692 struct vgic_dist *vgic = &kvm->arch.vgic;
1474 1693
1475 if (addr & ~KVM_PHYS_MASK)
1476 return -E2BIG;
1477
1478 if (addr & (SZ_4K - 1))
1479 return -EINVAL;
1480
1481 mutex_lock(&kvm->lock); 1694 mutex_lock(&kvm->lock);
1482 switch (type) { 1695 switch (type) {
1483 case KVM_VGIC_V2_ADDR_TYPE_DIST: 1696 case KVM_VGIC_V2_ADDR_TYPE_DIST:
1484 r = vgic_ioaddr_assign(kvm, &vgic->vgic_dist_base, 1697 if (write) {
1485 addr, KVM_VGIC_V2_DIST_SIZE); 1698 r = vgic_ioaddr_assign(kvm, &vgic->vgic_dist_base,
1699 *addr, KVM_VGIC_V2_DIST_SIZE);
1700 } else {
1701 *addr = vgic->vgic_dist_base;
1702 }
1486 break; 1703 break;
1487 case KVM_VGIC_V2_ADDR_TYPE_CPU: 1704 case KVM_VGIC_V2_ADDR_TYPE_CPU:
1488 r = vgic_ioaddr_assign(kvm, &vgic->vgic_cpu_base, 1705 if (write) {
1489 addr, KVM_VGIC_V2_CPU_SIZE); 1706 r = vgic_ioaddr_assign(kvm, &vgic->vgic_cpu_base,
1707 *addr, KVM_VGIC_V2_CPU_SIZE);
1708 } else {
1709 *addr = vgic->vgic_cpu_base;
1710 }
1490 break; 1711 break;
1491 default: 1712 default:
1492 r = -ENODEV; 1713 r = -ENODEV;
@@ -1495,3 +1716,302 @@ int kvm_vgic_set_addr(struct kvm *kvm, unsigned long type, u64 addr)
1495 mutex_unlock(&kvm->lock); 1716 mutex_unlock(&kvm->lock);
1496 return r; 1717 return r;
1497} 1718}
1719
1720static bool handle_cpu_mmio_misc(struct kvm_vcpu *vcpu,
1721 struct kvm_exit_mmio *mmio, phys_addr_t offset)
1722{
1723 struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
1724 u32 reg, mask = 0, shift = 0;
1725 bool updated = false;
1726
1727 switch (offset & ~0x3) {
1728 case GIC_CPU_CTRL:
1729 mask = GICH_VMCR_CTRL_MASK;
1730 shift = GICH_VMCR_CTRL_SHIFT;
1731 break;
1732 case GIC_CPU_PRIMASK:
1733 mask = GICH_VMCR_PRIMASK_MASK;
1734 shift = GICH_VMCR_PRIMASK_SHIFT;
1735 break;
1736 case GIC_CPU_BINPOINT:
1737 mask = GICH_VMCR_BINPOINT_MASK;
1738 shift = GICH_VMCR_BINPOINT_SHIFT;
1739 break;
1740 case GIC_CPU_ALIAS_BINPOINT:
1741 mask = GICH_VMCR_ALIAS_BINPOINT_MASK;
1742 shift = GICH_VMCR_ALIAS_BINPOINT_SHIFT;
1743 break;
1744 }
1745
1746 if (!mmio->is_write) {
1747 reg = (vgic_cpu->vgic_vmcr & mask) >> shift;
1748 mmio_data_write(mmio, ~0, reg);
1749 } else {
1750 reg = mmio_data_read(mmio, ~0);
1751 reg = (reg << shift) & mask;
1752 if (reg != (vgic_cpu->vgic_vmcr & mask))
1753 updated = true;
1754 vgic_cpu->vgic_vmcr &= ~mask;
1755 vgic_cpu->vgic_vmcr |= reg;
1756 }
1757 return updated;
1758}
1759
1760static bool handle_mmio_abpr(struct kvm_vcpu *vcpu,
1761 struct kvm_exit_mmio *mmio, phys_addr_t offset)
1762{
1763 return handle_cpu_mmio_misc(vcpu, mmio, GIC_CPU_ALIAS_BINPOINT);
1764}
1765
1766static bool handle_cpu_mmio_ident(struct kvm_vcpu *vcpu,
1767 struct kvm_exit_mmio *mmio,
1768 phys_addr_t offset)
1769{
1770 u32 reg;
1771
1772 if (mmio->is_write)
1773 return false;
1774
1775 /* GICC_IIDR */
1776 reg = (PRODUCT_ID_KVM << 20) |
1777 (GICC_ARCH_VERSION_V2 << 16) |
1778 (IMPLEMENTER_ARM << 0);
1779 mmio_data_write(mmio, ~0, reg);
1780 return false;
1781}
1782
1783/*
1784 * CPU Interface Register accesses - these are not accessed by the VM, but by
1785 * user space for saving and restoring VGIC state.
1786 */
1787static const struct mmio_range vgic_cpu_ranges[] = {
1788 {
1789 .base = GIC_CPU_CTRL,
1790 .len = 12,
1791 .handle_mmio = handle_cpu_mmio_misc,
1792 },
1793 {
1794 .base = GIC_CPU_ALIAS_BINPOINT,
1795 .len = 4,
1796 .handle_mmio = handle_mmio_abpr,
1797 },
1798 {
1799 .base = GIC_CPU_ACTIVEPRIO,
1800 .len = 16,
1801 .handle_mmio = handle_mmio_raz_wi,
1802 },
1803 {
1804 .base = GIC_CPU_IDENT,
1805 .len = 4,
1806 .handle_mmio = handle_cpu_mmio_ident,
1807 },
1808};
1809
1810static int vgic_attr_regs_access(struct kvm_device *dev,
1811 struct kvm_device_attr *attr,
1812 u32 *reg, bool is_write)
1813{
1814 const struct mmio_range *r = NULL, *ranges;
1815 phys_addr_t offset;
1816 int ret, cpuid, c;
1817 struct kvm_vcpu *vcpu, *tmp_vcpu;
1818 struct vgic_dist *vgic;
1819 struct kvm_exit_mmio mmio;
1820
1821 offset = attr->attr & KVM_DEV_ARM_VGIC_OFFSET_MASK;
1822 cpuid = (attr->attr & KVM_DEV_ARM_VGIC_CPUID_MASK) >>
1823 KVM_DEV_ARM_VGIC_CPUID_SHIFT;
1824
1825 mutex_lock(&dev->kvm->lock);
1826
1827 if (cpuid >= atomic_read(&dev->kvm->online_vcpus)) {
1828 ret = -EINVAL;
1829 goto out;
1830 }
1831
1832 vcpu = kvm_get_vcpu(dev->kvm, cpuid);
1833 vgic = &dev->kvm->arch.vgic;
1834
1835 mmio.len = 4;
1836 mmio.is_write = is_write;
1837 if (is_write)
1838 mmio_data_write(&mmio, ~0, *reg);
1839 switch (attr->group) {
1840 case KVM_DEV_ARM_VGIC_GRP_DIST_REGS:
1841 mmio.phys_addr = vgic->vgic_dist_base + offset;
1842 ranges = vgic_dist_ranges;
1843 break;
1844 case KVM_DEV_ARM_VGIC_GRP_CPU_REGS:
1845 mmio.phys_addr = vgic->vgic_cpu_base + offset;
1846 ranges = vgic_cpu_ranges;
1847 break;
1848 default:
1849 BUG();
1850 }
1851 r = find_matching_range(ranges, &mmio, offset);
1852
1853 if (unlikely(!r || !r->handle_mmio)) {
1854 ret = -ENXIO;
1855 goto out;
1856 }
1857
1858
1859 spin_lock(&vgic->lock);
1860
1861 /*
1862 * Ensure that no other VCPU is running by checking the vcpu->cpu
1863 * field. If no other VPCUs are running we can safely access the VGIC
1864 * state, because even if another VPU is run after this point, that
1865 * VCPU will not touch the vgic state, because it will block on
1866 * getting the vgic->lock in kvm_vgic_sync_hwstate().
1867 */
1868 kvm_for_each_vcpu(c, tmp_vcpu, dev->kvm) {
1869 if (unlikely(tmp_vcpu->cpu != -1)) {
1870 ret = -EBUSY;
1871 goto out_vgic_unlock;
1872 }
1873 }
1874
1875 /*
1876 * Move all pending IRQs from the LRs on all VCPUs so the pending
1877 * state can be properly represented in the register state accessible
1878 * through this API.
1879 */
1880 kvm_for_each_vcpu(c, tmp_vcpu, dev->kvm)
1881 vgic_unqueue_irqs(tmp_vcpu);
1882
1883 offset -= r->base;
1884 r->handle_mmio(vcpu, &mmio, offset);
1885
1886 if (!is_write)
1887 *reg = mmio_data_read(&mmio, ~0);
1888
1889 ret = 0;
1890out_vgic_unlock:
1891 spin_unlock(&vgic->lock);
1892out:
1893 mutex_unlock(&dev->kvm->lock);
1894 return ret;
1895}
1896
1897static int vgic_set_attr(struct kvm_device *dev, struct kvm_device_attr *attr)
1898{
1899 int r;
1900
1901 switch (attr->group) {
1902 case KVM_DEV_ARM_VGIC_GRP_ADDR: {
1903 u64 __user *uaddr = (u64 __user *)(long)attr->addr;
1904 u64 addr;
1905 unsigned long type = (unsigned long)attr->attr;
1906
1907 if (copy_from_user(&addr, uaddr, sizeof(addr)))
1908 return -EFAULT;
1909
1910 r = kvm_vgic_addr(dev->kvm, type, &addr, true);
1911 return (r == -ENODEV) ? -ENXIO : r;
1912 }
1913
1914 case KVM_DEV_ARM_VGIC_GRP_DIST_REGS:
1915 case KVM_DEV_ARM_VGIC_GRP_CPU_REGS: {
1916 u32 __user *uaddr = (u32 __user *)(long)attr->addr;
1917 u32 reg;
1918
1919 if (get_user(reg, uaddr))
1920 return -EFAULT;
1921
1922 return vgic_attr_regs_access(dev, attr, &reg, true);
1923 }
1924
1925 }
1926
1927 return -ENXIO;
1928}
1929
1930static int vgic_get_attr(struct kvm_device *dev, struct kvm_device_attr *attr)
1931{
1932 int r = -ENXIO;
1933
1934 switch (attr->group) {
1935 case KVM_DEV_ARM_VGIC_GRP_ADDR: {
1936 u64 __user *uaddr = (u64 __user *)(long)attr->addr;
1937 u64 addr;
1938 unsigned long type = (unsigned long)attr->attr;
1939
1940 r = kvm_vgic_addr(dev->kvm, type, &addr, false);
1941 if (r)
1942 return (r == -ENODEV) ? -ENXIO : r;
1943
1944 if (copy_to_user(uaddr, &addr, sizeof(addr)))
1945 return -EFAULT;
1946 break;
1947 }
1948
1949 case KVM_DEV_ARM_VGIC_GRP_DIST_REGS:
1950 case KVM_DEV_ARM_VGIC_GRP_CPU_REGS: {
1951 u32 __user *uaddr = (u32 __user *)(long)attr->addr;
1952 u32 reg = 0;
1953
1954 r = vgic_attr_regs_access(dev, attr, &reg, false);
1955 if (r)
1956 return r;
1957 r = put_user(reg, uaddr);
1958 break;
1959 }
1960
1961 }
1962
1963 return r;
1964}
1965
1966static int vgic_has_attr_regs(const struct mmio_range *ranges,
1967 phys_addr_t offset)
1968{
1969 struct kvm_exit_mmio dev_attr_mmio;
1970
1971 dev_attr_mmio.len = 4;
1972 if (find_matching_range(ranges, &dev_attr_mmio, offset))
1973 return 0;
1974 else
1975 return -ENXIO;
1976}
1977
1978static int vgic_has_attr(struct kvm_device *dev, struct kvm_device_attr *attr)
1979{
1980 phys_addr_t offset;
1981
1982 switch (attr->group) {
1983 case KVM_DEV_ARM_VGIC_GRP_ADDR:
1984 switch (attr->attr) {
1985 case KVM_VGIC_V2_ADDR_TYPE_DIST:
1986 case KVM_VGIC_V2_ADDR_TYPE_CPU:
1987 return 0;
1988 }
1989 break;
1990 case KVM_DEV_ARM_VGIC_GRP_DIST_REGS:
1991 offset = attr->attr & KVM_DEV_ARM_VGIC_OFFSET_MASK;
1992 return vgic_has_attr_regs(vgic_dist_ranges, offset);
1993 case KVM_DEV_ARM_VGIC_GRP_CPU_REGS:
1994 offset = attr->attr & KVM_DEV_ARM_VGIC_OFFSET_MASK;
1995 return vgic_has_attr_regs(vgic_cpu_ranges, offset);
1996 }
1997 return -ENXIO;
1998}
1999
2000static void vgic_destroy(struct kvm_device *dev)
2001{
2002 kfree(dev);
2003}
2004
2005static int vgic_create(struct kvm_device *dev, u32 type)
2006{
2007 return kvm_vgic_create(dev->kvm);
2008}
2009
2010struct kvm_device_ops kvm_arm_vgic_v2_ops = {
2011 .name = "kvm-arm-vgic",
2012 .create = vgic_create,
2013 .destroy = vgic_destroy,
2014 .set_attr = vgic_set_attr,
2015 .get_attr = vgic_get_attr,
2016 .has_attr = vgic_has_attr,
2017};
diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
index 2d682977ce82..ce9ed99ad7dc 100644
--- a/virt/kvm/ioapic.c
+++ b/virt/kvm/ioapic.c
@@ -520,7 +520,7 @@ static int ioapic_mmio_write(struct kvm_io_device *this, gpa_t addr, int len,
520 return 0; 520 return 0;
521} 521}
522 522
523void kvm_ioapic_reset(struct kvm_ioapic *ioapic) 523static void kvm_ioapic_reset(struct kvm_ioapic *ioapic)
524{ 524{
525 int i; 525 int i;
526 526
diff --git a/virt/kvm/ioapic.h b/virt/kvm/ioapic.h
index 615d8c995c3c..90d43e95dcf8 100644
--- a/virt/kvm/ioapic.h
+++ b/virt/kvm/ioapic.h
@@ -91,7 +91,6 @@ void kvm_ioapic_destroy(struct kvm *kvm);
91int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int irq_source_id, 91int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int irq_source_id,
92 int level, bool line_status); 92 int level, bool line_status);
93void kvm_ioapic_clear_all(struct kvm_ioapic *ioapic, int irq_source_id); 93void kvm_ioapic_clear_all(struct kvm_ioapic *ioapic, int irq_source_id);
94void kvm_ioapic_reset(struct kvm_ioapic *ioapic);
95int kvm_irq_delivery_to_apic(struct kvm *kvm, struct kvm_lapic *src, 94int kvm_irq_delivery_to_apic(struct kvm *kvm, struct kvm_lapic *src,
96 struct kvm_lapic_irq *irq, unsigned long *dest_map); 95 struct kvm_lapic_irq *irq, unsigned long *dest_map);
97int kvm_get_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state); 96int kvm_get_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state);
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 4f588bc94186..03a0381b1cb7 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -95,6 +95,12 @@ static int hardware_enable_all(void);
95static void hardware_disable_all(void); 95static void hardware_disable_all(void);
96 96
97static void kvm_io_bus_destroy(struct kvm_io_bus *bus); 97static void kvm_io_bus_destroy(struct kvm_io_bus *bus);
98static void update_memslots(struct kvm_memslots *slots,
99 struct kvm_memory_slot *new, u64 last_generation);
100
101static void kvm_release_pfn_dirty(pfn_t pfn);
102static void mark_page_dirty_in_slot(struct kvm *kvm,
103 struct kvm_memory_slot *memslot, gfn_t gfn);
98 104
99bool kvm_rebooting; 105bool kvm_rebooting;
100EXPORT_SYMBOL_GPL(kvm_rebooting); 106EXPORT_SYMBOL_GPL(kvm_rebooting);
@@ -553,7 +559,7 @@ static void kvm_free_physmem_slot(struct kvm *kvm, struct kvm_memory_slot *free,
553 free->npages = 0; 559 free->npages = 0;
554} 560}
555 561
556void kvm_free_physmem(struct kvm *kvm) 562static void kvm_free_physmem(struct kvm *kvm)
557{ 563{
558 struct kvm_memslots *slots = kvm->memslots; 564 struct kvm_memslots *slots = kvm->memslots;
559 struct kvm_memory_slot *memslot; 565 struct kvm_memory_slot *memslot;
@@ -675,8 +681,9 @@ static void sort_memslots(struct kvm_memslots *slots)
675 slots->id_to_index[slots->memslots[i].id] = i; 681 slots->id_to_index[slots->memslots[i].id] = i;
676} 682}
677 683
678void update_memslots(struct kvm_memslots *slots, struct kvm_memory_slot *new, 684static void update_memslots(struct kvm_memslots *slots,
679 u64 last_generation) 685 struct kvm_memory_slot *new,
686 u64 last_generation)
680{ 687{
681 if (new) { 688 if (new) {
682 int id = new->id; 689 int id = new->id;
@@ -924,8 +931,8 @@ int kvm_set_memory_region(struct kvm *kvm,
924} 931}
925EXPORT_SYMBOL_GPL(kvm_set_memory_region); 932EXPORT_SYMBOL_GPL(kvm_set_memory_region);
926 933
927int kvm_vm_ioctl_set_memory_region(struct kvm *kvm, 934static int kvm_vm_ioctl_set_memory_region(struct kvm *kvm,
928 struct kvm_userspace_memory_region *mem) 935 struct kvm_userspace_memory_region *mem)
929{ 936{
930 if (mem->slot >= KVM_USER_MEM_SLOTS) 937 if (mem->slot >= KVM_USER_MEM_SLOTS)
931 return -EINVAL; 938 return -EINVAL;
@@ -1047,7 +1054,7 @@ static unsigned long gfn_to_hva_many(struct kvm_memory_slot *slot, gfn_t gfn,
1047} 1054}
1048 1055
1049unsigned long gfn_to_hva_memslot(struct kvm_memory_slot *slot, 1056unsigned long gfn_to_hva_memslot(struct kvm_memory_slot *slot,
1050 gfn_t gfn) 1057 gfn_t gfn)
1051{ 1058{
1052 return gfn_to_hva_many(slot, gfn, NULL); 1059 return gfn_to_hva_many(slot, gfn, NULL);
1053} 1060}
@@ -1387,18 +1394,11 @@ void kvm_release_page_dirty(struct page *page)
1387} 1394}
1388EXPORT_SYMBOL_GPL(kvm_release_page_dirty); 1395EXPORT_SYMBOL_GPL(kvm_release_page_dirty);
1389 1396
1390void kvm_release_pfn_dirty(pfn_t pfn) 1397static void kvm_release_pfn_dirty(pfn_t pfn)
1391{ 1398{
1392 kvm_set_pfn_dirty(pfn); 1399 kvm_set_pfn_dirty(pfn);
1393 kvm_release_pfn_clean(pfn); 1400 kvm_release_pfn_clean(pfn);
1394} 1401}
1395EXPORT_SYMBOL_GPL(kvm_release_pfn_dirty);
1396
1397void kvm_set_page_dirty(struct page *page)
1398{
1399 kvm_set_pfn_dirty(page_to_pfn(page));
1400}
1401EXPORT_SYMBOL_GPL(kvm_set_page_dirty);
1402 1402
1403void kvm_set_pfn_dirty(pfn_t pfn) 1403void kvm_set_pfn_dirty(pfn_t pfn)
1404{ 1404{
@@ -1640,8 +1640,9 @@ int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len)
1640} 1640}
1641EXPORT_SYMBOL_GPL(kvm_clear_guest); 1641EXPORT_SYMBOL_GPL(kvm_clear_guest);
1642 1642
1643void mark_page_dirty_in_slot(struct kvm *kvm, struct kvm_memory_slot *memslot, 1643static void mark_page_dirty_in_slot(struct kvm *kvm,
1644 gfn_t gfn) 1644 struct kvm_memory_slot *memslot,
1645 gfn_t gfn)
1645{ 1646{
1646 if (memslot && memslot->dirty_bitmap) { 1647 if (memslot && memslot->dirty_bitmap) {
1647 unsigned long rel_gfn = gfn - memslot->base_gfn; 1648 unsigned long rel_gfn = gfn - memslot->base_gfn;
@@ -1710,14 +1711,6 @@ void kvm_vcpu_kick(struct kvm_vcpu *vcpu)
1710EXPORT_SYMBOL_GPL(kvm_vcpu_kick); 1711EXPORT_SYMBOL_GPL(kvm_vcpu_kick);
1711#endif /* !CONFIG_S390 */ 1712#endif /* !CONFIG_S390 */
1712 1713
1713void kvm_resched(struct kvm_vcpu *vcpu)
1714{
1715 if (!need_resched())
1716 return;
1717 cond_resched();
1718}
1719EXPORT_SYMBOL_GPL(kvm_resched);
1720
1721bool kvm_vcpu_yield_to(struct kvm_vcpu *target) 1714bool kvm_vcpu_yield_to(struct kvm_vcpu *target)
1722{ 1715{
1723 struct pid *pid; 1716 struct pid *pid;
@@ -1742,7 +1735,6 @@ bool kvm_vcpu_yield_to(struct kvm_vcpu *target)
1742} 1735}
1743EXPORT_SYMBOL_GPL(kvm_vcpu_yield_to); 1736EXPORT_SYMBOL_GPL(kvm_vcpu_yield_to);
1744 1737
1745#ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT
1746/* 1738/*
1747 * Helper that checks whether a VCPU is eligible for directed yield. 1739 * Helper that checks whether a VCPU is eligible for directed yield.
1748 * Most eligible candidate to yield is decided by following heuristics: 1740 * Most eligible candidate to yield is decided by following heuristics:
@@ -1765,8 +1757,9 @@ EXPORT_SYMBOL_GPL(kvm_vcpu_yield_to);
1765 * locking does not harm. It may result in trying to yield to same VCPU, fail 1757 * locking does not harm. It may result in trying to yield to same VCPU, fail
1766 * and continue with next VCPU and so on. 1758 * and continue with next VCPU and so on.
1767 */ 1759 */
1768bool kvm_vcpu_eligible_for_directed_yield(struct kvm_vcpu *vcpu) 1760static bool kvm_vcpu_eligible_for_directed_yield(struct kvm_vcpu *vcpu)
1769{ 1761{
1762#ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT
1770 bool eligible; 1763 bool eligible;
1771 1764
1772 eligible = !vcpu->spin_loop.in_spin_loop || 1765 eligible = !vcpu->spin_loop.in_spin_loop ||
@@ -1777,8 +1770,10 @@ bool kvm_vcpu_eligible_for_directed_yield(struct kvm_vcpu *vcpu)
1777 kvm_vcpu_set_dy_eligible(vcpu, !vcpu->spin_loop.dy_eligible); 1770 kvm_vcpu_set_dy_eligible(vcpu, !vcpu->spin_loop.dy_eligible);
1778 1771
1779 return eligible; 1772 return eligible;
1780} 1773#else
1774 return true;
1781#endif 1775#endif
1776}
1782 1777
1783void kvm_vcpu_on_spin(struct kvm_vcpu *me) 1778void kvm_vcpu_on_spin(struct kvm_vcpu *me)
1784{ 1779{
@@ -2284,6 +2279,11 @@ static int kvm_ioctl_create_device(struct kvm *kvm,
2284 ops = &kvm_vfio_ops; 2279 ops = &kvm_vfio_ops;
2285 break; 2280 break;
2286#endif 2281#endif
2282#ifdef CONFIG_KVM_ARM_VGIC
2283 case KVM_DEV_TYPE_ARM_VGIC_V2:
2284 ops = &kvm_arm_vgic_v2_ops;
2285 break;
2286#endif
2287 default: 2287 default:
2288 return -ENODEV; 2288 return -ENODEV;
2289 } 2289 }
@@ -2939,33 +2939,6 @@ int kvm_io_bus_read(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,
2939 return r < 0 ? r : 0; 2939 return r < 0 ? r : 0;
2940} 2940}
2941 2941
2942/* kvm_io_bus_read_cookie - called under kvm->slots_lock */
2943int kvm_io_bus_read_cookie(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,
2944 int len, void *val, long cookie)
2945{
2946 struct kvm_io_bus *bus;
2947 struct kvm_io_range range;
2948
2949 range = (struct kvm_io_range) {
2950 .addr = addr,
2951 .len = len,
2952 };
2953
2954 bus = srcu_dereference(kvm->buses[bus_idx], &kvm->srcu);
2955
2956 /* First try the device referenced by cookie. */
2957 if ((cookie >= 0) && (cookie < bus->dev_count) &&
2958 (kvm_io_bus_cmp(&range, &bus->range[cookie]) == 0))
2959 if (!kvm_iodevice_read(bus->range[cookie].dev, addr, len,
2960 val))
2961 return cookie;
2962
2963 /*
2964 * cookie contained garbage; fall back to search and return the
2965 * correct cookie value.
2966 */
2967 return __kvm_io_bus_read(bus, &range, val);
2968}
2969 2942
2970/* Caller must hold slots_lock. */ 2943/* Caller must hold slots_lock. */
2971int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr, 2944int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,
diff --git a/virt/kvm/vfio.c b/virt/kvm/vfio.c
index ca4260e35037..b4f9507ae650 100644
--- a/virt/kvm/vfio.c
+++ b/virt/kvm/vfio.c
@@ -101,14 +101,14 @@ static int kvm_vfio_set_group(struct kvm_device *dev, long attr, u64 arg)
101 struct kvm_vfio *kv = dev->private; 101 struct kvm_vfio *kv = dev->private;
102 struct vfio_group *vfio_group; 102 struct vfio_group *vfio_group;
103 struct kvm_vfio_group *kvg; 103 struct kvm_vfio_group *kvg;
104 void __user *argp = (void __user *)arg; 104 int32_t __user *argp = (int32_t __user *)(unsigned long)arg;
105 struct fd f; 105 struct fd f;
106 int32_t fd; 106 int32_t fd;
107 int ret; 107 int ret;
108 108
109 switch (attr) { 109 switch (attr) {
110 case KVM_DEV_VFIO_GROUP_ADD: 110 case KVM_DEV_VFIO_GROUP_ADD:
111 if (get_user(fd, (int32_t __user *)argp)) 111 if (get_user(fd, argp))
112 return -EFAULT; 112 return -EFAULT;
113 113
114 f = fdget(fd); 114 f = fdget(fd);
@@ -148,7 +148,7 @@ static int kvm_vfio_set_group(struct kvm_device *dev, long attr, u64 arg)
148 return 0; 148 return 0;
149 149
150 case KVM_DEV_VFIO_GROUP_DEL: 150 case KVM_DEV_VFIO_GROUP_DEL:
151 if (get_user(fd, (int32_t __user *)argp)) 151 if (get_user(fd, argp))
152 return -EFAULT; 152 return -EFAULT;
153 153
154 f = fdget(fd); 154 f = fdget(fd);