Linux s390 Architecture development
 help / color / mirror / Atom feed
From: Janosch Frank <frankja@linux.ibm.com>
To: Nico Boehr <nrb@linux.ibm.com>,
	kvm@vger.kernel.org, linux-s390@vger.kernel.org
Cc: imbrenda@linux.ibm.com, thuth@redhat.com, david@redhat.com,
	farman@linux.ibm.com
Subject: Re: [PATCH 2/2] s390x: add test for SIGP STORE_ADTL_STATUS order
Date: Tue, 29 Mar 2022 13:39:31 +0200	[thread overview]
Message-ID: <7cca996a-454d-7287-1d91-c7f5908b0f15@linux.ibm.com> (raw)
In-Reply-To: <c1b585cbd42cff9920488a74ee5a40ed0d5b13f8.camel@linux.ibm.com>

On 3/28/22 17:12, Nico Boehr wrote:
> On Mon, 2022-03-28 at 13:54 +0200, Janosch Frank wrote:
>>> diff --git a/s390x/adtl_status.c b/s390x/adtl_status.c
>>> new file mode 100644
>>> index 000000000000..7a2bd2b07804
>>> --- /dev/null
>>> +++ b/s390x/adtl_status.c
> [...]
>>> +struct mcesa_lc12 {
>>> +       uint8_t vector_reg[0x200];            /* 0x000 */
>>
>> Hrm we could do:
>> __uint128_t vregs[32];
>>
>> or:
>> uint64_t vregs[16][2];
>>
>> or leave it as it is.
> 
> No strong preference about the type. uint8_t makes it easy to check the
> offsets.
> 
>>
>>> +       uint8_t reserved200[0x400 - 0x200];   /* 0x200 */
>>> +       struct gs_cb gs_cb;                   /* 0x400 */
>>> +       uint8_t reserved420[0x800 - 0x420];   /* 0x420 */
>>> +       uint8_t reserved800[0x1000 - 0x800];  /* 0x800 */
>>> +};
>>
>> Do we have plans to use this struct in the future for other tests?
> 
> Maybe at some point if we add checks for machine check handling, but
> right now we don't have the infrastructure in kvm-unit-tests to do that
> I think.

Alright, then let's leave the struct in here for now.

[...]

>>> +static void restart_write_vector(void)
>>> +{
>>> +       uint8_t *vec_reg;
>>> +       /* vlm handles at most 16 registers at a time */
>>> +       uint8_t *vec_reg_16_31 = &expected_vec_contents[16][0];
>>> +       int i;
>>> +
>>> +       for (i = 0; i < NUM_VEC_REGISTERS; i++) {
>>> +               vec_reg = &expected_vec_contents[i][0];
>>> +               /* i+1 to avoid zero content */
>>> +               memset(vec_reg, i + 1, VEC_REGISTER_SIZE);
>>> +       }
>>> +
>>> +       ctl_set_bit(0, CTL0_VECTOR);
>>> +
>>> +       asm volatile (
>>> +               "       .machine z13\n"
>>> +               "       vlm 0,15, %[vec_reg_0_15]\n"
>>> +               "       vlm 16,31, %[vec_reg_16_31]\n"
>>> +               :
>>> +               : [vec_reg_0_15] "Q"(expected_vec_contents),
>>> +                 [vec_reg_16_31] "Q"(*vec_reg_16_31)
>>> +               : "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7",
>>> "v8", "v9",
>>> +                 "v10", "v11", "v12", "v13", "v14", "v15", "v16",
>>> "v17", "v18",
>>> +                 "v19", "v20", "v21", "v22", "v23", "v24", "v25",
>>> "v26", "v27",
>>> +                 "v28", "v29", "v30", "v31", "memory"
>>
>> We change memory on a load?
> 
> To my understanding, this might be neccesary if expected_vec_contents
> ends up in a register, but that won't happen, so I can remove it.
> 
>>
>>> +       );
>>
>> We could also move vlm as a function to vector.h and do two calls.
> 
> I think that won't work because that function might clean its float
> registers in the epilogue and hence destroy the contents. Except if you
> have an idea on how to avoid that?

About that:

Well, who guarantees you that the compiler won't change a fpr (and 
thereby the overlapped vrs) between the vlms here and your infinite loop 
at the end of the function? :-) gcc uses fprs and acrs in the most 
interesting places and I've just been hit by that again a few hours ago.

I.e. to be safe we'll need to implement the next few lines in assembly 
as well, no?

  reply	other threads:[~2022-03-29 11:39 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-28  9:30 [PATCH 0/2] s390x: Add tests for SIGP store adtl status Nico Boehr
2022-03-28  9:30 ` [PATCH 1/2] s390x: gs: move to new header file Nico Boehr
2022-03-28  9:30 ` [PATCH 2/2] s390x: add test for SIGP STORE_ADTL_STATUS order Nico Boehr
2022-03-28 11:54   ` Janosch Frank
2022-03-28 15:12     ` Nico Boehr
2022-03-29 11:39       ` Janosch Frank [this message]
2022-03-30 12:46         ` Nico Boehr

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7cca996a-454d-7287-1d91-c7f5908b0f15@linux.ibm.com \
    --to=frankja@linux.ibm.com \
    --cc=david@redhat.com \
    --cc=farman@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=nrb@linux.ibm.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox