[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <7002a29c-6fd0-5938-ad0e-807442e6c3cd@infradead.org>
Date: Sun, 21 Jul 2019 08:05:55 -0700
From: Randy Dunlap <rdunlap@...radead.org>
To: Ralph Campbell <rcampbell@...dia.com>, linux-mm@...ck.org
Cc: linux-kernel@...r.kernel.org, John Hubbard <jhubbard@...dia.com>,
Matthew Wilcox <willy@...radead.org>,
Vlastimil Babka <vbabka@...e.cz>,
Christoph Lameter <cl@...ux.com>,
Dave Hansen <dave.hansen@...ux.intel.com>,
Jérôme Glisse <jglisse@...hat.com>,
"Kirill A . Shutemov" <kirill.shutemov@...ux.intel.com>,
Lai Jiangshan <jiangshanlai@...il.com>,
Martin Schwidefsky <schwidefsky@...ibm.com>,
Pekka Enberg <penberg@...nel.org>,
Andrey Ryabinin <aryabinin@...tuozzo.com>,
Christoph Hellwig <hch@....de>,
Jason Gunthorpe <jgg@...lanox.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Linus Torvalds <torvalds@...ux-foundation.org>
Subject: Re: [PATCH v2 1/3] mm: document zone device struct page field usage
Hi,
On 7/19/19 12:29 PM, Ralph Campbell wrote:
> Struct page for ZONE_DEVICE private pages uses the page->mapping and
> and page->index fields while the source anonymous pages are migrated to
> device private memory. This is so rmap_walk() can find the page when
> migrating the ZONE_DEVICE private page back to system memory.
> ZONE_DEVICE pmem backed fsdax pages also use the page->mapping and
> page->index fields when files are mapped into a process address space.
>
> Restructure struct page and add comments to make this more clear.
>
> Signed-off-by: Ralph Campbell <rcampbell@...dia.com>
> Reviewed-by: John Hubbard <jhubbard@...dia.com>
> Cc: Matthew Wilcox <willy@...radead.org>
> Cc: Vlastimil Babka <vbabka@...e.cz>
> Cc: Christoph Lameter <cl@...ux.com>
> Cc: Dave Hansen <dave.hansen@...ux.intel.com>
> Cc: Jérôme Glisse <jglisse@...hat.com>
> Cc: "Kirill A . Shutemov" <kirill.shutemov@...ux.intel.com>
> Cc: Lai Jiangshan <jiangshanlai@...il.com>
> Cc: Martin Schwidefsky <schwidefsky@...ibm.com>
> Cc: Pekka Enberg <penberg@...nel.org>
> Cc: Randy Dunlap <rdunlap@...radead.org>
> Cc: Andrey Ryabinin <aryabinin@...tuozzo.com>
> Cc: Christoph Hellwig <hch@....de>
> Cc: Jason Gunthorpe <jgg@...lanox.com>
> Cc: Andrew Morton <akpm@...ux-foundation.org>
> Cc: Linus Torvalds <torvalds@...ux-foundation.org>
> ---
> include/linux/mm_types.h | 42 +++++++++++++++++++++++++++-------------
> 1 file changed, 29 insertions(+), 13 deletions(-)
>
> diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
> index 3a37a89eb7a7..f6c52e44d40c 100644
> --- a/include/linux/mm_types.h
> +++ b/include/linux/mm_types.h
> @@ -76,13 +76,35 @@ struct page {
> * avoid collision and false-positive PageTail().
> */
> union {
> - struct { /* Page cache and anonymous pages */
> - /**
> - * @lru: Pageout list, eg. active_list protected by
> - * pgdat->lru_lock. Sometimes used as a generic list
> - * by the page owner.
> - */
> - struct list_head lru;
> + struct { /* Page cache, anonymous, ZONE_DEVICE pages */
> + union {
> + /**
> + * @lru: Pageout list, e.g., active_list
> + * protected by pgdat->lru_lock. Sometimes
> + * used as a generic list by the page owner.
> + */
> + struct list_head lru;
Did you run this through 'make htmldocs' or anything similar?
The reason I ask is that the "/**" comment below is not in kernel-doc format AFAICT.
I would expect an error or warning, but I haven't tested it.
Thanks.
> + /**
> + * ZONE_DEVICE pages are never on the lru
> + * list so they reuse the list space.
> + * ZONE_DEVICE private pages are counted as
> + * being mapped so the @mapping and @index
> + * fields are used while the page is migrated
> + * to device private memory.
> + * ZONE_DEVICE MEMORY_DEVICE_FS_DAX pages also
> + * use the @mapping and @index fields when pmem
> + * backed DAX files are mapped.
> + */
> + struct {
> + /**
> + * @pgmap: Points to the hosting
> + * device page map.
> + */
> + struct dev_pagemap *pgmap;
> + /** @zone_device_data: opaque data. */
> + void *zone_device_data;
> + };
> + };
> /* See page-flags.h for PAGE_MAPPING_FLAGS */
> struct address_space *mapping;
> pgoff_t index; /* Our offset within mapping. */
> @@ -155,12 +177,6 @@ struct page {
> spinlock_t ptl;
> #endif
> };
> - struct { /* ZONE_DEVICE pages */
> - /** @pgmap: Points to the hosting device page map. */
> - struct dev_pagemap *pgmap;
> - void *zone_device_data;
> - unsigned long _zd_pad_1; /* uses mapping */
> - };
>
> /** @rcu_head: You can use this to free a page by RCU. */
> struct rcu_head rcu_head;
>
--
~Randy
Powered by blists - more mailing lists