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 <[email protected]>
Reviewed-by: John Hubbard <[email protected]>
Cc: Matthew Wilcox <[email protected]>
Cc: Vlastimil Babka <[email protected]>
Cc: Christoph Lameter <[email protected]>
Cc: Dave Hansen <[email protected]>
Cc: Jérôme Glisse <[email protected]>
Cc: "Kirill A . Shutemov" <[email protected]>
Cc: Lai Jiangshan <[email protected]>
Cc: Martin Schwidefsky <[email protected]>
Cc: Pekka Enberg <[email protected]>
Cc: Randy Dunlap <[email protected]>
Cc: Andrey Ryabinin <[email protected]>
Cc: Christoph Hellwig <[email protected]>
Cc: Jason Gunthorpe <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Linus Torvalds <[email protected]>
---
include/linux/mm_types.h | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
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. */
--
2.20.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 <[email protected]>
> Reviewed-by: John Hubbard <[email protected]>
> Cc: Matthew Wilcox <[email protected]>
> Cc: Vlastimil Babka <[email protected]>
> Cc: Christoph Lameter <[email protected]>
> Cc: Dave Hansen <[email protected]>
> Cc: Jérôme Glisse <[email protected]>
> Cc: "Kirill A . Shutemov" <[email protected]>
> Cc: Lai Jiangshan <[email protected]>
> Cc: Martin Schwidefsky <[email protected]>
> Cc: Pekka Enberg <[email protected]>
> Cc: Randy Dunlap <[email protected]>
> Cc: Andrey Ryabinin <[email protected]>
> Cc: Christoph Hellwig <[email protected]>
> Cc: Jason Gunthorpe <[email protected]>
> Cc: Andrew Morton <[email protected]>
> Cc: Linus Torvalds <[email protected]>
> 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
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.
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 <[email protected]>
>> Reviewed-by: John Hubbard <[email protected]>
>> Cc: Matthew Wilcox <[email protected]>
>> Cc: Vlastimil Babka <[email protected]>
>> Cc: Christoph Lameter <[email protected]>
>> Cc: Dave Hansen <[email protected]>
>> Cc: Jérôme Glisse <[email protected]>
>> Cc: "Kirill A . Shutemov" <[email protected]>
>> Cc: Lai Jiangshan <[email protected]>
>> Cc: Martin Schwidefsky <[email protected]>
>> Cc: Pekka Enberg <[email protected]>
>> Cc: Randy Dunlap <[email protected]>
>> Cc: Andrey Ryabinin <[email protected]>
>> Cc: Christoph Hellwig <[email protected]>
>> Cc: Jason Gunthorpe <[email protected]>
>> Cc: Andrew Morton <[email protected]>
>> Cc: Linus Torvalds <[email protected]>
>> 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.
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.