* [PATCH v2 0/2] s390/kvm: VSIE: fix prefixing and MSO for MVPG @ 2021-03-22 14:05 Claudio Imbrenda 2021-03-22 14:05 ` [PATCH v2 1/2] s390/kvm: split kvm_s390_real_to_abs Claudio Imbrenda ` (2 more replies) 0 siblings, 3 replies; 12+ messages in thread From: Claudio Imbrenda @ 2021-03-22 14:05 UTC (permalink / raw) To: linux-kernel; +Cc: borntraeger, frankja, david, cohuck, kvm, linux-s390 The guest real address needs to pass through prefixing in order to yield the absolute address. The absolute address needs to be offset by the MSO in order to get the host virtual address. v1->v2 * use the MSO from the shadow SIE page instead of the original one * reuse src and dest variabled to improve readability Claudio Imbrenda (2): s390/kvm: split kvm_s390_real_to_abs s390/kvm: VSIE: fix MVPG handling for prefixing and MSO arch/s390/kvm/gaccess.h | 23 +++++++++++++++++------ arch/s390/kvm/vsie.c | 6 +++++- 2 files changed, 22 insertions(+), 7 deletions(-) -- 2.26.2 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 1/2] s390/kvm: split kvm_s390_real_to_abs 2021-03-22 14:05 [PATCH v2 0/2] s390/kvm: VSIE: fix prefixing and MSO for MVPG Claudio Imbrenda @ 2021-03-22 14:05 ` Claudio Imbrenda 2021-03-23 15:01 ` Christian Borntraeger 2021-03-22 14:05 ` [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO Claudio Imbrenda 2021-03-23 10:49 ` [PATCH v2 0/2] s390/kvm: VSIE: fix prefixing and MSO for MVPG Christian Borntraeger 2 siblings, 1 reply; 12+ messages in thread From: Claudio Imbrenda @ 2021-03-22 14:05 UTC (permalink / raw) To: linux-kernel Cc: borntraeger, frankja, david, cohuck, kvm, linux-s390, stable, Thomas Huth A new function _kvm_s390_real_to_abs will apply prefixing to a real address with a given prefix value. The old kvm_s390_real_to_abs becomes now a wrapper around the new function. This is needed to avoid code duplication in vSIE. Cc: stable@vger.kernel.org Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> --- arch/s390/kvm/gaccess.h | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/arch/s390/kvm/gaccess.h b/arch/s390/kvm/gaccess.h index daba10f76936..7c72a5e3449f 100644 --- a/arch/s390/kvm/gaccess.h +++ b/arch/s390/kvm/gaccess.h @@ -18,17 +18,14 @@ /** * kvm_s390_real_to_abs - convert guest real address to guest absolute address - * @vcpu - guest virtual cpu + * @prefix - guest prefix * @gra - guest real address * * Returns the guest absolute address that corresponds to the passed guest real - * address @gra of a virtual guest cpu by applying its prefix. + * address @gra of by applying the given prefix. */ -static inline unsigned long kvm_s390_real_to_abs(struct kvm_vcpu *vcpu, - unsigned long gra) +static inline unsigned long _kvm_s390_real_to_abs(u32 prefix, unsigned long gra) { - unsigned long prefix = kvm_s390_get_prefix(vcpu); - if (gra < 2 * PAGE_SIZE) gra += prefix; else if (gra >= prefix && gra < prefix + 2 * PAGE_SIZE) @@ -36,6 +33,20 @@ static inline unsigned long kvm_s390_real_to_abs(struct kvm_vcpu *vcpu, return gra; } +/** + * kvm_s390_real_to_abs - convert guest real address to guest absolute address + * @vcpu - guest virtual cpu + * @gra - guest real address + * + * Returns the guest absolute address that corresponds to the passed guest real + * address @gra of a virtual guest cpu by applying its prefix. + */ +static inline unsigned long kvm_s390_real_to_abs(struct kvm_vcpu *vcpu, + unsigned long gra) +{ + return _kvm_s390_real_to_abs(kvm_s390_get_prefix(vcpu), gra); +} + /** * _kvm_s390_logical_to_effective - convert guest logical to effective address * @psw: psw of the guest -- 2.26.2 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2 1/2] s390/kvm: split kvm_s390_real_to_abs 2021-03-22 14:05 ` [PATCH v2 1/2] s390/kvm: split kvm_s390_real_to_abs Claudio Imbrenda @ 2021-03-23 15:01 ` Christian Borntraeger 0 siblings, 0 replies; 12+ messages in thread From: Christian Borntraeger @ 2021-03-23 15:01 UTC (permalink / raw) To: Claudio Imbrenda, linux-kernel Cc: frankja, david, cohuck, kvm, linux-s390, stable, Thomas Huth On 22.03.21 15:05, Claudio Imbrenda wrote: > A new function _kvm_s390_real_to_abs will apply prefixing to a real address > with a given prefix value. > > The old kvm_s390_real_to_abs becomes now a wrapper around the new function. > > This is needed to avoid code duplication in vSIE. > > Cc: stable@vger.kernel.org > Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> > Reviewed-by: David Hildenbrand <david@redhat.com> > Reviewed-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> > --- > arch/s390/kvm/gaccess.h | 23 +++++++++++++++++------ > 1 file changed, 17 insertions(+), 6 deletions(-) > > diff --git a/arch/s390/kvm/gaccess.h b/arch/s390/kvm/gaccess.h > index daba10f76936..7c72a5e3449f 100644 > --- a/arch/s390/kvm/gaccess.h > +++ b/arch/s390/kvm/gaccess.h > @@ -18,17 +18,14 @@ > > /** > * kvm_s390_real_to_abs - convert guest real address to guest absolute address > - * @vcpu - guest virtual cpu > + * @prefix - guest prefix > * @gra - guest real address > * > * Returns the guest absolute address that corresponds to the passed guest real > - * address @gra of a virtual guest cpu by applying its prefix. > + * address @gra of by applying the given prefix. > */ > -static inline unsigned long kvm_s390_real_to_abs(struct kvm_vcpu *vcpu, > - unsigned long gra) > +static inline unsigned long _kvm_s390_real_to_abs(u32 prefix, unsigned long gra) > { > - unsigned long prefix = kvm_s390_get_prefix(vcpu); > - > if (gra < 2 * PAGE_SIZE) > gra += prefix; > else if (gra >= prefix && gra < prefix + 2 * PAGE_SIZE) > @@ -36,6 +33,20 @@ static inline unsigned long kvm_s390_real_to_abs(struct kvm_vcpu *vcpu, > return gra; > } > > +/** > + * kvm_s390_real_to_abs - convert guest real address to guest absolute address > + * @vcpu - guest virtual cpu > + * @gra - guest real address > + * > + * Returns the guest absolute address that corresponds to the passed guest real > + * address @gra of a virtual guest cpu by applying its prefix. > + */ > +static inline unsigned long kvm_s390_real_to_abs(struct kvm_vcpu *vcpu, > + unsigned long gra) > +{ > + return _kvm_s390_real_to_abs(kvm_s390_get_prefix(vcpu), gra); > +} > + > /** > * _kvm_s390_logical_to_effective - convert guest logical to effective address > * @psw: psw of the guest > ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO 2021-03-22 14:05 [PATCH v2 0/2] s390/kvm: VSIE: fix prefixing and MSO for MVPG Claudio Imbrenda 2021-03-22 14:05 ` [PATCH v2 1/2] s390/kvm: split kvm_s390_real_to_abs Claudio Imbrenda @ 2021-03-22 14:05 ` Claudio Imbrenda 2021-03-23 10:50 ` David Hildenbrand 2021-03-23 15:07 ` Christian Borntraeger 2021-03-23 10:49 ` [PATCH v2 0/2] s390/kvm: VSIE: fix prefixing and MSO for MVPG Christian Borntraeger 2 siblings, 2 replies; 12+ messages in thread From: Claudio Imbrenda @ 2021-03-22 14:05 UTC (permalink / raw) To: linux-kernel; +Cc: borntraeger, frankja, david, cohuck, kvm, linux-s390, stable Prefixing needs to be applied to the guest real address to translate it into a guest absolute address. The value of MSO needs to be added to a guest-absolute address in order to obtain the host-virtual. Fixes: 223ea46de9e79 ("s390/kvm: VSIE: correctly handle MVPG when in VSIE") Cc: stable@vger.kernel.org Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Reported-by: Janosch Frank <frankja@linux.ibm.com> --- arch/s390/kvm/vsie.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c index 48aab6290a77..ac86f11e46dc 100644 --- a/arch/s390/kvm/vsie.c +++ b/arch/s390/kvm/vsie.c @@ -1002,7 +1002,7 @@ static u64 vsie_get_register(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) { struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s; - unsigned long pei_dest, pei_src, src, dest, mask; + unsigned long pei_dest, pei_src, dest, src, mask, mso, prefix; u64 *pei_block = &vsie_page->scb_o->mcic; int edat, rc_dest, rc_src; union ctlreg0 cr0; @@ -1010,9 +1010,13 @@ static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) cr0.val = vcpu->arch.sie_block->gcr[0]; edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8); mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK); + mso = scb_s->mso & ~(1UL << 20); + prefix = scb_s->prefix << GUEST_PREFIX_SHIFT; dest = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 16) & mask; + dest = _kvm_s390_real_to_abs(prefix, dest) + mso; src = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 20) & mask; + src = _kvm_s390_real_to_abs(prefix, src) + mso; rc_dest = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, dest, &pei_dest); rc_src = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, src, &pei_src); -- 2.26.2 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO 2021-03-22 14:05 ` [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO Claudio Imbrenda @ 2021-03-23 10:50 ` David Hildenbrand 2021-03-23 15:07 ` Christian Borntraeger 1 sibling, 0 replies; 12+ messages in thread From: David Hildenbrand @ 2021-03-23 10:50 UTC (permalink / raw) To: Claudio Imbrenda, linux-kernel Cc: borntraeger, frankja, cohuck, kvm, linux-s390, stable On 22.03.21 15:05, Claudio Imbrenda wrote: > Prefixing needs to be applied to the guest real address to translate it > into a guest absolute address. > > The value of MSO needs to be added to a guest-absolute address in order to > obtain the host-virtual. > > Fixes: 223ea46de9e79 ("s390/kvm: VSIE: correctly handle MVPG when in VSIE") > Cc: stable@vger.kernel.org > Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> > Reported-by: Janosch Frank <frankja@linux.ibm.com> > --- > arch/s390/kvm/vsie.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c > index 48aab6290a77..ac86f11e46dc 100644 > --- a/arch/s390/kvm/vsie.c > +++ b/arch/s390/kvm/vsie.c > @@ -1002,7 +1002,7 @@ static u64 vsie_get_register(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, > static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) > { > struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s; > - unsigned long pei_dest, pei_src, src, dest, mask; > + unsigned long pei_dest, pei_src, dest, src, mask, mso, prefix; > u64 *pei_block = &vsie_page->scb_o->mcic; > int edat, rc_dest, rc_src; > union ctlreg0 cr0; > @@ -1010,9 +1010,13 @@ static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) > cr0.val = vcpu->arch.sie_block->gcr[0]; > edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8); > mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK); > + mso = scb_s->mso & ~(1UL << 20); > + prefix = scb_s->prefix << GUEST_PREFIX_SHIFT; > > dest = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 16) & mask; > + dest = _kvm_s390_real_to_abs(prefix, dest) + mso; > src = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 20) & mask; > + src = _kvm_s390_real_to_abs(prefix, src) + mso; > > rc_dest = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, dest, &pei_dest); > rc_src = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, src, &pei_src); > mso is always confusing, but I think this should be correct. Reviewed-by: David Hildenbrand <david@redhat.com> -- Thanks, David / dhildenb ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO 2021-03-22 14:05 ` [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO Claudio Imbrenda 2021-03-23 10:50 ` David Hildenbrand @ 2021-03-23 15:07 ` Christian Borntraeger 2021-03-23 15:11 ` David Hildenbrand 1 sibling, 1 reply; 12+ messages in thread From: Christian Borntraeger @ 2021-03-23 15:07 UTC (permalink / raw) To: Claudio Imbrenda, linux-kernel Cc: frankja, david, cohuck, kvm, linux-s390, stable On 22.03.21 15:05, Claudio Imbrenda wrote: > Prefixing needs to be applied to the guest real address to translate it > into a guest absolute address. > > The value of MSO needs to be added to a guest-absolute address in order to > obtain the host-virtual. > > Fixes: 223ea46de9e79 ("s390/kvm: VSIE: correctly handle MVPG when in VSIE") > Cc: stable@vger.kernel.org > Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> > Reported-by: Janosch Frank <frankja@linux.ibm.com> > --- > arch/s390/kvm/vsie.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c > index 48aab6290a77..ac86f11e46dc 100644 > --- a/arch/s390/kvm/vsie.c > +++ b/arch/s390/kvm/vsie.c > @@ -1002,7 +1002,7 @@ static u64 vsie_get_register(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, > static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) > { > struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s; > - unsigned long pei_dest, pei_src, src, dest, mask; > + unsigned long pei_dest, pei_src, dest, src, mask, mso, prefix; > u64 *pei_block = &vsie_page->scb_o->mcic; > int edat, rc_dest, rc_src; > union ctlreg0 cr0; > @@ -1010,9 +1010,13 @@ static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) > cr0.val = vcpu->arch.sie_block->gcr[0]; > edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8); > mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK); > + mso = scb_s->mso & ~(1UL << 20); shouldnt that be ~((1UL << 20 ) -1) ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO 2021-03-23 15:07 ` Christian Borntraeger @ 2021-03-23 15:11 ` David Hildenbrand 2021-03-23 15:16 ` Christian Borntraeger 0 siblings, 1 reply; 12+ messages in thread From: David Hildenbrand @ 2021-03-23 15:11 UTC (permalink / raw) To: Christian Borntraeger, Claudio Imbrenda, linux-kernel Cc: frankja, cohuck, kvm, linux-s390, stable On 23.03.21 16:07, Christian Borntraeger wrote: > > > On 22.03.21 15:05, Claudio Imbrenda wrote: >> Prefixing needs to be applied to the guest real address to translate it >> into a guest absolute address. >> >> The value of MSO needs to be added to a guest-absolute address in order to >> obtain the host-virtual. >> >> Fixes: 223ea46de9e79 ("s390/kvm: VSIE: correctly handle MVPG when in VSIE") >> Cc: stable@vger.kernel.org >> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> >> Reported-by: Janosch Frank <frankja@linux.ibm.com> >> --- >> arch/s390/kvm/vsie.c | 6 +++++- >> 1 file changed, 5 insertions(+), 1 deletion(-) >> >> diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c >> index 48aab6290a77..ac86f11e46dc 100644 >> --- a/arch/s390/kvm/vsie.c >> +++ b/arch/s390/kvm/vsie.c >> @@ -1002,7 +1002,7 @@ static u64 vsie_get_register(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, >> static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) >> { >> struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s; >> - unsigned long pei_dest, pei_src, src, dest, mask; >> + unsigned long pei_dest, pei_src, dest, src, mask, mso, prefix; >> u64 *pei_block = &vsie_page->scb_o->mcic; >> int edat, rc_dest, rc_src; >> union ctlreg0 cr0; >> @@ -1010,9 +1010,13 @@ static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) >> cr0.val = vcpu->arch.sie_block->gcr[0]; >> edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8); >> mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK); >> + mso = scb_s->mso & ~(1UL << 20); > shouldnt that be ~((1UL << 20 ) -1) > Looking at shadow_scb(), we can simply take scb_s->mso unmodified. -- Thanks, David / dhildenb ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO 2021-03-23 15:11 ` David Hildenbrand @ 2021-03-23 15:16 ` Christian Borntraeger 2021-03-23 15:17 ` David Hildenbrand 2021-03-23 15:21 ` Claudio Imbrenda 0 siblings, 2 replies; 12+ messages in thread From: Christian Borntraeger @ 2021-03-23 15:16 UTC (permalink / raw) To: David Hildenbrand, Claudio Imbrenda, linux-kernel Cc: frankja, cohuck, kvm, linux-s390, stable On 23.03.21 16:11, David Hildenbrand wrote: > On 23.03.21 16:07, Christian Borntraeger wrote: >> >> >> On 22.03.21 15:05, Claudio Imbrenda wrote: >>> Prefixing needs to be applied to the guest real address to translate it >>> into a guest absolute address. >>> >>> The value of MSO needs to be added to a guest-absolute address in order to >>> obtain the host-virtual. >>> >>> Fixes: 223ea46de9e79 ("s390/kvm: VSIE: correctly handle MVPG when in VSIE") >>> Cc: stable@vger.kernel.org >>> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> >>> Reported-by: Janosch Frank <frankja@linux.ibm.com> >>> --- >>> arch/s390/kvm/vsie.c | 6 +++++- >>> 1 file changed, 5 insertions(+), 1 deletion(-) >>> >>> diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c >>> index 48aab6290a77..ac86f11e46dc 100644 >>> --- a/arch/s390/kvm/vsie.c >>> +++ b/arch/s390/kvm/vsie.c >>> @@ -1002,7 +1002,7 @@ static u64 vsie_get_register(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, >>> static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) >>> { >>> struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s; >>> - unsigned long pei_dest, pei_src, src, dest, mask; >>> + unsigned long pei_dest, pei_src, dest, src, mask, mso, prefix; >>> u64 *pei_block = &vsie_page->scb_o->mcic; >>> int edat, rc_dest, rc_src; >>> union ctlreg0 cr0; >>> @@ -1010,9 +1010,13 @@ static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) >>> cr0.val = vcpu->arch.sie_block->gcr[0]; >>> edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8); >>> mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK); >>> + mso = scb_s->mso & ~(1UL << 20); >> shouldnt that be ~((1UL << 20 ) -1) >> > > Looking at shadow_scb(), we can simply take scb_s->mso unmodified. Right, I think I can fix this up (and get rid of the local mso variable) when queueing. Or shall Claudio send a new version of the patch? ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO 2021-03-23 15:16 ` Christian Borntraeger @ 2021-03-23 15:17 ` David Hildenbrand 2021-03-23 15:21 ` Claudio Imbrenda 1 sibling, 0 replies; 12+ messages in thread From: David Hildenbrand @ 2021-03-23 15:17 UTC (permalink / raw) To: Christian Borntraeger, Claudio Imbrenda, linux-kernel Cc: frankja, cohuck, kvm, linux-s390, stable On 23.03.21 16:16, Christian Borntraeger wrote: > > > On 23.03.21 16:11, David Hildenbrand wrote: >> On 23.03.21 16:07, Christian Borntraeger wrote: >>> >>> >>> On 22.03.21 15:05, Claudio Imbrenda wrote: >>>> Prefixing needs to be applied to the guest real address to translate it >>>> into a guest absolute address. >>>> >>>> The value of MSO needs to be added to a guest-absolute address in order to >>>> obtain the host-virtual. >>>> >>>> Fixes: 223ea46de9e79 ("s390/kvm: VSIE: correctly handle MVPG when in VSIE") >>>> Cc: stable@vger.kernel.org >>>> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> >>>> Reported-by: Janosch Frank <frankja@linux.ibm.com> >>>> --- >>>> arch/s390/kvm/vsie.c | 6 +++++- >>>> 1 file changed, 5 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c >>>> index 48aab6290a77..ac86f11e46dc 100644 >>>> --- a/arch/s390/kvm/vsie.c >>>> +++ b/arch/s390/kvm/vsie.c >>>> @@ -1002,7 +1002,7 @@ static u64 vsie_get_register(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, >>>> static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) >>>> { >>>> struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s; >>>> - unsigned long pei_dest, pei_src, src, dest, mask; >>>> + unsigned long pei_dest, pei_src, dest, src, mask, mso, prefix; >>>> u64 *pei_block = &vsie_page->scb_o->mcic; >>>> int edat, rc_dest, rc_src; >>>> union ctlreg0 cr0; >>>> @@ -1010,9 +1010,13 @@ static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) >>>> cr0.val = vcpu->arch.sie_block->gcr[0]; >>>> edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8); >>>> mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK); >>>> + mso = scb_s->mso & ~(1UL << 20); >>> shouldnt that be ~((1UL << 20 ) -1) >>> >> >> Looking at shadow_scb(), we can simply take scb_s->mso unmodified. > > Right, I think I can fix this up (and get rid of the local mso variable) > when queueing. Or shall Claudio send a new version of the patch? > IMHO, you can just fix it up. -- Thanks, David / dhildenb ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO 2021-03-23 15:16 ` Christian Borntraeger 2021-03-23 15:17 ` David Hildenbrand @ 2021-03-23 15:21 ` Claudio Imbrenda 2021-03-23 15:34 ` Christian Borntraeger 1 sibling, 1 reply; 12+ messages in thread From: Claudio Imbrenda @ 2021-03-23 15:21 UTC (permalink / raw) To: Christian Borntraeger Cc: David Hildenbrand, linux-kernel, frankja, cohuck, kvm, linux-s390, stable On Tue, 23 Mar 2021 16:16:18 +0100 Christian Borntraeger <borntraeger@de.ibm.com> wrote: > On 23.03.21 16:11, David Hildenbrand wrote: > > On 23.03.21 16:07, Christian Borntraeger wrote: > >> > >> > >> On 22.03.21 15:05, Claudio Imbrenda wrote: > >>> Prefixing needs to be applied to the guest real address to > >>> translate it into a guest absolute address. > >>> > >>> The value of MSO needs to be added to a guest-absolute address in > >>> order to obtain the host-virtual. > >>> > >>> Fixes: 223ea46de9e79 ("s390/kvm: VSIE: correctly handle MVPG when > >>> in VSIE") Cc: stable@vger.kernel.org > >>> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> > >>> Reported-by: Janosch Frank <frankja@linux.ibm.com> > >>> --- > >>> arch/s390/kvm/vsie.c | 6 +++++- > >>> 1 file changed, 5 insertions(+), 1 deletion(-) > >>> > >>> diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c > >>> index 48aab6290a77..ac86f11e46dc 100644 > >>> --- a/arch/s390/kvm/vsie.c > >>> +++ b/arch/s390/kvm/vsie.c > >>> @@ -1002,7 +1002,7 @@ static u64 vsie_get_register(struct > >>> kvm_vcpu *vcpu, struct vsie_page *vsie_page, static int > >>> vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page > >>> *vsie_page) { struct kvm_s390_sie_block *scb_s = > >>> &vsie_page->scb_s; > >>> - unsigned long pei_dest, pei_src, src, dest, mask; > >>> + unsigned long pei_dest, pei_src, dest, src, mask, mso, > >>> prefix; u64 *pei_block = &vsie_page->scb_o->mcic; > >>> int edat, rc_dest, rc_src; > >>> union ctlreg0 cr0; > >>> @@ -1010,9 +1010,13 @@ static int vsie_handle_mvpg(struct > >>> kvm_vcpu *vcpu, struct vsie_page *vsie_page) cr0.val = > >>> vcpu->arch.sie_block->gcr[0]; edat = cr0.edat && > >>> test_kvm_facility(vcpu->kvm, 8); mask = > >>> _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK); > >>> + mso = scb_s->mso & ~(1UL << 20); > >> shouldnt that be ~((1UL << 20 ) -1) oops > > > > Looking at shadow_scb(), we can simply take scb_s->mso unmodified. > > Right, I think I can fix this up (and get rid of the local mso I think that's easier/simpler > variable) when queueing. Or shall Claudio send a new version of the > patch? ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO 2021-03-23 15:21 ` Claudio Imbrenda @ 2021-03-23 15:34 ` Christian Borntraeger 0 siblings, 0 replies; 12+ messages in thread From: Christian Borntraeger @ 2021-03-23 15:34 UTC (permalink / raw) To: Claudio Imbrenda Cc: David Hildenbrand, linux-kernel, frankja, cohuck, kvm, linux-s390, stable On 23.03.21 16:21, Claudio Imbrenda wrote: > On Tue, 23 Mar 2021 16:16:18 +0100 > Christian Borntraeger <borntraeger@de.ibm.com> wrote: > >> On 23.03.21 16:11, David Hildenbrand wrote: >>> On 23.03.21 16:07, Christian Borntraeger wrote: >>>> >>>> >>>> On 22.03.21 15:05, Claudio Imbrenda wrote: >>>>> Prefixing needs to be applied to the guest real address to >>>>> translate it into a guest absolute address. >>>>> >>>>> The value of MSO needs to be added to a guest-absolute address in >>>>> order to obtain the host-virtual. >>>>> >>>>> Fixes: 223ea46de9e79 ("s390/kvm: VSIE: correctly handle MVPG when >>>>> in VSIE") Cc: stable@vger.kernel.org >>>>> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> >>>>> Reported-by: Janosch Frank <frankja@linux.ibm.com> >>>>> --- >>>>> arch/s390/kvm/vsie.c | 6 +++++- >>>>> 1 file changed, 5 insertions(+), 1 deletion(-) >>>>> >>>>> diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c >>>>> index 48aab6290a77..ac86f11e46dc 100644 >>>>> --- a/arch/s390/kvm/vsie.c >>>>> +++ b/arch/s390/kvm/vsie.c >>>>> @@ -1002,7 +1002,7 @@ static u64 vsie_get_register(struct >>>>> kvm_vcpu *vcpu, struct vsie_page *vsie_page, static int >>>>> vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page >>>>> *vsie_page) { struct kvm_s390_sie_block *scb_s = >>>>> &vsie_page->scb_s; >>>>> - unsigned long pei_dest, pei_src, src, dest, mask; >>>>> + unsigned long pei_dest, pei_src, dest, src, mask, mso, >>>>> prefix; u64 *pei_block = &vsie_page->scb_o->mcic; >>>>> int edat, rc_dest, rc_src; >>>>> union ctlreg0 cr0; >>>>> @@ -1010,9 +1010,13 @@ static int vsie_handle_mvpg(struct >>>>> kvm_vcpu *vcpu, struct vsie_page *vsie_page) cr0.val = >>>>> vcpu->arch.sie_block->gcr[0]; edat = cr0.edat && >>>>> test_kvm_facility(vcpu->kvm, 8); mask = >>>>> _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK); >>>>> + mso = scb_s->mso & ~(1UL << 20); >>>> shouldnt that be ~((1UL << 20 ) -1) > > oops > >>> >>> Looking at shadow_scb(), we can simply take scb_s->mso unmodified. >> >> Right, I think I can fix this up (and get rid of the local mso > > I think that's easier/simpler > >> variable) when queueing. Or shall Claudio send a new version of the >> patch? > queued (with fixup). Please note: can you use "KVM: s390:" instead of "s390/kvm" for the future patches. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 0/2] s390/kvm: VSIE: fix prefixing and MSO for MVPG 2021-03-22 14:05 [PATCH v2 0/2] s390/kvm: VSIE: fix prefixing and MSO for MVPG Claudio Imbrenda 2021-03-22 14:05 ` [PATCH v2 1/2] s390/kvm: split kvm_s390_real_to_abs Claudio Imbrenda 2021-03-22 14:05 ` [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO Claudio Imbrenda @ 2021-03-23 10:49 ` Christian Borntraeger 2 siblings, 0 replies; 12+ messages in thread From: Christian Borntraeger @ 2021-03-23 10:49 UTC (permalink / raw) To: Claudio Imbrenda, linux-kernel; +Cc: frankja, david, cohuck, kvm, linux-s390 On 22.03.21 15:05, Claudio Imbrenda wrote: > The guest real address needs to pass through prefixing in order to yield > the absolute address. > > The absolute address needs to be offset by the MSO in order to get the > host virtual address. > > v1->v2 > * use the MSO from the shadow SIE page instead of the original one > * reuse src and dest variabled to improve readability > > Claudio Imbrenda (2): > s390/kvm: split kvm_s390_real_to_abs > s390/kvm: VSIE: fix MVPG handling for prefixing and MSO > > arch/s390/kvm/gaccess.h | 23 +++++++++++++++++------ > arch/s390/kvm/vsie.c | 6 +++++- > 2 files changed, 22 insertions(+), 7 deletions(-) > I picked both for internal CI and staging. RBs or acks can still be send. ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-03-23 15:36 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-03-22 14:05 [PATCH v2 0/2] s390/kvm: VSIE: fix prefixing and MSO for MVPG Claudio Imbrenda 2021-03-22 14:05 ` [PATCH v2 1/2] s390/kvm: split kvm_s390_real_to_abs Claudio Imbrenda 2021-03-23 15:01 ` Christian Borntraeger 2021-03-22 14:05 ` [PATCH v2 2/2] s390/kvm: VSIE: fix MVPG handling for prefixing and MSO Claudio Imbrenda 2021-03-23 10:50 ` David Hildenbrand 2021-03-23 15:07 ` Christian Borntraeger 2021-03-23 15:11 ` David Hildenbrand 2021-03-23 15:16 ` Christian Borntraeger 2021-03-23 15:17 ` David Hildenbrand 2021-03-23 15:21 ` Claudio Imbrenda 2021-03-23 15:34 ` Christian Borntraeger 2021-03-23 10:49 ` [PATCH v2 0/2] s390/kvm: VSIE: fix prefixing and MSO for MVPG Christian Borntraeger
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).