From: Hans Verkuil <hverkuil@xs4all.nl>
To: David Hildenbrand <david@redhat.com>,
Tomasz Figa <tfiga@chromium.org>,
Marek Szyprowski <m.szyprowski@samsung.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
etnaviv@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
linux-arm-kernel@lists.infradead.org,
linux-samsung-soc@vger.kernel.org, linux-rdma@vger.kernel.org,
linux-media@vger.kernel.org, linux-kselftest@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>,
Jason Gunthorpe <jgg@ziepe.ca>,
John Hubbard <jhubbard@nvidia.com>, Peter Xu <peterx@redhat.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Andrea Arcangeli <aarcange@redhat.com>,
Hugh Dickins <hughd@google.com>, Nadav Amit <namit@vmware.com>,
Vlastimil Babka <vbabka@suse.cz>,
Matthew Wilcox <willy@infradead.org>,
Mike Kravetz <mike.kravetz@oracle.com>,
Muchun Song <songmuchun@bytedance.com>,
Lucas Stach <l.stach@pengutronix.de>,
David Airlie <airlied@gmail.com>,
Oded Gabbay <ogabbay@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Mauro Carvalho Chehab <mchehab@kernel.org>
Subject: Re: [PATCH RFC 16/19] mm/frame-vector: remove FOLL_FORCE usage
Date: Tue, 22 Nov 2022 15:07:33 +0100 [thread overview]
Message-ID: <4d3ef082-f7b3-2b6e-6fcf-5f991ffe14e9@xs4all.nl> (raw)
In-Reply-To: <6ace6cd4-3e13-8ec1-4c2a-49e2e14e81a6@redhat.com>
On 11/22/22 13:38, David Hildenbrand wrote:
> On 22.11.22 13:25, Hans Verkuil wrote:
>> Hi Tomasz, David,
>>
>> On 11/8/22 05:45, Tomasz Figa wrote:
>>> Hi David,
>>>
>>> On Tue, Nov 8, 2022 at 1:19 AM David Hildenbrand <david@redhat.com> wrote:
>>>>
>>>> FOLL_FORCE is really only for debugger access. According to commit
>>>> 707947247e95 ("media: videobuf2-vmalloc: get_userptr: buffers are always
>>>> writable"), the pinned pages are always writable.
>>>
>>> Actually that patch is only a workaround to temporarily disable
>>> support for read-only pages as they seemed to suffer from some
>>> corruption issues in the retrieved user pages. We expect to support
>>> read-only pages as hardware input after. That said, FOLL_FORCE doesn't
>>> sound like the right thing even in that case, but I don't know the
>>> background behind it being added here in the first place. +Hans
>>> Verkuil +Marek Szyprowski do you happen to remember anything about it?
>>
>> I tracked the use of 'force' all the way back to the first git commit
>> (2.6.12-rc1) in the very old video-buf.c. So it is very, very old and the
>> reason is lost in the mists of time.
>>
>> I'm not sure if the 'force' argument of get_user_pages() at that time
>> even meant the same as FOLL_FORCE today. From what I can tell it has just
>> been faithfully used ever since, but I have my doubt that anyone understands
>> the reason behind it since it was never explained.
>>
>> Looking at this old LWN article https://lwn.net/Articles/28548/ suggests
>> that it might be related to calling get_user_pages for write buffers
>> (non-zero write argument) where you also want to be able to read from the
>> buffer. That is certainly something that some drivers need to do post-capture
>> fixups.
>>
>> But 'force' was also always set for read buffers, and I don't know if that
>> was something that was actually needed, or just laziness.
>>
>> I assume that removing FOLL_FORCE from 'FOLL_FORCE|FOLL_WRITE' will still
>> allow drivers to read from the buffer?
>
> Yes. The only problematic corner case I can imagine is if someone has a
> VMA without write permissions (no PROT_WRITE/VM_WRITE) and wants to pin
> user space pages as a read buffer. We'd specify now FOLL_WRITE without
> FOLL_FORCE and GUP would reject that: write access without write
> permissions is invalid.
I do not believe this will be an issue.
>
> There would be no way around "fixing" this implementation to not specify
> FOLL_WRITE when only reading from user-space pages. Not sure what the
> implications are regarding that corruption that was mentioned in
> 707947247e95.
Before 707947247e95 the FOLL_WRITE flag was only set for write buffers
(i.e. video capture, DMA_FROM_DEVICE), not for read buffers (video output,
DMA_TO_DEVICE). In the video output case there should never be any need
for drivers to write to the buffer to the best of my knowledge.
But I have had some complaints about that commit that it causes problems
in some scenarios, and it has been on my todo list for quite some time now
to dig deeper into this. I probably should prioritize this for this or
next week.
>
> Having said that, I assume such a scenario is unlikely -- but you might
> know better how user space usually uses this interface. There would be
> three options:
>
> 1) Leave the FOLL_FORCE hack in for now, which I *really* want to avoid.
> 2) Remove FOLL_FORCE and see if anybody even notices (this patch) and
> leave the implementation as is for now.
> 3) Remove FOLL_FORCE and fixup the implementation to only specify
> FOLL_WRITE if the pages will actually get written to.
>
> 3) would most probably ideal, however, I am no expert on that code and
> can't do it (707947247e95 confuses me). So naive me would go with 2) first.
>
Option 3 would be best. And 707947247e95 confuses me as well, and I actually
wrote it :-) I am wondering whether it was addressed at the right level, but
as I said, I need to dig a bit deeper into this.
Regards,
Hans
next prev parent reply other threads:[~2022-11-22 14:07 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-07 16:17 [PATCH RFC 00/19] mm/gup: remove FOLL_FORCE usage from drivers (reliable R/O long-term pinning) David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 01/19] selftests/vm: anon_cow: prepare for non-anonymous COW tests David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 02/19] selftests/vm: cow: basic COW tests for non-anonymous pages David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 03/19] selftests/vm: cow: R/O long-term pinning reliability tests for non-anon pages David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 04/19] mm: add early FAULT_FLAG_UNSHARE consistency checks David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 05/19] mm: add early FAULT_FLAG_WRITE " David Hildenbrand
2022-11-07 19:03 ` Nadav Amit
2022-11-07 19:27 ` David Hildenbrand
2022-11-07 19:50 ` Nadav Amit
2022-11-07 16:17 ` [PATCH RFC 06/19] mm: rework handling in do_wp_page() based on private vs. shared mappings David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 07/19] mm: don't call vm_ops->huge_fault() in wp_huge_pmd()/wp_huge_pud() for private mappings David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 08/19] mm: extend FAULT_FLAG_UNSHARE support to anything in a COW mapping David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 09/19] mm/gup: reliable R/O long-term pinning in COW mappings David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 10/19] RDMA/umem: remove FOLL_FORCE usage David Hildenbrand
2022-11-14 8:30 ` Leon Romanovsky
2022-11-07 16:17 ` [PATCH RFC 11/19] RDMA/usnic: " David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 12/19] RDMA/siw: " David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 13/19] media: videobuf-dma-sg: " David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 14/19] drm/etnaviv: " David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 15/19] media: pci/ivtv: " David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 16/19] mm/frame-vector: " David Hildenbrand
2022-11-08 4:45 ` Tomasz Figa
2022-11-08 9:40 ` David Hildenbrand
2022-11-22 12:25 ` Hans Verkuil
2022-11-22 12:38 ` David Hildenbrand
2022-11-22 14:07 ` Hans Verkuil [this message]
2022-11-22 15:03 ` David Hildenbrand
2022-11-22 17:33 ` Linus Torvalds
2022-11-07 16:17 ` [PATCH RFC 17/19] drm/exynos: " David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 18/19] RDMA/hw/qib/qib_user_pages: " David Hildenbrand
2022-11-07 16:17 ` [PATCH RFC 19/19] habanalabs: " David Hildenbrand
2022-11-07 21:25 ` Oded Gabbay
2022-11-07 17:27 ` [PATCH RFC 00/19] mm/gup: remove FOLL_FORCE usage from drivers (reliable R/O long-term pinning) Linus Torvalds
2022-11-08 9:29 ` David Hildenbrand
2022-11-14 6:03 ` Christoph Hellwig
2022-11-14 8:07 ` David Hildenbrand
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=4d3ef082-f7b3-2b6e-6fcf-5f991ffe14e9@xs4all.nl \
--to=hverkuil@xs4all.nl \
--cc=aarcange@redhat.com \
--cc=airlied@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=david@redhat.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=etnaviv@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=hughd@google.com \
--cc=jgg@ziepe.ca \
--cc=jhubbard@nvidia.com \
--cc=l.stach@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-rdma@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=mchehab@kernel.org \
--cc=mike.kravetz@oracle.com \
--cc=namit@vmware.com \
--cc=ogabbay@kernel.org \
--cc=peterx@redhat.com \
--cc=songmuchun@bytedance.com \
--cc=tfiga@chromium.org \
--cc=torvalds@linux-foundation.org \
--cc=vbabka@suse.cz \
--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