|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/6] xen/arm: introduce map_phys_range
At 18:19 +0000 on 05 Dec (1354731583), Stefano Stabellini wrote:
> Introduce a function to map a physical memory into virtual memory.
> It is going to be used later to map the videoram.
>
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> ---
> xen/arch/arm/mm.c | 23 +++++++++++++++++++++++
> xen/include/asm-arm/mm.h | 3 +++
> 2 files changed, 26 insertions(+), 0 deletions(-)
>
> diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
> index 68ee9da..418a414 100644
> --- a/xen/arch/arm/mm.c
> +++ b/xen/arch/arm/mm.c
> @@ -376,6 +376,29 @@ void __init setup_frametable_mappings(paddr_t ps,
> paddr_t pe)
> frametable_virt_end = FRAMETABLE_VIRT_START + (nr_pages * sizeof(struct
> page_info));
> }
>
> +/* Map the physical memory range start - end at the virtual address
> + * virt_start in 2MB chunks. start and virt_start have to be 2MB
> + * aligned.
> + */
> +void map_phys_range(paddr_t start, paddr_t end,
> + unsigned long virt_start, unsigned attributes)
> +{
> + ASSERT(!(start & ((1 << 21) - 1)));
> + ASSERT(!(virt_start & ((1 << 21) - 1)));
Please use SECOND_SHIFT rather than 21, and maybe even add a SECOND_MASK
&c to page.h rather than open-coding the <<s here.
Also, can you add some assertions that the VAs here are in some
well-defined region (with annotations in config.h)?
> + while ( start < end )
> + {
> + lpae_t e = mfn_to_xen_entry(start >> PAGE_SHIFT);
> + e.pt.ai = attributes;
> + write_pte(xen_second + second_table_offset(virt_start), e);
> +
> + start += (1<<21);
> + virt_start += (1<<21);
Maybe add SECOND_SIZE &c too?
> + }
> +
> + flush_xen_data_tlb();
What's this for?
Cheers,
Tim.
> +}
> +
> enum mg { mg_clear, mg_ro, mg_rw, mg_rx };
> static void set_pte_flags_on_range(const char *p, unsigned long l, enum mg
> mg)
> {
> diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h
> index 3549c83..a11f20b 100644
> --- a/xen/include/asm-arm/mm.h
> +++ b/xen/include/asm-arm/mm.h
> @@ -152,6 +152,9 @@ extern void setup_frametable_mappings(paddr_t ps, paddr_t
> pe);
> extern void set_fixmap(unsigned map, unsigned long mfn, unsigned attributes);
> /* Remove a mapping from a fixmap entry */
> extern void clear_fixmap(unsigned map);
> +/* map a 2MB aligned physical range in virtual memory. */
> +extern void map_phys_range(paddr_t start, paddr_t end,
> + unsigned long virt_start, unsigned attributes);
>
>
> #define mfn_valid(mfn) ({
> \
> --
> 1.7.2.5
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |