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
- "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).