[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 10/16] xen/arm: add Persistent Map (PMAP) infrastructure
Hi Stefano, On 08/06/2022 02:08, Stefano Stabellini wrote: diff --git a/xen/arch/arm/include/asm/pmap.h b/xen/arch/arm/include/asm/pmap.h new file mode 100644 index 000000000000..74398b4c4fe6 --- /dev/null +++ b/xen/arch/arm/include/asm/pmap.h @@ -0,0 +1,32 @@ +#ifndef __ASM_PMAP_H__ +#define __ASM_PMAP_H__ + +#include <xen/mm.h> + +#include <asm/fixmap.h> + +static inline void arch_pmap_map(unsigned int slot, mfn_t mfn) +{ + lpae_t *entry = &xen_fixmap[slot]; + lpae_t pte; + + ASSERT(!lpae_is_valid(*entry)); + + pte = mfn_to_xen_entry(mfn, PAGE_HYPERVISOR_RW); + pte.pt.table = 1; + write_pte(entry, pte);Here we don't need a tlb flush because we never go from a valid mapping to another valid mapping. A TLB flush would not be sufficient here. You would need to follow the break-before-make sequence in order to replace a valid mapping with another valid mapping. We also go through arch_pmap_unmap which clears the mapping and also flushes the tlb. Is that right? The PMAP code is using a bitmap to know which entry is used. So when arch_pmap_map() is called, we also guarantees the entry will be invalid (hence the ASSERT(!lpae_is_valid()). The bit in the bitmap will only be cleared by pmap_unmap() which will result to a TLB flush. +} + +static inline void arch_pmap_unmap(unsigned int slot) +{ + lpae_t pte = {}; + + write_pte(&xen_fixmap[slot], pte); + + flush_xen_tlb_range_va_local(FIXMAP_ADDR(slot), PAGE_SIZE); +} + +void arch_pmap_map_slot(unsigned int slot, mfn_t mfn); +void arch_pmap_clear_slot(void *ptr);What are these two? They are not defined anywhere? It is left-over. I will drop them. Cheers, -- Julien Grall
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |