All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: Matthew Wilcox <willy@infradead.org>, linux-fsdevel@vger.kernel.org
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 04/36] mm: Introduce thp_size
Date: Fri, 15 May 2020 15:38:47 +0200	[thread overview]
Message-ID: <d48ec2d8-4335-5628-0189-1ad4b6799a9f@redhat.com> (raw)
In-Reply-To: <20200515131656.12890-5-willy@infradead.org>

On 15.05.20 15:16, Matthew Wilcox wrote:
> From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
> 
> This is like page_size(), but compiles down to just PAGE_SIZE if THP
> are disabled.  Convert the users of hpage_nr_pages() which would prefer
> this interface.
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
>  drivers/nvdimm/btt.c    | 4 +---
>  drivers/nvdimm/pmem.c   | 6 ++----
>  include/linux/huge_mm.h | 7 +++++++
>  mm/internal.h           | 2 +-
>  mm/page_io.c            | 2 +-
>  mm/page_vma_mapped.c    | 4 ++--
>  6 files changed, 14 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c
> index 3b09419218d6..78e8d972d45a 100644
> --- a/drivers/nvdimm/btt.c
> +++ b/drivers/nvdimm/btt.c
> @@ -1488,10 +1488,8 @@ static int btt_rw_page(struct block_device *bdev, sector_t sector,
>  {
>  	struct btt *btt = bdev->bd_disk->private_data;
>  	int rc;
> -	unsigned int len;
>  
> -	len = hpage_nr_pages(page) * PAGE_SIZE;
> -	rc = btt_do_bvec(btt, NULL, page, len, 0, op, sector);
> +	rc = btt_do_bvec(btt, NULL, page, thp_size(page), 0, op, sector);
>  	if (rc == 0)
>  		page_endio(page, op_is_write(op), 0);
>  
> diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
> index 2df6994acf83..d511504d07af 100644
> --- a/drivers/nvdimm/pmem.c
> +++ b/drivers/nvdimm/pmem.c
> @@ -235,11 +235,9 @@ static int pmem_rw_page(struct block_device *bdev, sector_t sector,
>  	blk_status_t rc;
>  
>  	if (op_is_write(op))
> -		rc = pmem_do_write(pmem, page, 0, sector,
> -				   hpage_nr_pages(page) * PAGE_SIZE);
> +		rc = pmem_do_write(pmem, page, 0, sector, thp_size(page));
>  	else
> -		rc = pmem_do_read(pmem, page, 0, sector,
> -				   hpage_nr_pages(page) * PAGE_SIZE);
> +		rc = pmem_do_read(pmem, page, 0, sector, thp_size(page));
>  	/*
>  	 * The ->rw_page interface is subtle and tricky.  The core
>  	 * retries on any error, so we can only invoke page_endio() in
> diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
> index 6bec4b5b61e1..e944f9757349 100644
> --- a/include/linux/huge_mm.h
> +++ b/include/linux/huge_mm.h
> @@ -271,6 +271,11 @@ static inline int hpage_nr_pages(struct page *page)
>  	return compound_nr(page);
>  }
>  
> +static inline unsigned long thp_size(struct page *page)
> +{
> +	return page_size(page);
> +}
> +
>  struct page *follow_devmap_pmd(struct vm_area_struct *vma, unsigned long addr,
>  		pmd_t *pmd, int flags, struct dev_pagemap **pgmap);
>  struct page *follow_devmap_pud(struct vm_area_struct *vma, unsigned long addr,
> @@ -329,6 +334,8 @@ static inline int hpage_nr_pages(struct page *page)
>  	return 1;
>  }
>  
> +#define thp_size(x)		PAGE_SIZE
> +
>  static inline bool __transparent_hugepage_enabled(struct vm_area_struct *vma)
>  {
>  	return false;
> diff --git a/mm/internal.h b/mm/internal.h
> index f762a34b0c57..5efb13d5c226 100644
> --- a/mm/internal.h
> +++ b/mm/internal.h
> @@ -386,7 +386,7 @@ vma_address(struct page *page, struct vm_area_struct *vma)
>  	unsigned long start, end;
>  
>  	start = __vma_address(page, vma);
> -	end = start + PAGE_SIZE * (hpage_nr_pages(page) - 1);
> +	end = start + thp_size(page) - PAGE_SIZE;
>  
>  	/* page should be within @vma mapping range */
>  	VM_BUG_ON_VMA(end < vma->vm_start || start >= vma->vm_end, vma);
> diff --git a/mm/page_io.c b/mm/page_io.c
> index 76965be1d40e..dd935129e3cb 100644
> --- a/mm/page_io.c
> +++ b/mm/page_io.c
> @@ -41,7 +41,7 @@ static struct bio *get_swap_bio(gfp_t gfp_flags,
>  		bio->bi_iter.bi_sector <<= PAGE_SHIFT - 9;
>  		bio->bi_end_io = end_io;
>  
> -		bio_add_page(bio, page, PAGE_SIZE * hpage_nr_pages(page), 0);
> +		bio_add_page(bio, page, thp_size(page), 0);
>  	}
>  	return bio;
>  }
> diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c
> index 719c35246cfa..e65629c056e8 100644
> --- a/mm/page_vma_mapped.c
> +++ b/mm/page_vma_mapped.c
> @@ -227,7 +227,7 @@ bool page_vma_mapped_walk(struct page_vma_mapped_walk *pvmw)
>  			if (pvmw->address >= pvmw->vma->vm_end ||
>  			    pvmw->address >=
>  					__vma_address(pvmw->page, pvmw->vma) +
> -					hpage_nr_pages(pvmw->page) * PAGE_SIZE)
> +					thp_size(pvmw->page))
>  				return not_found(pvmw);
>  			/* Did we cross page table boundary? */
>  			if (pvmw->address % PMD_SIZE == 0) {
> @@ -268,7 +268,7 @@ int page_mapped_in_vma(struct page *page, struct vm_area_struct *vma)
>  	unsigned long start, end;
>  
>  	start = __vma_address(page, vma);
> -	end = start + PAGE_SIZE * (hpage_nr_pages(page) - 1);
> +	end = start + thp_size(page) - PAGE_SIZE;
>  
>  	if (unlikely(end < vma->vm_start || start >= vma->vm_end))
>  		return 0;
> 

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 
Thanks,

David / dhildenb


  reply	other threads:[~2020-05-15 13:38 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-15 13:16 [PATCH v4 00/36] Large pages in the page cache Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 01/36] mm: Move PageDoubleMap bit Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 02/36] mm: Simplify PageDoubleMap with PF_SECOND policy Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 03/36] mm: Allow hpages to be arbitrary order Matthew Wilcox
