diff mbox

[2/2] s390x: Ignore sam31

Message ID 1415103708-115450-3-git-send-email-agraf@suse.de
State New
Headers show

Commit Message

Alexander Graf Nov. 4, 2014, 12:21 p.m. UTC
The SAM31 instruction switches the memory model to 31bit. Linux uses
it on bootup, so we have to implement it. We only really model the 64bit
memory model though, so we can nop it, cross our fingers and hope for
the guest to not rely on 32bit wrap semantics.

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 target-s390x/insn-data.def | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Bastian Koppelmann Nov. 4, 2014, 6:40 p.m. UTC | #1
Hi Alex,

I'm not really happy with that. A brief look into the instruction manual 
shows, that modal instructions have different outputs depending on the 
addressing mode. On the long run it would be better to implement this. 
That said I'm not an expert on s390x and there is a reason we're only 
doing 64-bit.

Thanks,
Bastian

On 11/04/2014 12:21 PM, Alexander Graf wrote:
> The SAM31 instruction switches the memory model to 31bit. Linux uses
> it on bootup, so we have to implement it. We only really model the 64bit
> memory model though, so we can nop it, cross our fingers and hope for
> the guest to not rely on 32bit wrap semantics.
>
> Signed-off-by: Alexander Graf <agraf@suse.de>
> ---
>   target-s390x/insn-data.def | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/target-s390x/insn-data.def b/target-s390x/insn-data.def
> index b42ebb6..4cc2da4 100644
> --- a/target-s390x/insn-data.def
> +++ b/target-s390x/insn-data.def
> @@ -744,8 +744,10 @@
>   /* SERVICE CALL LOGICAL PROCESSOR (PV hypercall) */
>       C(0xb220, SERVC,   RRE,   Z,   r1_o, r2_o, 0, 0, servc, 0)
>   /* SET ADDRESSING MODE */
> +    /* We have to nop SAM31, it is used by early Linux bootup */
> +    C(0x010d, SAM31,   E,     Z,   0, 0, 0, 0, 0, 0)
>       /* We only do 64-bit, so accept this as a no-op.
> -       Let SAM24 and SAM31 signal illegal instruction.  */
> +       Let SAM24 signal illegal instruction.  */
>       C(0x010e, SAM64,   E,     Z,   0, 0, 0, 0, 0, 0)
>   /* SET ADDRESS SPACE CONTROL FAST */
>       C(0xb279, SACF,    S,     Z,   0, a2, 0, 0, sacf, 0)
Alexander Graf Nov. 4, 2014, 7:06 p.m. UTC | #2
On 04.11.14 19:40, Bastian Koppelmann wrote:
> Hi Alex,
> 
> I'm not really happy with that. A brief look into the instruction manual
> shows, that modal instructions have different outputs depending on the
> addressing mode. On the long run it would be better to implement this.
> That said I'm not an expert on s390x and there is a reason we're only
> doing 64-bit.

IIRC we even do support 31bit mode - we merely would need to set the
respective PSW bit :).

I'll give that a try.


Alex
diff mbox

Patch

diff --git a/target-s390x/insn-data.def b/target-s390x/insn-data.def
index b42ebb6..4cc2da4 100644
--- a/target-s390x/insn-data.def
+++ b/target-s390x/insn-data.def
@@ -744,8 +744,10 @@ 
 /* SERVICE CALL LOGICAL PROCESSOR (PV hypercall) */
     C(0xb220, SERVC,   RRE,   Z,   r1_o, r2_o, 0, 0, servc, 0)
 /* SET ADDRESSING MODE */
+    /* We have to nop SAM31, it is used by early Linux bootup */
+    C(0x010d, SAM31,   E,     Z,   0, 0, 0, 0, 0, 0)
     /* We only do 64-bit, so accept this as a no-op.
-       Let SAM24 and SAM31 signal illegal instruction.  */
+       Let SAM24 signal illegal instruction.  */
     C(0x010e, SAM64,   E,     Z,   0, 0, 0, 0, 0, 0)
 /* SET ADDRESS SPACE CONTROL FAST */
     C(0xb279, SACF,    S,     Z,   0, a2, 0, 0, sacf, 0)