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:
Paolo Bonzini 2017-03-31 13:53:23 +02:00 committed by Radim Krčmář
parent 3042255899
commit 4b4357e025
12 changed files with 18 additions and 14 deletions

View File

@ -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

View File

@ -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))

View File

@ -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>

View File

@ -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))

View File

@ -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

View File

@ -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
* *

View File

@ -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 */

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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;