From: Sasha Levin Date: Mon, 24 Jun 2024 13:48:22 +0000 (-0400) Subject: Fixes for 5.10 X-Git-Tag: v6.1.96~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8fa785d0e4c2cb605f9246886796600815a8e517;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.10 Signed-off-by: Sasha Levin --- 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 index 00000000000..d0fa1e8fdb8 --- /dev/null +++ b/queue-5.10/acpica-revert-acpica-avoid-info-mapping-multiple-bar.patch @@ -0,0 +1,84 @@ +From 1f58a193cbbaa371a481520108245b43c7415b0f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: Sanath S +Signed-off-by: Raju Rangoju +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..c926c01a365 --- /dev/null +++ b/queue-5.10/dmaengine-ioat-drop-redundant-pci_enable_pcie_error_.patch @@ -0,0 +1,71 @@ +From df66d38372323c8de08ee95d444a268cf57cbe2e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 7 Mar 2023 13:26:54 -0600 +Subject: dmaengine: ioat: Drop redundant pci_enable_pcie_error_reporting() + +From: Bjorn Helgaas + +[ 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 +Acked-by: Dave Jiang +Link: https://lore.kernel.org/r/20230307192655.874008-2-helgaas@kernel.org +Signed-off-by: Vinod Koul +Stable-dep-of: 1b11b4ef6bd6 ("dmaengine: ioatdma: Fix leaking on version mismatch") +Signed-off-by: Sasha Levin +--- + 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 + #include + #include +-#include + #include + #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 index 00000000000..c2a629a44e6 --- /dev/null +++ b/queue-5.10/dmaengine-ioat-switch-from-pci_-to-dma_-api.patch @@ -0,0 +1,49 @@ +From 33b21d11977eee96b37b5a7451965d606b7f506d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 7 Oct 2021 20:28:28 -0700 +Subject: dmaengine: ioat: switch from 'pci_' to 'dma_' API + +From: Qing Wang + +[ 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 +Link: https://lore.kernel.org/r/1633663733-47199-3-git-send-email-wangqing@vivo.com +Signed-off-by: Vinod Koul +Stable-dep-of: 1b11b4ef6bd6 ("dmaengine: ioatdma: Fix leaking on version mismatch") +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..d3cf88f054d --- /dev/null +++ b/queue-5.10/dmaengine-ioat-use-pci-core-macros-for-pcie-capabili.patch @@ -0,0 +1,67 @@ +From 93728597d9d45b40379528a950441f05a3fe7f26 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 7 Mar 2023 15:46:15 -0600 +Subject: dmaengine: ioat: use PCI core macros for PCIe Capability + +From: Bjorn Helgaas + +[ 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 +Acked-by: Dave Jiang +Link: https://lore.kernel.org/r/20230307214615.887354-1-helgaas@kernel.org +Signed-off-by: Vinod Koul +Stable-dep-of: f0dc9fda2e0e ("dmaengine: ioatdma: Fix error path in ioat3_dma_probe()") +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..e94fc45da9c --- /dev/null +++ b/queue-5.10/dmaengine-ioatdma-fix-error-path-in-ioat3_dma_probe.patch @@ -0,0 +1,94 @@ +From 67dea0d7a8bf3009170eb07249e6bcdefc58c638 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 28 May 2024 09:09:24 +0300 +Subject: dmaengine: ioatdma: Fix error path in ioat3_dma_probe() + +From: Nikita Shubin + +[ 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 +Reviewed-by: Dave Jiang +Link: https://lore.kernel.org/r/20240528-ioatdma-fixes-v2-2-a9f2fbe26ab1@yadro.com +Signed-off-by: Vinod Koul +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..7661a163ef1 --- /dev/null +++ b/queue-5.10/dmaengine-ioatdma-fix-kmemleak-in-ioat_pci_probe.patch @@ -0,0 +1,66 @@ +From e168ab76d3fbacc11b6750a94fe85cdeaabbda72 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 28 May 2024 09:09:25 +0300 +Subject: dmaengine: ioatdma: Fix kmemleak in ioat_pci_probe() + +From: Nikita Shubin + +[ 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): [..] + [] kmemleak_alloc+0x4a/0x80 + [] kmalloc_trace+0x270/0x2f0 + [] ioat_pci_probe+0xc1/0x1c0 [ioatdma] +[..] + +repeated for each ioatdma channel: + +unreferenced object 0xffff8880148e5c00 (size 512): [..] + [] kmemleak_alloc+0x4a/0x80 + [] kmalloc_trace+0x270/0x2f0 + [] ioat_enumerate_channels+0x101/0x2d0 [ioatdma] + [] ioat3_dma_probe+0x4d6/0x970 [ioatdma] + [] ioat_pci_probe+0x181/0x1c0 [ioatdma] +[..] + +Fixes: bf453a0a18b2 ("dmaengine: ioat: Support in-use unbind") +Signed-off-by: Nikita Shubin +Reviewed-by: Dave Jiang +Link: https://lore.kernel.org/r/20240528-ioatdma-fixes-v2-3-a9f2fbe26ab1@yadro.com +Signed-off-by: Vinod Koul +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..34fa52d7bc5 --- /dev/null +++ b/queue-5.10/dmaengine-ioatdma-fix-leaking-on-version-mismatch.patch @@ -0,0 +1,69 @@ +From 955f2280a9f642f1323ea4d4bfaf0de6b3d52e0a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 28 May 2024 09:09:23 +0300 +Subject: dmaengine: ioatdma: Fix leaking on version mismatch + +From: Nikita Shubin + +[ 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 +Reviewed-by: Dave Jiang +Link: https://lore.kernel.org/r/20240528-ioatdma-fixes-v2-1-a9f2fbe26ab1@yadro.com +Signed-off-by: Vinod Koul +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..0a479c93ac9 --- /dev/null +++ b/queue-5.10/dmaengine-ioatdma-fix-missing-kmem_cache_destroy.patch @@ -0,0 +1,46 @@ +From 78b103b675dcd631c1522eec9bf5466422964890 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 14 May 2024 13:52:31 +0300 +Subject: dmaengine: ioatdma: Fix missing kmem_cache_destroy() + +From: Nikita Shubin + +[ 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 +Acked-by: Dave Jiang +Link: https://lore.kernel.org/r/20240514-ioatdma_fixes-v1-1-2776a0913254@yadro.com +Signed-off-by: Vinod Koul +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..f299895bfe2 --- /dev/null +++ b/queue-5.10/rdma-check-srq_type-during-create_srq.patch @@ -0,0 +1,220 @@ +From 4f0014a293620a6305d7d0c2450846d3e731a1d0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 3 Oct 2020 20:20:05 -0300 +Subject: RDMA: Check srq_type during create_srq + +From: Jason Gunthorpe + +[ 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 +Stable-dep-of: 36ab7ada64ca ("RDMA/mlx5: Add check for srq max_sge attribute") +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..e508cf6c505 --- /dev/null +++ b/queue-5.10/rdma-mlx5-add-check-for-srq-max_sge-attribute.patch @@ -0,0 +1,55 @@ +From 1ad882bf8ff7529850cc920ebf7ea361db55dd9d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 28 May 2024 15:52:56 +0300 +Subject: RDMA/mlx5: Add check for srq max_sge attribute + +From: Patrisious Haddad + +[ 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 +Link: https://lore.kernel.org/r/277ccc29e8d57bfd53ddeb2ac633f2760cf8cdd0.1716900410.git.leon@kernel.org +Signed-off-by: Leon Romanovsky +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..a3146250979 --- /dev/null +++ b/queue-5.10/rdma-move-more-uverbs_cmd_mask-settings-to-the-core.patch @@ -0,0 +1,455 @@ +From 16d292747c8eba92ed2837d652551b91ecd55364 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 3 Oct 2020 20:20:04 -0300 +Subject: RDMA: Move more uverbs_cmd_mask settings to the core + +From: Jason Gunthorpe + +[ 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 +Stable-dep-of: 36ab7ada64ca ("RDMA/mlx5: Add check for srq max_sge attribute") +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..889c26b26d5 --- /dev/null +++ b/queue-5.10/rdma-remove-elements-in-uverbs_cmd_mask-that-all-dri.patch @@ -0,0 +1,515 @@ +From d1d6dbce8b7a3a750b3a720123af9a4508f169bd Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 3 Oct 2020 20:20:03 -0300 +Subject: RDMA: Remove elements in uverbs_cmd_mask that all drivers set + +From: Jason Gunthorpe + +[ 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 +Stable-dep-of: 36ab7ada64ca ("RDMA/mlx5: Add check for srq max_sge attribute") +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..f12fcc7e7e5 --- /dev/null +++ b/queue-5.10/regulator-core-fix-modpost-error-regulator_get_regma.patch @@ -0,0 +1,38 @@ +From 139b0b8a33722639a088dfa6c32dc0c4833e16e2 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 10 Jun 2024 20:55:32 +0100 +Subject: regulator: core: Fix modpost error "regulator_get_regmap" undefined + +From: Biju Das + +[ 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 +Closes: https://lore.kernel.org/oe-kbuild-all/202406110117.mk5UR3VZ-lkp@intel.com +Signed-off-by: Biju Das +Link: https://lore.kernel.org/r/20240610195532.175942-1-biju.das.jz@bp.renesas.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + 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 + diff --git a/queue-5.10/series b/queue-5.10/series index 5dda6a55f8f..4cff41c28f5 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -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