OpenSBI Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Xiang W <wxjstz@126.com>
To: opensbi@lists.infradead.org
Subject: [PATCH] lib: sbi: Fix GPA passed to __sbi_hfence_gvma_xyz() functions
Date: Tue, 26 Oct 2021 20:19:10 +0800	[thread overview]
Message-ID: <0f6d1a6d330c9fbf0dc3cc392c4482e2dd6780f3.camel@126.com> (raw)
In-Reply-To: <20211026114805.2043389-1-anup.patel@wdc.com>

? 2021-10-26???? 17:18 +0530?Anup Patel???
> The parameter passed to HFENCE.GVMA instruction in rs1 register
> is guest physical address right shifted by 2 (i.e. divided by 4).
> 
> Unfortunately, we overlooked the semantics of rs1 registers for
> HFENCE.GVMA instruction and never right shifted guest physical
> address by 2. This issue did not manifest for hypervisors till
> now because all H-extension implementations (such as QEMU, Spike,
> Rocket Core FPGA, etc) we tried till now were conservatively
> flushing everything upon any HFENCE.GVMA instruction.
> 
> This patch fixes GPA passed to __sbi_hfence_gvma_vmid_gpa()
> and __sbi_hfence_gvma_gpa() functions.
> 
> Fixes: 331ff6a162c1 ("lib: Support stage1 and stage2 tlb flushing")
> Reported-by: Ian Huang <ihuang@ventanamicro.com>
> Signed-off-by: Anup Patel <anup.patel@wdc.com>
We can keep the api unchanged and add a shift instruction in
__sbi_hfence_gvma_vmid_gpa/__sbi_hfence_gvma_gpa

srli	a0,a0,2

Regards,
Xiang W
> ---
> ?include/sbi/sbi_hfence.h | 5 +++--
> ?lib/sbi/sbi_hfence.S???? | 4 ++--
> ?lib/sbi/sbi_tlb.c??????? | 4 ++--
> ?3 files changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/include/sbi/sbi_hfence.h b/include/sbi/sbi_hfence.h
> index 4420f27..d3958f1 100644
> --- a/include/sbi/sbi_hfence.h
> +++ b/include/sbi/sbi_hfence.h
> @@ -12,13 +12,14 @@
> ?#define __SBI_FENCE_H__
> ?
> ?/** Invalidate Stage2 TLBs for given VMID and guest physical address
> */
> -void __sbi_hfence_gvma_vmid_gpa(unsigned long gpa, unsigned long
> vmid);
> +void __sbi_hfence_gvma_vmid_gpa(unsigned long gpa_divby_4,
> +???????????????????????????????unsigned long vmid);
> ?
> ?/** Invalidate Stage2 TLBs for given VMID */
> ?void __sbi_hfence_gvma_vmid(unsigned long vmid);
> ?
> ?/** Invalidate Stage2 TLBs for given guest physical address */
> -void __sbi_hfence_gvma_gpa(unsigned long gpa);
> +void __sbi_hfence_gvma_gpa(unsigned long gpa_divby_4);
> ?
> ?/** Invalidate all possible Stage2 TLBs */
> ?void __sbi_hfence_gvma_all(void);
> diff --git a/lib/sbi/sbi_hfence.S b/lib/sbi/sbi_hfence.S
> index d05becb..e11e650 100644
> --- a/lib/sbi/sbi_hfence.S
> +++ b/lib/sbi/sbi_hfence.S
> @@ -27,7 +27,7 @@
> ????????.global __sbi_hfence_gvma_vmid_gpa
> ?__sbi_hfence_gvma_vmid_gpa:
> ????????/*
> -??????? * rs1 = a0 (GPA)
> +??????? * rs1 = a0 (GPA >> 2)
> ???????? * rs2 = a1 (VMID)
> ???????? * HFENCE.GVMA a0, a1
> ???????? * 0110001 01011 01010 000 00000 1110011
> @@ -51,7 +51,7 @@ __sbi_hfence_gvma_vmid:
> ????????.global __sbi_hfence_gvma_gpa
> ?__sbi_hfence_gvma_gpa:
> ????????/*
> -??????? * rs1 = a0 (GPA)
> +??????? * rs1 = a0 (GPA >> 2)
> ???????? * rs2 = zero
> ???????? * HFENCE.GVMA a0
> ???????? * 0110001 00000 01010 000 00000 1110011
> diff --git a/lib/sbi/sbi_tlb.c b/lib/sbi/sbi_tlb.c
> index efa74a7..4c142ea 100644
> --- a/lib/sbi/sbi_tlb.c
> +++ b/lib/sbi/sbi_tlb.c
> @@ -72,7 +72,7 @@ void sbi_tlb_local_hfence_gvma(struct sbi_tlb_info
> *tinfo)
> ????????}
> ?
> ????????for (i = 0; i < size; i += PAGE_SIZE) {
> -???????????????__sbi_hfence_gvma_gpa(start+i);
> +???????????????__sbi_hfence_gvma_gpa((start + i) >> 2);
> ????????}
> ?}
> ?
> @@ -148,7 +148,7 @@ void sbi_tlb_local_hfence_gvma_vmid(struct
> sbi_tlb_info *tinfo)
> ????????}
> ?
> ????????for (i = 0; i < size; i += PAGE_SIZE) {
> -???????????????__sbi_hfence_gvma_vmid_gpa(start + i, vmid);
> +???????????????__sbi_hfence_gvma_vmid_gpa((start + i) >> 2, vmid);
> ????????}
> ?}
> ?
> -- 
> 2.25.1
> 
> 




  reply	other threads:[~2021-10-26 12:19 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-26 11:48 [PATCH] lib: sbi: Fix GPA passed to __sbi_hfence_gvma_xyz() functions Anup Patel
2021-10-26 12:19 ` Xiang W [this message]
2021-10-26 12:25   ` Anup Patel
2021-10-26 12:35     ` Xiang W
2021-10-26 13:59 ` Dong Du
2021-11-02 10:37   ` Anup Patel

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=0f6d1a6d330c9fbf0dc3cc392c4482e2dd6780f3.camel@126.com \
    --to=wxjstz@126.com \
    --cc=opensbi@lists.infradead.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox