From: Cornelia Huck <cohuck@redhat.com>
To: Janosch Frank <frankja@linux.ibm.com>
Cc: Thomas Huth <thuth@redhat.com>,
kvm@vger.kernel.org, linux-s390@vger.kernel.org,
david@redhat.com, borntraeger@de.ibm.com, imbrenda@linux.ibm.com
Subject: Re: [kvm-unit-tests PATCH v2 3/3] s390x: Ultravisor guest API test
Date: Fri, 31 Jul 2020 11:21:22 +0200 [thread overview]
Message-ID: <20200731112122.1db14419.cohuck@redhat.com> (raw)
In-Reply-To: <16eee269-d773-26df-a517-08f2265318c4@linux.ibm.com>
[-- Attachment #1: Type: text/plain, Size: 3419 bytes --]
On Fri, 31 Jul 2020 11:06:25 +0200
Janosch Frank <frankja@linux.ibm.com> wrote:
> On 7/31/20 10:42 AM, Cornelia Huck wrote:
> > On Fri, 31 Jul 2020 09:34:41 +0200
> > Janosch Frank <frankja@linux.ibm.com> wrote:
> >
> >> On 7/30/20 5:58 PM, Thomas Huth wrote:
> >>> On 30/07/2020 13.16, Cornelia Huck wrote:
> >>>> On Mon, 27 Jul 2020 05:54:15 -0400
> >>>> Janosch Frank <frankja@linux.ibm.com> wrote:
> >>>>
> >>>>> Test the error conditions of guest 2 Ultravisor calls, namely:
> >>>>> * Query Ultravisor information
> >>>>> * Set shared access
> >>>>> * Remove shared access
> >>>>>
> >>>>> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
> >>>>> Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> >>>>> ---
> >>>>> lib/s390x/asm/uv.h | 68 +++++++++++++++++++
> >>>>> s390x/Makefile | 1 +
> >>>>> s390x/unittests.cfg | 3 +
> >>>>> s390x/uv-guest.c | 159 ++++++++++++++++++++++++++++++++++++++++++++
> >>>>> 4 files changed, 231 insertions(+)
> >>>>> create mode 100644 lib/s390x/asm/uv.h
> >>>>> create mode 100644 s390x/uv-guest.c
> >>>>>
> >>>>
> >>>> (...)
> >>>>
> >>>>> +static inline int uv_call(unsigned long r1, unsigned long r2)
> >>>>> +{
> >>>>> + int cc;
> >>>>> +
> >>>>> + asm volatile(
> >>>>> + "0: .insn rrf,0xB9A40000,%[r1],%[r2],0,0\n"
> >>>>> + " brc 3,0b\n"
> >>>>> + " ipm %[cc]\n"
> >>>>> + " srl %[cc],28\n"
> >>>>> + : [cc] "=d" (cc)
> >>>>> + : [r1] "a" (r1), [r2] "a" (r2)
> >>>>> + : "memory", "cc");
> >>>>> + return cc;
> >>>>> +}
> >>>>
> >>>> This returns the condition code, but no caller seems to check it
> >>>> (instead, they look at header.rc, which is presumably only set if the
> >>>> instruction executed successfully in some way?)
> >>>>
> >>>> Looking at the kernel, it retries for cc > 1 (presumably busy
> >>>> conditions), and cc != 0 seems to be considered a failure. Do we want
> >>>> to look at the cc here as well?
> >>>
> >>> It's there - but here it's in the assembly code, the "brc 3,0b".
> >
> > Ah yes, I missed that.
> >
> >>
> >> Yes, we needed to factor that out in KVM because we sometimes need to
> >> schedule and then it looks nicer handling that in C code. The branch on
> >> condition will jump back for cc 2 and 3. cc 0 and 1 are success and
> >> error respectively and only then the rc and rrc in the UV header are set.
> >
> > Yeah, it's a bit surprising that rc/rrc are also set with cc 1.
>
> Is it?
> The (r)rc *only* contain meaningful information on CC 1.
> On CC 0 they will simply say everything is fine which CC 0 states
> already anyway.
I would consider "things worked" to actually be meaningful :)
(I've seen other instructions indicating different kinds of success.)
>
> >
> > (Can you add a comment? Just so that it is clear that callers never
> > need to check the cc, as rc/rrc already contain more information than
> > that.)
>
> I'd rather fix my test code and also check the CC.
> I did check it for my other UV tests so I've no idea why I didn't do it
> here...
>
>
> How about adding a comment for the cc 2/3 case?
> "The brc instruction will take care of the cc 2/3 case where we need to
> continue the execution because we were interrupted.
> The inline assembly will only return on success/error i.e. cc 0/1."
Sounds good.
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2020-07-31 9:21 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-27 9:54 [kvm-unit-tests PATCH v2 0/3] PV tests part 1 Janosch Frank
2020-07-27 9:54 ` [kvm-unit-tests PATCH v2 1/3] s390x: Add custom pgm cleanup function Janosch Frank
2020-07-30 10:53 ` Cornelia Huck
2020-07-27 9:54 ` [kvm-unit-tests PATCH v2 2/3] s390x: skrf: Add exception new skey test and add test to unittests.cfg Janosch Frank
2020-07-27 12:20 ` Thomas Huth
2020-07-27 12:38 ` Janosch Frank
2020-07-30 11:03 ` Cornelia Huck
2020-07-27 9:54 ` [kvm-unit-tests PATCH v2 3/3] s390x: Ultravisor guest API test Janosch Frank
2020-07-30 11:16 ` Cornelia Huck
2020-07-30 15:58 ` Thomas Huth
2020-07-31 7:34 ` Janosch Frank
2020-07-31 8:42 ` Cornelia Huck
2020-07-31 9:06 ` Janosch Frank
2020-07-31 9:21 ` Cornelia Huck [this message]
-- strict thread matches above, loose matches on Subject: below --
2020-08-07 11:15 [kvm-unit-tests PATCH v2 0/3] PV tests part 1 Janosch Frank
2020-08-07 11:15 ` [kvm-unit-tests PATCH v2 3/3] s390x: Ultravisor guest API test Janosch Frank
2020-08-07 12:14 ` Thomas Huth
2020-08-10 14:50 ` Cornelia Huck
2020-08-10 15:27 ` Janosch Frank
2020-08-10 15:32 ` Cornelia Huck
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=20200731112122.1db14419.cohuck@redhat.com \
--to=cohuck@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=david@redhat.com \
--cc=frankja@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.