From: Cornelia Huck Date: Wed, 1 Jul 2015 13:28:06 +0000 (+0200) Subject: s390x/event-facility: fix receive mask check X-Git-Tag: v2.5.0-rc0~145^2~20 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=3335ddddf9e5ba7743dc8e3f767f4ef857ccd20c;p=users%2Fdwmw2%2Fqemu.git s390x/event-facility: fix receive mask check For selective read event, we need to check if any event is requested that is not active instead of whether none of the requested events is active. Reviewed-by: David Hildenbrand Reviewed-by: Eric Farman Signed-off-by: Cornelia Huck --- diff --git a/hw/s390x/event-facility.c b/hw/s390x/event-facility.c index 0c700effb1..1ca6544e44 100644 --- a/hw/s390x/event-facility.c +++ b/hw/s390x/event-facility.c @@ -240,12 +240,13 @@ static void read_event_data(SCLPEventFacility *ef, SCCB *sccb) sclp_active_selection_mask = sclp_cp_receive_mask; break; case SCLP_SELECTIVE_READ: - if (!(sclp_cp_receive_mask & be32_to_cpu(red->mask))) { + sclp_active_selection_mask = be32_to_cpu(red->mask); + if (!sclp_cp_receive_mask || + (sclp_active_selection_mask & ~sclp_cp_receive_mask)) { sccb->h.response_code = cpu_to_be16(SCLP_RC_INVALID_SELECTION_MASK); goto out; } - sclp_active_selection_mask = be32_to_cpu(red->mask); break; default: sccb->h.response_code = cpu_to_be16(SCLP_RC_INVALID_FUNCTION);