KVM: s390: only deliver the set service event bits
authorEric Farman <farman@linux.ibm.com>
Mon, 5 Feb 2024 21:43:00 +0000 (22:43 +0100)
committerJanosch Frank <frankja@linux.ibm.com>
Thu, 22 Feb 2024 09:36:42 +0000 (10:36 +0100)
commit85a19b3054274e09bcd9043d7d3203c3836688d0
treeb2839c629177de81721a609a72c46ddab7077df3
parent7b2411e793673b6282ab7907be26b82234681313
KVM: s390: only deliver the set service event bits

The SCLP driver code masks off the last two bits of the parameter [1]
to determine if a read is required, but doesn't care about the
contents of those bits. Meanwhile, the KVM code that delivers
event interrupts masks off those two bits but sends both to the
guest, even if only one was specified by userspace [2].

This works for the driver code, but it means any nuances of those
bits gets lost. Use the event pending mask as an actual mask, and
only send the bit(s) that were specified in the pending interrupt.

[1] Linux: sclp_interrupt_handler() (drivers/s390/char/sclp.c:658)
[2] QEMU: service_interrupt() (hw/s390x/sclp.c:360..363)

Fixes: 0890ddea1a90 ("KVM: s390: protvirt: Add SCLP interrupt handling")
Signed-off-by: Eric Farman <farman@linux.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
Link: https://lore.kernel.org/r/20240205214300.1018522-1-farman@linux.ibm.com
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Message-Id: <20240205214300.1018522-1-farman@linux.ibm.com>
arch/s390/kvm/interrupt.c