From: Al Viro <viro@ZenIV.linux.org.uk>
To: Dan Williams <dan.j.williams@intel.com>
Cc: linux-kernel@vger.kernel.org, Boaz Harrosh <boaz@plexistor.com>,
Jan Kara <jack@suse.cz>, Mike Snitzer <snitzer@redhat.com>,
Neil Brown <neilb@suse.de>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
Heiko Carstens <heiko.carstens@de.ibm.com>,
Chris Mason <clm@fb.com>, Paul Mackerras <paulus@samba.org>,
"H. Peter Anvin" <hpa@zytor.com>,
hch@lst.de, Alasdair Kergon <agk@redhat.com>,
linux-nvdimm@ml01.01.org, mingo@kernel.org, mgorman@suse.de,
Matthew Wilcox <willy@linux.intel.com>,
Ross Zwisler <ross.zwisler@linux.intel.com>,
riel@redhat.com, Martin Schwidefsky <schwidefsky@de.ibm.com>,
axboe@kernel.dk, Theodore Ts'o <tytso@mit.edu>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
Julia Lawall <Julia.Lawall@lip6.fr>, Tejun Heo <tj@kernel.org>,
linux-fsdevel@vger.kernel.org, akpm@linux-foundation.org,
Linus Torvalds <to
Subject: Re: [PATCH v2 00/10] evacuate struct page from the block layer, introduce __pfn_t
Date: Wed, 6 May 2015 21:50:33 +0100 [thread overview]
Message-ID: <20150506205033.GA889@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20150506200219.40425.74411.stgit@dwillia2-desk3.amr.corp.intel.com>
On Wed, May 06, 2015 at 04:04:53PM -0400, Dan Williams wrote:
> Changes since v1 [1]:
>
> 1/ added include/asm-generic/pfn.h for the __pfn_t definition and helpers.
>
> 2/ added kmap_atomic_pfn_t()
>
> 3/ rebased on v4.1-rc2
>
> [1]: http://marc.info/?l=linux-kernel&m=142653770511970&w=2
>
> ---
>
> A lead in note, this looks scarier than it is. Most of the code thrash
> is automated via Coccinelle. Also the subtle differences behind an
> 'unsigned long pfn' and a '__pfn_t' are mitigated by type-safety and a
> Kconfig option (default disabled CONFIG_PMEM_IO) that globally controls
> whether a pfn and a __pfn_t are equivalent.
>
> The motivation for this change is persistent memory and the desire to
> use it not only via the pmem driver, but also as a memory target for I/O
> (DAX, O_DIRECT, DMA, RDMA, etc) in other parts of the kernel. Aside
> from the pmem driver and DAX, persistent memory is not able to be used
> in these I/O scenarios due to the lack of a backing struct page, i.e.
> persistent memory is not part of the memmap. This patchset takes the
> position that the solution is to teach I/O paths that want to operate on
> persistent memory to do so by referencing a __pfn_t. The alternatives
> are discussed in the changelog for "[PATCH v2 01/10] arch: introduce
> __pfn_t for persistent memory i/o", copied here:
>
> Alternatives:
>
> 1/ Provide struct page coverage for persistent memory in
> DRAM. The expectation is that persistent memory capacities make
> this untenable in the long term.
>
> 2/ Provide struct page coverage for persistent memory with
> persistent memory. While persistent memory may have near DRAM
> performance characteristics it may not have the same
> write-endurance of DRAM. Given the update frequency of struct
> page objects it may not be suitable for persistent memory.
>
> 3/ Dynamically allocate struct page. This appears to be on
> the order of the complexity of converting code paths to use
> __pfn_t references instead of struct page, and the amount of
> setup required to establish a valid struct page reference is
> mostly wasted when the only usage in the block stack is to
> perform a page_to_pfn() conversion for dma-mapping. Instances
> of kmap() / kmap_atomic() usage appear to be the only occasions
> in the block stack where struct page is non-trivially used. A
> new kmap_atomic_pfn_t() is proposed to handle those cases.
*grumble*
What are you going to do with things like iov_iter_get_pages()? Long-term,
that is, after you go for "this pfn has no struct page for it"...
WARNING: multiple messages have this Message-ID (diff)
From: Al Viro <viro@ZenIV.linux.org.uk>
To: Dan Williams <dan.j.williams@intel.com>
Cc: linux-kernel@vger.kernel.org, Boaz Harrosh <boaz@plexistor.com>,
Jan Kara <jack@suse.cz>, Mike Snitzer <snitzer@redhat.com>,
Neil Brown <neilb@suse.de>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
Heiko Carstens <heiko.carstens@de.ibm.com>,
Chris Mason <clm@fb.com>, Paul Mackerras <paulus@samba.org>,
"H. Peter Anvin" <hpa@zytor.com>,
hch@lst.de, Alasdair Kergon <agk@redhat.com>,
linux-nvdimm@ml01.01.org, mingo@kernel.org, mgorman@suse.de,
Matthew Wilcox <willy@linux.intel.com>,
Ross Zwisler <ross.zwisler@linux.intel.com>,
riel@redhat.com, Martin Schwidefsky <schwidefsky@de.ibm.com>,
axboe@kernel.dk, "Theodore Ts'o" <tytso@mit.edu>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
Julia Lawall <Julia.Lawall@lip6.fr>, Tejun Heo <tj@kernel.org>,
linux-fsdevel@vger.kernel.org, akpm@linux-foundation.org,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH v2 00/10] evacuate struct page from the block layer, introduce __pfn_t
Date: Wed, 6 May 2015 21:50:33 +0100 [thread overview]
Message-ID: <20150506205033.GA889@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20150506200219.40425.74411.stgit@dwillia2-desk3.amr.corp.intel.com>
On Wed, May 06, 2015 at 04:04:53PM -0400, Dan Williams wrote:
> Changes since v1 [1]:
>
> 1/ added include/asm-generic/pfn.h for the __pfn_t definition and helpers.
>
> 2/ added kmap_atomic_pfn_t()
>
> 3/ rebased on v4.1-rc2
>
> [1]: http://marc.info/?l=linux-kernel&m=142653770511970&w=2
>
> ---
>
> A lead in note, this looks scarier than it is. Most of the code thrash
> is automated via Coccinelle. Also the subtle differences behind an
> 'unsigned long pfn' and a '__pfn_t' are mitigated by type-safety and a
> Kconfig option (default disabled CONFIG_PMEM_IO) that globally controls
> whether a pfn and a __pfn_t are equivalent.
>
> The motivation for this change is persistent memory and the desire to
> use it not only via the pmem driver, but also as a memory target for I/O
> (DAX, O_DIRECT, DMA, RDMA, etc) in other parts of the kernel. Aside
> from the pmem driver and DAX, persistent memory is not able to be used
> in these I/O scenarios due to the lack of a backing struct page, i.e.
> persistent memory is not part of the memmap. This patchset takes the
> position that the solution is to teach I/O paths that want to operate on
> persistent memory to do so by referencing a __pfn_t. The alternatives
> are discussed in the changelog for "[PATCH v2 01/10] arch: introduce
> __pfn_t for persistent memory i/o", copied here:
>
> Alternatives:
>
> 1/ Provide struct page coverage for persistent memory in
> DRAM. The expectation is that persistent memory capacities make
> this untenable in the long term.
>
> 2/ Provide struct page coverage for persistent memory with
> persistent memory. While persistent memory may have near DRAM
> performance characteristics it may not have the same
> write-endurance of DRAM. Given the update frequency of struct
> page objects it may not be suitable for persistent memory.
>
> 3/ Dynamically allocate struct page. This appears to be on
> the order of the complexity of converting code paths to use
> __pfn_t references instead of struct page, and the amount of
> setup required to establish a valid struct page reference is
> mostly wasted when the only usage in the block stack is to
> perform a page_to_pfn() conversion for dma-mapping. Instances
> of kmap() / kmap_atomic() usage appear to be the only occasions
> in the block stack where struct page is non-trivially used. A
> new kmap_atomic_pfn_t() is proposed to handle those cases.
*grumble*
What are you going to do with things like iov_iter_get_pages()? Long-term,
that is, after you go for "this pfn has no struct page for it"...
next prev parent reply other threads:[~2015-05-06 20:50 UTC|newest]
Thread overview: 180+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-06 20:04 [PATCH v2 00/10] evacuate struct page from the block layer, introduce __pfn_t Dan Williams
2015-05-06 20:04 ` Dan Williams
2015-05-06 20:04 ` [PATCH v2 01/10] arch: introduce __pfn_t for persistent memory i/o Dan Williams
2015-05-06 20:04 ` Dan Williams
2015-05-07 14:55 ` Stephen Rothwell
2015-05-07 14:55 ` Stephen Rothwell
2015-05-08 0:21 ` Dan Williams
2015-05-08 0:21 ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 02/10] block: add helpers for accessing a bio_vec page Dan Williams
2015-05-06 20:05 ` Dan Williams
2015-05-08 15:59 ` Dan Williams
2015-05-08 15:59 ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 03/10] block: convert .bv_page to .bv_pfn bio_vec Dan Williams
2015-05-06 20:05 ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 04/10] dma-mapping: allow archs to optionally specify a ->map_pfn() operation Dan Williams
2015-05-06 20:05 ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 05/10] scatterlist: use sg_phys() Dan Williams
2015-05-06 20:05 ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 06/10] scatterlist: support "page-less" (__pfn_t only) entries Dan Williams
2015-05-06 20:05 ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 07/10] x86: support dma_map_pfn() Dan Williams
2015-05-06 20:05 ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 08/10] x86: support kmap_atomic_pfn_t() for persistent memory Dan Williams
2015-05-06 20:05 ` Dan Williams
2015-05-06 20:20 ` [Linux-nvdimm] " Dan Williams
2015-05-06 20:20 ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 09/10] dax: convert to __pfn_t Dan Williams
2015-05-06 20:05 ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 10/10] block: base support for pfn i/o Dan Williams
2015-05-06 20:05 ` Dan Williams
2015-05-06 20:50 ` Al Viro [this message]
2015-05-06 20:50 ` [PATCH v2 00/10] evacuate struct page from the block layer, introduce __pfn_t Al Viro
2015-05-06 22:10 ` Linus Torvalds
2015-05-06 22:10 ` Linus Torvalds
2015-05-06 22:10 ` Linus Torvalds
2015-05-06 23:47 ` Dan Williams
2015-05-06 23:47 ` Dan Williams
2015-05-06 23:47 ` Dan Williams
2015-05-07 0:19 ` Linus Torvalds
2015-05-07 0:19 ` Linus Torvalds
2015-05-07 0:19 ` Linus Torvalds
2015-05-07 2:36 ` Dan Williams
2015-05-07 2:36 ` Dan Williams
2015-05-07 2:36 ` Dan Williams
2015-05-07 9:02 ` Ingo Molnar
2015-05-07 9:02 ` Ingo Molnar
2015-05-07 9:02 ` Ingo Molnar
2015-05-07 14:42 ` Ingo Molnar
2015-05-07 14:42 ` Ingo Molnar
2015-05-07 14:42 ` Ingo Molnar
2015-05-07 15:52 ` Dan Williams
2015-05-07 15:52 ` Dan Williams
2015-05-07 15:52 ` Dan Williams
2015-05-07 17:52 ` Ingo Molnar
2015-05-07 17:52 ` Ingo Molnar
2015-05-07 17:52 ` Ingo Molnar
2015-05-07 15:00 ` Linus Torvalds
2015-05-07 15:00 ` Linus Torvalds
2015-05-07 15:00 ` Linus Torvalds
2015-05-07 15:40 ` Dan Williams
2015-05-07 15:40 ` Dan Williams
2015-05-07 15:40 ` Dan Williams
2015-05-07 15:58 ` Linus Torvalds
2015-05-07 15:58 ` Linus Torvalds
2015-05-07 15:58 ` Linus Torvalds
2015-05-07 16:03 ` Dan Williams
2015-05-07 16:03 ` Dan Williams
2015-05-07 16:03 ` Dan Williams
2015-05-07 17:36 ` Ingo Molnar
2015-05-07 17:36 ` Ingo Molnar
2015-05-07 17:36 ` Ingo Molnar
2015-05-07 17:42 ` Dan Williams
2015-05-07 17:42 ` Dan Williams
2015-05-07 17:42 ` Dan Williams
2015-05-07 17:56 ` Dave Hansen
2015-05-07 17:56 ` Dave Hansen
2015-05-07 17:56 ` Dave Hansen
2015-05-07 19:11 ` Ingo Molnar
2015-05-07 19:11 ` Ingo Molnar
2015-05-07 19:11 ` Ingo Molnar
2015-05-07 19:36 ` Jerome Glisse
2015-05-07 19:36 ` Jerome Glisse
2015-05-07 19:36 ` Jerome Glisse
2015-05-07 19:48 ` Ingo Molnar
2015-05-07 19:48 ` Ingo Molnar
2015-05-07 19:48 ` Ingo Molnar
2015-05-07 19:53 ` Ingo Molnar
2015-05-07 19:53 ` Ingo Molnar
2015-05-07 19:53 ` Ingo Molnar
2015-05-07 20:18 ` Jerome Glisse
2015-05-07 20:18 ` Jerome Glisse
2015-05-07 20:18 ` Jerome Glisse
2015-05-08 5:37 ` Ingo Molnar
2015-05-08 5:37 ` Ingo Molnar
2015-05-08 5:37 ` Ingo Molnar
2015-05-08 9:20 ` Al Viro
2015-05-08 9:20 ` Al Viro
2015-05-08 9:26 ` Ingo Molnar
2015-05-08 9:26 ` Ingo Molnar
2015-05-08 10:00 ` Al Viro
2015-05-08 10:00 ` Al Viro
2015-05-08 13:45 ` Rik van Riel
2015-05-08 13:45 ` Rik van Riel
2015-05-08 14:05 ` Ingo Molnar
2015-05-08 14:05 ` Ingo Molnar
2015-05-08 14:40 ` John Stoffel
2015-05-08 14:40 ` John Stoffel
2015-05-08 15:54 ` Linus Torvalds
2015-05-08 15:54 ` Linus Torvalds
2015-05-08 16:28 ` Al Viro
2015-05-08 16:28 ` Al Viro
2015-05-08 16:59 ` Rik van Riel
2015-05-08 16:59 ` Rik van Riel
2015-05-09 1:14 ` Linus Torvalds
2015-05-09 1:14 ` Linus Torvalds
2015-05-09 3:02 ` Rik van Riel
2015-05-09 3:02 ` Rik van Riel
2015-05-09 3:52 ` Linus Torvalds
2015-05-09 3:52 ` Linus Torvalds
2015-05-09 21:56 ` Dave Chinner
2015-05-09 21:56 ` Dave Chinner
2015-05-09 8:45 ` "Directly mapped persistent memory page cache" Ingo Molnar
2015-05-09 8:45 ` Ingo Molnar
2015-05-09 15:51 ` Eric W. Biederman
2015-05-09 15:51 ` Eric W. Biederman
2015-05-10 10:07 ` Ingo Molnar
2015-05-10 10:07 ` Ingo Molnar
2015-05-09 18:24 ` Dan Williams
2015-05-09 18:24 ` Dan Williams
2015-05-10 9:46 ` Ingo Molnar
2015-05-10 9:46 ` Ingo Molnar
2015-05-10 17:29 ` Dan Williams
2015-05-10 17:29 ` Dan Williams
2015-05-11 8:25 ` Dave Chinner
2015-05-11 8:25 ` Dave Chinner
2015-05-11 9:18 ` Ingo Molnar
2015-05-11 9:18 ` Ingo Molnar
2015-05-11 10:12 ` Zuckerman, Boris
2015-05-11 10:12 ` Zuckerman, Boris
2015-05-11 10:38 ` Ingo Molnar
2015-05-11 10:38 ` Ingo Molnar
2015-05-11 14:51 ` Jeff Moyer
2015-05-11 14:51 ` Jeff Moyer
2015-05-12 0:53 ` Dave Chinner
2015-05-12 0:53 ` Dave Chinner
2015-05-12 14:47 ` Jerome Glisse
2015-05-12 14:47 ` Jerome Glisse
2015-05-12 14:47 ` Jerome Glisse
2015-06-05 5:43 ` Dan Williams
2015-06-05 5:43 ` Dan Williams
2015-05-11 14:31 ` Matthew Wilcox
2015-05-11 14:31 ` Matthew Wilcox
2015-05-11 20:01 ` Jerome Glisse
2015-05-11 20:01 ` Jerome Glisse
2015-05-11 20:01 ` Jerome Glisse
2015-05-08 20:40 ` [PATCH v2 00/10] evacuate struct page from the block layer, introduce __pfn_t John Stoffel
2015-05-08 20:40 ` John Stoffel
2015-05-08 14:54 ` Rik van Riel
2015-05-08 14:54 ` Rik van Riel
2015-05-07 17:43 ` Linus Torvalds
2015-05-07 17:43 ` Linus Torvalds
2015-05-07 17:43 ` Linus Torvalds
2015-05-07 20:06 ` Dan Williams
2015-05-07 20:06 ` Dan Williams
2015-05-07 20:06 ` Dan Williams
2015-05-07 16:18 ` Christoph Hellwig
2015-05-07 16:18 ` Christoph Hellwig
2015-05-07 16:18 ` Christoph Hellwig
2015-05-07 16:41 ` Dan Williams
2015-05-07 16:41 ` Dan Williams
2015-05-07 16:41 ` Dan Williams
2015-05-07 18:40 ` Ingo Molnar
2015-05-07 18:40 ` Ingo Molnar
2015-05-07 18:40 ` Ingo Molnar
2015-05-07 19:44 ` Dan Williams
2015-05-07 19:44 ` Dan Williams
2015-05-07 19:44 ` Dan Williams
2015-05-07 17:30 ` Jerome Glisse
2015-05-07 17:30 ` Jerome Glisse
2015-05-07 17:30 ` Jerome Glisse
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=20150506205033.GA889@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=Julia.Lawall@lip6.fr \
--cc=agk@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=axboe@kernel.dk \
--cc=benh@kernel.crashing.org \
--cc=boaz@plexistor.com \
--cc=clm@fb.com \
--cc=dan.j.williams@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=hch@lst.de \
--cc=heiko.carstens@de.ibm.com \
--cc=hpa@zytor.com \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvdimm@ml01.01.org \
--cc=martin.petersen@oracle.com \
--cc=mgorman@suse.de \
--cc=mingo@kernel.org \
--cc=neilb@suse.de \
--cc=paulus@samba.org \
--cc=riel@redhat.com \
--cc=ross.zwisler@linux.intel.com \
--cc=schwidefsky@de.ibm.com \
--cc=snitzer@redhat.com \
--cc=tj@kernel.org \
--cc=tytso@mit.edu \
--cc=willy@linux.intel.com \
/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.