aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFei Li <sherrylf@linux.vnet.ibm.com>2017-01-19 11:02:26 -0500
committerChristian Borntraeger <borntraeger@de.ibm.com>2017-04-06 07:15:36 -0400
commit08fab50da669e5ee5a542592895fcb63be3cd7b1 (patch)
tree5a5a6da1eabfa35708d2f96e4c510f2433374052
parent4e0b1ab72b8af961bcaca9ec1475279c1cd9579c (diff)
KVM: s390: interface for suppressible I/O adapters
In order to properly implement adapter-interruption suppression, we need a way for userspace to specify which adapters are subject to suppression. Let's convert the existing (and unused) 'pad' field into a 'flags' field and define a flag value for suppressible adapters. Besides, add documentation for the interface. Signed-off-by: Fei Li <sherrylf@linux.vnet.ibm.com> Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-rw-r--r--Documentation/virtual/kvm/devices/s390_flic.txt12
-rw-r--r--arch/s390/include/asm/kvm_host.h1
-rw-r--r--arch/s390/include/uapi/asm/kvm.h4
-rw-r--r--arch/s390/kvm/interrupt.c2
4 files changed, 15 insertions, 4 deletions
diff --git a/Documentation/virtual/kvm/devices/s390_flic.txt b/Documentation/virtual/kvm/devices/s390_flic.txt
index 6b0e115301c8..e8ee3b6edb05 100644
--- a/Documentation/virtual/kvm/devices/s390_flic.txt
+++ b/Documentation/virtual/kvm/devices/s390_flic.txt
@@ -64,12 +64,18 @@ struct kvm_s390_io_adapter {
64 __u8 isc; 64 __u8 isc;
65 __u8 maskable; 65 __u8 maskable;
66 __u8 swap; 66 __u8 swap;
67 __u8 pad; 67 __u8 flags;
68}; 68};
69 69
70 id contains the unique id for the adapter, isc the I/O interruption subclass 70 id contains the unique id for the adapter, isc the I/O interruption subclass
71 to use, maskable whether this adapter may be masked (interrupts turned off) 71 to use, maskable whether this adapter may be masked (interrupts turned off),
72 and swap whether the indicators need to be byte swapped. 72 swap whether the indicators need to be byte swapped, and flags contains
73 further characteristics of the adapter.
74 Currently defined values for 'flags' are:
75 - KVM_S390_ADAPTER_SUPPRESSIBLE: adapter is subject to AIS
76 (adapter-interrupt-suppression) facility. This flag only has an effect if
77 the AIS capability is enabled.
78 Unknown flag values are ignored.
73 79
74 80
75 KVM_DEV_FLIC_ADAPTER_MODIFY 81 KVM_DEV_FLIC_ADAPTER_MODIFY
diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h
index 1af090d93bf5..499c72c2280d 100644
--- a/arch/s390/include/asm/kvm_host.h
+++ b/arch/s390/include/asm/kvm_host.h
@@ -621,6 +621,7 @@ struct s390_io_adapter {
621 bool maskable; 621 bool maskable;
622 bool masked; 622 bool masked;
623 bool swap; 623 bool swap;
624 bool suppressible;
624 struct rw_semaphore maps_lock; 625 struct rw_semaphore maps_lock;
625 struct list_head maps; 626 struct list_head maps;
626 atomic_t nr_maps; 627 atomic_t nr_maps;
diff --git a/arch/s390/include/uapi/asm/kvm.h b/arch/s390/include/uapi/asm/kvm.h
index 5bd23cfd9ae5..5fa144d1df0a 100644
--- a/arch/s390/include/uapi/asm/kvm.h
+++ b/arch/s390/include/uapi/asm/kvm.h
@@ -41,9 +41,11 @@ struct kvm_s390_io_adapter {
41 __u8 isc; 41 __u8 isc;
42 __u8 maskable; 42 __u8 maskable;
43 __u8 swap; 43 __u8 swap;
44 __u8 pad; 44 __u8 flags;
45}; 45};
46 46
47#define KVM_S390_ADAPTER_SUPPRESSIBLE 0x01
48
47#define KVM_S390_IO_ADAPTER_MASK 1 49#define KVM_S390_IO_ADAPTER_MASK 1
48#define KVM_S390_IO_ADAPTER_MAP 2 50#define KVM_S390_IO_ADAPTER_MAP 2
49#define KVM_S390_IO_ADAPTER_UNMAP 3 51#define KVM_S390_IO_ADAPTER_UNMAP 3
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
index 311eef0df855..dba51ad62570 100644
--- a/arch/s390/kvm/interrupt.c
+++ b/arch/s390/kvm/interrupt.c
@@ -1997,6 +1997,8 @@ static int register_io_adapter(struct kvm_device *dev,
1997 adapter->maskable = adapter_info.maskable; 1997 adapter->maskable = adapter_info.maskable;
1998 adapter->masked = false; 1998 adapter->masked = false;
1999 adapter->swap = adapter_info.swap; 1999 adapter->swap = adapter_info.swap;
2000 adapter->suppressible = (adapter_info.flags) &
2001 KVM_S390_ADAPTER_SUPPRESSIBLE;
2000 dev->kvm->arch.adapters[adapter->id] = adapter; 2002 dev->kvm->arch.adapters[adapter->id] = adapter;
2001 2003
2002 return 0; 2004 return 0;