diff options
author | Jérôme Glisse <jglisse@redhat.com> | 2019-04-16 12:35:16 -0400 |
---|---|---|
committer | Jérôme Glisse <jglisse@redhat.com> | 2019-04-16 13:46:40 -0400 |
commit | b1c6ca3901733e7223756928f4dbc6d81db164e9 (patch) | |
tree | 13da3206af2adb342fe2e23c8a96f1a615138c77 | |
parent | 0299e9776da232b9aaf6b57f97e34f1a0865faa2 (diff) |
net/tls: keep track of pages that are coming from GUPgup-scatterlist-v1
Keep track of pages that are coming from GUP (get_user_pages*()) so
that we can call the appropriate put_user_page() for those.
Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
Cc: iommu@lists.linux-foundation.org
Cc: linux-fsdevel@vger.kernel.org
Cc: linux-block@vger.kernel.org
Cc: linux-mm@kvack.org
Cc: netdev@vger.kernel.org
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: Jason Gunthorpe <jgg@mellanox.com>
Cc: Boris Pismenny <borisp@mellanox.com>
Cc: Aviad Yehezkel <aviadye@mellanox.com>
Cc: Dave Watson <davejwatson@fb.com>
Cc: John Fastabend <john.fastabend@gmail.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
-rw-r--r-- | net/tls/tls_sw.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c index 1de69e016c3d..4b4856590d57 100644 --- a/net/tls/tls_sw.c +++ b/net/tls/tls_sw.c @@ -1274,6 +1274,8 @@ static int tls_setup_from_iter(struct sock *sk, struct iov_iter *from, size_t offset; while (length > 0) { + bool from_gup; + i = 0; maxpages = to_max_pages - num_elem; if (maxpages == 0) { @@ -1288,6 +1290,7 @@ static int tls_setup_from_iter(struct sock *sk, struct iov_iter *from, goto out; } + from_gup = iov_iter_get_pages_use_gup(from); iov_iter_advance(from, copied); length -= copied; @@ -1295,8 +1298,12 @@ static int tls_setup_from_iter(struct sock *sk, struct iov_iter *from, while (copied) { use = min_t(int, copied, PAGE_SIZE - offset); - sg_set_page(&to[num_elem], - pages[i], use, offset); + if (from_gup) + sg_set_gup_page(&to[num_elem], + pages[i], use, offset); + else + sg_set_page(&to[num_elem], + pages[i], use, offset); sg_unmark_end(&to[num_elem]); /* We do not uncharge memory from this API */ |