lkml.org 
[lkml]   [2019]   [Jul]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: [PATCH v2 1/3] mm: document zone device struct page field usage
    From
    Date
    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@nvidia.com>
    > Reviewed-by: John Hubbard <jhubbard@nvidia.com>
    > Cc: Matthew Wilcox <willy@infradead.org>
    > Cc: Vlastimil Babka <vbabka@suse.cz>
    > Cc: Christoph Lameter <cl@linux.com>
    > Cc: Dave Hansen <dave.hansen@linux.intel.com>
    > Cc: Jérôme Glisse <jglisse@redhat.com>
    > Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>
    > Cc: Lai Jiangshan <jiangshanlai@gmail.com>
    > Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    > Cc: Pekka Enberg <penberg@kernel.org>
    > Cc: Randy Dunlap <rdunlap@infradead.org>
    > Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
    > Cc: Christoph Hellwig <hch@lst.de>
    > Cc: Jason Gunthorpe <jgg@mellanox.com>
    > Cc: Andrew Morton <akpm@linux-foundation.org>
    > Cc: Linus Torvalds <torvalds@linux-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

    \
     
     \ /
      Last update: 2019-07-21 17:06    [W:2.374 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site