diff options
author | Michael Mueller <mimu@linux.vnet.ibm.com> | 2017-08-31 05:10:28 -0400 |
---|---|---|
committer | Christian Borntraeger <borntraeger@de.ibm.com> | 2018-01-26 05:12:09 -0500 |
commit | 2496c8e7fe9270bde5e125729c193120e7fa8c67 (patch) | |
tree | a409449ab08793045117fa56b05a126762871770 | |
parent | d7c5cb0105ddeff56694f4c6222ee7221824bad3 (diff) |
KVM: s390: abstract adapter interruption word generation from ISC
The function isc_to_int_word() allows the generation of interruption
words for adapter interrupts.
Signed-off-by: Michael Mueller <mimu@linux.vnet.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-rw-r--r-- | arch/s390/kvm/interrupt.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c index f293c956e6db..a0ded3a23a5e 100644 --- a/arch/s390/kvm/interrupt.c +++ b/arch/s390/kvm/interrupt.c | |||
@@ -198,6 +198,11 @@ static uint64_t isc_to_isc_bits(int isc) | |||
198 | return (0x80 >> isc) << 24; | 198 | return (0x80 >> isc) << 24; |
199 | } | 199 | } |
200 | 200 | ||
201 | static inline u32 isc_to_int_word(u8 isc) | ||
202 | { | ||
203 | return ((u32)isc << 27) | 0x80000000; | ||
204 | } | ||
205 | |||
201 | static inline u8 int_word_to_isc(u32 int_word) | 206 | static inline u8 int_word_to_isc(u32 int_word) |
202 | { | 207 | { |
203 | return (int_word & 0x38000000) >> 27; | 208 | return (int_word & 0x38000000) >> 27; |
@@ -992,7 +997,7 @@ static int __must_check __deliver_io(struct kvm_vcpu *vcpu, | |||
992 | */ | 997 | */ |
993 | VCPU_EVENT(vcpu, 4, "%s isc %u", "deliver: I/O (AI/gisa)", isc); | 998 | VCPU_EVENT(vcpu, 4, "%s isc %u", "deliver: I/O (AI/gisa)", isc); |
994 | memset(&io, 0, sizeof(io)); | 999 | memset(&io, 0, sizeof(io)); |
995 | io.io_int_word = (isc << 27) | 0x80000000; | 1000 | io.io_int_word = isc_to_int_word(isc); |
996 | vcpu->stat.deliver_io_int++; | 1001 | vcpu->stat.deliver_io_int++; |
997 | trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, | 1002 | trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, |
998 | KVM_S390_INT_IO(1, 0, 0, 0), | 1003 | KVM_S390_INT_IO(1, 0, 0, 0), |
@@ -2299,7 +2304,7 @@ static int kvm_s390_inject_airq(struct kvm *kvm, | |||
2299 | struct kvm_s390_interrupt s390int = { | 2304 | struct kvm_s390_interrupt s390int = { |
2300 | .type = KVM_S390_INT_IO(1, 0, 0, 0), | 2305 | .type = KVM_S390_INT_IO(1, 0, 0, 0), |
2301 | .parm = 0, | 2306 | .parm = 0, |
2302 | .parm64 = (adapter->isc << 27) | 0x80000000, | 2307 | .parm64 = isc_to_int_word(adapter->isc), |
2303 | }; | 2308 | }; |
2304 | int ret = 0; | 2309 | int ret = 0; |
2305 | 2310 | ||