diff options
| author | Gleb Natapov <gleb@redhat.com> | 2013-04-28 05:50:07 -0400 |
|---|---|---|
| committer | Gleb Natapov <gleb@redhat.com> | 2013-04-28 05:50:07 -0400 |
| commit | 064d1afaa5a60fc391d0b4b77599fc8f63f99cd3 (patch) | |
| tree | 2e640cdfa50b0048c52e021f07a8b24560251b26 /include | |
| parent | 730dca42c1d363c939da18c1499c7327c66e2b37 (diff) | |
| parent | 8b78645c93b5d469e8006d68dbc92edc2640c654 (diff) | |
Merge git://github.com/agraf/linux-2.6.git kvm-ppc-next into queue
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/kvm_host.h | 54 | ||||
| -rw-r--r-- | include/trace/events/kvm.h | 12 | ||||
| -rw-r--r-- | include/uapi/linux/kvm.h | 36 |
3 files changed, 89 insertions, 13 deletions
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 7bde42470e37..309774715897 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -303,10 +303,10 @@ struct kvm_kernel_irq_routing_entry { | |||
| 303 | struct hlist_node link; | 303 | struct hlist_node link; |
| 304 | }; | 304 | }; |
| 305 | 305 | ||
| 306 | #ifdef __KVM_HAVE_IOAPIC | 306 | #ifdef CONFIG_HAVE_KVM_IRQ_ROUTING |
| 307 | 307 | ||
| 308 | struct kvm_irq_routing_table { | 308 | struct kvm_irq_routing_table { |
| 309 | int chip[KVM_NR_IRQCHIPS][KVM_IOAPIC_NUM_PINS]; | 309 | int chip[KVM_NR_IRQCHIPS][KVM_IRQCHIP_NUM_PINS]; |
| 310 | struct kvm_kernel_irq_routing_entry *rt_entries; | 310 | struct kvm_kernel_irq_routing_entry *rt_entries; |
| 311 | u32 nr_rt_entries; | 311 | u32 nr_rt_entries; |
| 312 | /* | 312 | /* |
| @@ -392,6 +392,7 @@ struct kvm { | |||
| 392 | long mmu_notifier_count; | 392 | long mmu_notifier_count; |
| 393 | #endif | 393 | #endif |
| 394 | long tlbs_dirty; | 394 | long tlbs_dirty; |
| 395 | struct list_head devices; | ||
| 395 | }; | 396 | }; |
| 396 | 397 | ||
| 397 | #define kvm_err(fmt, ...) \ | 398 | #define kvm_err(fmt, ...) \ |
| @@ -431,7 +432,7 @@ void kvm_vcpu_uninit(struct kvm_vcpu *vcpu); | |||
| 431 | int __must_check vcpu_load(struct kvm_vcpu *vcpu); | 432 | int __must_check vcpu_load(struct kvm_vcpu *vcpu); |
| 432 | void vcpu_put(struct kvm_vcpu *vcpu); | 433 | void vcpu_put(struct kvm_vcpu *vcpu); |
| 433 | 434 | ||
| 434 | #ifdef __KVM_HAVE_IOAPIC | 435 | #ifdef CONFIG_HAVE_KVM_IRQ_ROUTING |
| 435 | int kvm_irqfd_init(void); | 436 | int kvm_irqfd_init(void); |
| 436 | void kvm_irqfd_exit(void); | 437 | void kvm_irqfd_exit(void); |
| 437 | #else | 438 | #else |
| @@ -718,11 +719,6 @@ void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq, | |||
| 718 | void kvm_fire_mask_notifiers(struct kvm *kvm, unsigned irqchip, unsigned pin, | 719 | void kvm_fire_mask_notifiers(struct kvm *kvm, unsigned irqchip, unsigned pin, |
| 719 | bool mask); | 720 | bool mask); |
| 720 | 721 | ||
| 721 | #ifdef __KVM_HAVE_IOAPIC | ||
| 722 | void kvm_get_intr_delivery_bitmask(struct kvm_ioapic *ioapic, | ||
| 723 | union kvm_ioapic_redirect_entry *entry, | ||
| 724 | unsigned long *deliver_bitmask); | ||
| 725 | #endif | ||
| 726 | int kvm_set_irq(struct kvm *kvm, int irq_source_id, u32 irq, int level, | 722 | int kvm_set_irq(struct kvm *kvm, int irq_source_id, u32 irq, int level, |
| 727 | bool line_status); | 723 | bool line_status); |
| 728 | int kvm_set_irq_inatomic(struct kvm *kvm, int irq_source_id, u32 irq, int level); | 724 | int kvm_set_irq_inatomic(struct kvm *kvm, int irq_source_id, u32 irq, int level); |
| @@ -956,7 +952,7 @@ static inline int mmu_notifier_retry(struct kvm *kvm, unsigned long mmu_seq) | |||
| 956 | } | 952 | } |
| 957 | #endif | 953 | #endif |
| 958 | 954 | ||
| 959 | #ifdef KVM_CAP_IRQ_ROUTING | 955 | #ifdef CONFIG_HAVE_KVM_IRQ_ROUTING |
| 960 | 956 | ||
| 961 | #define KVM_MAX_IRQ_ROUTES 1024 | 957 | #define KVM_MAX_IRQ_ROUTES 1024 |
| 962 | 958 | ||
| @@ -965,6 +961,9 @@ int kvm_set_irq_routing(struct kvm *kvm, | |||
| 965 | const struct kvm_irq_routing_entry *entries, | 961 | const struct kvm_irq_routing_entry *entries, |
| 966 | unsigned nr, | 962 | unsigned nr, |
| 967 | unsigned flags); | 963 | unsigned flags); |
| 964 | int kvm_set_routing_entry(struct kvm_irq_routing_table *rt, | ||
| 965 | struct kvm_kernel_irq_routing_entry *e, | ||
| 966 | const struct kvm_irq_routing_entry *ue); | ||
| 968 | void kvm_free_irq_routing(struct kvm *kvm); | 967 | void kvm_free_irq_routing(struct kvm *kvm); |
| 969 | 968 | ||
| 970 | int kvm_send_userspace_msi(struct kvm *kvm, struct kvm_msi *msi); | 969 | int kvm_send_userspace_msi(struct kvm *kvm, struct kvm_msi *msi); |
| @@ -1065,6 +1064,43 @@ static inline bool kvm_check_request(int req, struct kvm_vcpu *vcpu) | |||
| 1065 | 1064 | ||
| 1066 | extern bool kvm_rebooting; | 1065 | extern bool kvm_rebooting; |
| 1067 | 1066 | ||
| 1067 | struct kvm_device_ops; | ||
| 1068 | |||
| 1069 | struct kvm_device { | ||
| 1070 | struct kvm_device_ops *ops; | ||
| 1071 | struct kvm *kvm; | ||
| 1072 | void *private; | ||
| 1073 | struct list_head vm_node; | ||
| 1074 | }; | ||
| 1075 | |||
| 1076 | /* create, destroy, and name are mandatory */ | ||
| 1077 | struct kvm_device_ops { | ||
| 1078 | const char *name; | ||
| 1079 | int (*create)(struct kvm_device *dev, u32 type); | ||
| 1080 | |||
| 1081 | /* | ||
| 1082 | * Destroy is responsible for freeing dev. | ||
| 1083 | * | ||
| 1084 | * Destroy may be called before or after destructors are called | ||
| 1085 | * on emulated I/O regions, depending on whether a reference is | ||
| 1086 | * held by a vcpu or other kvm component that gets destroyed | ||
| 1087 | * after the emulated I/O. | ||
| 1088 | */ | ||
| 1089 | void (*destroy)(struct kvm_device *dev); | ||
| 1090 | |||
| 1091 | int (*set_attr)(struct kvm_device *dev, struct kvm_device_attr *attr); | ||
| 1092 | int (*get_attr)(struct kvm_device *dev, struct kvm_device_attr *attr); | ||
| 1093 | int (*has_attr)(struct kvm_device *dev, struct kvm_device_attr *attr); | ||
| 1094 | long (*ioctl)(struct kvm_device *dev, unsigned int ioctl, | ||
| 1095 | unsigned long arg); | ||
| 1096 | }; | ||
| 1097 | |||
| 1098 | void kvm_device_get(struct kvm_device *dev); | ||
| 1099 | void kvm_device_put(struct kvm_device *dev); | ||
| 1100 | struct kvm_device *kvm_device_from_filp(struct file *filp); | ||
| 1101 | |||
| 1102 | extern struct kvm_device_ops kvm_mpic_ops; | ||
| 1103 | |||
| 1068 | #ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT | 1104 | #ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT |
| 1069 | 1105 | ||
| 1070 | static inline void kvm_vcpu_set_in_spin_loop(struct kvm_vcpu *vcpu, bool val) | 1106 | static inline void kvm_vcpu_set_in_spin_loop(struct kvm_vcpu *vcpu, bool val) |
diff --git a/include/trace/events/kvm.h b/include/trace/events/kvm.h index 19911dddaeb7..7005d1109ec9 100644 --- a/include/trace/events/kvm.h +++ b/include/trace/events/kvm.h | |||
| @@ -37,7 +37,7 @@ TRACE_EVENT(kvm_userspace_exit, | |||
| 37 | __entry->errno < 0 ? -__entry->errno : __entry->reason) | 37 | __entry->errno < 0 ? -__entry->errno : __entry->reason) |
| 38 | ); | 38 | ); |
| 39 | 39 | ||
| 40 | #if defined(__KVM_HAVE_IRQ_LINE) | 40 | #if defined(CONFIG_HAVE_KVM_IRQCHIP) |
| 41 | TRACE_EVENT(kvm_set_irq, | 41 | TRACE_EVENT(kvm_set_irq, |
| 42 | TP_PROTO(unsigned int gsi, int level, int irq_source_id), | 42 | TP_PROTO(unsigned int gsi, int level, int irq_source_id), |
| 43 | TP_ARGS(gsi, level, irq_source_id), | 43 | TP_ARGS(gsi, level, irq_source_id), |
| @@ -122,6 +122,10 @@ TRACE_EVENT(kvm_msi_set_irq, | |||
| 122 | {KVM_IRQCHIP_PIC_SLAVE, "PIC slave"}, \ | 122 | {KVM_IRQCHIP_PIC_SLAVE, "PIC slave"}, \ |
| 123 | {KVM_IRQCHIP_IOAPIC, "IOAPIC"} | 123 | {KVM_IRQCHIP_IOAPIC, "IOAPIC"} |
| 124 | 124 | ||
| 125 | #endif /* defined(__KVM_HAVE_IOAPIC) */ | ||
| 126 | |||
| 127 | #if defined(CONFIG_HAVE_KVM_IRQCHIP) | ||
| 128 | |||
| 125 | TRACE_EVENT(kvm_ack_irq, | 129 | TRACE_EVENT(kvm_ack_irq, |
| 126 | TP_PROTO(unsigned int irqchip, unsigned int pin), | 130 | TP_PROTO(unsigned int irqchip, unsigned int pin), |
| 127 | TP_ARGS(irqchip, pin), | 131 | TP_ARGS(irqchip, pin), |
| @@ -136,14 +140,18 @@ TRACE_EVENT(kvm_ack_irq, | |||
| 136 | __entry->pin = pin; | 140 | __entry->pin = pin; |
| 137 | ), | 141 | ), |
| 138 | 142 | ||
| 143 | #ifdef kvm_irqchips | ||
| 139 | TP_printk("irqchip %s pin %u", | 144 | TP_printk("irqchip %s pin %u", |
| 140 | __print_symbolic(__entry->irqchip, kvm_irqchips), | 145 | __print_symbolic(__entry->irqchip, kvm_irqchips), |
| 141 | __entry->pin) | 146 | __entry->pin) |
| 147 | #else | ||
| 148 | TP_printk("irqchip %d pin %u", __entry->irqchip, __entry->pin) | ||
| 149 | #endif | ||
| 142 | ); | 150 | ); |
| 143 | 151 | ||
| 152 | #endif /* defined(CONFIG_HAVE_KVM_IRQCHIP) */ | ||
| 144 | 153 | ||
| 145 | 154 | ||
| 146 | #endif /* defined(__KVM_HAVE_IOAPIC) */ | ||
| 147 | 155 | ||
| 148 | #define KVM_TRACE_MMIO_READ_UNSATISFIED 0 | 156 | #define KVM_TRACE_MMIO_READ_UNSATISFIED 0 |
| 149 | #define KVM_TRACE_MMIO_READ 1 | 157 | #define KVM_TRACE_MMIO_READ 1 |
diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 74d0ff3dfd66..d4005192ad6e 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h | |||
| @@ -579,9 +579,7 @@ struct kvm_ppc_smmu_info { | |||
| 579 | #ifdef __KVM_HAVE_PIT | 579 | #ifdef __KVM_HAVE_PIT |
| 580 | #define KVM_CAP_REINJECT_CONTROL 24 | 580 | #define KVM_CAP_REINJECT_CONTROL 24 |
| 581 | #endif | 581 | #endif |
| 582 | #ifdef __KVM_HAVE_IOAPIC | ||
| 583 | #define KVM_CAP_IRQ_ROUTING 25 | 582 | #define KVM_CAP_IRQ_ROUTING 25 |
| 584 | #endif | ||
| 585 | #define KVM_CAP_IRQ_INJECT_STATUS 26 | 583 | #define KVM_CAP_IRQ_INJECT_STATUS 26 |
| 586 | #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT | 584 | #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT |
| 587 | #define KVM_CAP_DEVICE_DEASSIGNMENT 27 | 585 | #define KVM_CAP_DEVICE_DEASSIGNMENT 27 |
| @@ -668,6 +666,9 @@ struct kvm_ppc_smmu_info { | |||
| 668 | #define KVM_CAP_PPC_EPR 86 | 666 | #define KVM_CAP_PPC_EPR 86 |
| 669 | #define KVM_CAP_ARM_PSCI 87 | 667 | #define KVM_CAP_ARM_PSCI 87 |
| 670 | #define KVM_CAP_ARM_SET_DEVICE_ADDR 88 | 668 | #define KVM_CAP_ARM_SET_DEVICE_ADDR 88 |
| 669 | #define KVM_CAP_DEVICE_CTRL 89 | ||
| 670 | #define KVM_CAP_IRQ_MPIC 90 | ||
| 671 | #define KVM_CAP_PPC_RTAS 91 | ||
| 671 | 672 | ||
| 672 | #ifdef KVM_CAP_IRQ_ROUTING | 673 | #ifdef KVM_CAP_IRQ_ROUTING |
| 673 | 674 | ||
| @@ -821,6 +822,27 @@ struct kvm_arm_device_addr { | |||
| 821 | }; | 822 | }; |
| 822 | 823 | ||
| 823 | /* | 824 | /* |
| 825 | * Device control API, available with KVM_CAP_DEVICE_CTRL | ||
| 826 | */ | ||
| 827 | #define KVM_CREATE_DEVICE_TEST 1 | ||
| 828 | |||
| 829 | struct kvm_create_device { | ||
| 830 | __u32 type; /* in: KVM_DEV_TYPE_xxx */ | ||
| 831 | __u32 fd; /* out: device handle */ | ||
| 832 | __u32 flags; /* in: KVM_CREATE_DEVICE_xxx */ | ||
| 833 | }; | ||
| 834 | |||
| 835 | struct kvm_device_attr { | ||
| 836 | __u32 flags; /* no flags currently defined */ | ||
| 837 | __u32 group; /* device-defined */ | ||
| 838 | __u64 attr; /* group-defined */ | ||
| 839 | __u64 addr; /* userspace address of attr data */ | ||
| 840 | }; | ||
| 841 | |||
| 842 | #define KVM_DEV_TYPE_FSL_MPIC_20 1 | ||
| 843 | #define KVM_DEV_TYPE_FSL_MPIC_42 2 | ||
| 844 | |||
| 845 | /* | ||
| 824 | * ioctls for VM fds | 846 | * ioctls for VM fds |
| 825 | */ | 847 | */ |
| 826 | #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) | 848 | #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) |
| @@ -907,6 +929,16 @@ struct kvm_s390_ucas_mapping { | |||
| 907 | #define KVM_PPC_GET_HTAB_FD _IOW(KVMIO, 0xaa, struct kvm_get_htab_fd) | 929 | #define KVM_PPC_GET_HTAB_FD _IOW(KVMIO, 0xaa, struct kvm_get_htab_fd) |
| 908 | /* Available with KVM_CAP_ARM_SET_DEVICE_ADDR */ | 930 | /* Available with KVM_CAP_ARM_SET_DEVICE_ADDR */ |
| 909 | #define KVM_ARM_SET_DEVICE_ADDR _IOW(KVMIO, 0xab, struct kvm_arm_device_addr) | 931 | #define KVM_ARM_SET_DEVICE_ADDR _IOW(KVMIO, 0xab, struct kvm_arm_device_addr) |
| 932 | /* Available with KVM_CAP_PPC_RTAS */ | ||
| 933 | #define KVM_PPC_RTAS_DEFINE_TOKEN _IOW(KVMIO, 0xac, struct kvm_rtas_token_args) | ||
| 934 | |||
| 935 | /* ioctl for vm fd */ | ||
| 936 | #define KVM_CREATE_DEVICE _IOWR(KVMIO, 0xe0, struct kvm_create_device) | ||
| 937 | |||
| 938 | /* ioctls for fds returned by KVM_CREATE_DEVICE */ | ||
| 939 | #define KVM_SET_DEVICE_ATTR _IOW(KVMIO, 0xe1, struct kvm_device_attr) | ||
| 940 | #define KVM_GET_DEVICE_ATTR _IOW(KVMIO, 0xe2, struct kvm_device_attr) | ||
| 941 | #define KVM_HAS_DEVICE_ATTR _IOW(KVMIO, 0xe3, struct kvm_device_attr) | ||
| 910 | 942 | ||
| 911 | /* | 943 | /* |
| 912 | * ioctls for vcpu fds | 944 | * ioctls for vcpu fds |
