From: John Hubbard <jhubbard@nvidia.com> To: Andrew Morton <akpm@linux-foundation.org> Cc: "Michal Hocko" <mhocko@suse.com>, "Jan Kara" <jack@suse.cz>, kvm@vger.kernel.org, linux-doc@vger.kernel.org, "David Airlie" <airlied@linux.ie>, "Dave Chinner" <david@fromorbit.com>, dri-devel@lists.freedesktop.org, LKML <linux-kernel@vger.kernel.org>, linux-mm@kvack.org, "Paul Mackerras" <paulus@samba.org>, linux-kselftest@vger.kernel.org, "Ira Weiny" <ira.weiny@intel.com>, "Jonathan Corbet" <corbet@lwn.net>, linux-rdma@vger.kernel.org, "Michael Ellerman" <mpe@ellerman.id.au>, "Christoph Hellwig" <hch@infradead.org>, "Jason Gunthorpe" <jgg@ziepe.ca>, "Vlastimil Babka" <vbabka@suse.cz>, "Björn Töpel" <bjorn.topel@intel.com>, linux-media@vger.kernel.org, "Shuah Khan" <shuah@kernel.org>, "John Hubbard" <jhubbard@nvidia.com>, linux-block@vger.kernel.org, "Hans Verkuil" <hverkuil-cisco@xs4all.nl>, "Jérôme Glisse" <jglisse@redhat.com>, "Al Viro" <viro@zeniv.linu> Subject: [PATCH v5 08/24] media/v4l2-core: set pages dirty upon releasing DMA buffers Date: Thu, 14 Nov 2019 21:53:24 -0800 [thread overview] Message-ID: <20191115055340.1825745-9-jhubbard@nvidia.com> (raw) In-Reply-To: <20191115055340.1825745-1-jhubbard@nvidia.com> After DMA is complete, and the device and CPU caches are synchronized, it's still required to mark the CPU pages as dirty, if the data was coming from the device. However, this driver was just issuing a bare put_page() call, without any set_page_dirty*() call. Fix the problem, by calling set_page_dirty_lock() if the CPU pages were potentially receiving data from the device. Acked-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Cc: Mauro Carvalho Chehab <mchehab@kernel.org> Signed-off-by: John Hubbard <jhubbard@nvidia.com> --- drivers/media/v4l2-core/videobuf-dma-sg.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/media/v4l2-core/videobuf-dma-sg.c b/drivers/media/v4l2-core/videobuf-dma-sg.c index 66a6c6c236a7..28262190c3ab 100644 --- a/drivers/media/v4l2-core/videobuf-dma-sg.c +++ b/drivers/media/v4l2-core/videobuf-dma-sg.c @@ -349,8 +349,11 @@ int videobuf_dma_free(struct videobuf_dmabuf *dma) BUG_ON(dma->sglen); if (dma->pages) { - for (i = 0; i < dma->nr_pages; i++) + for (i = 0; i < dma->nr_pages; i++) { + if (dma->direction == DMA_FROM_DEVICE) + set_page_dirty_lock(dma->pages[i]); put_page(dma->pages[i]); + } kfree(dma->pages); dma->pages = NULL; } -- 2.24.0 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: John Hubbard <jhubbard@nvidia.com> To: Andrew Morton <akpm@linux-foundation.org> Cc: "Michal Hocko" <mhocko@suse.com>, "Jan Kara" <jack@suse.cz>, kvm@vger.kernel.org, linux-doc@vger.kernel.org, "David Airlie" <airlied@linux.ie>, "Dave Chinner" <david@fromorbit.com>, dri-devel@lists.freedesktop.org, LKML <linux-kernel@vger.kernel.org>, linux-mm@kvack.org, "Paul Mackerras" <paulus@samba.org>, linux-kselftest@vger.kernel.org, "Ira Weiny" <ira.weiny@intel.com>, "Jonathan Corbet" <corbet@lwn.net>, linux-rdma@vger.kernel.org, "Michael Ellerman" <mpe@ellerman.id.au>, "Christoph Hellwig" <hch@infradead.org>, "Jason Gunthorpe" <jgg@ziepe.ca>, "Vlastimil Babka" <vbabka@suse.cz>, "Björn Töpel" <bjorn.topel@intel.com>, linux-media@vger.kernel.org, "Shuah Khan" <shuah@kernel.org>, "John Hubbard" <jhubbard@nvidia.com>, linux-block@vger.kernel.org, "Hans Verkuil" <hverkuil-cisco@xs4all.nl>, "Jérôme Glisse" <jglisse@redhat.com>, "Al Viro" <viro@zeniv.linux.org.uk>, "Dan Williams" <dan.j.williams@intel.com>, "Mauro Carvalho Chehab" <mchehab@kernel.org>, "Magnus Karlsson" <magnus.karlsson@intel.com>, "Jens Axboe" <axboe@kernel.dk>, netdev@vger.kernel.org, "Alex Williamson" <alex.williamson@redhat.com>, linux-fsdevel@vger.kernel.org, bpf@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, "David S . Miller" <davem@davemloft.net>, "Mike Kravetz" <mike.kravetz@oracle.com> Subject: [PATCH v5 08/24] media/v4l2-core: set pages dirty upon releasing DMA buffers Date: Thu, 14 Nov 2019 21:53:24 -0800 [thread overview] Message-ID: <20191115055340.1825745-9-jhubbard@nvidia.com> (raw) Message-ID: <20191115055324.iZNWeeiWMuy0df5Lv_wt4o1sZro6hh4d0eIkkKXMw-Q@z> (raw) In-Reply-To: <20191115055340.1825745-1-jhubbard@nvidia.com> After DMA is complete, and the device and CPU caches are synchronized, it's still required to mark the CPU pages as dirty, if the data was coming from the device. However, this driver was just issuing a bare put_page() call, without any set_page_dirty*() call. Fix the problem, by calling set_page_dirty_lock() if the CPU pages were potentially receiving data from the device. Acked-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Cc: Mauro Carvalho Chehab <mchehab@kernel.org> Signed-off-by: John Hubbard <jhubbard@nvidia.com> --- drivers/media/v4l2-core/videobuf-dma-sg.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/media/v4l2-core/videobuf-dma-sg.c b/drivers/media/v4l2-core/videobuf-dma-sg.c index 66a6c6c236a7..28262190c3ab 100644 --- a/drivers/media/v4l2-core/videobuf-dma-sg.c +++ b/drivers/media/v4l2-core/videobuf-dma-sg.c @@ -349,8 +349,11 @@ int videobuf_dma_free(struct videobuf_dmabuf *dma) BUG_ON(dma->sglen); if (dma->pages) { - for (i = 0; i < dma->nr_pages; i++) + for (i = 0; i < dma->nr_pages; i++) { + if (dma->direction == DMA_FROM_DEVICE) + set_page_dirty_lock(dma->pages[i]); put_page(dma->pages[i]); + } kfree(dma->pages); dma->pages = NULL; } -- 2.24.0 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2019-11-15 5:53 UTC|newest] Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-11-15 5:53 [PATCH v5 00/24] mm/gup: track dma-pinned pages: FOLL_PIN John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 01/24] mm/gup: pass flags arg to __gup_device_* functions John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 02/24] mm/gup: factor out duplicate code from four routines John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-18 9:46 ` Jan Kara 2019-11-18 9:46 ` Jan Kara 2019-11-19 7:00 ` John Hubbard 2019-11-19 7:00 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 03/24] mm/gup: move try_get_compound_head() to top, fix minor issues John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 04/24] mm: Cleanup __put_devmap_managed_page() vs ->page_free() John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 05/24] mm: devmap: refactor 1-based refcounting for ZONE_DEVICE pages John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 06/24] goldish_pipe: rename local pin_user_pages() routine John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-18 9:47 ` Jan Kara 2019-11-18 9:47 ` Jan Kara 2019-11-15 5:53 ` [PATCH v5 07/24] IB/umem: use get_user_pages_fast() to pin DMA pages John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-18 9:49 ` Jan Kara 2019-11-18 9:49 ` Jan Kara 2019-11-15 5:53 ` John Hubbard [this message] 2019-11-15 5:53 ` [PATCH v5 08/24] media/v4l2-core: set pages dirty upon releasing DMA buffers John Hubbard 2019-11-15 5:53 ` [PATCH v5 09/24] vfio, mm: fix get_user_pages_remote() and FOLL_LONGTERM John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 14:08 ` Jason Gunthorpe 2019-11-15 18:06 ` Ira Weiny 2019-11-15 18:06 ` Ira Weiny 2019-11-15 5:53 ` [PATCH v5 10/24] mm/gup: introduce pin_user_pages*() and FOLL_PIN John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-18 10:16 ` Jan Kara 2019-11-18 10:16 ` Jan Kara 2019-11-19 5:17 ` John Hubbard 2019-11-19 5:17 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 11/24] goldish_pipe: convert to pin_user_pages() and put_user_page() John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-18 10:16 ` Jan Kara 2019-11-18 10:16 ` Jan Kara 2019-11-15 5:53 ` [PATCH v5 12/24] IB/{core, hw, umem}: set FOLL_PIN via pin_user_pages*(), fix up ODP John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 14:09 ` [PATCH v5 12/24] IB/{core,hw,umem}: " Jason Gunthorpe 2019-11-15 5:53 ` [PATCH v5 13/24] mm/process_vm_access: set FOLL_PIN via pin_user_pages_remote() John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-18 10:30 ` Jan Kara 2019-11-18 10:30 ` Jan Kara 2019-11-15 5:53 ` [PATCH v5 14/24] drm/via: set FOLL_PIN via pin_user_pages_fast() John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 15/24] fs/io_uring: set FOLL_PIN via pin_user_pages() John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-18 10:34 ` Jan Kara 2019-11-18 10:34 ` Jan Kara 2019-11-15 5:53 ` [PATCH v5 16/24] net/xdp: " John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 17/24] mm/gup: track FOLL_PIN pages John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-18 11:58 ` Jan Kara 2019-11-18 11:58 ` Jan Kara 2019-11-19 0:22 ` John Hubbard 2019-11-19 0:22 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 18/24] media/v4l2-core: pin_user_pages (FOLL_PIN) and put_user_page() conversion John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 19/24] vfio, mm: " John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 20/24] powerpc: book3s64: convert to pin_user_pages() and put_user_page() John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 21/24] mm/gup_benchmark: use proper FOLL_WRITE flags instead of hard-coding "1" John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 22/24] mm/gup_benchmark: support pin_user_pages() and related calls John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 23/24] selftests/vm: run_vmtests: invoke gup_benchmark with basic FOLL_PIN coverage John Hubbard 2019-11-15 5:53 ` John Hubbard 2019-11-15 5:53 ` [PATCH v5 24/24] mm, tree-wide: rename put_user_page*() to unpin_user_page*() John Hubbard 2019-11-15 5:53 ` John Hubbard
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=20191115055340.1825745-9-jhubbard@nvidia.com \ --to=jhubbard@nvidia.com \ --cc=airlied@linux.ie \ --cc=akpm@linux-foundation.org \ --cc=bjorn.topel@intel.com \ --cc=corbet@lwn.net \ --cc=david@fromorbit.com \ --cc=dri-devel@lists.freedesktop.org \ --cc=hch@infradead.org \ --cc=hverkuil-cisco@xs4all.nl \ --cc=ira.weiny@intel.com \ --cc=jack@suse.cz \ --cc=jgg@ziepe.ca \ --cc=jglisse@redhat.com \ --cc=kvm@vger.kernel.org \ --cc=linux-block@vger.kernel.org \ --cc=linux-doc@vger.kernel.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=mhocko@suse.com \ --cc=mpe@ellerman.id.au \ --cc=paulus@samba.org \ --cc=shuah@kernel.org \ --cc=vbabka@suse.cz \ --cc=viro@zeniv.linu \ /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: linkBe 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; as well as URLs for NNTP newsgroup(s).