diff options
| author | Fei Li <sherrylf@linux.vnet.ibm.com> | 2017-01-19 11:02:26 -0500 |
|---|---|---|
| committer | Christian Borntraeger <borntraeger@de.ibm.com> | 2017-04-06 07:15:36 -0400 |
| commit | 08fab50da669e5ee5a542592895fcb63be3cd7b1 (patch) | |
| tree | 5a5a6da1eabfa35708d2f96e4c510f2433374052 | |
| parent | 4e0b1ab72b8af961bcaca9ec1475279c1cd9579c (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.txt | 12 | ||||
| -rw-r--r-- | arch/s390/include/asm/kvm_host.h | 1 | ||||
| -rw-r--r-- | arch/s390/include/uapi/asm/kvm.h | 4 | ||||
| -rw-r--r-- | arch/s390/kvm/interrupt.c | 2 |
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; |
