mirror of https://gitee.com/openkylin/linux.git
kvm: make KVM_COALESCED_MMIO_PAGE_OFFSET public
Its value has never changed; we might as well make it part of the ABI instead of using the return value of KVM_CHECK_EXTENSION(KVM_CAP_COALESCED_MMIO). Because PPC does not always make MMIO available, the code has to be made dependent on CONFIG_KVM_MMIO rather than KVM_COALESCED_MMIO_PAGE_OFFSET. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
This commit is contained in:
parent
3042255899
commit
4b4357e025
|
@ -30,7 +30,6 @@
|
||||||
#define __KVM_HAVE_ARCH_INTC_INITIALIZED
|
#define __KVM_HAVE_ARCH_INTC_INITIALIZED
|
||||||
|
|
||||||
#define KVM_USER_MEM_SLOTS 32
|
#define KVM_USER_MEM_SLOTS 32
|
||||||
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
|
|
||||||
#define KVM_HAVE_ONE_REG
|
#define KVM_HAVE_ONE_REG
|
||||||
#define KVM_HALT_POLL_NS_DEFAULT 500000
|
#define KVM_HALT_POLL_NS_DEFAULT 500000
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#define __KVM_HAVE_IRQ_LINE
|
#define __KVM_HAVE_IRQ_LINE
|
||||||
#define __KVM_HAVE_READONLY_MEM
|
#define __KVM_HAVE_READONLY_MEM
|
||||||
|
|
||||||
|
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
|
||||||
|
|
||||||
#define KVM_REG_SIZE(id) \
|
#define KVM_REG_SIZE(id) \
|
||||||
(1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT))
|
(1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT))
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
#define __KVM_HAVE_ARCH_INTC_INITIALIZED
|
#define __KVM_HAVE_ARCH_INTC_INITIALIZED
|
||||||
|
|
||||||
#define KVM_USER_MEM_SLOTS 512
|
#define KVM_USER_MEM_SLOTS 512
|
||||||
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
|
|
||||||
#define KVM_HALT_POLL_NS_DEFAULT 500000
|
#define KVM_HALT_POLL_NS_DEFAULT 500000
|
||||||
|
|
||||||
#include <kvm/arm_vgic.h>
|
#include <kvm/arm_vgic.h>
|
||||||
|
|
|
@ -39,6 +39,8 @@
|
||||||
#define __KVM_HAVE_IRQ_LINE
|
#define __KVM_HAVE_IRQ_LINE
|
||||||
#define __KVM_HAVE_READONLY_MEM
|
#define __KVM_HAVE_READONLY_MEM
|
||||||
|
|
||||||
|
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
|
||||||
|
|
||||||
#define KVM_REG_SIZE(id) \
|
#define KVM_REG_SIZE(id) \
|
||||||
(1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT))
|
(1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT))
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,6 @@
|
||||||
/* memory slots that does not exposed to userspace */
|
/* memory slots that does not exposed to userspace */
|
||||||
#define KVM_PRIVATE_MEM_SLOTS 0
|
#define KVM_PRIVATE_MEM_SLOTS 0
|
||||||
|
|
||||||
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
|
|
||||||
#define KVM_HALT_POLL_NS_DEFAULT 500000
|
#define KVM_HALT_POLL_NS_DEFAULT 500000
|
||||||
|
|
||||||
#ifdef CONFIG_KVM_MIPS_VZ
|
#ifdef CONFIG_KVM_MIPS_VZ
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
|
|
||||||
#define __KVM_HAVE_READONLY_MEM
|
#define __KVM_HAVE_READONLY_MEM
|
||||||
|
|
||||||
|
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* for KVM_GET_REGS and KVM_SET_REGS
|
* for KVM_GET_REGS and KVM_SET_REGS
|
||||||
*
|
*
|
||||||
|
|
|
@ -45,9 +45,6 @@
|
||||||
|
|
||||||
#define __KVM_HAVE_ARCH_INTC_INITIALIZED
|
#define __KVM_HAVE_ARCH_INTC_INITIALIZED
|
||||||
|
|
||||||
#ifdef CONFIG_KVM_MMIO
|
|
||||||
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
|
|
||||||
#endif
|
|
||||||
#define KVM_HALT_POLL_NS_DEFAULT 10000 /* 10 us */
|
#define KVM_HALT_POLL_NS_DEFAULT 10000 /* 10 us */
|
||||||
|
|
||||||
/* These values are internal and can be increased later */
|
/* These values are internal and can be increased later */
|
||||||
|
|
|
@ -29,6 +29,9 @@
|
||||||
#define __KVM_HAVE_IRQ_LINE
|
#define __KVM_HAVE_IRQ_LINE
|
||||||
#define __KVM_HAVE_GUEST_DEBUG
|
#define __KVM_HAVE_GUEST_DEBUG
|
||||||
|
|
||||||
|
/* Not always available, but if it is, this is the correct offset. */
|
||||||
|
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
|
||||||
|
|
||||||
struct kvm_regs {
|
struct kvm_regs {
|
||||||
__u64 pc;
|
__u64 pc;
|
||||||
__u64 cr;
|
__u64 cr;
|
||||||
|
|
|
@ -43,8 +43,6 @@
|
||||||
#define KVM_PRIVATE_MEM_SLOTS 3
|
#define KVM_PRIVATE_MEM_SLOTS 3
|
||||||
#define KVM_MEM_SLOTS_NUM (KVM_USER_MEM_SLOTS + KVM_PRIVATE_MEM_SLOTS)
|
#define KVM_MEM_SLOTS_NUM (KVM_USER_MEM_SLOTS + KVM_PRIVATE_MEM_SLOTS)
|
||||||
|
|
||||||
#define KVM_PIO_PAGE_OFFSET 1
|
|
||||||
#define KVM_COALESCED_MMIO_PAGE_OFFSET 2
|
|
||||||
#define KVM_HALT_POLL_NS_DEFAULT 400000
|
#define KVM_HALT_POLL_NS_DEFAULT 400000
|
||||||
|
|
||||||
#define KVM_IRQCHIP_NUM_PINS KVM_IOAPIC_NUM_PINS
|
#define KVM_IRQCHIP_NUM_PINS KVM_IOAPIC_NUM_PINS
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/ioctl.h>
|
#include <linux/ioctl.h>
|
||||||
|
|
||||||
|
#define KVM_PIO_PAGE_OFFSET 1
|
||||||
|
#define KVM_COALESCED_MMIO_PAGE_OFFSET 2
|
||||||
|
|
||||||
#define DE_VECTOR 0
|
#define DE_VECTOR 0
|
||||||
#define DB_VECTOR 1
|
#define DB_VECTOR 1
|
||||||
#define BP_VECTOR 3
|
#define BP_VECTOR 3
|
||||||
|
|
|
@ -403,7 +403,7 @@ struct kvm {
|
||||||
struct kvm_vm_stat stat;
|
struct kvm_vm_stat stat;
|
||||||
struct kvm_arch arch;
|
struct kvm_arch arch;
|
||||||
refcount_t users_count;
|
refcount_t users_count;
|
||||||
#ifdef KVM_COALESCED_MMIO_PAGE_OFFSET
|
#ifdef CONFIG_KVM_MMIO
|
||||||
struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
|
struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
|
||||||
spinlock_t ring_lock;
|
spinlock_t ring_lock;
|
||||||
struct list_head coalesced_zones;
|
struct list_head coalesced_zones;
|
||||||
|
|
|
@ -2349,7 +2349,7 @@ static int kvm_vcpu_fault(struct vm_fault *vmf)
|
||||||
else if (vmf->pgoff == KVM_PIO_PAGE_OFFSET)
|
else if (vmf->pgoff == KVM_PIO_PAGE_OFFSET)
|
||||||
page = virt_to_page(vcpu->arch.pio_data);
|
page = virt_to_page(vcpu->arch.pio_data);
|
||||||
#endif
|
#endif
|
||||||
#ifdef KVM_COALESCED_MMIO_PAGE_OFFSET
|
#ifdef CONFIG_KVM_MMIO
|
||||||
else if (vmf->pgoff == KVM_COALESCED_MMIO_PAGE_OFFSET)
|
else if (vmf->pgoff == KVM_COALESCED_MMIO_PAGE_OFFSET)
|
||||||
page = virt_to_page(vcpu->kvm->coalesced_mmio_ring);
|
page = virt_to_page(vcpu->kvm->coalesced_mmio_ring);
|
||||||
#endif
|
#endif
|
||||||
|
@ -2918,7 +2918,7 @@ static long kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg)
|
||||||
case KVM_CAP_IOEVENTFD_ANY_LENGTH:
|
case KVM_CAP_IOEVENTFD_ANY_LENGTH:
|
||||||
case KVM_CAP_CHECK_EXTENSION_VM:
|
case KVM_CAP_CHECK_EXTENSION_VM:
|
||||||
return 1;
|
return 1;
|
||||||
#ifdef KVM_COALESCED_MMIO_PAGE_OFFSET
|
#ifdef CONFIG_KVM_MMIO
|
||||||
case KVM_CAP_COALESCED_MMIO:
|
case KVM_CAP_COALESCED_MMIO:
|
||||||
return KVM_COALESCED_MMIO_PAGE_OFFSET;
|
return KVM_COALESCED_MMIO_PAGE_OFFSET;
|
||||||
#endif
|
#endif
|
||||||
|
@ -2971,7 +2971,7 @@ static long kvm_vm_ioctl(struct file *filp,
|
||||||
r = kvm_vm_ioctl_get_dirty_log(kvm, &log);
|
r = kvm_vm_ioctl_get_dirty_log(kvm, &log);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef KVM_COALESCED_MMIO_PAGE_OFFSET
|
#ifdef CONFIG_KVM_MMIO
|
||||||
case KVM_REGISTER_COALESCED_MMIO: {
|
case KVM_REGISTER_COALESCED_MMIO: {
|
||||||
struct kvm_coalesced_mmio_zone zone;
|
struct kvm_coalesced_mmio_zone zone;
|
||||||
|
|
||||||
|
@ -3163,7 +3163,7 @@ static int kvm_dev_ioctl_create_vm(unsigned long type)
|
||||||
kvm = kvm_create_vm(type);
|
kvm = kvm_create_vm(type);
|
||||||
if (IS_ERR(kvm))
|
if (IS_ERR(kvm))
|
||||||
return PTR_ERR(kvm);
|
return PTR_ERR(kvm);
|
||||||
#ifdef KVM_COALESCED_MMIO_PAGE_OFFSET
|
#ifdef CONFIG_KVM_MMIO
|
||||||
r = kvm_coalesced_mmio_init(kvm);
|
r = kvm_coalesced_mmio_init(kvm);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
kvm_put_kvm(kvm);
|
kvm_put_kvm(kvm);
|
||||||
|
@ -3216,7 +3216,7 @@ static long kvm_dev_ioctl(struct file *filp,
|
||||||
#ifdef CONFIG_X86
|
#ifdef CONFIG_X86
|
||||||
r += PAGE_SIZE; /* pio data page */
|
r += PAGE_SIZE; /* pio data page */
|
||||||
#endif
|
#endif
|
||||||
#ifdef KVM_COALESCED_MMIO_PAGE_OFFSET
|
#ifdef CONFIG_KVM_MMIO
|
||||||
r += PAGE_SIZE; /* coalesced mmio ring page */
|
r += PAGE_SIZE; /* coalesced mmio ring page */
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue