diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-26 18:47:52 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-26 18:47:52 -0400 |
| commit | d3f12d36f148f101c568bdbce795e41cd9ceadf3 (patch) | |
| tree | 4d58ff7605a530fb052c95378d507e2350755825 /include/linux | |
| parent | 39b566eedbe9e35d38502cc5e62ef7abf1aff9c9 (diff) | |
| parent | 16175a796d061833aacfbd9672235f2d2725df65 (diff) | |
Merge branch 'kvm-updates/2.6.30' of git://git.kernel.org/pub/scm/virt/kvm/kvm
* 'kvm-updates/2.6.30' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (113 commits)
KVM: VMX: Don't allow uninhibited access to EFER on i386
KVM: Correct deassign device ioctl to IOW
KVM: ppc: e500: Fix the bug that KVM is unstable in SMP
KVM: ppc: e500: Fix the bug that mas0 update to wrong value when read TLB entry
KVM: Fix missing smp tlb flush in invlpg
KVM: Get support IRQ routing entry counts
KVM: fix sparse warnings: Should it be static?
KVM: fix sparse warnings: context imbalance
KVM: is_long_mode() should check for EFER.LMA
KVM: VMX: Update necessary state when guest enters long mode
KVM: ia64: Fix the build errors due to lack of macros related to MSI.
ia64: Move the macro definitions related to MSI to one header file.
KVM: fix kvm_vm_ioctl_deassign_device
KVM: define KVM_CAP_DEVICE_DEASSIGNMENT
KVM: ppc: Add emulation of E500 register mmucsr0
KVM: Report IRQ injection status for MSI delivered interrupts
KVM: MMU: Fix another largepage memory leak
KVM: SVM: set accessed bit for VMCB segment selectors
KVM: Report IRQ injection status to userspace.
KVM: MMU: remove assertion in kvm_mmu_alloc_page
...
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/kvm.h | 115 | ||||
| -rw-r--r-- | include/linux/kvm_host.h | 62 | ||||
| -rw-r--r-- | include/linux/kvm_types.h | 13 |
3 files changed, 153 insertions, 37 deletions
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 0424326f1679..311a073afe8a 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
| @@ -48,7 +48,10 @@ struct kvm_irq_level { | |||
| 48 | * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47.. | 48 | * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47.. |
| 49 | * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23.. | 49 | * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23.. |
| 50 | */ | 50 | */ |
| 51 | __u32 irq; | 51 | union { |
| 52 | __u32 irq; | ||
| 53 | __s32 status; | ||
| 54 | }; | ||
| 52 | __u32 level; | 55 | __u32 level; |
| 53 | }; | 56 | }; |
| 54 | 57 | ||
| @@ -126,6 +129,7 @@ struct kvm_run { | |||
| 126 | __u64 data_offset; /* relative to kvm_run start */ | 129 | __u64 data_offset; /* relative to kvm_run start */ |
| 127 | } io; | 130 | } io; |
| 128 | struct { | 131 | struct { |
| 132 | struct kvm_debug_exit_arch arch; | ||
| 129 | } debug; | 133 | } debug; |
| 130 | /* KVM_EXIT_MMIO */ | 134 | /* KVM_EXIT_MMIO */ |
| 131 | struct { | 135 | struct { |
| @@ -217,21 +221,6 @@ struct kvm_interrupt { | |||
| 217 | __u32 irq; | 221 | __u32 irq; |
| 218 | }; | 222 | }; |
| 219 | 223 | ||
| 220 | struct kvm_breakpoint { | ||
| 221 | __u32 enabled; | ||
| 222 | __u32 padding; | ||
| 223 | __u64 address; | ||
| 224 | }; | ||
| 225 | |||
| 226 | /* for KVM_DEBUG_GUEST */ | ||
| 227 | struct kvm_debug_guest { | ||
| 228 | /* int */ | ||
| 229 | __u32 enabled; | ||
| 230 | __u32 pad; | ||
| 231 | struct kvm_breakpoint breakpoints[4]; | ||
| 232 | __u32 singlestep; | ||
| 233 | }; | ||
| 234 | |||
| 235 | /* for KVM_GET_DIRTY_LOG */ | 224 | /* for KVM_GET_DIRTY_LOG */ |
| 236 | struct kvm_dirty_log { | 225 | struct kvm_dirty_log { |
| 237 | __u32 slot; | 226 | __u32 slot; |
| @@ -292,6 +281,17 @@ struct kvm_s390_interrupt { | |||
| 292 | __u64 parm64; | 281 | __u64 parm64; |
| 293 | }; | 282 | }; |
| 294 | 283 | ||
| 284 | /* for KVM_SET_GUEST_DEBUG */ | ||
| 285 | |||
| 286 | #define KVM_GUESTDBG_ENABLE 0x00000001 | ||
| 287 | #define KVM_GUESTDBG_SINGLESTEP 0x00000002 | ||
| 288 | |||
| 289 | struct kvm_guest_debug { | ||
| 290 | __u32 control; | ||
| 291 | __u32 pad; | ||
| 292 | struct kvm_guest_debug_arch arch; | ||
| 293 | }; | ||
| 294 | |||
| 295 | #define KVM_TRC_SHIFT 16 | 295 | #define KVM_TRC_SHIFT 16 |
| 296 | /* | 296 | /* |
| 297 | * kvm trace categories | 297 | * kvm trace categories |
| @@ -396,6 +396,57 @@ struct kvm_trace_rec { | |||
| 396 | #ifdef __KVM_HAVE_USER_NMI | 396 | #ifdef __KVM_HAVE_USER_NMI |
| 397 | #define KVM_CAP_USER_NMI 22 | 397 | #define KVM_CAP_USER_NMI 22 |
| 398 | #endif | 398 | #endif |
| 399 | #ifdef __KVM_HAVE_GUEST_DEBUG | ||
| 400 | #define KVM_CAP_SET_GUEST_DEBUG 23 | ||
| 401 | #endif | ||
| 402 | #ifdef __KVM_HAVE_PIT | ||
| 403 | #define KVM_CAP_REINJECT_CONTROL 24 | ||
| 404 | #endif | ||
| 405 | #ifdef __KVM_HAVE_IOAPIC | ||
| 406 | #define KVM_CAP_IRQ_ROUTING 25 | ||
| 407 | #endif | ||
| 408 | #define KVM_CAP_IRQ_INJECT_STATUS 26 | ||
| 409 | #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT | ||
| 410 | #define KVM_CAP_DEVICE_DEASSIGNMENT 27 | ||
| 411 | #endif | ||
| 412 | |||
| 413 | #ifdef KVM_CAP_IRQ_ROUTING | ||
| 414 | |||
| 415 | struct kvm_irq_routing_irqchip { | ||
| 416 | __u32 irqchip; | ||
| 417 | __u32 pin; | ||
| 418 | }; | ||
| 419 | |||
| 420 | struct kvm_irq_routing_msi { | ||
| 421 | __u32 address_lo; | ||
| 422 | __u32 address_hi; | ||
| 423 | __u32 data; | ||
| 424 | __u32 pad; | ||
| 425 | }; | ||
| 426 | |||
| 427 | /* gsi routing entry types */ | ||
| 428 | #define KVM_IRQ_ROUTING_IRQCHIP 1 | ||
| 429 | #define KVM_IRQ_ROUTING_MSI 2 | ||
| 430 | |||
| 431 | struct kvm_irq_routing_entry { | ||
| 432 | __u32 gsi; | ||
| 433 | __u32 type; | ||
| 434 | __u32 flags; | ||
| 435 | __u32 pad; | ||
| 436 | union { | ||
| 437 | struct kvm_irq_routing_irqchip irqchip; | ||
| 438 | struct kvm_irq_routing_msi msi; | ||
| 439 | __u32 pad[8]; | ||
| 440 | } u; | ||
| 441 | }; | ||
| 442 | |||
| 443 | struct kvm_irq_routing { | ||
| 444 | __u32 nr; | ||
| 445 | __u32 flags; | ||
| 446 | struct kvm_irq_routing_entry entries[0]; | ||
| 447 | }; | ||
| 448 | |||
| 449 | #endif | ||
| 399 | 450 | ||
| 400 | /* | 451 | /* |
| 401 | * ioctls for VM fds | 452 | * ioctls for VM fds |
| @@ -421,14 +472,19 @@ struct kvm_trace_rec { | |||
| 421 | #define KVM_CREATE_PIT _IO(KVMIO, 0x64) | 472 | #define KVM_CREATE_PIT _IO(KVMIO, 0x64) |
| 422 | #define KVM_GET_PIT _IOWR(KVMIO, 0x65, struct kvm_pit_state) | 473 | #define KVM_GET_PIT _IOWR(KVMIO, 0x65, struct kvm_pit_state) |
| 423 | #define KVM_SET_PIT _IOR(KVMIO, 0x66, struct kvm_pit_state) | 474 | #define KVM_SET_PIT _IOR(KVMIO, 0x66, struct kvm_pit_state) |
| 475 | #define KVM_IRQ_LINE_STATUS _IOWR(KVMIO, 0x67, struct kvm_irq_level) | ||
| 424 | #define KVM_REGISTER_COALESCED_MMIO \ | 476 | #define KVM_REGISTER_COALESCED_MMIO \ |
| 425 | _IOW(KVMIO, 0x67, struct kvm_coalesced_mmio_zone) | 477 | _IOW(KVMIO, 0x67, struct kvm_coalesced_mmio_zone) |
| 426 | #define KVM_UNREGISTER_COALESCED_MMIO \ | 478 | #define KVM_UNREGISTER_COALESCED_MMIO \ |
| 427 | _IOW(KVMIO, 0x68, struct kvm_coalesced_mmio_zone) | 479 | _IOW(KVMIO, 0x68, struct kvm_coalesced_mmio_zone) |
| 428 | #define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \ | 480 | #define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \ |
| 429 | struct kvm_assigned_pci_dev) | 481 | struct kvm_assigned_pci_dev) |
| 482 | #define KVM_SET_GSI_ROUTING _IOW(KVMIO, 0x6a, struct kvm_irq_routing) | ||
| 430 | #define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \ | 483 | #define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \ |
| 431 | struct kvm_assigned_irq) | 484 | struct kvm_assigned_irq) |
| 485 | #define KVM_REINJECT_CONTROL _IO(KVMIO, 0x71) | ||
| 486 | #define KVM_DEASSIGN_PCI_DEVICE _IOW(KVMIO, 0x72, \ | ||
| 487 | struct kvm_assigned_pci_dev) | ||
| 432 | 488 | ||
| 433 | /* | 489 | /* |
| 434 | * ioctls for vcpu fds | 490 | * ioctls for vcpu fds |
| @@ -440,7 +496,8 @@ struct kvm_trace_rec { | |||
| 440 | #define KVM_SET_SREGS _IOW(KVMIO, 0x84, struct kvm_sregs) | 496 | #define KVM_SET_SREGS _IOW(KVMIO, 0x84, struct kvm_sregs) |
| 441 | #define KVM_TRANSLATE _IOWR(KVMIO, 0x85, struct kvm_translation) | 497 | #define KVM_TRANSLATE _IOWR(KVMIO, 0x85, struct kvm_translation) |
| 442 | #define KVM_INTERRUPT _IOW(KVMIO, 0x86, struct kvm_interrupt) | 498 | #define KVM_INTERRUPT _IOW(KVMIO, 0x86, struct kvm_interrupt) |
| 443 | #define KVM_DEBUG_GUEST _IOW(KVMIO, 0x87, struct kvm_debug_guest) | 499 | /* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */ |
| 500 | #define KVM_DEBUG_GUEST __KVM_DEPRECATED_DEBUG_GUEST | ||
| 444 | #define KVM_GET_MSRS _IOWR(KVMIO, 0x88, struct kvm_msrs) | 501 | #define KVM_GET_MSRS _IOWR(KVMIO, 0x88, struct kvm_msrs) |
| 445 | #define KVM_SET_MSRS _IOW(KVMIO, 0x89, struct kvm_msrs) | 502 | #define KVM_SET_MSRS _IOW(KVMIO, 0x89, struct kvm_msrs) |
| 446 | #define KVM_SET_CPUID _IOW(KVMIO, 0x8a, struct kvm_cpuid) | 503 | #define KVM_SET_CPUID _IOW(KVMIO, 0x8a, struct kvm_cpuid) |
| @@ -469,6 +526,29 @@ struct kvm_trace_rec { | |||
| 469 | #define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state) | 526 | #define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state) |
| 470 | /* Available with KVM_CAP_NMI */ | 527 | /* Available with KVM_CAP_NMI */ |
| 471 | #define KVM_NMI _IO(KVMIO, 0x9a) | 528 | #define KVM_NMI _IO(KVMIO, 0x9a) |
| 529 | /* Available with KVM_CAP_SET_GUEST_DEBUG */ | ||
| 530 | #define KVM_SET_GUEST_DEBUG _IOW(KVMIO, 0x9b, struct kvm_guest_debug) | ||
| 531 | |||
| 532 | /* | ||
| 533 | * Deprecated interfaces | ||
| 534 | */ | ||
| 535 | struct kvm_breakpoint { | ||
| 536 | __u32 enabled; | ||
| 537 | __u32 padding; | ||
| 538 | __u64 address; | ||
| 539 | }; | ||
| 540 | |||
| 541 | struct kvm_debug_guest { | ||
| 542 | __u32 enabled; | ||
| 543 | __u32 pad; | ||
| 544 | struct kvm_breakpoint breakpoints[4]; | ||
| 545 | __u32 singlestep; | ||
| 546 | }; | ||
| 547 | |||
| 548 | #define __KVM_DEPRECATED_DEBUG_GUEST _IOW(KVMIO, 0x87, struct kvm_debug_guest) | ||
| 549 | |||
| 550 | #define KVM_IA64_VCPU_GET_STACK _IOR(KVMIO, 0x9a, void *) | ||
| 551 | #define KVM_IA64_VCPU_SET_STACK _IOW(KVMIO, 0x9b, void *) | ||
| 472 | 552 | ||
| 473 | #define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) | 553 | #define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) |
| 474 | #define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) | 554 | #define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) |
| @@ -522,6 +602,7 @@ struct kvm_assigned_irq { | |||
| 522 | 602 | ||
| 523 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) | 603 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) |
| 524 | 604 | ||
| 605 | #define KVM_DEV_IRQ_ASSIGN_MSI_ACTION KVM_DEV_IRQ_ASSIGN_ENABLE_MSI | ||
| 525 | #define KVM_DEV_IRQ_ASSIGN_ENABLE_MSI (1 << 0) | 606 | #define KVM_DEV_IRQ_ASSIGN_ENABLE_MSI (1 << 0) |
| 526 | 607 | ||
| 527 | #endif | 608 | #endif |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index bf6f703642fc..894a56e365e8 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | #define KVM_REQ_PENDING_TIMER 5 | 37 | #define KVM_REQ_PENDING_TIMER 5 |
| 38 | #define KVM_REQ_UNHALT 6 | 38 | #define KVM_REQ_UNHALT 6 |
| 39 | #define KVM_REQ_MMU_SYNC 7 | 39 | #define KVM_REQ_MMU_SYNC 7 |
| 40 | #define KVM_REQ_KVMCLOCK_UPDATE 8 | ||
| 40 | 41 | ||
| 41 | #define KVM_USERSPACE_IRQ_SOURCE_ID 0 | 42 | #define KVM_USERSPACE_IRQ_SOURCE_ID 0 |
| 42 | 43 | ||
| @@ -73,7 +74,7 @@ struct kvm_vcpu { | |||
| 73 | struct kvm_run *run; | 74 | struct kvm_run *run; |
| 74 | int guest_mode; | 75 | int guest_mode; |
| 75 | unsigned long requests; | 76 | unsigned long requests; |
| 76 | struct kvm_guest_debug guest_debug; | 77 | unsigned long guest_debug; |
| 77 | int fpu_active; | 78 | int fpu_active; |
| 78 | int guest_fpu_loaded; | 79 | int guest_fpu_loaded; |
| 79 | wait_queue_head_t wq; | 80 | wait_queue_head_t wq; |
| @@ -107,6 +108,20 @@ struct kvm_memory_slot { | |||
| 107 | int user_alloc; | 108 | int user_alloc; |
| 108 | }; | 109 | }; |
| 109 | 110 | ||
| 111 | struct kvm_kernel_irq_routing_entry { | ||
| 112 | u32 gsi; | ||
| 113 | int (*set)(struct kvm_kernel_irq_routing_entry *e, | ||
| 114 | struct kvm *kvm, int level); | ||
| 115 | union { | ||
| 116 | struct { | ||
| 117 | unsigned irqchip; | ||
| 118 | unsigned pin; | ||
| 119 | } irqchip; | ||
| 120 | struct msi_msg msi; | ||
| 121 | }; | ||
| 122 | struct list_head link; | ||
| 123 | }; | ||
| 124 | |||
| 110 | struct kvm { | 125 | struct kvm { |
| 111 | struct mutex lock; /* protects the vcpus array and APIC accesses */ | 126 | struct mutex lock; /* protects the vcpus array and APIC accesses */ |
| 112 | spinlock_t mmu_lock; | 127 | spinlock_t mmu_lock; |
| @@ -127,6 +142,11 @@ struct kvm { | |||
| 127 | struct kvm_coalesced_mmio_ring *coalesced_mmio_ring; | 142 | struct kvm_coalesced_mmio_ring *coalesced_mmio_ring; |
| 128 | #endif | 143 | #endif |
| 129 | 144 | ||
| 145 | #ifdef CONFIG_HAVE_KVM_IRQCHIP | ||
| 146 | struct list_head irq_routing; /* of kvm_kernel_irq_routing_entry */ | ||
| 147 | struct hlist_head mask_notifier_list; | ||
| 148 | #endif | ||
| 149 | |||
| 130 | #ifdef KVM_ARCH_WANT_MMU_NOTIFIER | 150 | #ifdef KVM_ARCH_WANT_MMU_NOTIFIER |
| 131 | struct mmu_notifier mmu_notifier; | 151 | struct mmu_notifier mmu_notifier; |
| 132 | unsigned long mmu_notifier_seq; | 152 | unsigned long mmu_notifier_seq; |
| @@ -237,7 +257,6 @@ int kvm_vm_ioctl_set_memory_region(struct kvm *kvm, | |||
| 237 | int user_alloc); | 257 | int user_alloc); |
| 238 | long kvm_arch_vm_ioctl(struct file *filp, | 258 | long kvm_arch_vm_ioctl(struct file *filp, |
| 239 | unsigned int ioctl, unsigned long arg); | 259 | unsigned int ioctl, unsigned long arg); |
| 240 | void kvm_arch_destroy_vm(struct kvm *kvm); | ||
| 241 | 260 | ||
| 242 | int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu); | 261 | int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu); |
| 243 | int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu); | 262 | int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu); |
| @@ -255,8 +274,8 @@ int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, | |||
| 255 | struct kvm_mp_state *mp_state); | 274 | struct kvm_mp_state *mp_state); |
| 256 | int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, | 275 | int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, |
| 257 | struct kvm_mp_state *mp_state); | 276 | struct kvm_mp_state *mp_state); |
| 258 | int kvm_arch_vcpu_ioctl_debug_guest(struct kvm_vcpu *vcpu, | 277 | int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, |
| 259 | struct kvm_debug_guest *dbg); | 278 | struct kvm_guest_debug *dbg); |
| 260 | int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run); | 279 | int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run); |
| 261 | 280 | ||
| 262 | int kvm_arch_init(void *opaque); | 281 | int kvm_arch_init(void *opaque); |
| @@ -310,7 +329,6 @@ struct kvm_assigned_dev_kernel { | |||
| 310 | int host_irq; | 329 | int host_irq; |
| 311 | bool host_irq_disabled; | 330 | bool host_irq_disabled; |
| 312 | int guest_irq; | 331 | int guest_irq; |
| 313 | struct msi_msg guest_msi; | ||
| 314 | #define KVM_ASSIGNED_DEV_GUEST_INTX (1 << 0) | 332 | #define KVM_ASSIGNED_DEV_GUEST_INTX (1 << 0) |
| 315 | #define KVM_ASSIGNED_DEV_GUEST_MSI (1 << 1) | 333 | #define KVM_ASSIGNED_DEV_GUEST_MSI (1 << 1) |
| 316 | #define KVM_ASSIGNED_DEV_HOST_INTX (1 << 8) | 334 | #define KVM_ASSIGNED_DEV_HOST_INTX (1 << 8) |
| @@ -321,8 +339,21 @@ struct kvm_assigned_dev_kernel { | |||
| 321 | struct pci_dev *dev; | 339 | struct pci_dev *dev; |
| 322 | struct kvm *kvm; | 340 | struct kvm *kvm; |
| 323 | }; | 341 | }; |
| 324 | void kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level); | 342 | |
| 325 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); | 343 | struct kvm_irq_mask_notifier { |
| 344 | void (*func)(struct kvm_irq_mask_notifier *kimn, bool masked); | ||
| 345 | int irq; | ||
| 346 | struct hlist_node link; | ||
| 347 | }; | ||
| 348 | |||
| 349 | void kvm_register_irq_mask_notifier(struct kvm *kvm, int irq, | ||
| 350 | struct kvm_irq_mask_notifier *kimn); | ||
| 351 | void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq, | ||
| 352 | struct kvm_irq_mask_notifier *kimn); | ||
| 353 | void kvm_fire_mask_notifiers(struct kvm *kvm, int irq, bool mask); | ||
| 354 | |||
| 355 | int kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level); | ||
| 356 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); | ||
| 326 | void kvm_register_irq_ack_notifier(struct kvm *kvm, | 357 | void kvm_register_irq_ack_notifier(struct kvm *kvm, |
| 327 | struct kvm_irq_ack_notifier *kian); | 358 | struct kvm_irq_ack_notifier *kian); |
| 328 | void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian); | 359 | void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian); |
| @@ -464,4 +495,21 @@ static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_se | |||
| 464 | } | 495 | } |
| 465 | #endif | 496 | #endif |
| 466 | 497 | ||
| 498 | #ifdef CONFIG_HAVE_KVM_IRQCHIP | ||
| 499 | |||
| 500 | #define KVM_MAX_IRQ_ROUTES 1024 | ||
| 501 | |||
| 502 | int kvm_setup_default_irq_routing(struct kvm *kvm); | ||
| 503 | int kvm_set_irq_routing(struct kvm *kvm, | ||
| 504 | const struct kvm_irq_routing_entry *entries, | ||
| 505 | unsigned nr, | ||
| 506 | unsigned flags); | ||
| 507 | void kvm_free_irq_routing(struct kvm *kvm); | ||
| 508 | |||
| 509 | #else | ||
| 510 | |||
| 511 | static inline void kvm_free_irq_routing(struct kvm *kvm) {} | ||
| 512 | |||
| 513 | #endif | ||
| 514 | |||
| 467 | #endif | 515 | #endif |
diff --git a/include/linux/kvm_types.h b/include/linux/kvm_types.h index 9b6f395c9625..2b8318c83e53 100644 --- a/include/linux/kvm_types.h +++ b/include/linux/kvm_types.h | |||
| @@ -40,17 +40,4 @@ typedef unsigned long hfn_t; | |||
| 40 | 40 | ||
| 41 | typedef hfn_t pfn_t; | 41 | typedef hfn_t pfn_t; |
| 42 | 42 | ||
| 43 | struct kvm_pio_request { | ||
| 44 | unsigned long count; | ||
| 45 | int cur_count; | ||
| 46 | struct page *guest_pages[2]; | ||
| 47 | unsigned guest_page_offset; | ||
| 48 | int in; | ||
| 49 | int port; | ||
| 50 | int size; | ||
| 51 | int string; | ||
| 52 | int down; | ||
| 53 | int rep; | ||
| 54 | }; | ||
| 55 | |||
| 56 | #endif /* __KVM_TYPES_H__ */ | 43 | #endif /* __KVM_TYPES_H__ */ |
