Messages in this thread | | | Subject | Re: [PATCH v1 4/4] s390/kvm: VSIE: correctly handle MVPG when in VSIE | From | David Hildenbrand <> | Date | Mon, 4 Jan 2021 17:08:15 +0100 |
| |
On 04.01.21 16:22, Claudio Imbrenda wrote: > On Sun, 20 Dec 2020 11:13:57 +0100 > David Hildenbrand <david@redhat.com> wrote: > >> On 18.12.20 15:18, Claudio Imbrenda wrote: >>> Correctly handle the MVPG instruction when issued by a VSIE guest. >>> >> >> I remember that MVPG SIE documentation was completely crazy and full >> of corner cases. :) > > you remember correctly > >> Looking at arch/s390/kvm/intercept.c:handle_mvpg_pei(), I can spot >> that >> >> 1. "This interception can only happen for guests with DAT disabled >> ..." 2. KVM does not make use of any mvpg state inside the SCB. >> >> Can this be observed with Linux guests? > > a Linux guest will typically not run with DAT disabled > >> Can I get some information on what information is stored at [0xc0, >> 0xd) inside the SCB? I assume it's: >> >> 0xc0: guest physical address of source PTE >> 0xc8: guest physical address of target PTE > > yes (plus 3 flags in the lower bits of each)
Thanks! Do the flags tell us what the deal with the PTE was? If yes, what's the meaning of the separate flags?
I assume something like "invalid, proteced, ??"
I'm asking because I think we can handle this a little easier.
> >> [...] >>> /* >>> * Run the vsie on a shadow scb and a shadow gmap, without any >>> further >>> * sanity checks, handling SIE faults. >>> @@ -1063,6 +1132,10 @@ static int do_vsie_run(struct kvm_vcpu >>> *vcpu, struct vsie_page *vsie_page) if ((scb_s->ipa & 0xf000) != >>> 0xf000) scb_s->ipa += 0x1000; >>> break; >>> + case ICPT_PARTEXEC: >>> + if (scb_s->ipa == 0xb254) >> >> Old code hat "/* MVPG only */" - why is this condition now necessary? > > old code was wrong ;)
arch/s390/kvm/intercept.c:handle_partial_execution() we only seem to handle
1. MVPG 2. SIGP PEI
The latter is only relevant for external calls. IIRC, this is only active with sigp interpretation - which is never active under vsie (ECA_SIGPI).
-- Thanks,
David / dhildenb
| |