aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorCornelia Huck <cornelia.huck@de.ibm.com>2012-12-20 09:32:12 -0500
committerMarcelo Tosatti <mtosatti@redhat.com>2013-01-07 16:53:43 -0500
commitfa6b7fe9928d50444c29b29c8563746c6b0c6299 (patch)
tree0be284cf322eb82eefdb3df2743740e5578ba5c4 /include
parentd6712df95bcfea597fc3ea2405ec13e8b69a7b8c (diff)
KVM: s390: Add support for channel I/O instructions.
Add a new capability, KVM_CAP_S390_CSS_SUPPORT, which will pass intercepts for channel I/O instructions to userspace. Only I/O instructions interacting with I/O interrupts need to be handled in-kernel: - TEST PENDING INTERRUPTION (tpi) dequeues and stores pending interrupts entirely in-kernel. - TEST SUBCHANNEL (tsch) dequeues pending interrupts in-kernel and exits via KVM_EXIT_S390_TSCH to userspace for subchannel- related processing. Reviewed-by: Marcelo Tosatti <mtosatti@redhat.com> Reviewed-by: Alexander Graf <agraf@suse.de> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'include')
-rw-r--r--include/trace/events/kvm.h2
-rw-r--r--include/uapi/linux/kvm.h11
2 files changed, 12 insertions, 1 deletions
diff --git a/include/trace/events/kvm.h b/include/trace/events/kvm.h
index 7ef9e759f499..a23f47c884cf 100644
--- a/include/trace/events/kvm.h
+++ b/include/trace/events/kvm.h
@@ -14,7 +14,7 @@
14 ERSN(SHUTDOWN), ERSN(FAIL_ENTRY), ERSN(INTR), ERSN(SET_TPR), \ 14 ERSN(SHUTDOWN), ERSN(FAIL_ENTRY), ERSN(INTR), ERSN(SET_TPR), \
15 ERSN(TPR_ACCESS), ERSN(S390_SIEIC), ERSN(S390_RESET), ERSN(DCR),\ 15 ERSN(TPR_ACCESS), ERSN(S390_SIEIC), ERSN(S390_RESET), ERSN(DCR),\
16 ERSN(NMI), ERSN(INTERNAL_ERROR), ERSN(OSI), ERSN(PAPR_HCALL), \ 16 ERSN(NMI), ERSN(INTERNAL_ERROR), ERSN(OSI), ERSN(PAPR_HCALL), \
17 ERSN(S390_UCONTROL) 17 ERSN(S390_UCONTROL), ERSN(S390_TSCH)
18 18
19TRACE_EVENT(kvm_userspace_exit, 19TRACE_EVENT(kvm_userspace_exit,
20 TP_PROTO(__u32 reason, int errno), 20 TP_PROTO(__u32 reason, int errno),
diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
index 80bb3b801116..8bb0bf83afc5 100644
--- a/include/uapi/linux/kvm.h
+++ b/include/uapi/linux/kvm.h
@@ -168,6 +168,7 @@ struct kvm_pit_config {
168#define KVM_EXIT_PAPR_HCALL 19 168#define KVM_EXIT_PAPR_HCALL 19
169#define KVM_EXIT_S390_UCONTROL 20 169#define KVM_EXIT_S390_UCONTROL 20
170#define KVM_EXIT_WATCHDOG 21 170#define KVM_EXIT_WATCHDOG 21
171#define KVM_EXIT_S390_TSCH 22
171 172
172/* For KVM_EXIT_INTERNAL_ERROR */ 173/* For KVM_EXIT_INTERNAL_ERROR */
173/* Emulate instruction failed. */ 174/* Emulate instruction failed. */
@@ -285,6 +286,15 @@ struct kvm_run {
285 __u64 ret; 286 __u64 ret;
286 __u64 args[9]; 287 __u64 args[9];
287 } papr_hcall; 288 } papr_hcall;
289 /* KVM_EXIT_S390_TSCH */
290 struct {
291 __u16 subchannel_id;
292 __u16 subchannel_nr;
293 __u32 io_int_parm;
294 __u32 io_int_word;
295 __u32 ipb;
296 __u8 dequeued;
297 } s390_tsch;
288 /* Fix the size of the union. */ 298 /* Fix the size of the union. */
289 char padding[256]; 299 char padding[256];
290 }; 300 };
@@ -645,6 +655,7 @@ struct kvm_ppc_smmu_info {
645#define KVM_CAP_IRQFD_RESAMPLE 82 655#define KVM_CAP_IRQFD_RESAMPLE 82
646#define KVM_CAP_PPC_BOOKE_WATCHDOG 83 656#define KVM_CAP_PPC_BOOKE_WATCHDOG 83
647#define KVM_CAP_PPC_HTAB_FD 84 657#define KVM_CAP_PPC_HTAB_FD 84
658#define KVM_CAP_S390_CSS_SUPPORT 85
648 659
649#ifdef KVM_CAP_IRQ_ROUTING 660#ifdef KVM_CAP_IRQ_ROUTING
650 661