Skip to content

Commit

Permalink
target-s390x: Mask the SIGP order_code to 8bit.
Browse files Browse the repository at this point in the history
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: Philipp Kern <phil@philkern.de>
Reviewed-by: Thomas Huth <thuth@tuxfamily.org>
[agraf: add comment according to email]
Signed-off-by: Alexander Graf <agraf@suse.de>

(cherry picked from commit 601b9a9)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
  • Loading branch information
pkern authored and mdroth committed Aug 31, 2017
1 parent 077a67e commit c152efc
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion target/s390x/misc_helper.c
Expand Up @@ -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;
Expand Down

0 comments on commit c152efc

Please sign in to comment.