|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 07/10] xen/arm: intruduce alloc_domstatic_pages
On 18.05.2021 07:21, Penny Zheng wrote:
> --- a/xen/common/page_alloc.c
> +++ b/xen/common/page_alloc.c
> @@ -2447,6 +2447,9 @@ int assign_pages(
> {
> ASSERT(page_get_owner(&pg[i]) == NULL);
> page_set_owner(&pg[i], d);
> + /* use page_set_reserved_owner to set its reserved domain owner. */
> + if ( (pg[i].count_info & PGC_reserved) )
> + page_set_reserved_owner(&pg[i], d);
Now this is puzzling: What's the point of setting two owner fields
to the same value? I also don't recall you having introduced
page_set_reserved_owner() for x86, so how is this going to build
there?
> @@ -2509,6 +2512,56 @@ struct page_info *alloc_domheap_pages(
> return pg;
> }
>
> +/*
> + * Allocate nr_pfns contiguous pages, starting at #start, of static memory,
> + * then assign them to one specific domain #d.
> + * It is the equivalent of alloc_domheap_pages for static memory.
> + */
> +struct page_info *alloc_domstatic_pages(
> + struct domain *d, unsigned long nr_pfns, paddr_t start,
> + unsigned int memflags)
> +{
> + struct page_info *pg = NULL;
> + unsigned long dma_size;
> +
> + ASSERT(!in_irq());
> +
> + if ( memflags & MEMF_no_owner )
> + memflags |= MEMF_no_refcount;
> +
> + if ( !dma_bitsize )
> + memflags &= ~MEMF_no_dma;
> + else
> + {
> + dma_size = 1ul << bits_to_zone(dma_bitsize);
> + /* Starting address shall meet the DMA limitation. */
> + if ( dma_size && start < dma_size )
> + return NULL;
It is the entire range (i.e. in particular the last byte) which needs
to meet such a restriction. I'm not convinced though that DMA width
restrictions and static allocation are sensible to coexist.
> + }
> +
> + pg = alloc_staticmem_pages(nr_pfns, start, memflags);
> + if ( !pg )
> + return NULL;
> +
> + if ( d && !(memflags & MEMF_no_owner) )
> + {
> + if ( memflags & MEMF_no_refcount )
> + {
> + unsigned long i;
> +
> + for ( i = 0; i < nr_pfns; i++ )
> + pg[i].count_info = PGC_extra;
> + }
Is this as well as the MEMF_no_owner case actually meaningful for
statically allocated pages?
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |