Commit 601b9a90 authored by Philipp Kern's avatar Philipp Kern Committed by Alexander Graf
Browse files

target-s390x: Mask the SIGP order_code to 8bit.



According to "CPU Signaling and Response", "Signal-Processor Orders",
the order field is bit position 56-63. Without this, the Linux
guest kernel is sometimes unable to stop emulation and enters
an infinite loop of "XXX unknown sigp: 0xffffffff00000005".

Signed-off-by: default avatarPhilipp Kern <phil@philkern.de>
Reviewed-by: default avatarThomas Huth <thuth@tuxfamily.org>
[agraf: add comment according to email]
Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
parent f4b5b021
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -515,7 +515,8 @@ uint32_t HELPER(sigp)(CPUS390XState *env, uint64_t order_code, uint32_t r1,
    /* Remember: Use "R1 or R1 + 1, whichever is the odd-numbered register"
       as parameter (input). Status (output) is always R1. */

    switch (order_code) {
    /* sigp contains the order code in bit positions 56-63, mask it here. */
    switch (order_code & 0xff) {
    case SIGP_SET_ARCH:
        /* switch arch */
        break;