[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 4/7] xen/arm: page: Clarify the Xen TLBs helpers name
On Wed, 8 May 2019, Julien Grall wrote: > Now that we dropped flush_xen_text_tlb_local(), we have only one set of > helpers acting on Xen TLBs. There naming are quite confusing because the > TLB instructions used will act on both Data and Instruction TLBs. > > Take the opportunity to rework the documentation that can be confusing > to read as they don't match the implementation. > > Lastly, switch from unsigned lont to vaddr_t as the function technically ^ long One comment about the in-code comments below. > deal with virtual address. > > Signed-off-by: Julien Grall <julien.grall@xxxxxxx> > Reviewed-by: Andrii Anisov <andrii_anisov@xxxxxxxx> > > --- > Changes in v2: > - Add Andrii's reviewed-by > --- > xen/arch/arm/mm.c | 18 +++++++++--------- > xen/include/asm-arm/arm32/page.h | 15 +++++---------- > xen/include/asm-arm/arm64/page.h | 15 +++++---------- > xen/include/asm-arm/page.h | 28 ++++++++++++++-------------- > 4 files changed, 33 insertions(+), 43 deletions(-) > > diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c > index dfbe39c70a..8ee828d445 100644 > --- a/xen/arch/arm/mm.c > +++ b/xen/arch/arm/mm.c > @@ -335,7 +335,7 @@ void set_fixmap(unsigned map, mfn_t mfn, unsigned int > flags) > pte.pt.table = 1; /* 4k mappings always have this bit set */ > pte.pt.xn = 1; > write_pte(xen_fixmap + third_table_offset(FIXMAP_ADDR(map)), pte); > - flush_xen_data_tlb_range_va(FIXMAP_ADDR(map), PAGE_SIZE); > + flush_xen_tlb_range_va(FIXMAP_ADDR(map), PAGE_SIZE); > } > > /* Remove a mapping from a fixmap entry */ > @@ -343,7 +343,7 @@ void clear_fixmap(unsigned map) > { > lpae_t pte = {0}; > write_pte(xen_fixmap + third_table_offset(FIXMAP_ADDR(map)), pte); > - flush_xen_data_tlb_range_va(FIXMAP_ADDR(map), PAGE_SIZE); > + flush_xen_tlb_range_va(FIXMAP_ADDR(map), PAGE_SIZE); > } > > /* Create Xen's mappings of memory. > @@ -377,7 +377,7 @@ static void __init create_mappings(lpae_t *second, > write_pte(p + i, pte); > pte.pt.base += 1 << LPAE_SHIFT; > } > - flush_xen_data_tlb_local(); > + flush_xen_tlb_local(); > } > > #ifdef CONFIG_DOMAIN_PAGE > @@ -455,7 +455,7 @@ void *map_domain_page(mfn_t mfn) > * We may not have flushed this specific subpage at map time, > * since we only flush the 4k page not the superpage > */ > - flush_xen_data_tlb_range_va_local(va, PAGE_SIZE); > + flush_xen_tlb_range_va_local(va, PAGE_SIZE); > > return (void *)va; > } > @@ -598,7 +598,7 @@ void __init remove_early_mappings(void) > write_pte(xen_second + second_table_offset(BOOT_FDT_VIRT_START), pte); > write_pte(xen_second + second_table_offset(BOOT_FDT_VIRT_START + SZ_2M), > pte); > - flush_xen_data_tlb_range_va(BOOT_FDT_VIRT_START, BOOT_FDT_SLOT_SIZE); > + flush_xen_tlb_range_va(BOOT_FDT_VIRT_START, BOOT_FDT_SLOT_SIZE); > } > > /* > @@ -615,7 +615,7 @@ static void xen_pt_enforce_wnx(void) > * before flushing the TLBs. > */ > isb(); > - flush_xen_data_tlb_local(); > + flush_xen_tlb_local(); > } > > extern void switch_ttbr(uint64_t ttbr); > @@ -879,7 +879,7 @@ void __init setup_xenheap_mappings(unsigned long base_mfn, > vaddr += FIRST_SIZE; > } > > - flush_xen_data_tlb_local(); > + flush_xen_tlb_local(); > } > #endif > > @@ -1052,7 +1052,7 @@ static int create_xen_entries(enum xenmap_operation op, > BUG(); > } > } > - flush_xen_data_tlb_range_va(virt, PAGE_SIZE * nr_mfns); > + flush_xen_tlb_range_va(virt, PAGE_SIZE * nr_mfns); > > rc = 0; > > @@ -1127,7 +1127,7 @@ static void set_pte_flags_on_range(const char *p, > unsigned long l, enum mg mg) > } > write_pte(xen_xenmap + i, pte); > } > - flush_xen_data_tlb_local(); > + flush_xen_tlb_local(); > } > > /* Release all __init and __initdata ranges to be reused */ > diff --git a/xen/include/asm-arm/arm32/page.h > b/xen/include/asm-arm/arm32/page.h > index 40a77daa9d..0b41b9214b 100644 > --- a/xen/include/asm-arm/arm32/page.h > +++ b/xen/include/asm-arm/arm32/page.h > @@ -61,12 +61,8 @@ static inline void invalidate_icache_local(void) > isb(); /* Synchronize fetched instruction stream. */ > } > > -/* > - * Flush all hypervisor mappings from the data TLB of the local > - * processor. This is not sufficient when changing code mappings or > - * for self modifying code. > - */ > -static inline void flush_xen_data_tlb_local(void) > +/* Flush all hypervisor mappings from the TLB of the local processor. */ I realize that the statement "This is not sufficient when changing code mappings or for self modifying code" is not quite accurate, but I would prefer not to remove it completely. It would be good to retain a warning somewhere about IC been needed when changing Xen's own mappings. Maybe on top of invalidate_icache_local? > +static inline void flush_xen_tlb_local(void) > { > asm volatile("dsb;" /* Ensure preceding are visible */ > CMD_CP32(TLBIALLH) > @@ -76,14 +72,13 @@ static inline void flush_xen_data_tlb_local(void) > } > > /* Flush TLB of local processor for address va. */ > -static inline void __flush_xen_data_tlb_one_local(vaddr_t va) > +static inline void __flush_xen_tlb_one_local(vaddr_t va) > { > asm volatile(STORE_CP32(0, TLBIMVAH) : : "r" (va) : "memory"); > } > > -/* Flush TLB of all processors in the inner-shareable domain for > - * address va. */ > -static inline void __flush_xen_data_tlb_one(vaddr_t va) > +/* Flush TLB of all processors in the inner-shareable domain for address va. > */ > +static inline void __flush_xen_tlb_one(vaddr_t va) > { > asm volatile(STORE_CP32(0, TLBIMVAHIS) : : "r" (va) : "memory"); > } > diff --git a/xen/include/asm-arm/arm64/page.h > b/xen/include/asm-arm/arm64/page.h > index 6c36d0210f..31d04ecf76 100644 > --- a/xen/include/asm-arm/arm64/page.h > +++ b/xen/include/asm-arm/arm64/page.h > @@ -45,12 +45,8 @@ static inline void invalidate_icache_local(void) > isb(); > } > > -/* > - * Flush all hypervisor mappings from the data TLB of the local > - * processor. This is not sufficient when changing code mappings or > - * for self modifying code. > - */ > -static inline void flush_xen_data_tlb_local(void) > +/* Flush all hypervisor mappings from the TLB of the local processor. */ > +static inline void flush_xen_tlb_local(void) > { > asm volatile ( > "dsb sy;" /* Ensure visibility of PTE writes */ > @@ -61,14 +57,13 @@ static inline void flush_xen_data_tlb_local(void) > } > > /* Flush TLB of local processor for address va. */ > -static inline void __flush_xen_data_tlb_one_local(vaddr_t va) > +static inline void __flush_xen_tlb_one_local(vaddr_t va) > { > asm volatile("tlbi vae2, %0;" : : "r" (va>>PAGE_SHIFT) : "memory"); > } > > -/* Flush TLB of all processors in the inner-shareable domain for > - * address va. */ > -static inline void __flush_xen_data_tlb_one(vaddr_t va) > +/* Flush TLB of all processors in the inner-shareable domain for address va. > */ > +static inline void __flush_xen_tlb_one(vaddr_t va) > { > asm volatile("tlbi vae2is, %0;" : : "r" (va>>PAGE_SHIFT) : "memory"); > } > diff --git a/xen/include/asm-arm/page.h b/xen/include/asm-arm/page.h > index 1a1713ce02..195345e24a 100644 > --- a/xen/include/asm-arm/page.h > +++ b/xen/include/asm-arm/page.h > @@ -234,18 +234,18 @@ static inline int clean_and_invalidate_dcache_va_range > } while (0) > > /* > - * Flush a range of VA's hypervisor mappings from the data TLB of the > - * local processor. This is not sufficient when changing code mappings > - * or for self modifying code. > + * Flush a range of VA's hypervisor mappings from the TLB of the local > + * processor. > */ > -static inline void flush_xen_data_tlb_range_va_local(unsigned long va, > - unsigned long size) > +static inline void flush_xen_tlb_range_va_local(vaddr_t va, > + unsigned long size) > { > - unsigned long end = va + size; > + vaddr_t end = va + size; > + > dsb(sy); /* Ensure preceding are visible */ > while ( va < end ) > { > - __flush_xen_data_tlb_one_local(va); > + __flush_xen_tlb_one_local(va); > va += PAGE_SIZE; > } > dsb(sy); /* Ensure completion of the TLB flush */ > @@ -253,18 +253,18 @@ static inline void > flush_xen_data_tlb_range_va_local(unsigned long va, > } > > /* > - * Flush a range of VA's hypervisor mappings from the data TLB of all > - * processors in the inner-shareable domain. This is not sufficient > - * when changing code mappings or for self modifying code. > + * Flush a range of VA's hypervisor mappings from the TLB of all > + * processors in the inner-shareable domain. > */ > -static inline void flush_xen_data_tlb_range_va(unsigned long va, > - unsigned long size) > +static inline void flush_xen_tlb_range_va(vaddr_t va, > + unsigned long size) > { > - unsigned long end = va + size; > + vaddr_t end = va + size; > + > dsb(sy); /* Ensure preceding are visible */ > while ( va < end ) > { > - __flush_xen_data_tlb_one(va); > + __flush_xen_tlb_one(va); > va += PAGE_SIZE; > } > dsb(sy); /* Ensure completion of the TLB flush */ > -- > 2.11.0 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |