-From bd3e40b047e7434cefcce43165bac16403389b0d Mon Sep 17 00:00:00 2001
+From 39ffffa04354c33bbc53e1e2d9d9755920746e5d Mon Sep 17 00:00:00 2001
From: Sasha Levin <sashal@kernel.org>
Date: Thu, 2 Feb 2023 11:10:00 +0100
Subject: RDMA/siw: Fix user page pinning accounting
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/drivers/infiniband/sw/siw/siw_mem.c b/drivers/infiniband/sw/siw/siw_mem.c
-index b2b33dd3b4fa1..f51ab2ccf1511 100644
+index 61c17db70d658..bf69566e2eb63 100644
--- a/drivers/infiniband/sw/siw/siw_mem.c
+++ b/drivers/infiniband/sw/siw/siw_mem.c
@@ -398,7 +398,7 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
rv = -ENOMEM;
goto out_sem_up;
}
-@@ -411,30 +411,27 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
+@@ -411,18 +411,16 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
goto out_sem_up;
}
for (i = 0; num_pages; i++) {
while (nents) {
- struct page **plist = &umem->page_chunk[i].plist[got];
-
- rv = pin_user_pages(first_page_va, nents, foll_flags,
+ rv = pin_user_pages(first_page_va, nents,
+ foll_flags | FOLL_LONGTERM,
plist, NULL);
- if (rv < 0)
+@@ -430,12 +428,11 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
goto out_sem_up;
umem->num_pages += rv;
}
out_sem_up:
mmap_read_unlock(mm_s);
-@@ -442,6 +439,10 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
+@@ -443,6 +440,10 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
if (rv > 0)
return umem;
+++ /dev/null
-From dba305c6ba7aebc95f1023375438ad7d70353453 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 16 Nov 2022 11:26:51 +0100
-Subject: RDMA/siw: remove FOLL_FORCE usage
-
-From: David Hildenbrand <david@redhat.com>
-
-[ Upstream commit 129e636fe9837fcfea68bfd368a07548d9880726 ]
-
-GUP now supports reliable R/O long-term pinning in COW mappings, such
-that we break COW early. MAP_SHARED VMAs only use the shared zeropage so
-far in one corner case (DAXFS file with holes), which can be ignored
-because GUP does not support long-term pinning in fsdax (see
-check_vma_flags()).
-
-Consequently, FOLL_FORCE | FOLL_WRITE | FOLL_LONGTERM is no longer required
-for reliable R/O long-term pinning: FOLL_LONGTERM is sufficient. So stop
-using FOLL_FORCE, which is really only for ptrace access.
-
-Link: https://lkml.kernel.org/r/20221116102659.70287-13-david@redhat.com
-Signed-off-by: David Hildenbrand <david@redhat.com>
-Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
-Cc: Bernard Metzler <bmt@zurich.ibm.com>
-Cc: Leon Romanovsky <leon@kernel.org>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Stable-dep-of: 65a8fc30fb67 ("RDMA/siw: Fix user page pinning accounting")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/infiniband/sw/siw/siw_mem.c | 9 ++++-----
- 1 file changed, 4 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/infiniband/sw/siw/siw_mem.c b/drivers/infiniband/sw/siw/siw_mem.c
-index 61c17db70d658..b2b33dd3b4fa1 100644
---- a/drivers/infiniband/sw/siw/siw_mem.c
-+++ b/drivers/infiniband/sw/siw/siw_mem.c
-@@ -368,7 +368,7 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
- struct mm_struct *mm_s;
- u64 first_page_va;
- unsigned long mlock_limit;
-- unsigned int foll_flags = FOLL_WRITE;
-+ unsigned int foll_flags = FOLL_LONGTERM;
- int num_pages, num_chunks, i, rv = 0;
-
- if (!can_do_mlock())
-@@ -391,8 +391,8 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
-
- mmgrab(mm_s);
-
-- if (!writable)
-- foll_flags |= FOLL_FORCE;
-+ if (writable)
-+ foll_flags |= FOLL_WRITE;
-
- mmap_read_lock(mm_s);
-
-@@ -423,8 +423,7 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
- while (nents) {
- struct page **plist = &umem->page_chunk[i].plist[got];
-
-- rv = pin_user_pages(first_page_va, nents,
-- foll_flags | FOLL_LONGTERM,
-+ rv = pin_user_pages(first_page_va, nents, foll_flags,
- plist, NULL);
- if (rv < 0)
- goto out_sem_up;
---
-2.39.2
-
usb-gadget-configfs-restrict-symlink-creation-is-udc.patch
iommu-vt-d-set-no-execute-enable-bit-in-pasid-table-.patch
power-supply-remove-faulty-cooling-logic.patch
-rdma-siw-remove-foll_force-usage.patch
-rdma-siw-fix-user-page-pinning-accounting.patch
rdma-cxgb4-fix-potential-null-ptr-deref-in-pass_esta.patch
usb-max-3421-fix-setting-of-i-o-pins.patch
rdma-irdma-cap-msix-used-to-online-cpus-1.patch
ksmbd-fix-wrong-data-area-length-for-smb2-lock-request.patch
ksmbd-do-not-allow-the-actual-frame-length-to-be-smaller-than-the-rfc1002-length.patch
arm-dts-exynos-correct-hdmi-phy-compatible-in-exynos4.patch
+rdma-siw-fix-user-page-pinning-accounting.patch
-From ef581c2bef34611eb7f5fc9cdbfb6c7041f1db11 Mon Sep 17 00:00:00 2001
+From 383e7bbc7f5b2a2a004a262505f5a342fbc8af55 Mon Sep 17 00:00:00 2001
From: Sasha Levin <sashal@kernel.org>
Date: Thu, 2 Feb 2023 11:10:00 +0100
Subject: RDMA/siw: Fix user page pinning accounting
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/drivers/infiniband/sw/siw/siw_mem.c b/drivers/infiniband/sw/siw/siw_mem.c
-index b2b33dd3b4fa1..f51ab2ccf1511 100644
+index 61c17db70d658..bf69566e2eb63 100644
--- a/drivers/infiniband/sw/siw/siw_mem.c
+++ b/drivers/infiniband/sw/siw/siw_mem.c
@@ -398,7 +398,7 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
rv = -ENOMEM;
goto out_sem_up;
}
-@@ -411,30 +411,27 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
+@@ -411,18 +411,16 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
goto out_sem_up;
}
for (i = 0; num_pages; i++) {
while (nents) {
- struct page **plist = &umem->page_chunk[i].plist[got];
-
- rv = pin_user_pages(first_page_va, nents, foll_flags,
+ rv = pin_user_pages(first_page_va, nents,
+ foll_flags | FOLL_LONGTERM,
plist, NULL);
- if (rv < 0)
+@@ -430,12 +428,11 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
goto out_sem_up;
umem->num_pages += rv;
}
out_sem_up:
mmap_read_unlock(mm_s);
-@@ -442,6 +439,10 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
+@@ -443,6 +440,10 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
if (rv > 0)
return umem;
+++ /dev/null
-From b23a5e3e2aa263bd4f85aef180f613d86e31b452 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 16 Nov 2022 11:26:51 +0100
-Subject: RDMA/siw: remove FOLL_FORCE usage
-
-From: David Hildenbrand <david@redhat.com>
-
-[ Upstream commit 129e636fe9837fcfea68bfd368a07548d9880726 ]
-
-GUP now supports reliable R/O long-term pinning in COW mappings, such
-that we break COW early. MAP_SHARED VMAs only use the shared zeropage so
-far in one corner case (DAXFS file with holes), which can be ignored
-because GUP does not support long-term pinning in fsdax (see
-check_vma_flags()).
-
-Consequently, FOLL_FORCE | FOLL_WRITE | FOLL_LONGTERM is no longer required
-for reliable R/O long-term pinning: FOLL_LONGTERM is sufficient. So stop
-using FOLL_FORCE, which is really only for ptrace access.
-
-Link: https://lkml.kernel.org/r/20221116102659.70287-13-david@redhat.com
-Signed-off-by: David Hildenbrand <david@redhat.com>
-Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
-Cc: Bernard Metzler <bmt@zurich.ibm.com>
-Cc: Leon Romanovsky <leon@kernel.org>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Stable-dep-of: 65a8fc30fb67 ("RDMA/siw: Fix user page pinning accounting")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/infiniband/sw/siw/siw_mem.c | 9 ++++-----
- 1 file changed, 4 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/infiniband/sw/siw/siw_mem.c b/drivers/infiniband/sw/siw/siw_mem.c
-index 61c17db70d658..b2b33dd3b4fa1 100644
---- a/drivers/infiniband/sw/siw/siw_mem.c
-+++ b/drivers/infiniband/sw/siw/siw_mem.c
-@@ -368,7 +368,7 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
- struct mm_struct *mm_s;
- u64 first_page_va;
- unsigned long mlock_limit;
-- unsigned int foll_flags = FOLL_WRITE;
-+ unsigned int foll_flags = FOLL_LONGTERM;
- int num_pages, num_chunks, i, rv = 0;
-
- if (!can_do_mlock())
-@@ -391,8 +391,8 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
-
- mmgrab(mm_s);
-
-- if (!writable)
-- foll_flags |= FOLL_FORCE;
-+ if (writable)
-+ foll_flags |= FOLL_WRITE;
-
- mmap_read_lock(mm_s);
-
-@@ -423,8 +423,7 @@ struct siw_umem *siw_umem_get(u64 start, u64 len, bool writable)
- while (nents) {
- struct page **plist = &umem->page_chunk[i].plist[got];
-
-- rv = pin_user_pages(first_page_va, nents,
-- foll_flags | FOLL_LONGTERM,
-+ rv = pin_user_pages(first_page_va, nents, foll_flags,
- plist, NULL);
- if (rv < 0)
- goto out_sem_up;
---
-2.39.2
-
iommu-dart-fix-apple_dart_device_group-for-pci-group.patch
iommu-vt-d-set-no-execute-enable-bit-in-pasid-table-.patch
power-supply-remove-faulty-cooling-logic.patch
-rdma-siw-remove-foll_force-usage.patch
-rdma-siw-fix-user-page-pinning-accounting.patch
rdma-cxgb4-fix-potential-null-ptr-deref-in-pass_esta.patch
usb-max-3421-fix-setting-of-i-o-pins.patch
rdma-irdma-cap-msix-used-to-online-cpus-1.patch
torture-fix-hang-during-kthread-shutdown-phase.patch
arm-dts-exynos-correct-hdmi-phy-compatible-in-exynos4.patch
io_uring-mark-task-task_running-before-handling-resume-task-work.patch
+rdma-siw-fix-user-page-pinning-accounting.patch