[v3,1/3] mm: document zone device struct page field usage
diff mbox series

Message ID 20190724232700.23327-2-rcampbell@nvidia.com
State New
Headers show
Series
  • mm/hmm: fixes for device private page migration
Related show

Commit Message

Ralph Campbell July 24, 2019, 11:26 p.m. UTC
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.

Add comments to struct page and remove the unused "_zd_pad_1" field
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 | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

Comments

Jason Gunthorpe July 25, 2019, 1:22 a.m. UTC | #1
On Wed, Jul 24, 2019 at 04:26:58PM -0700, 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.
> 
> Add comments to struct page and remove the unused "_zd_pad_1" field
> 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 | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)

Ralph, you marked some of thes patches as mm/hmm, but I feel it is
best if Andrew takes them through the normal -mm path.

They don't touch hmm.c or mmu notifiers so I don't forsee conflicts,
and I don't feel comfortable to review this code.

Regards,
Jason
Christoph Hellwig July 25, 2019, 5:38 a.m. UTC | #2
On Wed, Jul 24, 2019 at 04:26:58PM -0700, 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.
> 
> Add comments to struct page and remove the unused "_zd_pad_1" field
> to make this more clear.

I still think we should also fix up the layout, and I haven't seen
a reply from Matthew justifying his curses for your patch that makes
the struct page layout actually match how it is used.
Ralph Campbell July 25, 2019, 5:49 p.m. UTC | #3
On 7/24/19 6:22 PM, Jason Gunthorpe wrote:
> On Wed, Jul 24, 2019 at 04:26:58PM -0700, 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.
>>
>> Add comments to struct page and remove the unused "_zd_pad_1" field
>> 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 | 11 ++++++++++-
>>   1 file changed, 10 insertions(+), 1 deletion(-)
> 
> Ralph, you marked some of thes patches as mm/hmm, but I feel it is
> best if Andrew takes them through the normal -mm path.
> 
> They don't touch hmm.c or mmu notifiers so I don't forsee conflicts,
> and I don't feel comfortable to review this code.
> 
> Regards,
> Jason
> 

Fine with me. I should have been clear in the cover letter which
tree to target.
Ralph Campbell July 25, 2019, 6:19 p.m. UTC | #4
On 7/24/19 10:38 PM, Christoph Hellwig wrote:
> On Wed, Jul 24, 2019 at 04:26:58PM -0700, 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.
>>
>> Add comments to struct page and remove the unused "_zd_pad_1" field
>> to make this more clear.
> 
> I still think we should also fix up the layout, and I haven't seen
> a reply from Matthew justifying his curses for your patch that makes
> the struct page layout actually match how it is used.
> 

Well, I can kind of see this both ways since ZONE_DEVICE
MEMORY_DEVICE_DEVDAX and MEMORY_DEVICE_PCI_P2PDMA don't
seem to use the 3 words like MEMORY_DEVICE_PRIVATE and
MEMORY_DEVICE_FS_DAX.

I like v3 because not all of the ZONE_DEVICE types are handled
the same in regards to using the 3 words and there may be future
ZONE_DEVICE types that use the 3 words differently which might
require a union.

I agree, I would like to hear from Matthew on his thoughts.

Patch
diff mbox series

diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 3a37a89eb7a7..6a7a1083b6fb 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -159,7 +159,16 @@  struct page {
 			/** @pgmap: Points to the hosting device page map. */
 			struct dev_pagemap *pgmap;
 			void *zone_device_data;
-			unsigned long _zd_pad_1;	/* uses mapping */
+			/*
+			 * ZONE_DEVICE private pages are counted as being
+			 * mapped so the next 3 words hold the mapping, index,
+			 * and private fields from the source anonymous or
+			 * page cache page while the page is migrated to device
+			 * private memory.
+			 * ZONE_DEVICE MEMORY_DEVICE_FS_DAX pages also
+			 * use the mapping, index, and private fields when
+			 * pmem backed DAX files are mapped.
+			 */
 		};
 
 		/** @rcu_head: You can use this to free a page by RCU. */