From: John Hubbard <jhubbard@nvidia.com>
To: Dan Williams <dan.j.williams@intel.com>, Jason Gunthorpe <jgg@ziepe.ca>
Cc: <john.hubbard@gmail.com>, Matthew Wilcox <willy@infradead.org>,
Michal Hocko <mhocko@kernel.org>,
Christopher Lameter <cl@linux.com>, Jan Kara <jack@suse.cz>,
Linux MM <linux-mm@kvack.org>,
LKML <linux-kernel@vger.kernel.org>,
linux-rdma <linux-rdma@vger.kernel.org>,
Christoph Hellwig <hch@lst.de>
Subject: Re: [PATCH 2/2] mm: set PG_dma_pinned on get_user_pages*()
Date: Sun, 17 Jun 2018 13:28:18 -0700 [thread overview]
Message-ID: <311eba48-60f1-b6cc-d001-5cc3ed4d76a9@nvidia.com> (raw)
In-Reply-To: <CAPcyv4gayKk_zHDYAvntware12qMXWjnnL_FDJNUQsJS_zNfDw@mail.gmail.com>
On 06/17/2018 01:10 PM, Dan Williams wrote:
> On Sun, Jun 17, 2018 at 1:04 PM, Jason Gunthorpe <jgg@ziepe.ca> wrote:
>> On Sun, Jun 17, 2018 at 12:53:04PM -0700, Dan Williams wrote:
>>>> diff --git a/mm/rmap.c b/mm/rmap.c
>>>> index 6db729dc4c50..37576f0a4645 100644
>>>> +++ b/mm/rmap.c
>>>> @@ -1360,6 +1360,8 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
>>>> flags & TTU_SPLIT_FREEZE, page);
>>>> }
>>>>
>>>> + if (PageDmaPinned(page))
>>>> + return false;
>>>> /*
>>>> * We have to assume the worse case ie pmd for invalidation. Note that
>>>> * the page can not be free in this function as call of try_to_unmap()
>>>
>>> We have a similiar problem with DAX and the conclusion we came to is
>>> that it is not acceptable for userspace to arbitrarily block kernel
>>> actions. The conclusion there was: 'wait' if the DMA is transient, and
>>> 'revoke' if the DMA is long lived, or otherwise 'block' long-lived DMA
>>> if a revocation mechanism is not available.
>>
>> This might be the right answer for certain things, but it shouldn't be
>> the immediate reaction to everthing. There are many user APIs that
>> block kernel actions and hold kernel resources.
>>
>> IMHO, there should be an identifiable objection, eg is blocking going
>> to create a DOS, dead-lock, insecurity, etc?
>
> I believe kernel behavior regression is a primary concern as now
> fallocate() and truncate() can randomly fail where they didn't before.
>
Yes. However, my thinking was: get_user_pages() can become a way to indicate that
these pages are going to be treated specially. In particular, the caller
does not really want or need to support certain file operations, while the
page is flagged this way.
If necessary, we could add a new API call. But either way, I think we could
reasonably document that "if you pin these pages (either via get_user_pages,
or some new, similar-looking API call), you can DMA to/from them, and safely
mark them as dirty when you're done, and the right things will happen.
And in the interim, you can expect that the follow file system API calls
will not behave predictably: fallocate, truncate, ..."
Maybe in the near future, we can remove that last qualification, if we
find a more comprehensive design for this (as opposed to this cheap fix
I'm proposing here).
next prev parent reply other threads:[~2018-06-17 20:28 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-17 1:25 [PATCH 0/2] mm: gup: don't unmap or drop filesystem buffers john.hubbard
2018-06-17 1:25 ` [PATCH 1/2] consolidate get_user_pages error handling john.hubbard
2018-06-17 1:25 ` [PATCH 2/2] mm: set PG_dma_pinned on get_user_pages*() john.hubbard
2018-06-17 19:53 ` Dan Williams
2018-06-17 20:04 ` Jason Gunthorpe
2018-06-17 20:10 ` Dan Williams
2018-06-17 20:28 ` John Hubbard [this message]
2018-06-18 8:12 ` Christoph Hellwig
2018-06-18 17:50 ` John Hubbard
2018-06-18 17:56 ` Dan Williams
2018-06-18 18:14 ` John Hubbard
2018-06-18 19:21 ` Dan Williams
2018-06-18 19:31 ` Jason Gunthorpe
2018-06-18 20:04 ` Dan Williams
2018-06-18 21:36 ` John Hubbard
2018-06-19 8:29 ` Jan Kara
2018-06-19 9:02 ` Matthew Wilcox
2018-06-19 10:41 ` Jan Kara
2018-06-19 18:11 ` John Hubbard
2018-06-20 1:24 ` Dan Williams
2018-06-20 1:34 ` John Hubbard
2018-06-20 1:57 ` Dan Williams
2018-06-20 2:03 ` John Hubbard
2018-06-20 12:08 ` Jan Kara
2018-06-20 22:55 ` John Hubbard
2018-06-21 16:30 ` Jan Kara
2018-06-25 15:21 ` Jan Kara
2018-06-25 19:03 ` John Hubbard
2018-06-26 7:52 ` Jan Kara
2018-06-26 6:31 ` John Hubbard
2018-06-26 11:48 ` Jan Kara
2018-06-26 13:47 ` Michal Hocko
2018-06-26 16:48 ` Jan Kara
2018-06-27 11:32 ` Michal Hocko
2018-06-27 11:53 ` Jan Kara
2018-06-27 11:59 ` Michal Hocko
2018-06-27 12:42 ` Jan Kara
2018-06-27 14:57 ` Jason Gunthorpe
2018-06-27 17:02 ` Jan Kara
2018-06-28 2:42 ` John Hubbard
2018-06-28 9:17 ` Jan Kara
2018-07-02 5:52 ` Leon Romanovsky
2018-07-02 6:10 ` John Hubbard
2018-07-02 6:34 ` Leon Romanovsky
2018-07-02 6:41 ` John Hubbard
2018-07-02 10:36 ` Michal Hocko
2018-07-02 7:02 ` Jan Kara
2018-07-02 14:48 ` Michal Hocko
2018-07-02 6:58 ` Jan Kara
2018-06-18 8:11 ` Christoph Hellwig
2018-06-19 6:15 ` Leon Romanovsky
2018-06-17 22:19 ` John Hubbard
2018-06-18 7:56 ` Christoph Hellwig
2018-06-18 17:44 ` John Hubbard
2018-06-17 21:54 ` [PATCH 0/2] mm: gup: don't unmap or drop filesystem buffers Christopher Lameter
2018-06-17 22:23 ` John Hubbard
2018-06-18 8:10 ` Christoph Hellwig
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=311eba48-60f1-b6cc-d001-5cc3ed4d76a9@nvidia.com \
--to=jhubbard@nvidia.com \
--cc=cl@linux.com \
--cc=dan.j.williams@intel.com \
--cc=hch@lst.de \
--cc=jack@suse.cz \
--cc=jgg@ziepe.ca \
--cc=john.hubbard@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-rdma@vger.kernel.org \
--cc=mhocko@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®