All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien@xen.org>
To: Penny Zheng <penny.zheng@arm.com>,
	xen-devel@lists.xenproject.org, sstabellini@kernel.org
Cc: Bertrand.Marquis@arm.com, Wei.Chen@arm.com, nd@arm.com
Subject: Re: [PATCH 08/10] xen/arm: introduce reserved_page_list
Date: Tue, 18 May 2021 12:02:06 +0100	[thread overview]
Message-ID: <c002d9b2-8210-1c03-b374-76e037b65e2f@xen.org> (raw)
In-Reply-To: <20210518052113.725808-9-penny.zheng@arm.com>

Hi Penny,

On 18/05/2021 06:21, Penny Zheng wrote:
> Since page_list under struct domain refers to linked pages as gueast RAM

s/gueast/guest/

> allocated from heap, it should not include reserved pages of static memory.

You already have PGC_reserved to indicate they are "static memory". So 
why do you need yet another list?

> 
> The number of PGC_reserved pages assigned to a domain is tracked in
> a new 'reserved_pages' counter. Also introduce a new reserved_page_list
> to link pages of static memory. Let page_to_list return reserved_page_list,
> when flag is PGC_reserved.
> 
> Later, when domain get destroyed or restarted, those new values will help
> relinquish memory to proper place, not been given back to heap.
> 
> Signed-off-by: Penny Zheng <penny.zheng@arm.com>
> ---
>   xen/common/domain.c     | 1 +
>   xen/common/page_alloc.c | 7 +++++--
>   xen/include/xen/sched.h | 5 +++++
>   3 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/xen/common/domain.c b/xen/common/domain.c
> index 6b71c6d6a9..c38afd2969 100644
> --- a/xen/common/domain.c
> +++ b/xen/common/domain.c
> @@ -578,6 +578,7 @@ struct domain *domain_create(domid_t domid,
>       INIT_PAGE_LIST_HEAD(&d->page_list);
>       INIT_PAGE_LIST_HEAD(&d->extra_page_list);
>       INIT_PAGE_LIST_HEAD(&d->xenpage_list);
> +    INIT_PAGE_LIST_HEAD(&d->reserved_page_list);
>   
>       spin_lock_init(&d->node_affinity_lock);
>       d->node_affinity = NODE_MASK_ALL;
> diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
> index f1f1296a61..e3f07ec6c5 100644
> --- a/xen/common/page_alloc.c
> +++ b/xen/common/page_alloc.c
> @@ -2410,7 +2410,7 @@ int assign_pages(
>   
>           for ( i = 0; i < nr_pfns; i++ )
>           {
> -            ASSERT(!(pg[i].count_info & ~PGC_extra));
> +            ASSERT(!(pg[i].count_info & ~(PGC_extra | PGC_reserved)));
I think this change belongs to the previous patch.

>               if ( pg[i].count_info & PGC_extra )
>                   extra_pages++;
>           }
> @@ -2439,6 +2439,9 @@ int assign_pages(
>           }
>       }
>   
> +    if ( pg[0].count_info & PGC_reserved )
> +        d->reserved_pages += nr_pfns;

reserved_pages doesn't seem to be ever read or decremented. So why do 
you need it?

> +
>       if ( !(memflags & MEMF_no_refcount) &&
>            unlikely(domain_adjust_tot_pages(d, nr_pfns) == nr_pfns) )
>           get_knownalive_domain(d);
> @@ -2452,7 +2455,7 @@ int assign_pages(
>               page_set_reserved_owner(&pg[i], d);
>           smp_wmb(); /* Domain pointer must be visible before updating refcnt. */
>           pg[i].count_info =
> -            (pg[i].count_info & PGC_extra) | PGC_allocated | 1;
> +            (pg[i].count_info & (PGC_extra | PGC_reserved)) | PGC_allocated | 1;

Same here.

>           page_list_add_tail(&pg[i], page_to_list(d, &pg[i]));
>       }
>   
> diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
> index 3982167144..b6333ed8bb 100644
> --- a/xen/include/xen/sched.h
> +++ b/xen/include/xen/sched.h
> @@ -368,6 +368,7 @@ struct domain
>       struct page_list_head page_list;  /* linked list */
>       struct page_list_head extra_page_list; /* linked list (size extra_pages) */
>       struct page_list_head xenpage_list; /* linked list (size xenheap_pages) */
> +    struct page_list_head reserved_page_list; /* linked list (size reserved pages) */
>   
>       /*
>        * This field should only be directly accessed by domain_adjust_tot_pages()
> @@ -379,6 +380,7 @@ struct domain
>       unsigned int     outstanding_pages; /* pages claimed but not possessed */
>       unsigned int     max_pages;         /* maximum value for domain_tot_pages() */
>       unsigned int     extra_pages;       /* pages not included in domain_tot_pages() */
> +    unsigned int     reserved_pages;    /* pages of static memory */
>       atomic_t         shr_pages;         /* shared pages */
>       atomic_t         paged_pages;       /* paged-out pages */
>   
> @@ -588,6 +590,9 @@ static inline struct page_list_head *page_to_list(
>       if ( pg->count_info & PGC_extra )
>           return &d->extra_page_list;
>   
> +    if ( pg->count_info & PGC_reserved )
> +        return &d->reserved_page_list;
> +
>       return &d->page_list;
>   }
>   
> 

Cheers,

-- 
Julien Grall


  parent reply	other threads:[~2021-05-18 11:02 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-18  5:21 [PATCH 00/10] Domain on Static Allocation Penny Zheng
2021-05-18  5:21 ` [PATCH 01/10] xen/arm: introduce domain " Penny Zheng
2021-05-18  8:58   ` Julien Grall
2021-05-19  2:22     ` Penny Zheng
2021-05-19 18:27       ` Julien Grall
2021-05-20  6:07         ` Penny Zheng
2021-05-20  8:50           ` Julien Grall
2021-06-02 10:09             ` Penny Zheng
2021-06-03  9:09               ` Julien Grall
2021-06-03 21:32                 ` Stefano Stabellini
2021-06-03 22:07                   ` Julien Grall
2021-06-03 23:55                     ` Stefano Stabellini
2021-06-04  4:00                       ` Penny Zheng
2021-06-05  2:00                         ` Stefano Stabellini
2021-06-07 18:09                       ` Julien Grall
2021-06-09  9:56                         ` Bertrand Marquis
2021-06-09 10:47                           ` Julien Grall
2021-06-15  6:08                             ` Penny Zheng
2021-06-17 11:22                               ` Julien Grall
2021-05-18  5:21 ` [PATCH 02/10] xen/arm: handle static memory in dt_unreserved_regions Penny Zheng
2021-05-18  9:04   ` Julien Grall
2021-05-18  5:21 ` [PATCH 03/10] xen/arm: introduce PGC_reserved Penny Zheng
2021-05-18  9:45   ` Julien Grall
2021-05-19  3:16     ` Penny Zheng
2021-05-19  9:49       ` Jan Beulich
2021-05-19 19:49         ` Julien Grall
2021-05-20  7:05           ` Jan Beulich
2021-05-19 19:46       ` Julien Grall
2021-05-20  6:19         ` Penny Zheng
2021-05-20  8:40           ` Penny Zheng
2021-05-20  8:59             ` Julien Grall
2021-05-20  9:27               ` Jan Beulich
2021-05-20  9:45                 ` Julien Grall
2021-05-18  5:21 ` [PATCH 04/10] xen/arm: static memory initialization Penny Zheng
2021-05-18  7:15   ` Jan Beulich
2021-05-18  9:51     ` Penny Zheng
2021-05-18 10:43       ` Jan Beulich
2021-05-20  9:04         ` Penny Zheng
2021-05-20  9:32           ` Jan Beulich
2021-05-18 10:00   ` Julien Grall
2021-05-18 10:01     ` Julien Grall
2021-05-19  5:02     ` Penny Zheng
2021-05-18  5:21 ` [PATCH 05/10] xen/arm: introduce alloc_staticmem_pages Penny Zheng
2021-05-18  7:24   ` Jan Beulich
2021-05-18  9:30     ` Penny Zheng
2021-05-18 10:09     ` Julien Grall
2021-05-18 10:15   ` Julien Grall
2021-05-19  5:23     ` Penny Zheng
2021-05-24 10:10       ` Penny Zheng
2021-05-24 10:24         ` Julien Grall
2021-05-18  5:21 ` [PATCH 06/10] xen: replace order with nr_pfns in assign_pages for better compatibility Penny Zheng
2021-05-18  7:27   ` Jan Beulich
2021-05-18  9:11     ` Penny Zheng
2021-05-18 10:20   ` Julien Grall
2021-05-19  5:35     ` Penny Zheng
2021-05-18  5:21 ` [PATCH 07/10] xen/arm: intruduce alloc_domstatic_pages Penny Zheng
2021-05-18  7:34   ` Jan Beulich
2021-05-18  8:57     ` Penny Zheng
2021-05-18 11:23       ` Jan Beulich
2021-05-21  6:41         ` Penny Zheng
2021-05-21  7:09           ` Jan Beulich
2021-06-03  2:44             ` Penny Zheng
2021-05-18 12:13       ` Julien Grall
2021-05-19  7:52         ` Penny Zheng
2021-05-19 20:01           ` Julien Grall
2021-05-18 10:30   ` Julien Grall
2021-05-19  6:03     ` Penny Zheng
2021-05-18  5:21 ` [PATCH 08/10] xen/arm: introduce reserved_page_list Penny Zheng
2021-05-18  7:39   ` Jan Beulich
2021-05-18  8:38     ` Penny Zheng
2021-05-18 11:24       ` Jan Beulich
2021-05-19  6:46         ` Penny Zheng
2021-05-18 11:02   ` Julien Grall [this message]
2021-05-19  6:43     ` Penny Zheng
2021-05-18  5:21 ` [PATCH 09/10] xen/arm: parse `xen,static-mem` info during domain construction Penny Zheng
2021-05-18 12:09   ` Julien Grall
2021-05-19  7:58     ` Penny Zheng
2021-05-18  5:21 ` [PATCH 10/10] xen/arm: introduce allocate_static_memory Penny Zheng
2021-05-18 12:05   ` Julien Grall
2021-05-19  7:27     ` Penny Zheng
2021-05-19 20:10       ` Julien Grall
2021-05-20  6:29         ` Penny Zheng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c002d9b2-8210-1c03-b374-76e037b65e2f@xen.org \
    --to=julien@xen.org \
    --cc=Bertrand.Marquis@arm.com \
    --cc=Wei.Chen@arm.com \
    --cc=nd@arm.com \
    --cc=penny.zheng@arm.com \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.