s390: Fix handling of iscs.
There are two ways to express an interruption subclass:
- As a bitmask, as used in cr6.
- As a number, as used in the I/O interruption word.
Unfortunately, we have treated to I/O interruption word as if it
contained the bitmask as well, which went unnoticed so far as
- (queued-for-next) kvm made the same mistake, and
- Linux guest kernels don't check the isc value in the I/O interruption
word for subchannel interrupts.
Make sure that we treat the I/O interruption word correctly.
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 3244201..85f6f22 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -87,7 +87,7 @@
css_build_subchannel_id(sch),
sch->schid,
sch->curr_status.pmcw.intparm,
- (0x80 >> isc) << 24);
+ isc << 27);
}
void css_conditional_io_interrupt(SubchDev *sch)
@@ -111,7 +111,7 @@
css_build_subchannel_id(sch),
sch->schid,
sch->curr_status.pmcw.intparm,
- (0x80 >> isc) << 24);
+ isc << 27);
}
}