--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
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