]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.10
authorSasha Levin <sashal@kernel.org>
Mon, 24 Jun 2024 13:48:22 +0000 (09:48 -0400)
committerSasha Levin <sashal@kernel.org>
Mon, 24 Jun 2024 13:48:22 +0000 (09:48 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
14 files changed:
queue-5.10/acpica-revert-acpica-avoid-info-mapping-multiple-bar.patch [new file with mode: 0644]
queue-5.10/dmaengine-ioat-drop-redundant-pci_enable_pcie_error_.patch [new file with mode: 0644]
queue-5.10/dmaengine-ioat-switch-from-pci_-to-dma_-api.patch [new file with mode: 0644]
queue-5.10/dmaengine-ioat-use-pci-core-macros-for-pcie-capabili.patch [new file with mode: 0644]
queue-5.10/dmaengine-ioatdma-fix-error-path-in-ioat3_dma_probe.patch [new file with mode: 0644]
queue-5.10/dmaengine-ioatdma-fix-kmemleak-in-ioat_pci_probe.patch [new file with mode: 0644]
queue-5.10/dmaengine-ioatdma-fix-leaking-on-version-mismatch.patch [new file with mode: 0644]
queue-5.10/dmaengine-ioatdma-fix-missing-kmem_cache_destroy.patch [new file with mode: 0644]
queue-5.10/rdma-check-srq_type-during-create_srq.patch [new file with mode: 0644]
queue-5.10/rdma-mlx5-add-check-for-srq-max_sge-attribute.patch [new file with mode: 0644]
queue-5.10/rdma-move-more-uverbs_cmd_mask-settings-to-the-core.patch [new file with mode: 0644]
queue-5.10/rdma-remove-elements-in-uverbs_cmd_mask-that-all-dri.patch [new file with mode: 0644]
queue-5.10/regulator-core-fix-modpost-error-regulator_get_regma.patch [new file with mode: 0644]
queue-5.10/series

diff --git a/queue-5.10/acpica-revert-acpica-avoid-info-mapping-multiple-bar.patch b/queue-5.10/acpica-revert-acpica-avoid-info-mapping-multiple-bar.patch
new file mode 100644 (file)
index 0000000..d0fa1e8
--- /dev/null
@@ -0,0 +1,84 @@
+From 1f58a193cbbaa371a481520108245b43c7415b0f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 14 Jun 2024 19:31:49 +0530
+Subject: ACPICA: Revert "ACPICA: avoid Info: mapping multiple BARs. Your
+ kernel is fine."
+
+From: Raju Rangoju <Raju.Rangoju@amd.com>
+
+[ Upstream commit a83e1385b780d41307433ddbc86e3c528db031f0 ]
+
+Undo the modifications made in commit d410ee5109a1 ("ACPICA: avoid
+"Info: mapping multiple BARs. Your kernel is fine.""). The initial
+purpose of this commit was to stop memory mappings for operation
+regions from overlapping page boundaries, as it can trigger warnings
+if different page attributes are present.
+
+However, it was found that when this situation arises, mapping
+continues until the boundary's end, but there is still an attempt to
+read/write the entire length of the map, leading to a NULL pointer
+deference. For example, if a four-byte mapping request is made but
+only one byte is mapped because it hits the current page boundary's
+end, a four-byte read/write attempt is still made, resulting in a NULL
+pointer deference.
+
+Instead, map the entire length, as the ACPI specification does not
+mandate that it must be within the same page boundary. It is
+permissible for it to be mapped across different regions.
+
+Link: https://github.com/acpica/acpica/pull/954
+Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218849
+Fixes: d410ee5109a1 ("ACPICA: avoid "Info: mapping multiple BARs. Your kernel is fine."")
+Co-developed-by: Sanath S <Sanath.S@amd.com>
+Signed-off-by: Sanath S <Sanath.S@amd.com>
+Signed-off-by: Raju Rangoju <Raju.Rangoju@amd.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/acpi/acpica/exregion.c | 23 ++---------------------
+ 1 file changed, 2 insertions(+), 21 deletions(-)
+
+diff --git a/drivers/acpi/acpica/exregion.c b/drivers/acpi/acpica/exregion.c
+index 4914dbc445179..5bbbd015de5a4 100644
+--- a/drivers/acpi/acpica/exregion.c
++++ b/drivers/acpi/acpica/exregion.c
+@@ -44,7 +44,6 @@ acpi_ex_system_memory_space_handler(u32 function,
+       struct acpi_mem_mapping *mm = mem_info->cur_mm;
+       u32 length;
+       acpi_size map_length;
+-      acpi_size page_boundary_map_length;
+ #ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED
+       u32 remainder;
+ #endif
+@@ -138,26 +137,8 @@ acpi_ex_system_memory_space_handler(u32 function,
+               map_length = (acpi_size)
+                   ((mem_info->address + mem_info->length) - address);
+-              /*
+-               * If mapping the entire remaining portion of the region will cross
+-               * a page boundary, just map up to the page boundary, do not cross.
+-               * On some systems, crossing a page boundary while mapping regions
+-               * can cause warnings if the pages have different attributes
+-               * due to resource management.
+-               *
+-               * This has the added benefit of constraining a single mapping to
+-               * one page, which is similar to the original code that used a 4k
+-               * maximum window.
+-               */
+-              page_boundary_map_length = (acpi_size)
+-                  (ACPI_ROUND_UP(address, ACPI_DEFAULT_PAGE_SIZE) - address);
+-              if (page_boundary_map_length == 0) {
+-                      page_boundary_map_length = ACPI_DEFAULT_PAGE_SIZE;
+-              }
+-
+-              if (map_length > page_boundary_map_length) {
+-                      map_length = page_boundary_map_length;
+-              }
++              if (map_length > ACPI_DEFAULT_PAGE_SIZE)
++                      map_length = ACPI_DEFAULT_PAGE_SIZE;
+               /* Create a new mapping starting at the address given */
+-- 
+2.43.0
+
diff --git a/queue-5.10/dmaengine-ioat-drop-redundant-pci_enable_pcie_error_.patch b/queue-5.10/dmaengine-ioat-drop-redundant-pci_enable_pcie_error_.patch
new file mode 100644 (file)
index 0000000..c926c01
--- /dev/null
@@ -0,0 +1,71 @@
+From df66d38372323c8de08ee95d444a268cf57cbe2e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 7 Mar 2023 13:26:54 -0600
+Subject: dmaengine: ioat: Drop redundant pci_enable_pcie_error_reporting()
+
+From: Bjorn Helgaas <bhelgaas@google.com>
+
+[ Upstream commit e32622f84ae289dc7a04e9f01cd62cb914fdc5c6 ]
+
+pci_enable_pcie_error_reporting() enables the device to send ERR_*
+Messages.  Since f26e58bf6f54 ("PCI/AER: Enable error reporting when AER is
+native"), the PCI core does this for all devices during enumeration, so the
+driver doesn't need to do it itself.
+
+Remove the redundant pci_enable_pcie_error_reporting() call from the
+driver.  Also remove the corresponding pci_disable_pcie_error_reporting()
+from the driver .remove() path.
+
+Note that this only controls ERR_* Messages from the device.  An ERR_*
+Message may cause the Root Port to generate an interrupt, depending on the
+AER Root Error Command register managed by the AER service driver.
+
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Acked-by: Dave Jiang <dave.jiang@intel.com>
+Link: https://lore.kernel.org/r/20230307192655.874008-2-helgaas@kernel.org
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Stable-dep-of: 1b11b4ef6bd6 ("dmaengine: ioatdma: Fix leaking on version mismatch")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/ioat/init.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c
+index 373b8dac6c9ba..783d4e740f115 100644
+--- a/drivers/dma/ioat/init.c
++++ b/drivers/dma/ioat/init.c
+@@ -15,7 +15,6 @@
+ #include <linux/workqueue.h>
+ #include <linux/prefetch.h>
+ #include <linux/dca.h>
+-#include <linux/aer.h>
+ #include <linux/sizes.h>
+ #include "dma.h"
+ #include "registers.h"
+@@ -1382,15 +1381,11 @@ static int ioat_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+               if (is_skx_ioat(pdev))
+                       device->version = IOAT_VER_3_2;
+               err = ioat3_dma_probe(device, ioat_dca_enabled);
+-
+-              if (device->version >= IOAT_VER_3_3)
+-                      pci_enable_pcie_error_reporting(pdev);
+       } else
+               return -ENODEV;
+       if (err) {
+               dev_err(dev, "Intel(R) I/OAT DMA Engine init failed\n");
+-              pci_disable_pcie_error_reporting(pdev);
+               return -ENODEV;
+       }
+@@ -1413,7 +1408,6 @@ static void ioat_remove(struct pci_dev *pdev)
+               device->dca = NULL;
+       }
+-      pci_disable_pcie_error_reporting(pdev);
+       ioat_dma_remove(device);
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.10/dmaengine-ioat-switch-from-pci_-to-dma_-api.patch b/queue-5.10/dmaengine-ioat-switch-from-pci_-to-dma_-api.patch
new file mode 100644 (file)
index 0000000..c2a629a
--- /dev/null
@@ -0,0 +1,49 @@
+From 33b21d11977eee96b37b5a7451965d606b7f506d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Oct 2021 20:28:28 -0700
+Subject: dmaengine: ioat: switch from 'pci_' to 'dma_' API
+
+From: Qing Wang <wangqing@vivo.com>
+
+[ Upstream commit 0c5afef7bf1fbda7e7883dc4b93f64f90003706f ]
+
+The wrappers in include/linux/pci-dma-compat.h should go away.
+
+pci_set_dma_mask()/pci_set_consistent_dma_mask() should be
+replaced with dma_set_mask()/dma_set_coherent_mask(),
+and use dma_set_mask_and_coherent() for both.
+
+Signed-off-by: Qing Wang <wangqing@vivo.com>
+Link: https://lore.kernel.org/r/1633663733-47199-3-git-send-email-wangqing@vivo.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Stable-dep-of: 1b11b4ef6bd6 ("dmaengine: ioatdma: Fix leaking on version mismatch")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/ioat/init.c | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c
+index 191b592790073..373b8dac6c9ba 100644
+--- a/drivers/dma/ioat/init.c
++++ b/drivers/dma/ioat/init.c
+@@ -1363,15 +1363,9 @@ static int ioat_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+       if (!iomap)
+               return -ENOMEM;
+-      err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
++      err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
+       if (err)
+-              err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
+-      if (err)
+-              return err;
+-
+-      err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
+-      if (err)
+-              err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
++              err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
+       if (err)
+               return err;
+-- 
+2.43.0
+
diff --git a/queue-5.10/dmaengine-ioat-use-pci-core-macros-for-pcie-capabili.patch b/queue-5.10/dmaengine-ioat-use-pci-core-macros-for-pcie-capabili.patch
new file mode 100644 (file)
index 0000000..d3cf88f
--- /dev/null
@@ -0,0 +1,67 @@
+From 93728597d9d45b40379528a950441f05a3fe7f26 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 7 Mar 2023 15:46:15 -0600
+Subject: dmaengine: ioat: use PCI core macros for PCIe Capability
+
+From: Bjorn Helgaas <bhelgaas@google.com>
+
+[ Upstream commit 8f6707d0773be31972768abd6e0bf7b8515b5b1a ]
+
+The PCIe Capability is defined by the PCIe spec, so use the PCI_EXP_DEVCTL
+macros defined by the PCI core instead of defining copies in IOAT.  This
+makes it easier to find all uses of the PCIe Device Control register.  No
+functional change intended.
+
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Acked-by: Dave Jiang <dave.jiang@intel.com>
+Link: https://lore.kernel.org/r/20230307214615.887354-1-helgaas@kernel.org
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Stable-dep-of: f0dc9fda2e0e ("dmaengine: ioatdma: Fix error path in ioat3_dma_probe()")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/ioat/init.c      | 6 +++---
+ drivers/dma/ioat/registers.h | 7 -------
+ 2 files changed, 3 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c
+index 6c27980a5ec8f..ed4910e3bc2ac 100644
+--- a/drivers/dma/ioat/init.c
++++ b/drivers/dma/ioat/init.c
+@@ -1190,13 +1190,13 @@ static int ioat3_dma_probe(struct ioatdma_device *ioat_dma, int dca)
+               ioat_dma->dca = ioat_dca_init(pdev, ioat_dma->reg_base);
+       /* disable relaxed ordering */
+-      err = pcie_capability_read_word(pdev, IOAT_DEVCTRL_OFFSET, &val16);
++      err = pcie_capability_read_word(pdev, PCI_EXP_DEVCTL, &val16);
+       if (err)
+               return pcibios_err_to_errno(err);
+       /* clear relaxed ordering enable */
+-      val16 &= ~IOAT_DEVCTRL_ROE;
+-      err = pcie_capability_write_word(pdev, IOAT_DEVCTRL_OFFSET, val16);
++      val16 &= ~PCI_EXP_DEVCTL_RELAX_EN;
++      err = pcie_capability_write_word(pdev, PCI_EXP_DEVCTL, val16);
+       if (err)
+               return pcibios_err_to_errno(err);
+diff --git a/drivers/dma/ioat/registers.h b/drivers/dma/ioat/registers.h
+index f55a5f92f1857..54cf0ad39887b 100644
+--- a/drivers/dma/ioat/registers.h
++++ b/drivers/dma/ioat/registers.h
+@@ -14,13 +14,6 @@
+ #define IOAT_PCI_CHANERR_INT_OFFSET           0x180
+ #define IOAT_PCI_CHANERRMASK_INT_OFFSET               0x184
+-/* PCIe config registers */
+-
+-/* EXPCAPID + N */
+-#define IOAT_DEVCTRL_OFFSET                   0x8
+-/* relaxed ordering enable */
+-#define IOAT_DEVCTRL_ROE                      0x10
+-
+ /* MMIO Device Registers */
+ #define IOAT_CHANCNT_OFFSET                   0x00    /*  8-bit */
+-- 
+2.43.0
+
diff --git a/queue-5.10/dmaengine-ioatdma-fix-error-path-in-ioat3_dma_probe.patch b/queue-5.10/dmaengine-ioatdma-fix-error-path-in-ioat3_dma_probe.patch
new file mode 100644 (file)
index 0000000..e94fc45
--- /dev/null
@@ -0,0 +1,94 @@
+From 67dea0d7a8bf3009170eb07249e6bcdefc58c638 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 28 May 2024 09:09:24 +0300
+Subject: dmaengine: ioatdma: Fix error path in ioat3_dma_probe()
+
+From: Nikita Shubin <n.shubin@yadro.com>
+
+[ Upstream commit f0dc9fda2e0ee9e01496c2f5aca3a831131fad79 ]
+
+Make sure we are disabling interrupts and destroying DMA pool if
+pcie_capability_read/write_word() call failed.
+
+Fixes: 511deae0261c ("dmaengine: ioatdma: disable relaxed ordering for ioatdma")
+Signed-off-by: Nikita Shubin <n.shubin@yadro.com>
+Reviewed-by: Dave Jiang <dave.jiang@intel.com>
+Link: https://lore.kernel.org/r/20240528-ioatdma-fixes-v2-2-a9f2fbe26ab1@yadro.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/ioat/init.c | 33 +++++++++++++++------------------
+ 1 file changed, 15 insertions(+), 18 deletions(-)
+
+diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c
+index ed4910e3bc2ac..ceba1b4083a9d 100644
+--- a/drivers/dma/ioat/init.c
++++ b/drivers/dma/ioat/init.c
+@@ -534,18 +534,6 @@ static int ioat_probe(struct ioatdma_device *ioat_dma)
+       return err;
+ }
+-static int ioat_register(struct ioatdma_device *ioat_dma)
+-{
+-      int err = dma_async_device_register(&ioat_dma->dma_dev);
+-
+-      if (err) {
+-              ioat_disable_interrupts(ioat_dma);
+-              dma_pool_destroy(ioat_dma->completion_pool);
+-      }
+-
+-      return err;
+-}
+-
+ static void ioat_dma_remove(struct ioatdma_device *ioat_dma)
+ {
+       struct dma_device *dma = &ioat_dma->dma_dev;
+@@ -1180,9 +1168,9 @@ static int ioat3_dma_probe(struct ioatdma_device *ioat_dma, int dca)
+                      ioat_chan->reg_base + IOAT_DCACTRL_OFFSET);
+       }
+-      err = ioat_register(ioat_dma);
++      err = dma_async_device_register(&ioat_dma->dma_dev);
+       if (err)
+-              return err;
++              goto err_disable_interrupts;
+       ioat_kobject_add(ioat_dma, &ioat_ktype);
+@@ -1191,20 +1179,29 @@ static int ioat3_dma_probe(struct ioatdma_device *ioat_dma, int dca)
+       /* disable relaxed ordering */
+       err = pcie_capability_read_word(pdev, PCI_EXP_DEVCTL, &val16);
+-      if (err)
+-              return pcibios_err_to_errno(err);
++      if (err) {
++              err = pcibios_err_to_errno(err);
++              goto err_disable_interrupts;
++      }
+       /* clear relaxed ordering enable */
+       val16 &= ~PCI_EXP_DEVCTL_RELAX_EN;
+       err = pcie_capability_write_word(pdev, PCI_EXP_DEVCTL, val16);
+-      if (err)
+-              return pcibios_err_to_errno(err);
++      if (err) {
++              err = pcibios_err_to_errno(err);
++              goto err_disable_interrupts;
++      }
+       if (ioat_dma->cap & IOAT_CAP_DPS)
+               writeb(ioat_pending_level + 1,
+                      ioat_dma->reg_base + IOAT_PREFETCH_LIMIT_OFFSET);
+       return 0;
++
++err_disable_interrupts:
++      ioat_disable_interrupts(ioat_dma);
++      dma_pool_destroy(ioat_dma->completion_pool);
++      return err;
+ }
+ static void ioat_shutdown(struct pci_dev *pdev)
+-- 
+2.43.0
+
diff --git a/queue-5.10/dmaengine-ioatdma-fix-kmemleak-in-ioat_pci_probe.patch b/queue-5.10/dmaengine-ioatdma-fix-kmemleak-in-ioat_pci_probe.patch
new file mode 100644 (file)
index 0000000..7661a16
--- /dev/null
@@ -0,0 +1,66 @@
+From e168ab76d3fbacc11b6750a94fe85cdeaabbda72 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 28 May 2024 09:09:25 +0300
+Subject: dmaengine: ioatdma: Fix kmemleak in ioat_pci_probe()
+
+From: Nikita Shubin <n.shubin@yadro.com>
+
+[ Upstream commit 29b7cd255f3628e0d65be33a939d8b5bba10aa62 ]
+
+If probing fails we end up with leaking ioatdma_device and each
+allocated channel.
+
+Following kmemleak easy to reproduce by injecting an error in
+ioat_alloc_chan_resources() when doing ioat_dma_self_test().
+
+unreferenced object 0xffff888014ad5800 (size 1024): [..]
+    [<ffffffff827692ca>] kmemleak_alloc+0x4a/0x80
+    [<ffffffff81430600>] kmalloc_trace+0x270/0x2f0
+    [<ffffffffa000b7d1>] ioat_pci_probe+0xc1/0x1c0 [ioatdma]
+[..]
+
+repeated for each ioatdma channel:
+
+unreferenced object 0xffff8880148e5c00 (size 512): [..]
+    [<ffffffff827692ca>] kmemleak_alloc+0x4a/0x80
+    [<ffffffff81430600>] kmalloc_trace+0x270/0x2f0
+    [<ffffffffa0009641>] ioat_enumerate_channels+0x101/0x2d0 [ioatdma]
+    [<ffffffffa000b266>] ioat3_dma_probe+0x4d6/0x970 [ioatdma]
+    [<ffffffffa000b891>] ioat_pci_probe+0x181/0x1c0 [ioatdma]
+[..]
+
+Fixes: bf453a0a18b2 ("dmaengine: ioat: Support in-use unbind")
+Signed-off-by: Nikita Shubin <n.shubin@yadro.com>
+Reviewed-by: Dave Jiang <dave.jiang@intel.com>
+Link: https://lore.kernel.org/r/20240528-ioatdma-fixes-v2-3-a9f2fbe26ab1@yadro.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/ioat/init.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c
+index ceba1b4083a9d..8a115bafab6ab 100644
+--- a/drivers/dma/ioat/init.c
++++ b/drivers/dma/ioat/init.c
+@@ -1346,6 +1346,7 @@ static int ioat_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+       void __iomem * const *iomap;
+       struct device *dev = &pdev->dev;
+       struct ioatdma_device *device;
++      unsigned int i;
+       u8 version;
+       int err;
+@@ -1385,6 +1386,9 @@ static int ioat_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+       err = ioat3_dma_probe(device, ioat_dca_enabled);
+       if (err) {
++              for (i = 0; i < IOAT_MAX_CHANS; i++)
++                      kfree(device->idx[i]);
++              kfree(device);
+               dev_err(dev, "Intel(R) I/OAT DMA Engine init failed\n");
+               return -ENODEV;
+       }
+-- 
+2.43.0
+
diff --git a/queue-5.10/dmaengine-ioatdma-fix-leaking-on-version-mismatch.patch b/queue-5.10/dmaengine-ioatdma-fix-leaking-on-version-mismatch.patch
new file mode 100644 (file)
index 0000000..34fa52d
--- /dev/null
@@ -0,0 +1,69 @@
+From 955f2280a9f642f1323ea4d4bfaf0de6b3d52e0a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 28 May 2024 09:09:23 +0300
+Subject: dmaengine: ioatdma: Fix leaking on version mismatch
+
+From: Nikita Shubin <n.shubin@yadro.com>
+
+[ Upstream commit 1b11b4ef6bd68591dcaf8423c7d05e794e6aec6f ]
+
+Fix leaking ioatdma_device if I/OAT version is less than IOAT_VER_3_0.
+
+Fixes: bf453a0a18b2 ("dmaengine: ioat: Support in-use unbind")
+Signed-off-by: Nikita Shubin <n.shubin@yadro.com>
+Reviewed-by: Dave Jiang <dave.jiang@intel.com>
+Link: https://lore.kernel.org/r/20240528-ioatdma-fixes-v2-1-a9f2fbe26ab1@yadro.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/ioat/init.c | 17 ++++++++++-------
+ 1 file changed, 10 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c
+index 783d4e740f115..6c27980a5ec8f 100644
+--- a/drivers/dma/ioat/init.c
++++ b/drivers/dma/ioat/init.c
+@@ -1349,6 +1349,7 @@ static int ioat_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+       void __iomem * const *iomap;
+       struct device *dev = &pdev->dev;
+       struct ioatdma_device *device;
++      u8 version;
+       int err;
+       err = pcim_enable_device(pdev);
+@@ -1362,6 +1363,10 @@ static int ioat_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+       if (!iomap)
+               return -ENOMEM;
++      version = readb(iomap[IOAT_MMIO_BAR] + IOAT_VER_OFFSET);
++      if (version < IOAT_VER_3_0)
++              return -ENODEV;
++
+       err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
+       if (err)
+               err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
+@@ -1374,16 +1379,14 @@ static int ioat_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+       pci_set_master(pdev);
+       pci_set_drvdata(pdev, device);
+-      device->version = readb(device->reg_base + IOAT_VER_OFFSET);
++      device->version = version;
+       if (device->version >= IOAT_VER_3_4)
+               ioat_dca_enabled = 0;
+-      if (device->version >= IOAT_VER_3_0) {
+-              if (is_skx_ioat(pdev))
+-                      device->version = IOAT_VER_3_2;
+-              err = ioat3_dma_probe(device, ioat_dca_enabled);
+-      } else
+-              return -ENODEV;
++      if (is_skx_ioat(pdev))
++              device->version = IOAT_VER_3_2;
++
++      err = ioat3_dma_probe(device, ioat_dca_enabled);
+       if (err) {
+               dev_err(dev, "Intel(R) I/OAT DMA Engine init failed\n");
+               return -ENODEV;
+-- 
+2.43.0
+
diff --git a/queue-5.10/dmaengine-ioatdma-fix-missing-kmem_cache_destroy.patch b/queue-5.10/dmaengine-ioatdma-fix-missing-kmem_cache_destroy.patch
new file mode 100644 (file)
index 0000000..0a479c9
--- /dev/null
@@ -0,0 +1,46 @@
+From 78b103b675dcd631c1522eec9bf5466422964890 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 14 May 2024 13:52:31 +0300
+Subject: dmaengine: ioatdma: Fix missing kmem_cache_destroy()
+
+From: Nikita Shubin <n.shubin@yadro.com>
+
+[ Upstream commit 5422145d0b749ad554ada772133b9b20f9fb0ec8 ]
+
+Fix missing kmem_cache_destroy() for ioat_sed_cache in
+ioat_exit_module().
+
+Noticed via:
+
+```
+modprobe ioatdma
+rmmod ioatdma
+modprobe ioatdma
+debugfs: Directory 'ioat_sed_ent' with parent 'slab' already present!
+```
+
+Fixes: c0f28ce66ecf ("dmaengine: ioatdma: move all the init routines")
+Signed-off-by: Nikita Shubin <n.shubin@yadro.com>
+Acked-by: Dave Jiang <dave.jiang@intel.com>
+Link: https://lore.kernel.org/r/20240514-ioatdma_fixes-v1-1-2776a0913254@yadro.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/ioat/init.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c
+index 8a115bafab6ab..2a47b9053bad8 100644
+--- a/drivers/dma/ioat/init.c
++++ b/drivers/dma/ioat/init.c
+@@ -1450,6 +1450,7 @@ module_init(ioat_init_module);
+ static void __exit ioat_exit_module(void)
+ {
+       pci_unregister_driver(&ioat_pci_driver);
++      kmem_cache_destroy(ioat_sed_cache);
+       kmem_cache_destroy(ioat_cache);
+ }
+ module_exit(ioat_exit_module);
+-- 
+2.43.0
+
diff --git a/queue-5.10/rdma-check-srq_type-during-create_srq.patch b/queue-5.10/rdma-check-srq_type-during-create_srq.patch
new file mode 100644 (file)
index 0000000..f299895
--- /dev/null
@@ -0,0 +1,220 @@
+From 4f0014a293620a6305d7d0c2450846d3e731a1d0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 3 Oct 2020 20:20:05 -0300
+Subject: RDMA: Check srq_type during create_srq
+
+From: Jason Gunthorpe <jgg@nvidia.com>
+
+[ Upstream commit 652caba5b5501258a46d4b9279e0dbb6e5d42d75 ]
+
+uverbs was blocking srq_types the driver doesn't support based on the
+CREATE_XSRQ cmd_mask. Fix all drivers to check for supported srq_types
+during create_srq and move CREATE_XSRQ to the core code.
+
+Link: https://lore.kernel.org/r/5-v1-caa70ba3d1ab+1436e-ucmd_mask_jgg@nvidia.com
+Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
+Stable-dep-of: 36ab7ada64ca ("RDMA/mlx5: Add check for srq max_sge attribute")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/core/device.c              | 1 +
+ drivers/infiniband/hw/cxgb4/qp.c              | 3 +++
+ drivers/infiniband/hw/hns/hns_roce_srq.c      | 4 ++++
+ drivers/infiniband/hw/mlx4/main.c             | 3 ---
+ drivers/infiniband/hw/mlx4/srq.c              | 4 ++++
+ drivers/infiniband/hw/mlx5/main.c             | 3 +--
+ drivers/infiniband/hw/mlx5/srq.c              | 5 +++++
+ drivers/infiniband/hw/ocrdma/ocrdma_verbs.c   | 3 +++
+ drivers/infiniband/hw/qedr/main.c             | 3 ---
+ drivers/infiniband/hw/qedr/verbs.c            | 4 ++++
+ drivers/infiniband/hw/vmw_pvrdma/pvrdma_srq.c | 2 +-
+ drivers/infiniband/sw/rxe/rxe_verbs.c         | 3 +++
+ drivers/infiniband/sw/siw/siw_verbs.c         | 3 +++
+ 13 files changed, 32 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
+index b3c97f4f93b9f..1ceb9fe9382a9 100644
+--- a/drivers/infiniband/core/device.c
++++ b/drivers/infiniband/core/device.c
+@@ -610,6 +610,7 @@ struct ib_device *_ib_alloc_device(size_t size)
+               BIT_ULL(IB_USER_VERBS_CMD_CREATE_CQ) |
+               BIT_ULL(IB_USER_VERBS_CMD_CREATE_QP) |
+               BIT_ULL(IB_USER_VERBS_CMD_CREATE_SRQ) |
++              BIT_ULL(IB_USER_VERBS_CMD_CREATE_XSRQ) |
+               BIT_ULL(IB_USER_VERBS_CMD_DEALLOC_MW) |
+               BIT_ULL(IB_USER_VERBS_CMD_DEALLOC_PD) |
+               BIT_ULL(IB_USER_VERBS_CMD_DEREG_MR) |
+diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
+index 12e5461581cb4..fb361bf9a0cef 100644
+--- a/drivers/infiniband/hw/cxgb4/qp.c
++++ b/drivers/infiniband/hw/cxgb4/qp.c
+@@ -2682,6 +2682,9 @@ int c4iw_create_srq(struct ib_srq *ib_srq, struct ib_srq_init_attr *attrs,
+       int ret;
+       int wr_len;
++      if (attrs->srq_type != IB_SRQT_BASIC)
++              return -EOPNOTSUPP;
++
+       pr_debug("%s ib_pd %p\n", __func__, pd);
+       php = to_c4iw_pd(pd);
+diff --git a/drivers/infiniband/hw/hns/hns_roce_srq.c b/drivers/infiniband/hw/hns/hns_roce_srq.c
+index 02e2416b5fed6..b9d5d5cf10ad3 100644
+--- a/drivers/infiniband/hw/hns/hns_roce_srq.c
++++ b/drivers/infiniband/hw/hns/hns_roce_srq.c
+@@ -292,6 +292,10 @@ int hns_roce_create_srq(struct ib_srq *ib_srq,
+       int ret;
+       u32 cqn;
++      if (init_attr->srq_type != IB_SRQT_BASIC &&
++          init_attr->srq_type != IB_SRQT_XRC)
++              return -EOPNOTSUPP;
++
+       /* Check the actual SRQ wqe and SRQ sge num */
+       if (init_attr->attr.max_wr >= hr_dev->caps.max_srq_wrs ||
+           init_attr->attr.max_sge > hr_dev->caps.max_srq_sges)
+diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
+index 300a0a7827388..77ac0289eef12 100644
+--- a/drivers/infiniband/hw/mlx4/main.c
++++ b/drivers/infiniband/hw/mlx4/main.c
+@@ -2654,9 +2654,6 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
+       ibdev->ib_dev.num_comp_vectors  = dev->caps.num_comp_vectors;
+       ibdev->ib_dev.dev.parent        = &dev->persist->pdev->dev;
+-      ibdev->ib_dev.uverbs_cmd_mask |=
+-              (1ull << IB_USER_VERBS_CMD_CREATE_XSRQ);
+-
+       ib_set_device_ops(&ibdev->ib_dev, &mlx4_ib_dev_ops);
+       ibdev->ib_dev.uverbs_ex_cmd_mask |=
+               (1ull << IB_USER_VERBS_EX_CMD_CREATE_CQ) |
+diff --git a/drivers/infiniband/hw/mlx4/srq.c b/drivers/infiniband/hw/mlx4/srq.c
+index bf618529e734d..6a381751c0d8e 100644
+--- a/drivers/infiniband/hw/mlx4/srq.c
++++ b/drivers/infiniband/hw/mlx4/srq.c
+@@ -86,6 +86,10 @@ int mlx4_ib_create_srq(struct ib_srq *ib_srq,
+       int err;
+       int i;
++      if (init_attr->srq_type != IB_SRQT_BASIC &&
++          init_attr->srq_type != IB_SRQT_XRC)
++              return -EOPNOTSUPP;
++
+       /* Sanity check SRQ size before proceeding */
+       if (init_attr->attr.max_wr  >= dev->dev->caps.max_srq_wqes ||
+           init_attr->attr.max_sge >  dev->dev->caps.max_srq_sge)
+diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
+index 73b46414ddafe..112081c38cb2b 100644
+--- a/drivers/infiniband/hw/mlx5/main.c
++++ b/drivers/infiniband/hw/mlx5/main.c
+@@ -4155,8 +4155,7 @@ static int mlx5_ib_stage_caps_init(struct mlx5_ib_dev *dev)
+       dev->ib_dev.uverbs_cmd_mask |=
+               (1ull << IB_USER_VERBS_CMD_CREATE_AH)           |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_AH)          |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_XSRQ);
++              (1ull << IB_USER_VERBS_CMD_DESTROY_AH);
+       dev->ib_dev.uverbs_ex_cmd_mask |=
+               (1ull << IB_USER_VERBS_EX_CMD_CREATE_CQ)        |
+               (1ull << IB_USER_VERBS_EX_CMD_CREATE_QP)        |
+diff --git a/drivers/infiniband/hw/mlx5/srq.c b/drivers/infiniband/hw/mlx5/srq.c
+index e2f720eec1e18..12d485872e771 100644
+--- a/drivers/infiniband/hw/mlx5/srq.c
++++ b/drivers/infiniband/hw/mlx5/srq.c
+@@ -226,6 +226,11 @@ int mlx5_ib_create_srq(struct ib_srq *ib_srq,
+       struct mlx5_srq_attr in = {};
+       __u32 max_srq_wqes = 1 << MLX5_CAP_GEN(dev->mdev, log_max_srq_sz);
++      if (init_attr->srq_type != IB_SRQT_BASIC &&
++          init_attr->srq_type != IB_SRQT_XRC &&
++          init_attr->srq_type != IB_SRQT_TM)
++              return -EOPNOTSUPP;
++
+       /* Sanity check SRQ size before proceeding */
+       if (init_attr->attr.max_wr >= max_srq_wqes) {
+               mlx5_ib_dbg(dev, "max_wr %d, cap %d\n",
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+index 81a560056cd52..9d047675947fd 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+@@ -1770,6 +1770,9 @@ int ocrdma_create_srq(struct ib_srq *ibsrq, struct ib_srq_init_attr *init_attr,
+       struct ocrdma_dev *dev = get_ocrdma_dev(ibsrq->device);
+       struct ocrdma_srq *srq = get_ocrdma_srq(ibsrq);
++      if (init_attr->srq_type != IB_SRQT_BASIC)
++              return -EOPNOTSUPP;
++
+       if (init_attr->attr.max_sge > dev->attr.max_recv_sge)
+               return -EINVAL;
+       if (init_attr->attr.max_wr > dev->attr.max_rqe)
+diff --git a/drivers/infiniband/hw/qedr/main.c b/drivers/infiniband/hw/qedr/main.c
+index e30edbaa30399..ad4a4b431258d 100644
+--- a/drivers/infiniband/hw/qedr/main.c
++++ b/drivers/infiniband/hw/qedr/main.c
+@@ -188,9 +188,6 @@ static void qedr_roce_register_device(struct qedr_dev *dev)
+       dev->ibdev.node_type = RDMA_NODE_IB_CA;
+       ib_set_device_ops(&dev->ibdev, &qedr_roce_dev_ops);
+-
+-      dev->ibdev.uverbs_cmd_mask |=
+-              QEDR_UVERBS(CREATE_XSRQ);
+ }
+ static const struct ib_device_ops qedr_dev_ops = {
+diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c
+index d382ac21159c2..f8c35bdb55752 100644
+--- a/drivers/infiniband/hw/qedr/verbs.c
++++ b/drivers/infiniband/hw/qedr/verbs.c
+@@ -1547,6 +1547,10 @@ int qedr_create_srq(struct ib_srq *ibsrq, struct ib_srq_init_attr *init_attr,
+                "create SRQ called from %s (pd %p)\n",
+                (udata) ? "User lib" : "kernel", pd);
++      if (init_attr->srq_type != IB_SRQT_BASIC &&
++          init_attr->srq_type != IB_SRQT_XRC)
++              return -EOPNOTSUPP;
++
+       rc = qedr_check_srq_params(dev, init_attr, udata);
+       if (rc)
+               return -EINVAL;
+diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_srq.c b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_srq.c
+index 082208f9aa900..bdc2703532c6c 100644
+--- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_srq.c
++++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_srq.c
+@@ -121,7 +121,7 @@ int pvrdma_create_srq(struct ib_srq *ibsrq, struct ib_srq_init_attr *init_attr,
+               dev_warn(&dev->pdev->dev,
+                        "shared receive queue type %d not supported\n",
+                        init_attr->srq_type);
+-              return -EINVAL;
++              return -EOPNOTSUPP;
+       }
+       if (init_attr->attr.max_wr  > dev->dsr->caps.max_srq_wr ||
+diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
+index 641373241dbe5..1bec084fe2f8b 100644
+--- a/drivers/infiniband/sw/rxe/rxe_verbs.c
++++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
+@@ -265,6 +265,9 @@ static int rxe_create_srq(struct ib_srq *ibsrq, struct ib_srq_init_attr *init,
+       struct rxe_srq *srq = to_rsrq(ibsrq);
+       struct rxe_create_srq_resp __user *uresp = NULL;
++      if (init->srq_type != IB_SRQT_BASIC)
++              return -EOPNOTSUPP;
++
+       if (udata) {
+               if (udata->outlen < sizeof(*uresp))
+                       return -EINVAL;
+diff --git a/drivers/infiniband/sw/siw/siw_verbs.c b/drivers/infiniband/sw/siw/siw_verbs.c
+index 1d4e0dc550e42..ae4619d055374 100644
+--- a/drivers/infiniband/sw/siw/siw_verbs.c
++++ b/drivers/infiniband/sw/siw/siw_verbs.c
+@@ -1592,6 +1592,9 @@ int siw_create_srq(struct ib_srq *base_srq,
+                                         base_ucontext);
+       int rv;
++      if (init_attrs->srq_type != IB_SRQT_BASIC)
++              return -EOPNOTSUPP;
++
+       if (atomic_inc_return(&sdev->num_srq) > SIW_MAX_SRQ) {
+               siw_dbg_pd(base_srq->pd, "too many SRQ's\n");
+               rv = -ENOMEM;
+-- 
+2.43.0
+
diff --git a/queue-5.10/rdma-mlx5-add-check-for-srq-max_sge-attribute.patch b/queue-5.10/rdma-mlx5-add-check-for-srq-max_sge-attribute.patch
new file mode 100644 (file)
index 0000000..e508cf6
--- /dev/null
@@ -0,0 +1,55 @@
+From 1ad882bf8ff7529850cc920ebf7ea361db55dd9d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 28 May 2024 15:52:56 +0300
+Subject: RDMA/mlx5: Add check for srq max_sge attribute
+
+From: Patrisious Haddad <phaddad@nvidia.com>
+
+[ Upstream commit 36ab7ada64caf08f10ee5a114d39964d1f91e81d ]
+
+max_sge attribute is passed by the user, and is inserted and used
+unchecked, so verify that the value doesn't exceed maximum allowed value
+before using it.
+
+Fixes: e126ba97dba9 ("mlx5: Add driver for Mellanox Connect-IB adapters")
+Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
+Link: https://lore.kernel.org/r/277ccc29e8d57bfd53ddeb2ac633f2760cf8cdd0.1716900410.git.leon@kernel.org
+Signed-off-by: Leon Romanovsky <leon@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/hw/mlx5/srq.c | 13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/infiniband/hw/mlx5/srq.c b/drivers/infiniband/hw/mlx5/srq.c
+index 12d485872e771..7df3f32cc6434 100644
+--- a/drivers/infiniband/hw/mlx5/srq.c
++++ b/drivers/infiniband/hw/mlx5/srq.c
+@@ -225,17 +225,20 @@ int mlx5_ib_create_srq(struct ib_srq *ib_srq,
+       int err;
+       struct mlx5_srq_attr in = {};
+       __u32 max_srq_wqes = 1 << MLX5_CAP_GEN(dev->mdev, log_max_srq_sz);
++      __u32 max_sge_sz =  MLX5_CAP_GEN(dev->mdev, max_wqe_sz_rq) /
++                          sizeof(struct mlx5_wqe_data_seg);
+       if (init_attr->srq_type != IB_SRQT_BASIC &&
+           init_attr->srq_type != IB_SRQT_XRC &&
+           init_attr->srq_type != IB_SRQT_TM)
+               return -EOPNOTSUPP;
+-      /* Sanity check SRQ size before proceeding */
+-      if (init_attr->attr.max_wr >= max_srq_wqes) {
+-              mlx5_ib_dbg(dev, "max_wr %d, cap %d\n",
+-                          init_attr->attr.max_wr,
+-                          max_srq_wqes);
++      /* Sanity check SRQ and sge size before proceeding */
++      if (init_attr->attr.max_wr >= max_srq_wqes ||
++          init_attr->attr.max_sge > max_sge_sz) {
++              mlx5_ib_dbg(dev, "max_wr %d,wr_cap %d,max_sge %d, sge_cap:%d\n",
++                          init_attr->attr.max_wr, max_srq_wqes,
++                          init_attr->attr.max_sge, max_sge_sz);
+               return -EINVAL;
+       }
+-- 
+2.43.0
+
diff --git a/queue-5.10/rdma-move-more-uverbs_cmd_mask-settings-to-the-core.patch b/queue-5.10/rdma-move-more-uverbs_cmd_mask-settings-to-the-core.patch
new file mode 100644 (file)
index 0000000..a314625
--- /dev/null
@@ -0,0 +1,455 @@
+From 16d292747c8eba92ed2837d652551b91ecd55364 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 3 Oct 2020 20:20:04 -0300
+Subject: RDMA: Move more uverbs_cmd_mask settings to the core
+
+From: Jason Gunthorpe <jgg@nvidia.com>
+
+[ Upstream commit 44ce37bc8bf30283d16c5e5f20964b638bebd429 ]
+
+These functions all depend on the driver providing a specific op:
+
+- REREG_MR is rereg_user_mr(). bnxt_re set this without providing the op
+- ATTACH/DEATCH_MCAST is attach_mcast()/detach_mcast(). usnic set this
+  without providing the op
+- OPEN_QP doesn't involve the driver but requires a XRCD. qedr provides
+  xrcd but forgot to set it, usnic doesn't provide XRCD but set it anyhow.
+- OPEN/CLOSE_XRCD are the ops alloc_xrcd()/dealloc_xrcd()
+- CREATE_SRQ/DESTROY_SRQ are the ops create_srq()/destroy_srq()
+- QUERY/MODIFY_SRQ is op query_srq()/modify_srq(). hns sets this but
+  sometimes supplies a NULL op.
+- RESIZE_CQ is op resize_cq(). bnxt_re sets this boes doesn't supply an op
+- ALLOC/DEALLOC_MW is alloc_mw()/dealloc_mw(). cxgb4 provided an
+  (now deleted) implementation but no userspace
+
+All drivers were checked that no drivers provide the op without also
+setting uverbs_cmd_mask so this should have no functional change.
+
+Link: https://lore.kernel.org/r/4-v1-caa70ba3d1ab+1436e-ucmd_mask_jgg@nvidia.com
+Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
+Stable-dep-of: 36ab7ada64ca ("RDMA/mlx5: Add check for srq max_sge attribute")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/core/device.c              | 16 ++++++++++++-
+ drivers/infiniband/core/uverbs_cmd.c          |  8 +++----
+ drivers/infiniband/hw/bnxt_re/main.c          |  6 -----
+ drivers/infiniband/hw/cxgb4/provider.c        |  5 +---
+ drivers/infiniband/hw/hns/hns_roce_main.c     | 14 ++---------
+ drivers/infiniband/hw/mlx4/main.c             | 20 ++--------------
+ drivers/infiniband/hw/mlx5/main.c             | 23 +++----------------
+ drivers/infiniband/hw/mthca/mthca_provider.c  | 10 --------
+ drivers/infiniband/hw/ocrdma/ocrdma_main.c    |  5 ----
+ drivers/infiniband/hw/qedr/main.c             |  8 +------
+ drivers/infiniband/hw/usnic/usnic_ib_main.c   |  5 ----
+ .../infiniband/hw/vmw_pvrdma/pvrdma_main.c    |  4 ----
+ drivers/infiniband/sw/rdmavt/vt.c             |  7 ------
+ drivers/infiniband/sw/rxe/rxe_verbs.c         |  9 +-------
+ drivers/infiniband/sw/siw/siw_main.c          |  6 +----
+ 15 files changed, 30 insertions(+), 116 deletions(-)
+
+diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
+index cbb6a7c69360c..b3c97f4f93b9f 100644
+--- a/drivers/infiniband/core/device.c
++++ b/drivers/infiniband/core/device.c
+@@ -284,6 +284,7 @@ static void ib_device_check_mandatory(struct ib_device *device)
+               IB_MANDATORY_FUNC(poll_cq),
+               IB_MANDATORY_FUNC(req_notify_cq),
+               IB_MANDATORY_FUNC(get_dma_mr),
++              IB_MANDATORY_FUNC(reg_user_mr),
+               IB_MANDATORY_FUNC(dereg_mr),
+               IB_MANDATORY_FUNC(get_port_immutable)
+       };
+@@ -601,20 +602,33 @@ struct ib_device *_ib_alloc_device(size_t size)
+       INIT_WORK(&device->unregistration_work, ib_unregister_work);
+       device->uverbs_cmd_mask =
++              BIT_ULL(IB_USER_VERBS_CMD_ALLOC_MW) |
+               BIT_ULL(IB_USER_VERBS_CMD_ALLOC_PD) |
++              BIT_ULL(IB_USER_VERBS_CMD_ATTACH_MCAST) |
++              BIT_ULL(IB_USER_VERBS_CMD_CLOSE_XRCD) |
+               BIT_ULL(IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+               BIT_ULL(IB_USER_VERBS_CMD_CREATE_CQ) |
+               BIT_ULL(IB_USER_VERBS_CMD_CREATE_QP) |
++              BIT_ULL(IB_USER_VERBS_CMD_CREATE_SRQ) |
++              BIT_ULL(IB_USER_VERBS_CMD_DEALLOC_MW) |
+               BIT_ULL(IB_USER_VERBS_CMD_DEALLOC_PD) |
+               BIT_ULL(IB_USER_VERBS_CMD_DEREG_MR) |
+               BIT_ULL(IB_USER_VERBS_CMD_DESTROY_CQ) |
+               BIT_ULL(IB_USER_VERBS_CMD_DESTROY_QP) |
++              BIT_ULL(IB_USER_VERBS_CMD_DESTROY_SRQ) |
++              BIT_ULL(IB_USER_VERBS_CMD_DETACH_MCAST) |
+               BIT_ULL(IB_USER_VERBS_CMD_GET_CONTEXT) |
+               BIT_ULL(IB_USER_VERBS_CMD_MODIFY_QP) |
++              BIT_ULL(IB_USER_VERBS_CMD_MODIFY_SRQ) |
++              BIT_ULL(IB_USER_VERBS_CMD_OPEN_QP) |
++              BIT_ULL(IB_USER_VERBS_CMD_OPEN_XRCD) |
+               BIT_ULL(IB_USER_VERBS_CMD_QUERY_DEVICE) |
+               BIT_ULL(IB_USER_VERBS_CMD_QUERY_PORT) |
+               BIT_ULL(IB_USER_VERBS_CMD_QUERY_QP) |
+-              BIT_ULL(IB_USER_VERBS_CMD_REG_MR);
++              BIT_ULL(IB_USER_VERBS_CMD_QUERY_SRQ) |
++              BIT_ULL(IB_USER_VERBS_CMD_REG_MR) |
++              BIT_ULL(IB_USER_VERBS_CMD_REREG_MR) |
++              BIT_ULL(IB_USER_VERBS_CMD_RESIZE_CQ);
+       device->uverbs_ex_cmd_mask =
+               BIT_ULL(IB_USER_VERBS_EX_CMD_CREATE_FLOW) |
+diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
+index 158f9eadc4e95..36fb509ea24b3 100644
+--- a/drivers/infiniband/core/uverbs_cmd.c
++++ b/drivers/infiniband/core/uverbs_cmd.c
+@@ -4024,8 +4024,7 @@ const struct uapi_definition uverbs_def_write_intf[] = {
+               DECLARE_UVERBS_WRITE(
+                       IB_USER_VERBS_CMD_CLOSE_XRCD,
+                       ib_uverbs_close_xrcd,
+-                      UAPI_DEF_WRITE_I(struct ib_uverbs_close_xrcd),
+-                      UAPI_DEF_METHOD_NEEDS_FN(dealloc_xrcd)),
++                      UAPI_DEF_WRITE_I(struct ib_uverbs_close_xrcd)),
+               DECLARE_UVERBS_WRITE(IB_USER_VERBS_CMD_OPEN_QP,
+                                    ib_uverbs_open_qp,
+                                    UAPI_DEF_WRITE_UDATA_IO(
+@@ -4035,8 +4034,9 @@ const struct uapi_definition uverbs_def_write_intf[] = {
+                                    ib_uverbs_open_xrcd,
+                                    UAPI_DEF_WRITE_UDATA_IO(
+                                            struct ib_uverbs_open_xrcd,
+-                                           struct ib_uverbs_open_xrcd_resp),
+-                                   UAPI_DEF_METHOD_NEEDS_FN(alloc_xrcd))),
++                                           struct ib_uverbs_open_xrcd_resp)),
++              UAPI_DEF_OBJ_NEEDS_FN(alloc_xrcd),
++              UAPI_DEF_OBJ_NEEDS_FN(dealloc_xrcd)),
+       {},
+ };
+diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c
+index 0be439c73bef4..195fbfe1d13d5 100644
+--- a/drivers/infiniband/hw/bnxt_re/main.c
++++ b/drivers/infiniband/hw/bnxt_re/main.c
+@@ -711,12 +711,6 @@ static int bnxt_re_register_ib(struct bnxt_re_dev *rdev)
+       /* User space */
+       ibdev->uverbs_cmd_mask |=
+-                      (1ull << IB_USER_VERBS_CMD_REREG_MR)            |
+-                      (1ull << IB_USER_VERBS_CMD_RESIZE_CQ)           |
+-                      (1ull << IB_USER_VERBS_CMD_CREATE_SRQ)          |
+-                      (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ)          |
+-                      (1ull << IB_USER_VERBS_CMD_QUERY_SRQ)           |
+-                      (1ull << IB_USER_VERBS_CMD_DESTROY_SRQ)         |
+                       (1ull << IB_USER_VERBS_CMD_CREATE_AH)           |
+                       (1ull << IB_USER_VERBS_CMD_MODIFY_AH)           |
+                       (1ull << IB_USER_VERBS_CMD_QUERY_AH)            |
+diff --git a/drivers/infiniband/hw/cxgb4/provider.c b/drivers/infiniband/hw/cxgb4/provider.c
+index c692407dcaa40..49c173ae76b69 100644
+--- a/drivers/infiniband/hw/cxgb4/provider.c
++++ b/drivers/infiniband/hw/cxgb4/provider.c
+@@ -537,10 +537,7 @@ void c4iw_register_device(struct work_struct *work)
+           (1ull << IB_USER_VERBS_CMD_REQ_NOTIFY_CQ) |
+           (1ull << IB_USER_VERBS_CMD_POLL_CQ) |
+           (1ull << IB_USER_VERBS_CMD_POST_SEND) |
+-          (1ull << IB_USER_VERBS_CMD_POST_RECV) |
+-          (1ull << IB_USER_VERBS_CMD_CREATE_SRQ) |
+-          (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ) |
+-          (1ull << IB_USER_VERBS_CMD_DESTROY_SRQ);
++          (1ull << IB_USER_VERBS_CMD_POST_RECV);
+       dev->ibdev.node_type = RDMA_NODE_RNIC;
+       BUILD_BUG_ON(sizeof(C4IW_NODE_DESC) > IB_DEVICE_NODE_DESC_MAX);
+       memcpy(dev->ibdev.node_desc, C4IW_NODE_DESC, sizeof(C4IW_NODE_DESC));
+diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband/hw/hns/hns_roce_main.c
+index 3956da653901b..9352f0a3073e6 100644
+--- a/drivers/infiniband/hw/hns/hns_roce_main.c
++++ b/drivers/infiniband/hw/hns/hns_roce_main.c
+@@ -496,18 +496,12 @@ static int hns_roce_register_device(struct hns_roce_dev *hr_dev)
+       ib_dev->local_dma_lkey = hr_dev->caps.reserved_lkey;
+       ib_dev->num_comp_vectors = hr_dev->caps.num_comp_vectors;
+-      if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_REREG_MR) {
+-              ib_dev->uverbs_cmd_mask |= (1ULL << IB_USER_VERBS_CMD_REREG_MR);
++      if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_REREG_MR)
+               ib_set_device_ops(ib_dev, &hns_roce_dev_mr_ops);
+-      }
+       /* MW */
+-      if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_MW) {
+-              ib_dev->uverbs_cmd_mask |=
+-                                      (1ULL << IB_USER_VERBS_CMD_ALLOC_MW) |
+-                                      (1ULL << IB_USER_VERBS_CMD_DEALLOC_MW);
++      if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_MW)
+               ib_set_device_ops(ib_dev, &hns_roce_dev_mw_ops);
+-      }
+       /* FRMR */
+       if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_FRMR)
+@@ -516,10 +510,6 @@ static int hns_roce_register_device(struct hns_roce_dev *hr_dev)
+       /* SRQ */
+       if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_SRQ) {
+               ib_dev->uverbs_cmd_mask |=
+-                              (1ULL << IB_USER_VERBS_CMD_CREATE_SRQ) |
+-                              (1ULL << IB_USER_VERBS_CMD_MODIFY_SRQ) |
+-                              (1ULL << IB_USER_VERBS_CMD_QUERY_SRQ) |
+-                              (1ULL << IB_USER_VERBS_CMD_DESTROY_SRQ) |
+                               (1ULL << IB_USER_VERBS_CMD_POST_SRQ_RECV);
+               ib_set_device_ops(ib_dev, &hns_roce_dev_srq_ops);
+               ib_set_device_ops(ib_dev, hr_dev->hw->hns_roce_dev_srq_ops);
+diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
+index 6058128b0f56a..300a0a7827388 100644
+--- a/drivers/infiniband/hw/mlx4/main.c
++++ b/drivers/infiniband/hw/mlx4/main.c
+@@ -2655,16 +2655,7 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
+       ibdev->ib_dev.dev.parent        = &dev->persist->pdev->dev;
+       ibdev->ib_dev.uverbs_cmd_mask |=
+-              (1ull << IB_USER_VERBS_CMD_REREG_MR)            |
+-              (1ull << IB_USER_VERBS_CMD_RESIZE_CQ)           |
+-              (1ull << IB_USER_VERBS_CMD_ATTACH_MCAST)        |
+-              (1ull << IB_USER_VERBS_CMD_DETACH_MCAST)        |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_SRQ)          |
+-              (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ)          |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_SRQ)           |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_SRQ)         |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_XSRQ)         |
+-              (1ull << IB_USER_VERBS_CMD_OPEN_QP);
++              (1ull << IB_USER_VERBS_CMD_CREATE_XSRQ);
+       ib_set_device_ops(&ibdev->ib_dev, &mlx4_ib_dev_ops);
+       ibdev->ib_dev.uverbs_ex_cmd_mask |=
+@@ -2679,17 +2670,10 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
+               ib_set_device_ops(&ibdev->ib_dev, &mlx4_ib_dev_wq_ops);
+       if (dev->caps.flags & MLX4_DEV_CAP_FLAG_MEM_WINDOW ||
+-          dev->caps.bmme_flags & MLX4_BMME_FLAG_TYPE_2_WIN) {
+-              ibdev->ib_dev.uverbs_cmd_mask |=
+-                      (1ull << IB_USER_VERBS_CMD_ALLOC_MW) |
+-                      (1ull << IB_USER_VERBS_CMD_DEALLOC_MW);
++          dev->caps.bmme_flags & MLX4_BMME_FLAG_TYPE_2_WIN)
+               ib_set_device_ops(&ibdev->ib_dev, &mlx4_ib_dev_mw_ops);
+-      }
+       if (dev->caps.flags & MLX4_DEV_CAP_FLAG_XRC) {
+-              ibdev->ib_dev.uverbs_cmd_mask |=
+-                      (1ull << IB_USER_VERBS_CMD_OPEN_XRCD) |
+-                      (1ull << IB_USER_VERBS_CMD_CLOSE_XRCD);
+               ib_set_device_ops(&ibdev->ib_dev, &mlx4_ib_dev_xrc_ops);
+       }
+diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
+index 4e83ba99877fd..73b46414ddafe 100644
+--- a/drivers/infiniband/hw/mlx5/main.c
++++ b/drivers/infiniband/hw/mlx5/main.c
+@@ -4156,16 +4156,7 @@ static int mlx5_ib_stage_caps_init(struct mlx5_ib_dev *dev)
+       dev->ib_dev.uverbs_cmd_mask |=
+               (1ull << IB_USER_VERBS_CMD_CREATE_AH)           |
+               (1ull << IB_USER_VERBS_CMD_DESTROY_AH)          |
+-              (1ull << IB_USER_VERBS_CMD_REREG_MR)            |
+-              (1ull << IB_USER_VERBS_CMD_RESIZE_CQ)           |
+-              (1ull << IB_USER_VERBS_CMD_ATTACH_MCAST)        |
+-              (1ull << IB_USER_VERBS_CMD_DETACH_MCAST)        |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_SRQ)          |
+-              (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ)          |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_SRQ)           |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_SRQ)         |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_XSRQ)         |
+-              (1ull << IB_USER_VERBS_CMD_OPEN_QP);
++              (1ull << IB_USER_VERBS_CMD_CREATE_XSRQ);
+       dev->ib_dev.uverbs_ex_cmd_mask |=
+               (1ull << IB_USER_VERBS_EX_CMD_CREATE_CQ)        |
+               (1ull << IB_USER_VERBS_EX_CMD_CREATE_QP)        |
+@@ -4181,19 +4172,11 @@ static int mlx5_ib_stage_caps_init(struct mlx5_ib_dev *dev)
+       dev->umr_fence = mlx5_get_umr_fence(MLX5_CAP_GEN(mdev, umr_fence));
+-      if (MLX5_CAP_GEN(mdev, imaicl)) {
+-              dev->ib_dev.uverbs_cmd_mask |=
+-                      (1ull << IB_USER_VERBS_CMD_ALLOC_MW)    |
+-                      (1ull << IB_USER_VERBS_CMD_DEALLOC_MW);
++      if (MLX5_CAP_GEN(mdev, imaicl))
+               ib_set_device_ops(&dev->ib_dev, &mlx5_ib_dev_mw_ops);
+-      }
+-      if (MLX5_CAP_GEN(mdev, xrc)) {
+-              dev->ib_dev.uverbs_cmd_mask |=
+-                      (1ull << IB_USER_VERBS_CMD_OPEN_XRCD) |
+-                      (1ull << IB_USER_VERBS_CMD_CLOSE_XRCD);
++      if (MLX5_CAP_GEN(mdev, xrc))
+               ib_set_device_ops(&dev->ib_dev, &mlx5_ib_dev_xrc_ops);
+-      }
+       if (MLX5_CAP_DEV_MEM(mdev, memic) ||
+           MLX5_CAP_GEN_64(dev->mdev, general_obj_types) &
+diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c
+index 86840afcfba63..ea4a8deabfb6f 100644
+--- a/drivers/infiniband/hw/mthca/mthca_provider.c
++++ b/drivers/infiniband/hw/mthca/mthca_provider.c
+@@ -1158,22 +1158,12 @@ int mthca_register_device(struct mthca_dev *dev)
+       if (ret)
+               return ret;
+-      dev->ib_dev.uverbs_cmd_mask |=
+-              (1ull << IB_USER_VERBS_CMD_RESIZE_CQ)           |
+-              (1ull << IB_USER_VERBS_CMD_ATTACH_MCAST)        |
+-              (1ull << IB_USER_VERBS_CMD_DETACH_MCAST);
+       dev->ib_dev.node_type            = RDMA_NODE_IB_CA;
+       dev->ib_dev.phys_port_cnt        = dev->limits.num_ports;
+       dev->ib_dev.num_comp_vectors     = 1;
+       dev->ib_dev.dev.parent           = &dev->pdev->dev;
+       if (dev->mthca_flags & MTHCA_FLAG_SRQ) {
+-              dev->ib_dev.uverbs_cmd_mask     |=
+-                      (1ull << IB_USER_VERBS_CMD_CREATE_SRQ)          |
+-                      (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ)          |
+-                      (1ull << IB_USER_VERBS_CMD_QUERY_SRQ)           |
+-                      (1ull << IB_USER_VERBS_CMD_DESTROY_SRQ);
+-
+               if (mthca_is_memfree(dev))
+                       ib_set_device_ops(&dev->ib_dev,
+                                         &mthca_dev_arbel_srq_ops);
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_main.c b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+index e6611a7e8eeb2..b5c8b5a9a0939 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_main.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+@@ -205,7 +205,6 @@ static int ocrdma_register_device(struct ocrdma_dev *dev)
+       memcpy(dev->ibdev.node_desc, OCRDMA_NODE_DESC,
+              sizeof(OCRDMA_NODE_DESC));
+       dev->ibdev.uverbs_cmd_mask |=
+-          OCRDMA_UVERBS(RESIZE_CQ) |
+           OCRDMA_UVERBS(REQ_NOTIFY_CQ) |
+           OCRDMA_UVERBS(POLL_CQ) |
+           OCRDMA_UVERBS(POST_SEND) |
+@@ -228,10 +227,6 @@ static int ocrdma_register_device(struct ocrdma_dev *dev)
+       if (ocrdma_get_asic_type(dev) == OCRDMA_ASIC_GEN_SKH_R) {
+               dev->ibdev.uverbs_cmd_mask |=
+-                   OCRDMA_UVERBS(CREATE_SRQ) |
+-                   OCRDMA_UVERBS(MODIFY_SRQ) |
+-                   OCRDMA_UVERBS(QUERY_SRQ) |
+-                   OCRDMA_UVERBS(DESTROY_SRQ) |
+                    OCRDMA_UVERBS(POST_SRQ_RECV);
+               ib_set_device_ops(&dev->ibdev, &ocrdma_dev_srq_ops);
+diff --git a/drivers/infiniband/hw/qedr/main.c b/drivers/infiniband/hw/qedr/main.c
+index 9ba44d9dbd1d3..e30edbaa30399 100644
+--- a/drivers/infiniband/hw/qedr/main.c
++++ b/drivers/infiniband/hw/qedr/main.c
+@@ -189,8 +189,7 @@ static void qedr_roce_register_device(struct qedr_dev *dev)
+       ib_set_device_ops(&dev->ibdev, &qedr_roce_dev_ops);
+-      dev->ibdev.uverbs_cmd_mask |= QEDR_UVERBS(OPEN_XRCD) |
+-              QEDR_UVERBS(CLOSE_XRCD) |
++      dev->ibdev.uverbs_cmd_mask |=
+               QEDR_UVERBS(CREATE_XSRQ);
+ }
+@@ -250,12 +249,7 @@ static int qedr_register_device(struct qedr_dev *dev)
+       memcpy(dev->ibdev.node_desc, QEDR_NODE_DESC, sizeof(QEDR_NODE_DESC));
+       dev->ibdev.uverbs_cmd_mask |=
+-                                   QEDR_UVERBS(RESIZE_CQ) |
+                                    QEDR_UVERBS(REQ_NOTIFY_CQ) |
+-                                   QEDR_UVERBS(CREATE_SRQ) |
+-                                   QEDR_UVERBS(DESTROY_SRQ) |
+-                                   QEDR_UVERBS(QUERY_SRQ) |
+-                                   QEDR_UVERBS(MODIFY_SRQ) |
+                                    QEDR_UVERBS(POST_SRQ_RECV) |
+                                    QEDR_UVERBS(POLL_CQ) |
+                                    QEDR_UVERBS(POST_SEND) |
+diff --git a/drivers/infiniband/hw/usnic/usnic_ib_main.c b/drivers/infiniband/hw/usnic/usnic_ib_main.c
+index 7db5c1c7d06d2..1b63a491fa72d 100644
+--- a/drivers/infiniband/hw/usnic/usnic_ib_main.c
++++ b/drivers/infiniband/hw/usnic/usnic_ib_main.c
+@@ -398,11 +398,6 @@ static void *usnic_ib_device_add(struct pci_dev *dev)
+       us_ibdev->ib_dev.num_comp_vectors = USNIC_IB_NUM_COMP_VECTORS;
+       us_ibdev->ib_dev.dev.parent = &dev->dev;
+-      us_ibdev->ib_dev.uverbs_cmd_mask |=
+-              (1ull << IB_USER_VERBS_CMD_ATTACH_MCAST) |
+-              (1ull << IB_USER_VERBS_CMD_DETACH_MCAST) |
+-              (1ull << IB_USER_VERBS_CMD_OPEN_QP);
+-
+       ib_set_device_ops(&us_ibdev->ib_dev, &usnic_dev_ops);
+       rdma_set_device_sysfs_group(&us_ibdev->ib_dev, &usnic_attr_group);
+diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
+index 223977703f935..db19feabf51a9 100644
+--- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
++++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
+@@ -236,10 +236,6 @@ static int pvrdma_register_device(struct pvrdma_dev *dev)
+       /* Check if SRQ is supported by backend */
+       if (dev->dsr->caps.max_srq) {
+               dev->ib_dev.uverbs_cmd_mask |=
+-                      (1ull << IB_USER_VERBS_CMD_CREATE_SRQ)  |
+-                      (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ)  |
+-                      (1ull << IB_USER_VERBS_CMD_QUERY_SRQ)   |
+-                      (1ull << IB_USER_VERBS_CMD_DESTROY_SRQ) |
+                       (1ull << IB_USER_VERBS_CMD_POST_SRQ_RECV);
+               ib_set_device_ops(&dev->ib_dev, &pvrdma_dev_srq_ops);
+diff --git a/drivers/infiniband/sw/rdmavt/vt.c b/drivers/infiniband/sw/rdmavt/vt.c
+index 151e4acc26bd5..f1ec0311e5cc8 100644
+--- a/drivers/infiniband/sw/rdmavt/vt.c
++++ b/drivers/infiniband/sw/rdmavt/vt.c
+@@ -593,17 +593,10 @@ int rvt_register_device(struct rvt_dev_info *rdi)
+               (1ull << IB_USER_VERBS_CMD_MODIFY_AH)           |
+               (1ull << IB_USER_VERBS_CMD_QUERY_AH)            |
+               (1ull << IB_USER_VERBS_CMD_DESTROY_AH)          |
+-              (1ull << IB_USER_VERBS_CMD_RESIZE_CQ)           |
+               (1ull << IB_USER_VERBS_CMD_POLL_CQ)             |
+               (1ull << IB_USER_VERBS_CMD_REQ_NOTIFY_CQ)       |
+               (1ull << IB_USER_VERBS_CMD_POST_SEND)           |
+               (1ull << IB_USER_VERBS_CMD_POST_RECV)           |
+-              (1ull << IB_USER_VERBS_CMD_ATTACH_MCAST)        |
+-              (1ull << IB_USER_VERBS_CMD_DETACH_MCAST)        |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_SRQ)          |
+-              (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ)          |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_SRQ)           |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_SRQ)         |
+               (1ull << IB_USER_VERBS_CMD_POST_SRQ_RECV);
+       rdi->ibdev.node_type = RDMA_NODE_IB_CA;
+       if (!rdi->ibdev.num_comp_vectors)
+diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
+index 8f63d0f186d7c..641373241dbe5 100644
+--- a/drivers/infiniband/sw/rxe/rxe_verbs.c
++++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
+@@ -1129,14 +1129,9 @@ int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name)
+                           rxe->ndev->dev_addr);
+       dev->uverbs_cmd_mask |=
+-          BIT_ULL(IB_USER_VERBS_CMD_CREATE_SRQ)
+-          | BIT_ULL(IB_USER_VERBS_CMD_MODIFY_SRQ)
+-          | BIT_ULL(IB_USER_VERBS_CMD_QUERY_SRQ)
+-          | BIT_ULL(IB_USER_VERBS_CMD_DESTROY_SRQ)
+-          | BIT_ULL(IB_USER_VERBS_CMD_POST_SRQ_RECV)
++          BIT_ULL(IB_USER_VERBS_CMD_POST_SRQ_RECV)
+           | BIT_ULL(IB_USER_VERBS_CMD_POST_SEND)
+           | BIT_ULL(IB_USER_VERBS_CMD_POST_RECV)
+-          | BIT_ULL(IB_USER_VERBS_CMD_RESIZE_CQ)
+           | BIT_ULL(IB_USER_VERBS_CMD_POLL_CQ)
+           | BIT_ULL(IB_USER_VERBS_CMD_PEEK_CQ)
+           | BIT_ULL(IB_USER_VERBS_CMD_REQ_NOTIFY_CQ)
+@@ -1144,8 +1139,6 @@ int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name)
+           | BIT_ULL(IB_USER_VERBS_CMD_MODIFY_AH)
+           | BIT_ULL(IB_USER_VERBS_CMD_QUERY_AH)
+           | BIT_ULL(IB_USER_VERBS_CMD_DESTROY_AH)
+-          | BIT_ULL(IB_USER_VERBS_CMD_ATTACH_MCAST)
+-          | BIT_ULL(IB_USER_VERBS_CMD_DETACH_MCAST)
+           ;
+       ib_set_device_ops(dev, &rxe_dev_ops);
+diff --git a/drivers/infiniband/sw/siw/siw_main.c b/drivers/infiniband/sw/siw/siw_main.c
+index 7c6f534590b19..8d66a4a4a6ca6 100644
+--- a/drivers/infiniband/sw/siw/siw_main.c
++++ b/drivers/infiniband/sw/siw/siw_main.c
+@@ -335,11 +335,7 @@ static struct siw_device *siw_device_create(struct net_device *netdev)
+               (1ull << IB_USER_VERBS_CMD_REQ_NOTIFY_CQ) |
+               (1ull << IB_USER_VERBS_CMD_POST_SEND) |
+               (1ull << IB_USER_VERBS_CMD_POST_RECV) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_SRQ) |
+-              (1ull << IB_USER_VERBS_CMD_POST_SRQ_RECV) |
+-              (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ) |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_SRQ) |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_SRQ);
++              (1ull << IB_USER_VERBS_CMD_POST_SRQ_RECV);
+       base_dev->node_type = RDMA_NODE_RNIC;
+       memcpy(base_dev->node_desc, SIW_NODE_DESC_COMMON,
+-- 
+2.43.0
+
diff --git a/queue-5.10/rdma-remove-elements-in-uverbs_cmd_mask-that-all-dri.patch b/queue-5.10/rdma-remove-elements-in-uverbs_cmd_mask-that-all-dri.patch
new file mode 100644 (file)
index 0000000..889c26b
--- /dev/null
@@ -0,0 +1,515 @@
+From d1d6dbce8b7a3a750b3a720123af9a4508f169bd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 3 Oct 2020 20:20:03 -0300
+Subject: RDMA: Remove elements in uverbs_cmd_mask that all drivers set
+
+From: Jason Gunthorpe <jgg@nvidia.com>
+
+[ Upstream commit c074bb1e30f9b51032245300798613a290e42f25 ]
+
+This is a step toward eliminating uverbs_cmd_mask. Preset this list in the
+core code. Only the op reg_user_mr wasn't already being required from the
+drivers.
+
+Link: https://lore.kernel.org/r/3-v1-caa70ba3d1ab+1436e-ucmd_mask_jgg@nvidia.com
+Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
+Stable-dep-of: 36ab7ada64ca ("RDMA/mlx5: Add check for srq max_sge attribute")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/core/device.c               | 16 ++++++++++++++++
+ drivers/infiniband/hw/bnxt_re/main.c           | 16 +---------------
+ drivers/infiniband/hw/cxgb4/provider.c         | 16 +---------------
+ drivers/infiniband/hw/efa/efa_main.c           | 16 +---------------
+ drivers/infiniband/hw/hns/hns_roce_main.c      | 15 ---------------
+ drivers/infiniband/hw/i40iw/i40iw_verbs.c      | 16 +---------------
+ drivers/infiniband/hw/mlx4/main.c              | 16 +---------------
+ drivers/infiniband/hw/mlx5/main.c              | 16 +---------------
+ drivers/infiniband/hw/mthca/mthca_provider.c   | 16 +---------------
+ drivers/infiniband/hw/ocrdma/ocrdma_main.c     | 16 +---------------
+ drivers/infiniband/hw/qedr/main.c              | 15 +--------------
+ drivers/infiniband/hw/usnic/usnic_ib_main.c    | 16 +---------------
+ drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c | 16 +---------------
+ drivers/infiniband/sw/rdmavt/vt.c              | 16 +---------------
+ drivers/infiniband/sw/rxe/rxe_verbs.c          | 17 ++---------------
+ drivers/infiniband/sw/siw/siw_main.c           | 16 +---------------
+ 16 files changed, 31 insertions(+), 224 deletions(-)
+
+diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
+index 94c3bad72cc59..cbb6a7c69360c 100644
+--- a/drivers/infiniband/core/device.c
++++ b/drivers/infiniband/core/device.c
+@@ -600,6 +600,22 @@ struct ib_device *_ib_alloc_device(size_t size)
+       init_completion(&device->unreg_completion);
+       INIT_WORK(&device->unregistration_work, ib_unregister_work);
++      device->uverbs_cmd_mask =
++              BIT_ULL(IB_USER_VERBS_CMD_ALLOC_PD) |
++              BIT_ULL(IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
++              BIT_ULL(IB_USER_VERBS_CMD_CREATE_CQ) |
++              BIT_ULL(IB_USER_VERBS_CMD_CREATE_QP) |
++              BIT_ULL(IB_USER_VERBS_CMD_DEALLOC_PD) |
++              BIT_ULL(IB_USER_VERBS_CMD_DEREG_MR) |
++              BIT_ULL(IB_USER_VERBS_CMD_DESTROY_CQ) |
++              BIT_ULL(IB_USER_VERBS_CMD_DESTROY_QP) |
++              BIT_ULL(IB_USER_VERBS_CMD_GET_CONTEXT) |
++              BIT_ULL(IB_USER_VERBS_CMD_MODIFY_QP) |
++              BIT_ULL(IB_USER_VERBS_CMD_QUERY_DEVICE) |
++              BIT_ULL(IB_USER_VERBS_CMD_QUERY_PORT) |
++              BIT_ULL(IB_USER_VERBS_CMD_QUERY_QP) |
++              BIT_ULL(IB_USER_VERBS_CMD_REG_MR);
++
+       device->uverbs_ex_cmd_mask =
+               BIT_ULL(IB_USER_VERBS_EX_CMD_CREATE_FLOW) |
+               BIT_ULL(IB_USER_VERBS_EX_CMD_CREATE_RWQ_IND_TBL) |
+diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c
+index 76030eac49a37..0be439c73bef4 100644
+--- a/drivers/infiniband/hw/bnxt_re/main.c
++++ b/drivers/infiniband/hw/bnxt_re/main.c
+@@ -710,23 +710,9 @@ static int bnxt_re_register_ib(struct bnxt_re_dev *rdev)
+       ibdev->local_dma_lkey = BNXT_QPLIB_RSVD_LKEY;
+       /* User space */
+-      ibdev->uverbs_cmd_mask =
+-                      (1ull << IB_USER_VERBS_CMD_GET_CONTEXT)         |
+-                      (1ull << IB_USER_VERBS_CMD_QUERY_DEVICE)        |
+-                      (1ull << IB_USER_VERBS_CMD_QUERY_PORT)          |
+-                      (1ull << IB_USER_VERBS_CMD_ALLOC_PD)            |
+-                      (1ull << IB_USER_VERBS_CMD_DEALLOC_PD)          |
+-                      (1ull << IB_USER_VERBS_CMD_REG_MR)              |
++      ibdev->uverbs_cmd_mask |=
+                       (1ull << IB_USER_VERBS_CMD_REREG_MR)            |
+-                      (1ull << IB_USER_VERBS_CMD_DEREG_MR)            |
+-                      (1ull << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+-                      (1ull << IB_USER_VERBS_CMD_CREATE_CQ)           |
+                       (1ull << IB_USER_VERBS_CMD_RESIZE_CQ)           |
+-                      (1ull << IB_USER_VERBS_CMD_DESTROY_CQ)          |
+-                      (1ull << IB_USER_VERBS_CMD_CREATE_QP)           |
+-                      (1ull << IB_USER_VERBS_CMD_MODIFY_QP)           |
+-                      (1ull << IB_USER_VERBS_CMD_QUERY_QP)            |
+-                      (1ull << IB_USER_VERBS_CMD_DESTROY_QP)          |
+                       (1ull << IB_USER_VERBS_CMD_CREATE_SRQ)          |
+                       (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ)          |
+                       (1ull << IB_USER_VERBS_CMD_QUERY_SRQ)           |
+diff --git a/drivers/infiniband/hw/cxgb4/provider.c b/drivers/infiniband/hw/cxgb4/provider.c
+index 8138c57a1e43b..c692407dcaa40 100644
+--- a/drivers/infiniband/hw/cxgb4/provider.c
++++ b/drivers/infiniband/hw/cxgb4/provider.c
+@@ -533,23 +533,9 @@ void c4iw_register_device(struct work_struct *work)
+       if (fastreg_support)
+               dev->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
+       dev->ibdev.local_dma_lkey = 0;
+-      dev->ibdev.uverbs_cmd_mask =
+-          (1ull << IB_USER_VERBS_CMD_GET_CONTEXT) |
+-          (1ull << IB_USER_VERBS_CMD_QUERY_DEVICE) |
+-          (1ull << IB_USER_VERBS_CMD_QUERY_PORT) |
+-          (1ull << IB_USER_VERBS_CMD_ALLOC_PD) |
+-          (1ull << IB_USER_VERBS_CMD_DEALLOC_PD) |
+-          (1ull << IB_USER_VERBS_CMD_REG_MR) |
+-          (1ull << IB_USER_VERBS_CMD_DEREG_MR) |
+-          (1ull << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+-          (1ull << IB_USER_VERBS_CMD_CREATE_CQ) |
+-          (1ull << IB_USER_VERBS_CMD_DESTROY_CQ) |
++      dev->ibdev.uverbs_cmd_mask |=
+           (1ull << IB_USER_VERBS_CMD_REQ_NOTIFY_CQ) |
+-          (1ull << IB_USER_VERBS_CMD_CREATE_QP) |
+-          (1ull << IB_USER_VERBS_CMD_MODIFY_QP) |
+-          (1ull << IB_USER_VERBS_CMD_QUERY_QP) |
+           (1ull << IB_USER_VERBS_CMD_POLL_CQ) |
+-          (1ull << IB_USER_VERBS_CMD_DESTROY_QP) |
+           (1ull << IB_USER_VERBS_CMD_POST_SEND) |
+           (1ull << IB_USER_VERBS_CMD_POST_RECV) |
+           (1ull << IB_USER_VERBS_CMD_CREATE_SRQ) |
+diff --git a/drivers/infiniband/hw/efa/efa_main.c b/drivers/infiniband/hw/efa/efa_main.c
+index cd41cd114ab63..ead0f84a323eb 100644
+--- a/drivers/infiniband/hw/efa/efa_main.c
++++ b/drivers/infiniband/hw/efa/efa_main.c
+@@ -308,21 +308,7 @@ static int efa_ib_device_add(struct efa_dev *dev)
+       dev->ibdev.num_comp_vectors = 1;
+       dev->ibdev.dev.parent = &pdev->dev;
+-      dev->ibdev.uverbs_cmd_mask =
+-              (1ull << IB_USER_VERBS_CMD_GET_CONTEXT) |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_DEVICE) |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_PORT) |
+-              (1ull << IB_USER_VERBS_CMD_ALLOC_PD) |
+-              (1ull << IB_USER_VERBS_CMD_DEALLOC_PD) |
+-              (1ull << IB_USER_VERBS_CMD_REG_MR) |
+-              (1ull << IB_USER_VERBS_CMD_DEREG_MR) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_CQ) |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_CQ) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_QP) |
+-              (1ull << IB_USER_VERBS_CMD_MODIFY_QP) |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_QP) |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_QP) |
++      dev->ibdev.uverbs_cmd_mask |=
+               (1ull << IB_USER_VERBS_CMD_CREATE_AH) |
+               (1ull << IB_USER_VERBS_CMD_DESTROY_AH);
+diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband/hw/hns/hns_roce_main.c
+index f62162771db51..3956da653901b 100644
+--- a/drivers/infiniband/hw/hns/hns_roce_main.c
++++ b/drivers/infiniband/hw/hns/hns_roce_main.c
+@@ -495,21 +495,6 @@ static int hns_roce_register_device(struct hns_roce_dev *hr_dev)
+       ib_dev->phys_port_cnt = hr_dev->caps.num_ports;
+       ib_dev->local_dma_lkey = hr_dev->caps.reserved_lkey;
+       ib_dev->num_comp_vectors = hr_dev->caps.num_comp_vectors;
+-      ib_dev->uverbs_cmd_mask =
+-              (1ULL << IB_USER_VERBS_CMD_GET_CONTEXT) |
+-              (1ULL << IB_USER_VERBS_CMD_QUERY_DEVICE) |
+-              (1ULL << IB_USER_VERBS_CMD_QUERY_PORT) |
+-              (1ULL << IB_USER_VERBS_CMD_ALLOC_PD) |
+-              (1ULL << IB_USER_VERBS_CMD_DEALLOC_PD) |
+-              (1ULL << IB_USER_VERBS_CMD_REG_MR) |
+-              (1ULL << IB_USER_VERBS_CMD_DEREG_MR) |
+-              (1ULL << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+-              (1ULL << IB_USER_VERBS_CMD_CREATE_CQ) |
+-              (1ULL << IB_USER_VERBS_CMD_DESTROY_CQ) |
+-              (1ULL << IB_USER_VERBS_CMD_CREATE_QP) |
+-              (1ULL << IB_USER_VERBS_CMD_MODIFY_QP) |
+-              (1ULL << IB_USER_VERBS_CMD_QUERY_QP) |
+-              (1ULL << IB_USER_VERBS_CMD_DESTROY_QP);
+       if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_REREG_MR) {
+               ib_dev->uverbs_cmd_mask |= (1ULL << IB_USER_VERBS_CMD_REREG_MR);
+diff --git a/drivers/infiniband/hw/i40iw/i40iw_verbs.c b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
+index 89654dc91d81a..713b2ec263422 100644
+--- a/drivers/infiniband/hw/i40iw/i40iw_verbs.c
++++ b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
+@@ -2667,25 +2667,11 @@ static struct i40iw_ib_device *i40iw_init_rdma_device(struct i40iw_device *iwdev
+       iwibdev->ibdev.node_type = RDMA_NODE_RNIC;
+       ether_addr_copy((u8 *)&iwibdev->ibdev.node_guid, netdev->dev_addr);
+-      iwibdev->ibdev.uverbs_cmd_mask =
+-          (1ull << IB_USER_VERBS_CMD_GET_CONTEXT) |
+-          (1ull << IB_USER_VERBS_CMD_QUERY_DEVICE) |
+-          (1ull << IB_USER_VERBS_CMD_QUERY_PORT) |
+-          (1ull << IB_USER_VERBS_CMD_ALLOC_PD) |
+-          (1ull << IB_USER_VERBS_CMD_DEALLOC_PD) |
+-          (1ull << IB_USER_VERBS_CMD_REG_MR) |
+-          (1ull << IB_USER_VERBS_CMD_DEREG_MR) |
+-          (1ull << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+-          (1ull << IB_USER_VERBS_CMD_CREATE_CQ) |
+-          (1ull << IB_USER_VERBS_CMD_DESTROY_CQ) |
++      iwibdev->ibdev.uverbs_cmd_mask |=
+           (1ull << IB_USER_VERBS_CMD_REQ_NOTIFY_CQ) |
+-          (1ull << IB_USER_VERBS_CMD_CREATE_QP) |
+-          (1ull << IB_USER_VERBS_CMD_MODIFY_QP) |
+-          (1ull << IB_USER_VERBS_CMD_QUERY_QP) |
+           (1ull << IB_USER_VERBS_CMD_POLL_CQ) |
+           (1ull << IB_USER_VERBS_CMD_CREATE_AH) |
+           (1ull << IB_USER_VERBS_CMD_DESTROY_AH) |
+-          (1ull << IB_USER_VERBS_CMD_DESTROY_QP) |
+           (1ull << IB_USER_VERBS_CMD_POST_RECV) |
+           (1ull << IB_USER_VERBS_CMD_POST_SEND);
+       iwibdev->ibdev.phys_port_cnt = 1;
+diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
+index c62cdd6456962..6058128b0f56a 100644
+--- a/drivers/infiniband/hw/mlx4/main.c
++++ b/drivers/infiniband/hw/mlx4/main.c
+@@ -2654,23 +2654,9 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
+       ibdev->ib_dev.num_comp_vectors  = dev->caps.num_comp_vectors;
+       ibdev->ib_dev.dev.parent        = &dev->persist->pdev->dev;
+-      ibdev->ib_dev.uverbs_cmd_mask   =
+-              (1ull << IB_USER_VERBS_CMD_GET_CONTEXT)         |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_DEVICE)        |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_PORT)          |
+-              (1ull << IB_USER_VERBS_CMD_ALLOC_PD)            |
+-              (1ull << IB_USER_VERBS_CMD_DEALLOC_PD)          |
+-              (1ull << IB_USER_VERBS_CMD_REG_MR)              |
++      ibdev->ib_dev.uverbs_cmd_mask |=
+               (1ull << IB_USER_VERBS_CMD_REREG_MR)            |
+-              (1ull << IB_USER_VERBS_CMD_DEREG_MR)            |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_CQ)           |
+               (1ull << IB_USER_VERBS_CMD_RESIZE_CQ)           |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_CQ)          |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_QP)           |
+-              (1ull << IB_USER_VERBS_CMD_MODIFY_QP)           |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_QP)            |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_QP)          |
+               (1ull << IB_USER_VERBS_CMD_ATTACH_MCAST)        |
+               (1ull << IB_USER_VERBS_CMD_DETACH_MCAST)        |
+               (1ull << IB_USER_VERBS_CMD_CREATE_SRQ)          |
+diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
+index d36436d4277a0..4e83ba99877fd 100644
+--- a/drivers/infiniband/hw/mlx5/main.c
++++ b/drivers/infiniband/hw/mlx5/main.c
+@@ -4153,25 +4153,11 @@ static int mlx5_ib_stage_caps_init(struct mlx5_ib_dev *dev)
+       struct mlx5_core_dev *mdev = dev->mdev;
+       int err;
+-      dev->ib_dev.uverbs_cmd_mask     =
+-              (1ull << IB_USER_VERBS_CMD_GET_CONTEXT)         |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_DEVICE)        |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_PORT)          |
+-              (1ull << IB_USER_VERBS_CMD_ALLOC_PD)            |
+-              (1ull << IB_USER_VERBS_CMD_DEALLOC_PD)          |
++      dev->ib_dev.uverbs_cmd_mask |=
+               (1ull << IB_USER_VERBS_CMD_CREATE_AH)           |
+               (1ull << IB_USER_VERBS_CMD_DESTROY_AH)          |
+-              (1ull << IB_USER_VERBS_CMD_REG_MR)              |
+               (1ull << IB_USER_VERBS_CMD_REREG_MR)            |
+-              (1ull << IB_USER_VERBS_CMD_DEREG_MR)            |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_CQ)           |
+               (1ull << IB_USER_VERBS_CMD_RESIZE_CQ)           |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_CQ)          |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_QP)           |
+-              (1ull << IB_USER_VERBS_CMD_MODIFY_QP)           |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_QP)            |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_QP)          |
+               (1ull << IB_USER_VERBS_CMD_ATTACH_MCAST)        |
+               (1ull << IB_USER_VERBS_CMD_DETACH_MCAST)        |
+               (1ull << IB_USER_VERBS_CMD_CREATE_SRQ)          |
+diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c
+index c4d9cdc4ee97e..86840afcfba63 100644
+--- a/drivers/infiniband/hw/mthca/mthca_provider.c
++++ b/drivers/infiniband/hw/mthca/mthca_provider.c
+@@ -1158,22 +1158,8 @@ int mthca_register_device(struct mthca_dev *dev)
+       if (ret)
+               return ret;
+-      dev->ib_dev.uverbs_cmd_mask      =
+-              (1ull << IB_USER_VERBS_CMD_GET_CONTEXT)         |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_DEVICE)        |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_PORT)          |
+-              (1ull << IB_USER_VERBS_CMD_ALLOC_PD)            |
+-              (1ull << IB_USER_VERBS_CMD_DEALLOC_PD)          |
+-              (1ull << IB_USER_VERBS_CMD_REG_MR)              |
+-              (1ull << IB_USER_VERBS_CMD_DEREG_MR)            |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_CQ)           |
++      dev->ib_dev.uverbs_cmd_mask |=
+               (1ull << IB_USER_VERBS_CMD_RESIZE_CQ)           |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_CQ)          |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_QP)           |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_QP)            |
+-              (1ull << IB_USER_VERBS_CMD_MODIFY_QP)           |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_QP)          |
+               (1ull << IB_USER_VERBS_CMD_ATTACH_MCAST)        |
+               (1ull << IB_USER_VERBS_CMD_DETACH_MCAST);
+       dev->ib_dev.node_type            = RDMA_NODE_IB_CA;
+diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_main.c b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+index 9b96661a71435..e6611a7e8eeb2 100644
+--- a/drivers/infiniband/hw/ocrdma/ocrdma_main.c
++++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+@@ -204,23 +204,9 @@ static int ocrdma_register_device(struct ocrdma_dev *dev)
+       BUILD_BUG_ON(sizeof(OCRDMA_NODE_DESC) > IB_DEVICE_NODE_DESC_MAX);
+       memcpy(dev->ibdev.node_desc, OCRDMA_NODE_DESC,
+              sizeof(OCRDMA_NODE_DESC));
+-      dev->ibdev.uverbs_cmd_mask =
+-          OCRDMA_UVERBS(GET_CONTEXT) |
+-          OCRDMA_UVERBS(QUERY_DEVICE) |
+-          OCRDMA_UVERBS(QUERY_PORT) |
+-          OCRDMA_UVERBS(ALLOC_PD) |
+-          OCRDMA_UVERBS(DEALLOC_PD) |
+-          OCRDMA_UVERBS(REG_MR) |
+-          OCRDMA_UVERBS(DEREG_MR) |
+-          OCRDMA_UVERBS(CREATE_COMP_CHANNEL) |
+-          OCRDMA_UVERBS(CREATE_CQ) |
++      dev->ibdev.uverbs_cmd_mask |=
+           OCRDMA_UVERBS(RESIZE_CQ) |
+-          OCRDMA_UVERBS(DESTROY_CQ) |
+           OCRDMA_UVERBS(REQ_NOTIFY_CQ) |
+-          OCRDMA_UVERBS(CREATE_QP) |
+-          OCRDMA_UVERBS(MODIFY_QP) |
+-          OCRDMA_UVERBS(QUERY_QP) |
+-          OCRDMA_UVERBS(DESTROY_QP) |
+           OCRDMA_UVERBS(POLL_CQ) |
+           OCRDMA_UVERBS(POST_SEND) |
+           OCRDMA_UVERBS(POST_RECV);
+diff --git a/drivers/infiniband/hw/qedr/main.c b/drivers/infiniband/hw/qedr/main.c
+index d0bb61b7e419f..9ba44d9dbd1d3 100644
+--- a/drivers/infiniband/hw/qedr/main.c
++++ b/drivers/infiniband/hw/qedr/main.c
+@@ -249,27 +249,14 @@ static int qedr_register_device(struct qedr_dev *dev)
+       dev->ibdev.node_guid = dev->attr.node_guid;
+       memcpy(dev->ibdev.node_desc, QEDR_NODE_DESC, sizeof(QEDR_NODE_DESC));
+-      dev->ibdev.uverbs_cmd_mask = QEDR_UVERBS(GET_CONTEXT) |
+-                                   QEDR_UVERBS(QUERY_DEVICE) |
+-                                   QEDR_UVERBS(QUERY_PORT) |
+-                                   QEDR_UVERBS(ALLOC_PD) |
+-                                   QEDR_UVERBS(DEALLOC_PD) |
+-                                   QEDR_UVERBS(CREATE_COMP_CHANNEL) |
+-                                   QEDR_UVERBS(CREATE_CQ) |
++      dev->ibdev.uverbs_cmd_mask |=
+                                    QEDR_UVERBS(RESIZE_CQ) |
+-                                   QEDR_UVERBS(DESTROY_CQ) |
+                                    QEDR_UVERBS(REQ_NOTIFY_CQ) |
+-                                   QEDR_UVERBS(CREATE_QP) |
+-                                   QEDR_UVERBS(MODIFY_QP) |
+-                                   QEDR_UVERBS(QUERY_QP) |
+-                                   QEDR_UVERBS(DESTROY_QP) |
+                                    QEDR_UVERBS(CREATE_SRQ) |
+                                    QEDR_UVERBS(DESTROY_SRQ) |
+                                    QEDR_UVERBS(QUERY_SRQ) |
+                                    QEDR_UVERBS(MODIFY_SRQ) |
+                                    QEDR_UVERBS(POST_SRQ_RECV) |
+-                                   QEDR_UVERBS(REG_MR) |
+-                                   QEDR_UVERBS(DEREG_MR) |
+                                    QEDR_UVERBS(POLL_CQ) |
+                                    QEDR_UVERBS(POST_SEND) |
+                                    QEDR_UVERBS(POST_RECV);
+diff --git a/drivers/infiniband/hw/usnic/usnic_ib_main.c b/drivers/infiniband/hw/usnic/usnic_ib_main.c
+index aa2e65fc5cd65..7db5c1c7d06d2 100644
+--- a/drivers/infiniband/hw/usnic/usnic_ib_main.c
++++ b/drivers/infiniband/hw/usnic/usnic_ib_main.c
+@@ -398,21 +398,7 @@ static void *usnic_ib_device_add(struct pci_dev *dev)
+       us_ibdev->ib_dev.num_comp_vectors = USNIC_IB_NUM_COMP_VECTORS;
+       us_ibdev->ib_dev.dev.parent = &dev->dev;
+-      us_ibdev->ib_dev.uverbs_cmd_mask =
+-              (1ull << IB_USER_VERBS_CMD_GET_CONTEXT) |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_DEVICE) |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_PORT) |
+-              (1ull << IB_USER_VERBS_CMD_ALLOC_PD) |
+-              (1ull << IB_USER_VERBS_CMD_DEALLOC_PD) |
+-              (1ull << IB_USER_VERBS_CMD_REG_MR) |
+-              (1ull << IB_USER_VERBS_CMD_DEREG_MR) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_CQ) |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_CQ) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_QP) |
+-              (1ull << IB_USER_VERBS_CMD_MODIFY_QP) |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_QP) |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_QP) |
++      us_ibdev->ib_dev.uverbs_cmd_mask |=
+               (1ull << IB_USER_VERBS_CMD_ATTACH_MCAST) |
+               (1ull << IB_USER_VERBS_CMD_DETACH_MCAST) |
+               (1ull << IB_USER_VERBS_CMD_OPEN_QP);
+diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
+index 6895bac539907..223977703f935 100644
+--- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
++++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
+@@ -205,23 +205,9 @@ static int pvrdma_register_device(struct pvrdma_dev *dev)
+       dev->flags = 0;
+       dev->ib_dev.num_comp_vectors = 1;
+       dev->ib_dev.dev.parent = &dev->pdev->dev;
+-      dev->ib_dev.uverbs_cmd_mask =
+-              (1ull << IB_USER_VERBS_CMD_GET_CONTEXT)         |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_DEVICE)        |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_PORT)          |
+-              (1ull << IB_USER_VERBS_CMD_ALLOC_PD)            |
+-              (1ull << IB_USER_VERBS_CMD_DEALLOC_PD)          |
+-              (1ull << IB_USER_VERBS_CMD_REG_MR)              |
+-              (1ull << IB_USER_VERBS_CMD_DEREG_MR)            |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_CQ)           |
++      dev->ib_dev.uverbs_cmd_mask |=
+               (1ull << IB_USER_VERBS_CMD_POLL_CQ)             |
+               (1ull << IB_USER_VERBS_CMD_REQ_NOTIFY_CQ)       |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_CQ)          |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_QP)           |
+-              (1ull << IB_USER_VERBS_CMD_MODIFY_QP)           |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_QP)            |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_QP)          |
+               (1ull << IB_USER_VERBS_CMD_POST_SEND)           |
+               (1ull << IB_USER_VERBS_CMD_POST_RECV)           |
+               (1ull << IB_USER_VERBS_CMD_CREATE_AH)           |
+diff --git a/drivers/infiniband/sw/rdmavt/vt.c b/drivers/infiniband/sw/rdmavt/vt.c
+index d1bbe66610cfe..151e4acc26bd5 100644
+--- a/drivers/infiniband/sw/rdmavt/vt.c
++++ b/drivers/infiniband/sw/rdmavt/vt.c
+@@ -588,28 +588,14 @@ int rvt_register_device(struct rvt_dev_info *rdi)
+        * exactly which functions rdmavt supports, nor do they know the ABI
+        * version, so we do all of this sort of stuff here.
+        */
+-      rdi->ibdev.uverbs_cmd_mask =
+-              (1ull << IB_USER_VERBS_CMD_GET_CONTEXT)         |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_DEVICE)        |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_PORT)          |
+-              (1ull << IB_USER_VERBS_CMD_ALLOC_PD)            |
+-              (1ull << IB_USER_VERBS_CMD_DEALLOC_PD)          |
++      rdi->ibdev.uverbs_cmd_mask |=
+               (1ull << IB_USER_VERBS_CMD_CREATE_AH)           |
+               (1ull << IB_USER_VERBS_CMD_MODIFY_AH)           |
+               (1ull << IB_USER_VERBS_CMD_QUERY_AH)            |
+               (1ull << IB_USER_VERBS_CMD_DESTROY_AH)          |
+-              (1ull << IB_USER_VERBS_CMD_REG_MR)              |
+-              (1ull << IB_USER_VERBS_CMD_DEREG_MR)            |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_CQ)           |
+               (1ull << IB_USER_VERBS_CMD_RESIZE_CQ)           |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_CQ)          |
+               (1ull << IB_USER_VERBS_CMD_POLL_CQ)             |
+               (1ull << IB_USER_VERBS_CMD_REQ_NOTIFY_CQ)       |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_QP)           |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_QP)            |
+-              (1ull << IB_USER_VERBS_CMD_MODIFY_QP)           |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_QP)          |
+               (1ull << IB_USER_VERBS_CMD_POST_SEND)           |
+               (1ull << IB_USER_VERBS_CMD_POST_RECV)           |
+               (1ull << IB_USER_VERBS_CMD_ATTACH_MCAST)        |
+diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
+index 512868c230238..8f63d0f186d7c 100644
+--- a/drivers/infiniband/sw/rxe/rxe_verbs.c
++++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
+@@ -1128,31 +1128,18 @@ int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name)
+       addrconf_addr_eui48((unsigned char *)&dev->node_guid,
+                           rxe->ndev->dev_addr);
+-      dev->uverbs_cmd_mask = BIT_ULL(IB_USER_VERBS_CMD_GET_CONTEXT)
+-          | BIT_ULL(IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL)
+-          | BIT_ULL(IB_USER_VERBS_CMD_QUERY_DEVICE)
+-          | BIT_ULL(IB_USER_VERBS_CMD_QUERY_PORT)
+-          | BIT_ULL(IB_USER_VERBS_CMD_ALLOC_PD)
+-          | BIT_ULL(IB_USER_VERBS_CMD_DEALLOC_PD)
+-          | BIT_ULL(IB_USER_VERBS_CMD_CREATE_SRQ)
++      dev->uverbs_cmd_mask |=
++          BIT_ULL(IB_USER_VERBS_CMD_CREATE_SRQ)
+           | BIT_ULL(IB_USER_VERBS_CMD_MODIFY_SRQ)
+           | BIT_ULL(IB_USER_VERBS_CMD_QUERY_SRQ)
+           | BIT_ULL(IB_USER_VERBS_CMD_DESTROY_SRQ)
+           | BIT_ULL(IB_USER_VERBS_CMD_POST_SRQ_RECV)
+-          | BIT_ULL(IB_USER_VERBS_CMD_CREATE_QP)
+-          | BIT_ULL(IB_USER_VERBS_CMD_MODIFY_QP)
+-          | BIT_ULL(IB_USER_VERBS_CMD_QUERY_QP)
+-          | BIT_ULL(IB_USER_VERBS_CMD_DESTROY_QP)
+           | BIT_ULL(IB_USER_VERBS_CMD_POST_SEND)
+           | BIT_ULL(IB_USER_VERBS_CMD_POST_RECV)
+-          | BIT_ULL(IB_USER_VERBS_CMD_CREATE_CQ)
+           | BIT_ULL(IB_USER_VERBS_CMD_RESIZE_CQ)
+-          | BIT_ULL(IB_USER_VERBS_CMD_DESTROY_CQ)
+           | BIT_ULL(IB_USER_VERBS_CMD_POLL_CQ)
+           | BIT_ULL(IB_USER_VERBS_CMD_PEEK_CQ)
+           | BIT_ULL(IB_USER_VERBS_CMD_REQ_NOTIFY_CQ)
+-          | BIT_ULL(IB_USER_VERBS_CMD_REG_MR)
+-          | BIT_ULL(IB_USER_VERBS_CMD_DEREG_MR)
+           | BIT_ULL(IB_USER_VERBS_CMD_CREATE_AH)
+           | BIT_ULL(IB_USER_VERBS_CMD_MODIFY_AH)
+           | BIT_ULL(IB_USER_VERBS_CMD_QUERY_AH)
+diff --git a/drivers/infiniband/sw/siw/siw_main.c b/drivers/infiniband/sw/siw/siw_main.c
+index 5ba0893f1f017..7c6f534590b19 100644
+--- a/drivers/infiniband/sw/siw/siw_main.c
++++ b/drivers/infiniband/sw/siw/siw_main.c
+@@ -330,23 +330,9 @@ static struct siw_device *siw_device_create(struct net_device *netdev)
+               addrconf_addr_eui48((unsigned char *)&base_dev->node_guid,
+                                   addr);
+       }
+-      base_dev->uverbs_cmd_mask =
+-              (1ull << IB_USER_VERBS_CMD_QUERY_DEVICE) |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_PORT) |
+-              (1ull << IB_USER_VERBS_CMD_GET_CONTEXT) |
+-              (1ull << IB_USER_VERBS_CMD_ALLOC_PD) |
+-              (1ull << IB_USER_VERBS_CMD_DEALLOC_PD) |
+-              (1ull << IB_USER_VERBS_CMD_REG_MR) |
+-              (1ull << IB_USER_VERBS_CMD_DEREG_MR) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_CQ) |
++      base_dev->uverbs_cmd_mask |=
+               (1ull << IB_USER_VERBS_CMD_POLL_CQ) |
+               (1ull << IB_USER_VERBS_CMD_REQ_NOTIFY_CQ) |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_CQ) |
+-              (1ull << IB_USER_VERBS_CMD_CREATE_QP) |
+-              (1ull << IB_USER_VERBS_CMD_QUERY_QP) |
+-              (1ull << IB_USER_VERBS_CMD_MODIFY_QP) |
+-              (1ull << IB_USER_VERBS_CMD_DESTROY_QP) |
+               (1ull << IB_USER_VERBS_CMD_POST_SEND) |
+               (1ull << IB_USER_VERBS_CMD_POST_RECV) |
+               (1ull << IB_USER_VERBS_CMD_CREATE_SRQ) |
+-- 
+2.43.0
+
diff --git a/queue-5.10/regulator-core-fix-modpost-error-regulator_get_regma.patch b/queue-5.10/regulator-core-fix-modpost-error-regulator_get_regma.patch
new file mode 100644 (file)
index 0000000..f12fcc7
--- /dev/null
@@ -0,0 +1,38 @@
+From 139b0b8a33722639a088dfa6c32dc0c4833e16e2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 10 Jun 2024 20:55:32 +0100
+Subject: regulator: core: Fix modpost error "regulator_get_regmap" undefined
+
+From: Biju Das <biju.das.jz@bp.renesas.com>
+
+[ Upstream commit 3f60497c658d2072714d097a177612d34b34aa3d ]
+
+Fix the modpost error "regulator_get_regmap" undefined by adding export
+symbol.
+
+Fixes: 04eca28cde52 ("regulator: Add helpers for low-level register access")
+Reported-by: kernel test robot <lkp@intel.com>
+Closes: https://lore.kernel.org/oe-kbuild-all/202406110117.mk5UR3VZ-lkp@intel.com
+Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
+Link: https://lore.kernel.org/r/20240610195532.175942-1-biju.das.jz@bp.renesas.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/regulator/core.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
+index 2d1a23b9eae3b..7082cffdd10e6 100644
+--- a/drivers/regulator/core.c
++++ b/drivers/regulator/core.c
+@@ -3185,6 +3185,7 @@ struct regmap *regulator_get_regmap(struct regulator *regulator)
+       return map ? map : ERR_PTR(-EOPNOTSUPP);
+ }
++EXPORT_SYMBOL_GPL(regulator_get_regmap);
+ /**
+  * regulator_get_hardware_vsel_register - get the HW voltage selector register
+-- 
+2.43.0
+
index 5dda6a55f8f712d43e8ab3e9c3c8080286a7b887..4cff41c28f5f4360a42066c3ff607e422a398568 100644 (file)
@@ -184,3 +184,16 @@ net-stmmac-no-need-to-calculate-speed-divider-when-o.patch
 virtio_net-checksum-offloading-handling-fix.patch
 netfilter-ipset-fix-suspicious-rcu_dereference_prote.patch
 net-usb-rtl8150-fix-unintiatilzed-variables-in-rtl81.patch
+regulator-core-fix-modpost-error-regulator_get_regma.patch
+dmaengine-ioat-switch-from-pci_-to-dma_-api.patch
+dmaengine-ioat-drop-redundant-pci_enable_pcie_error_.patch
+dmaengine-ioatdma-fix-leaking-on-version-mismatch.patch
+dmaengine-ioat-use-pci-core-macros-for-pcie-capabili.patch
+dmaengine-ioatdma-fix-error-path-in-ioat3_dma_probe.patch
+dmaengine-ioatdma-fix-kmemleak-in-ioat_pci_probe.patch
+dmaengine-ioatdma-fix-missing-kmem_cache_destroy.patch
+acpica-revert-acpica-avoid-info-mapping-multiple-bar.patch
+rdma-remove-elements-in-uverbs_cmd_mask-that-all-dri.patch
+rdma-move-more-uverbs_cmd_mask-settings-to-the-core.patch
+rdma-check-srq_type-during-create_srq.patch
+rdma-mlx5-add-check-for-srq-max_sge-attribute.patch