2020-05-28 14:19   ` Zi Yan
2020-05-15 13:16 ` [PATCH v4 04/36] mm: Introduce thp_size Matthew Wilcox
2020-05-15 13:38   ` David Hildenbrand [this message]
2020-05-15 13:16 ` [PATCH v4 05/36] mm: Introduce thp_order Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 06/36] mm: Introduce offset_in_thp Matthew Wilcox
2020-05-15 13:39   ` David Hildenbrand
2020-05-22 17:15   ` Kirill A. Shutemov
2020-05-29 12:59     ` Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 07/36] fs: Add a filesystem flag for large pages Matthew Wilcox
2020-05-21 21:55   ` Dave Chinner
2020-05-21 23:29     ` Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 08/36] fs: Do not update nr_thps for large page mappings Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 09/36] fs: Introduce i_blocks_per_page Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 10/36] fs: Make page_mkwrite_check_truncate thp-aware Matthew Wilcox
2020-05-21 22:01   ` Dave Chinner
2020-05-21 23:30     ` Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 11/36] fs: Support THPs in zero_user_segments Matthew Wilcox
2020-05-25  4:55   ` Kirill A. Shutemov
2020-05-15 13:16 ` [PATCH v4 12/36] bio: Add bio_for_each_thp_segment_all Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 13/36] iomap: Support arbitrarily many blocks per page Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 14/36] iomap: Support large pages in iomap_adjust_read_range Matthew Wilcox
2020-05-21 22:24   ` Dave Chinner
2020-05-21 23:39     ` Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 15/36] iomap: Support large pages in read paths Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 16/36] iomap: Support large pages in write paths Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 17/36] iomap: Inline data shouldn't see large pages Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 18/36] iomap: Handle tail pages in iomap_page_mkwrite Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 19/36] xfs: Support large pages Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 20/36] mm: Make prep_transhuge_page return its argument Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 21/36] mm: Add __page_cache_alloc_order Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 22/36] mm: Allow large pages to be added to the page cache Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 23/36] mm: Allow large pages to be removed from " Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 24/36] mm: Remove page fault assumption of compound page size Matthew Wilcox
2020-05-25  4:59   ` Kirill A. Shutemov
2020-05-15 13:16 ` [PATCH v4 25/36] mm: Fix total_mapcount assumption of " Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 26/36] mm: Avoid splitting large pages Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 27/36] mm: Fix truncation for pages of arbitrary size Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 28/36] mm: Support storing shadow entries for large pages Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 29/36] mm: Support retrieving tail pages from the page cache Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 30/36] mm: Support tail pages in wait_for_stable_page Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 31/36] mm: Add DEFINE_READAHEAD Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 32/36] mm: Make page_cache_readahead_unbounded take a readahead_control Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 33/36] mm: Make __do_page_cache_readahead " Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 34/36] mm: Allow PageReadahead to be set on head pages Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 35/36] mm: Add large page readahead Matthew Wilcox
2020-05-15 13:16 ` [PATCH v4 36/36] mm: Align THP mappings for non-DAX Matthew Wilcox
2020-05-26 22:05   ` William Kucharski
2020-05-26 22:20     ` Matthew Wilcox
2020-05-21 22:49 ` [PATCH v4 00/36] Large pages in the page cache Dave Chinner
2020-05-22  0:04   ` Matthew Wilcox
2020-05-22  2:57     ` Dave Chinner
2020-05-22  3:05       ` Matthew Wilcox
2020-05-25 23:07         ` Dave Chinner
2020-05-26  1:21           ` Matthew Wilcox
2020-05-28 11:00 ` William Kucharski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d48ec2d8-4335-5628-0189-1ad4b6799a9f@redhat.com \
    --to=david@redhat.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.