[PATCH v7 11/11] device-dax: compound devmap support

2021-12-02 Thread Joao Martins
Use the newly added compound devmap facility which maps the assigned dax ranges as compound pages at a page size of @align. dax devices are created with a fixed @align (huge page size) which is enforced through as well at mmap() of the device. Faults, consequently happen too at the specified @alig

[PATCH v7 10/11] device-dax: remove pfn from __dev_dax_{pte,pmd,pud}_fault()

2021-12-02 Thread Joao Martins
After moving the page mapping to be set prior to pte insertion, the pfn in dev_dax_huge_fault() no longer is necessary. Remove it, as well as the @pfn argument passed to the internal fault handler helpers. Suggested-by: Christoph Hellwig Signed-off-by: Joao Martins --- drivers/dax/device.c | 3

[PATCH v7 09/11] device-dax: set mapping prior to vmf_insert_pfn{,_pmd,pud}()

2021-12-02 Thread Joao Martins
Normally, the @page mapping is set prior to inserting the page into a page table entry. Make device-dax adhere to the same ordering, rather than setting mapping after the PTE is inserted. The address_space never changes and it is always associated with the same inode and underlying pages. So, the

[PATCH v7 08/11] device-dax: factor out page mapping initialization

2021-12-02 Thread Joao Martins
Move initialization of page->mapping into a separate helper. This is in preparation to move the mapping set to be prior to inserting the page table entry and also for tidying up compound page handling into one helper. Signed-off-by: Joao Martins --- drivers/dax/device.c | 45 +++

[PATCH v7 07/11] device-dax: ensure dev_dax->pgmap is valid for dynamic devices

2021-12-02 Thread Joao Martins
Right now, only static dax regions have a valid @pgmap pointer in its struct dev_dax. Dynamic dax case however, do not. In preparation for device-dax compound devmap support, make sure that dev_dax pgmap field is set after it has been allocated and initialized. dynamic dax device have the @pgmap

[PATCH v7 05/11] device-dax: use ALIGN() for determining pgoff

2021-12-02 Thread Joao Martins
Rather than calculating @pgoff manually, switch to ALIGN() instead. Suggested-by: Dan Williams Signed-off-by: Joao Martins Reviewed-by: Dan Williams --- drivers/dax/device.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/dax/device.c b/drivers/dax/device.c inde

[PATCH v7 03/11] mm/page_alloc: refactor memmap_init_zone_device() page init

2021-12-02 Thread Joao Martins
Move struct page init to an helper function __init_zone_device_page(). This is in preparation for sharing the storage for compound page metadata. Signed-off-by: Joao Martins Reviewed-by: Dan Williams --- mm/page_alloc.c | 74 +++-- 1 file changed, 41

[PATCH v7 06/11] device-dax: use struct_size()

2021-12-02 Thread Joao Martins
Use the struct_size() helper for the size of a struct with variable array member at the end, rather than manually calculating it. Suggested-by: Dan Williams Signed-off-by: Joao Martins --- drivers/dax/device.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/dax/

[PATCH v7 00/11] mm, device-dax: Introduce compound pages in devmap

2021-12-02 Thread Joao Martins
Changes since v6[10]: * Patch 4, Wrap commit message to 73 characters max (Christoph Hellwig) * Patch 4, Move pfn_next() in for_each_device_pfn() to new line (Christoph Hellwig) * Patch 4, Move pfn range computation to a pfn_len() helper. (Christoph Hellwig) * Patch 9, Remove @fault_size as it'

[PATCH v7 01/11] memory-failure: fetch compound_head after pgmap_pfn_valid()

2021-12-02 Thread Joao Martins
memory_failure_dev_pagemap() at the moment assumes base pages (e.g. dax_lock_page()). For devmap with compound pages fetch the compound_head in case a tail page memory failure is being handled. Currently this is a nop, but in the advent of compound pages in dev_pagemap it allows memory_failure_de

[PATCH v7 02/11] mm/page_alloc: split prep_compound_page into head and tail subparts

2021-12-02 Thread Joao Martins
Split the utility function prep_compound_page() into head and tail counterparts, and use them accordingly. This is in preparation for sharing the storage for compound page metadata. Signed-off-by: Joao Martins Acked-by: Mike Kravetz Reviewed-by: Dan Williams Reviewed-by: Muchun Song --- mm/p

[PATCH v7 04/11] mm/memremap: add ZONE_DEVICE support for compound pages

2021-12-02 Thread Joao Martins
Add a new @vmemmap_shift property for struct dev_pagemap which specifies that a devmap is composed of a set of compound pages of order @vmemmap_shift, instead of base pages. When a compound page devmap is requested, all but the first page are initialised as tail pages instead of order-0 pages. For