arch/arm64/kvm/mmu.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
HYP_PAGE_OFFSET is removed since 4.8, and the method for generating Hyp
VAs has evolved. Update the functional description of
create_hyp_mappings accordingly.
Signed-off-by: Wei-Lin Chang <r09922117@csie.ntu.edu.tw>
---
arch/arm64/kvm/mmu.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
index c9a13e487..a9ae4a3f9 100644
--- a/arch/arm64/kvm/mmu.c
+++ b/arch/arm64/kvm/mmu.c
@@ -424,9 +424,10 @@ void kvm_unshare_hyp(void *from, void *to)
* @to: The virtual kernel end address of the range (exclusive)
* @prot: The protection to be applied to this range
*
- * The same virtual address as the kernel virtual address is also used
- * in Hyp-mode mapping (modulo HYP_PAGE_OFFSET) to the same underlying
- * physical pages.
+ * The Hyp virtual address is generated by masking the kernel VA with
+ * va_mask then inserting tag_val for the higher bits starting from
+ * tag_lsb. See kvm_compute_layout() in va_layout.c for more info.
+ * Both Hyp VA and kernel VA ranges map to the same underlying physical pages.
*/
int create_hyp_mappings(void *from, void *to, enum kvm_pgtable_prot prot)
{
--
2.34.1
On Thu, 03 Nov 2022 05:32:28 +0000, Wei-Lin Chang <r09922117@csie.ntu.edu.tw> wrote: > > HYP_PAGE_OFFSET is removed since 4.8, and the method for generating Hyp > VAs has evolved. Update the functional description of > create_hyp_mappings accordingly. > > Signed-off-by: Wei-Lin Chang <r09922117@csie.ntu.edu.tw> > --- > arch/arm64/kvm/mmu.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c > index c9a13e487..a9ae4a3f9 100644 > --- a/arch/arm64/kvm/mmu.c > +++ b/arch/arm64/kvm/mmu.c > @@ -424,9 +424,10 @@ void kvm_unshare_hyp(void *from, void *to) > * @to: The virtual kernel end address of the range (exclusive) > * @prot: The protection to be applied to this range > * > - * The same virtual address as the kernel virtual address is also used > - * in Hyp-mode mapping (modulo HYP_PAGE_OFFSET) to the same underlying > - * physical pages. > + * The Hyp virtual address is generated by masking the kernel VA with > + * va_mask then inserting tag_val for the higher bits starting from > + * tag_lsb. See kvm_compute_layout() in va_layout.c for more info. > + * Both Hyp VA and kernel VA ranges map to the same underlying physical pages. My problem with this comment is that neither va_mask, tag_val, nor tag_lsb mean anything in this context. All this is purely internal to kvm_compute_layout(), and is unnecessary here. I'd rather you have something along the lines of: diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 60ee3d9f01f8..6d04818a1a5b 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -460,7 +460,7 @@ void kvm_unshare_hyp(void *from, void *to) * @prot: The protection to be applied to this range * * The same virtual address as the kernel virtual address is also used - * in Hyp-mode mapping (modulo HYP_PAGE_OFFSET) to the same underlying + * in Hyp-mode mapping (modulo a random offset) to the same underlying * physical pages. */ int create_hyp_mappings(void *from, void *to, enum kvm_pgtable_prot prot) Whoever is interested in understanding the generation of the offset can follow kern_hyp_va(). Thanks, M. -- Without deviation from the norm, progress is not possible.
On Sat, Nov 12, 2022 at 12:18 AM Marc Zyngier <maz@kernel.org> wrote: > My problem with this comment is that neither va_mask, tag_val, nor > tag_lsb mean anything in this context. All this is purely internal to > kvm_compute_layout(), and is unnecessary here. > > I'd rather you have something along the lines of: > > diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c > index 60ee3d9f01f8..6d04818a1a5b 100644 > --- a/arch/arm64/kvm/mmu.c > +++ b/arch/arm64/kvm/mmu.c > @@ -460,7 +460,7 @@ void kvm_unshare_hyp(void *from, void *to) > * @prot: The protection to be applied to this range > * > * The same virtual address as the kernel virtual address is also used > - * in Hyp-mode mapping (modulo HYP_PAGE_OFFSET) to the same underlying > + * in Hyp-mode mapping (modulo a random offset) to the same underlying > * physical pages. > */ > int create_hyp_mappings(void *from, void *to, enum kvm_pgtable_prot prot) > > Whoever is interested in understanding the generation of the offset > can follow kern_hyp_va(). Yes I agree, thanks for the advice. I'll update the patch. Wei-Lin Chang
On Thu, 03 Nov 2022 05:32:28 +0000,
Wei-Lin Chang <r09922117@csie.ntu.edu.tw> wrote:
>
> HYP_PAGE_OFFSET is removed since 4.8, and the method for generating Hyp
> VAs has evolved. Update the functional description of
> create_hyp_mappings accordingly.
>
> Signed-off-by: Wei-Lin Chang <r09922117@csie.ntu.edu.tw>
> ---
> arch/arm64/kvm/mmu.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
> index c9a13e487..a9ae4a3f9 100644
> --- a/arch/arm64/kvm/mmu.c
> +++ b/arch/arm64/kvm/mmu.c
> @@ -424,9 +424,10 @@ void kvm_unshare_hyp(void *from, void *to)
> * @to: The virtual kernel end address of the range (exclusive)
> * @prot: The protection to be applied to this range
> *
> - * The same virtual address as the kernel virtual address is also used
> - * in Hyp-mode mapping (modulo HYP_PAGE_OFFSET) to the same underlying
> - * physical pages.
> + * The Hyp virtual address is generated by masking the kernel VA with
> + * va_mask then inserting tag_val for the higher bits starting from
> + * tag_lsb. See kvm_compute_layout() in va_layout.c for more info.
> + * Both Hyp VA and kernel VA ranges map to the same underlying physical pages.
> */
> int create_hyp_mappings(void *from, void *to, enum kvm_pgtable_prot prot)
> {
What's the difference with the previous instance of this patch?
M.
--
Without deviation from the norm, progress is not possible.
© 2016 - 2026 Red Hat, Inc.