From: Bharata B Rao <bharata@linux.ibm.com> To: Nathan Chancellor <nathan@kernel.org>, kvm-ppc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, farosas@linux.ibm.com, aneesh.kumar@linux.ibm.com, npiggin@gmail.com, david@gibson.dropbear.id.au Subject: Re: [PATCH v8 4/6] KVM: PPC: Book3S HV: Nested support in H_RPT_INVALIDATE Date: Tue, 22 Jun 2021 12:42:25 +0530 [thread overview] Message-ID: <YNGNWRsUgRiMqrGs@in.ibm.com> (raw) In-Reply-To: <YNFom3Ojb4TGsKj2@in.ibm.com> On Tue, Jun 22, 2021 at 10:05:45AM +0530, Bharata B Rao wrote: > On Mon, Jun 21, 2021 at 10:12:42AM -0700, Nathan Chancellor wrote: > > I have not seen this reported yet so apologies if it has and there is a > > fix I am missing: > > > > arch/powerpc/kvm/book3s_hv_nested.c:1334:11: error: variable 'ap' is uninitialized when used here [-Werror,-Wuninitialized] > > ap, start, end); > > ^~ > > arch/powerpc/kvm/book3s_hv_nested.c:1276:25: note: initialize the variable 'ap' to silence this warning > > unsigned long psize, ap; > > ^ > > = 0 > > Thanks for catching this, this wasn't caught in my environment. > > I will repost the series with proper initialization to ap. Michael, Here is the fix for this on top of powerpc/next. If it is easier and cleaner to fold this into the original series and re-post the whole series against any updated tree, let me know. From 2e7198e28c0d1137f3230d4645e9cfddaccf4987 Mon Sep 17 00:00:00 2001 From: Bharata B Rao <bharata@linux.ibm.com> Date: Tue, 22 Jun 2021 12:07:01 +0530 Subject: [PATCH 1/1] KVM: PPC: Book3S HV: Use proper ap value in H_RPT_INVALIDATE The ap value that is used when performing range based partition scoped invalidations for the nested guests wasn't initialized correctly. Fix this and while we are here, reorganize the routine that does this invalidation for better readability. Fixes: 0e67d866cb32 ("KVM: PPC: Book3S HV: Nested support in H_RPT_INVALIDATE") Signed-off-by: Bharata B Rao <bharata@linux.ibm.com> --- arch/powerpc/kvm/book3s_hv_nested.c | 90 +++++++++++++---------------- 1 file changed, 40 insertions(+), 50 deletions(-) diff --git a/arch/powerpc/kvm/book3s_hv_nested.c b/arch/powerpc/kvm/book3s_hv_nested.c index d78efb5f5bb3..3a06ac0b53e2 100644 --- a/arch/powerpc/kvm/book3s_hv_nested.c +++ b/arch/powerpc/kvm/book3s_hv_nested.c @@ -1222,27 +1222,6 @@ long kvmhv_do_nested_tlbie(struct kvm_vcpu *vcpu) return H_SUCCESS; } -static long do_tlb_invalidate_nested_tlb(struct kvm_vcpu *vcpu, - unsigned long lpid, - unsigned long page_size, - unsigned long ap, - unsigned long start, - unsigned long end) -{ - unsigned long addr = start; - int ret; - - do { - ret = kvmhv_emulate_tlbie_tlb_addr(vcpu, lpid, ap, - get_epn(addr)); - if (ret) - return ret; - addr += page_size; - } while (addr < end); - - return ret; -} - static long do_tlb_invalidate_nested_all(struct kvm_vcpu *vcpu, unsigned long lpid, unsigned long ric) { @@ -1263,6 +1242,42 @@ static long do_tlb_invalidate_nested_all(struct kvm_vcpu *vcpu, */ static unsigned long tlb_range_flush_page_ceiling __read_mostly = 33; +static long do_tlb_invalidate_nested_tlb(struct kvm_vcpu *vcpu, + unsigned long lpid, + unsigned long pg_sizes, + unsigned long start, + unsigned long end) +{ + int ret = H_P4; + unsigned long addr, nr_pages; + struct mmu_psize_def *def; + unsigned long psize, ap, page_size; + bool flush_lpid; + + for (psize = 0; psize < MMU_PAGE_COUNT; psize++) { + def = &mmu_psize_defs[psize]; + if (!(pg_sizes & def->h_rpt_pgsize)) + continue; + + nr_pages = (end - start) >> def->shift; + flush_lpid = nr_pages > tlb_range_flush_page_ceiling; + if (flush_lpid) + return do_tlb_invalidate_nested_all(vcpu, lpid, + RIC_FLUSH_TLB); + addr = start; + ap = mmu_get_ap(psize); + page_size = 1UL << def->shift; + do { + ret = kvmhv_emulate_tlbie_tlb_addr(vcpu, lpid, ap, + get_epn(addr)); + if (ret) + return H_P4; + addr += page_size; + } while (addr < end); + } + return ret; +} + /* * Performs partition-scoped invalidations for nested guests * as part of H_RPT_INVALIDATE hcall. @@ -1271,10 +1286,6 @@ long do_h_rpt_invalidate_pat(struct kvm_vcpu *vcpu, unsigned long lpid, unsigned long type, unsigned long pg_sizes, unsigned long start, unsigned long end) { - struct kvm_nested_guest *gp; - long ret; - unsigned long psize, ap; - /* * If L2 lpid isn't valid, we need to return H_PARAMETER. * @@ -1284,8 +1295,7 @@ long do_h_rpt_invalidate_pat(struct kvm_vcpu *vcpu, unsigned long lpid, * H_ENTER_NESTED call. Since we can't differentiate this case from * the invalid case, we ignore such flush requests and return success. */ - gp = kvmhv_find_nested(vcpu->kvm, lpid); - if (!gp) + if (!kvmhv_find_nested(vcpu->kvm, lpid)) return H_SUCCESS; /* @@ -1313,29 +1323,9 @@ long do_h_rpt_invalidate_pat(struct kvm_vcpu *vcpu, unsigned long lpid, if (start == 0 && end == -1) return do_tlb_invalidate_nested_all(vcpu, lpid, RIC_FLUSH_TLB); - if (type & H_RPTI_TYPE_TLB) { - struct mmu_psize_def *def; - bool flush_lpid; - unsigned long nr_pages; - - for (psize = 0; psize < MMU_PAGE_COUNT; psize++) { - def = &mmu_psize_defs[psize]; - if (!(pg_sizes & def->h_rpt_pgsize)) - continue; - - nr_pages = (end - start) >> def->shift; - flush_lpid = nr_pages > tlb_range_flush_page_ceiling; - if (flush_lpid) - return do_tlb_invalidate_nested_all(vcpu, lpid, - RIC_FLUSH_TLB); - - ret = do_tlb_invalidate_nested_tlb(vcpu, lpid, - (1UL << def->shift), - ap, start, end); - if (ret) - return H_P4; - } - } + if (type & H_RPTI_TYPE_TLB) + return do_tlb_invalidate_nested_tlb(vcpu, lpid, pg_sizes, + start, end); return H_SUCCESS; } -- 2.31.1
WARNING: multiple messages have this Message-ID (diff)
From: Bharata B Rao <bharata@linux.ibm.com> To: Nathan Chancellor <nathan@kernel.org>, kvm-ppc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, farosas@linux.ibm.com, aneesh.kumar@linux.ibm.com, npiggin@gmail.com, david@gibson.dropbear.id.au Subject: Re: [PATCH v8 4/6] KVM: PPC: Book3S HV: Nested support in H_RPT_INVALIDATE Date: Tue, 22 Jun 2021 07:24:25 +0000 [thread overview] Message-ID: <YNGNWRsUgRiMqrGs@in.ibm.com> (raw) In-Reply-To: <YNFom3Ojb4TGsKj2@in.ibm.com> On Tue, Jun 22, 2021 at 10:05:45AM +0530, Bharata B Rao wrote: > On Mon, Jun 21, 2021 at 10:12:42AM -0700, Nathan Chancellor wrote: > > I have not seen this reported yet so apologies if it has and there is a > > fix I am missing: > > > > arch/powerpc/kvm/book3s_hv_nested.c:1334:11: error: variable 'ap' is uninitialized when used here [-Werror,-Wuninitialized] > > ap, start, end); > > ^~ > > arch/powerpc/kvm/book3s_hv_nested.c:1276:25: note: initialize the variable 'ap' to silence this warning > > unsigned long psize, ap; > > ^ > > = 0 > > Thanks for catching this, this wasn't caught in my environment. > > I will repost the series with proper initialization to ap. Michael, Here is the fix for this on top of powerpc/next. If it is easier and cleaner to fold this into the original series and re-post the whole series against any updated tree, let me know. From 2e7198e28c0d1137f3230d4645e9cfddaccf4987 Mon Sep 17 00:00:00 2001 From: Bharata B Rao <bharata@linux.ibm.com> Date: Tue, 22 Jun 2021 12:07:01 +0530 Subject: [PATCH 1/1] KVM: PPC: Book3S HV: Use proper ap value in H_RPT_INVALIDATE The ap value that is used when performing range based partition scoped invalidations for the nested guests wasn't initialized correctly. Fix this and while we are here, reorganize the routine that does this invalidation for better readability. Fixes: 0e67d866cb32 ("KVM: PPC: Book3S HV: Nested support in H_RPT_INVALIDATE") Signed-off-by: Bharata B Rao <bharata@linux.ibm.com> --- arch/powerpc/kvm/book3s_hv_nested.c | 90 +++++++++++++---------------- 1 file changed, 40 insertions(+), 50 deletions(-) diff --git a/arch/powerpc/kvm/book3s_hv_nested.c b/arch/powerpc/kvm/book3s_hv_nested.c index d78efb5f5bb3..3a06ac0b53e2 100644 --- a/arch/powerpc/kvm/book3s_hv_nested.c +++ b/arch/powerpc/kvm/book3s_hv_nested.c @@ -1222,27 +1222,6 @@ long kvmhv_do_nested_tlbie(struct kvm_vcpu *vcpu) return H_SUCCESS; } -static long do_tlb_invalidate_nested_tlb(struct kvm_vcpu *vcpu, - unsigned long lpid, - unsigned long page_size, - unsigned long ap, - unsigned long start, - unsigned long end) -{ - unsigned long addr = start; - int ret; - - do { - ret = kvmhv_emulate_tlbie_tlb_addr(vcpu, lpid, ap, - get_epn(addr)); - if (ret) - return ret; - addr += page_size; - } while (addr < end); - - return ret; -} - static long do_tlb_invalidate_nested_all(struct kvm_vcpu *vcpu, unsigned long lpid, unsigned long ric) { @@ -1263,6 +1242,42 @@ static long do_tlb_invalidate_nested_all(struct kvm_vcpu *vcpu, */ static unsigned long tlb_range_flush_page_ceiling __read_mostly = 33; +static long do_tlb_invalidate_nested_tlb(struct kvm_vcpu *vcpu, + unsigned long lpid, + unsigned long pg_sizes, + unsigned long start, + unsigned long end) +{ + int ret = H_P4; + unsigned long addr, nr_pages; + struct mmu_psize_def *def; + unsigned long psize, ap, page_size; + bool flush_lpid; + + for (psize = 0; psize < MMU_PAGE_COUNT; psize++) { + def = &mmu_psize_defs[psize]; + if (!(pg_sizes & def->h_rpt_pgsize)) + continue; + + nr_pages = (end - start) >> def->shift; + flush_lpid = nr_pages > tlb_range_flush_page_ceiling; + if (flush_lpid) + return do_tlb_invalidate_nested_all(vcpu, lpid, + RIC_FLUSH_TLB); + addr = start; + ap = mmu_get_ap(psize); + page_size = 1UL << def->shift; + do { + ret = kvmhv_emulate_tlbie_tlb_addr(vcpu, lpid, ap, + get_epn(addr)); + if (ret) + return H_P4; + addr += page_size; + } while (addr < end); + } + return ret; +} + /* * Performs partition-scoped invalidations for nested guests * as part of H_RPT_INVALIDATE hcall. @@ -1271,10 +1286,6 @@ long do_h_rpt_invalidate_pat(struct kvm_vcpu *vcpu, unsigned long lpid, unsigned long type, unsigned long pg_sizes, unsigned long start, unsigned long end) { - struct kvm_nested_guest *gp; - long ret; - unsigned long psize, ap; - /* * If L2 lpid isn't valid, we need to return H_PARAMETER. * @@ -1284,8 +1295,7 @@ long do_h_rpt_invalidate_pat(struct kvm_vcpu *vcpu, unsigned long lpid, * H_ENTER_NESTED call. Since we can't differentiate this case from * the invalid case, we ignore such flush requests and return success. */ - gp = kvmhv_find_nested(vcpu->kvm, lpid); - if (!gp) + if (!kvmhv_find_nested(vcpu->kvm, lpid)) return H_SUCCESS; /* @@ -1313,29 +1323,9 @@ long do_h_rpt_invalidate_pat(struct kvm_vcpu *vcpu, unsigned long lpid, if (start = 0 && end = -1) return do_tlb_invalidate_nested_all(vcpu, lpid, RIC_FLUSH_TLB); - if (type & H_RPTI_TYPE_TLB) { - struct mmu_psize_def *def; - bool flush_lpid; - unsigned long nr_pages; - - for (psize = 0; psize < MMU_PAGE_COUNT; psize++) { - def = &mmu_psize_defs[psize]; - if (!(pg_sizes & def->h_rpt_pgsize)) - continue; - - nr_pages = (end - start) >> def->shift; - flush_lpid = nr_pages > tlb_range_flush_page_ceiling; - if (flush_lpid) - return do_tlb_invalidate_nested_all(vcpu, lpid, - RIC_FLUSH_TLB); - - ret = do_tlb_invalidate_nested_tlb(vcpu, lpid, - (1UL << def->shift), - ap, start, end); - if (ret) - return H_P4; - } - } + if (type & H_RPTI_TYPE_TLB) + return do_tlb_invalidate_nested_tlb(vcpu, lpid, pg_sizes, + start, end); return H_SUCCESS; } -- 2.31.1
next prev parent reply other threads:[~2021-06-22 7:13 UTC|newest] Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-06-21 8:49 [PATCH v8 0/6] Support for H_RPT_INVALIDATE in PowerPC KVM Bharata B Rao 2021-06-21 8:50 ` Bharata B Rao 2021-06-21 8:49 ` [PATCH v8 1/6] KVM: PPC: Book3S HV: Fix comments of H_RPT_INVALIDATE arguments Bharata B Rao 2021-06-21 8:50 ` Bharata B Rao 2021-06-21 8:49 ` [PATCH v8 2/6] powerpc/book3s64/radix: Add H_RPT_INVALIDATE pgsize encodings to mmu_psize_def Bharata B Rao 2021-06-21 8:50 ` Bharata B Rao 2021-06-21 8:50 ` [PATCH v8 3/6] KVM: PPC: Book3S HV: Add support for H_RPT_INVALIDATE Bharata B Rao 2021-06-21 8:50 ` Bharata B Rao 2021-07-05 4:42 ` David Gibson 2021-07-05 4:42 ` David Gibson 2021-07-06 5:26 ` Bharata B Rao 2021-07-06 5:38 ` Bharata B Rao 2021-07-08 3:58 ` David Gibson 2021-07-08 3:58 ` David Gibson 2021-07-08 4:29 ` Bharata B Rao 2021-07-08 4:41 ` Bharata B Rao 2021-07-12 2:28 ` David Gibson 2021-07-12 2:28 ` David Gibson 2021-06-21 8:50 ` [PATCH v8 4/6] KVM: PPC: Book3S HV: Nested support in H_RPT_INVALIDATE Bharata B Rao 2021-06-21 8:50 ` Bharata B Rao 2021-06-21 17:12 ` Nathan Chancellor 2021-06-21 17:12 ` Nathan Chancellor 2021-06-22 4:35 ` Bharata B Rao 2021-06-22 4:47 ` Bharata B Rao 2021-06-22 7:12 ` Bharata B Rao [this message] 2021-06-22 7:24 ` Bharata B Rao 2021-06-23 6:47 ` Michael Ellerman 2021-06-23 6:47 ` Michael Ellerman 2021-06-21 8:50 ` [PATCH v8 5/6] KVM: PPC: Book3S HV: Add KVM_CAP_PPC_RPT_INVALIDATE capability Bharata B Rao 2021-06-21 8:50 ` Bharata B Rao 2021-06-21 8:50 ` [PATCH v8 6/6] KVM: PPC: Book3S HV: Use H_RPT_INVALIDATE in nested KVM Bharata B Rao 2021-06-21 8:50 ` Bharata B Rao 2021-06-21 15:07 ` kernel test robot 2021-06-21 15:21 ` Philip Li 2021-06-24 13:59 ` [PATCH v8 0/6] Support for H_RPT_INVALIDATE in PowerPC KVM Michael Ellerman 2021-06-24 13:59 ` Michael Ellerman
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=YNGNWRsUgRiMqrGs@in.ibm.com \ --to=bharata@linux.ibm.com \ --cc=aneesh.kumar@linux.ibm.com \ --cc=david@gibson.dropbear.id.au \ --cc=farosas@linux.ibm.com \ --cc=kvm-ppc@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=nathan@kernel.org \ --cc=npiggin@gmail.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: linkBe 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.