aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Mueller <mimu@linux.vnet.ibm.com>2017-08-31 05:10:28 -0400
committerChristian Borntraeger <borntraeger@de.ibm.com>2018-01-26 05:12:09 -0500
commit2496c8e7fe9270bde5e125729c193120e7fa8c67 (patch)
treea409449ab08793045117fa56b05a126762871770
parentd7c5cb0105ddeff56694f4c6222ee7221824bad3 (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.c9
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
201static inline u32 isc_to_int_word(u8 isc)
202{
203 return ((u32)isc << 27) | 0x80000000;
204}
205
201static inline u8 int_word_to_isc(u32 int_word) 206static 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