From 4f1b41a30362b67e6c71043f6e542a4b63bfa3a9 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 11 Jul 2022 09:17:14 +0200 Subject: [PATCH] 5.10-stable patches added patches: dmaengine-at_xdma-handle-errors-of-at_xdmac_alloc_desc-correctly.patch dmaengine-pl330-fix-lockdep-warning-about-non-static-key.patch dmaengine-ti-add-missing-put_device-in-ti_dra7_xbar_route_allocate.patch dmaengine-ti-fix-refcount-leak-in-ti_dra7_xbar_route_allocate.patch dt-bindings-dma-allwinner-sun50i-a64-dma-fix-min-max-typo.patch ida-don-t-use-bug_on-for-debugging.patch --- ...ors-of-at_xdmac_alloc_desc-correctly.patch | 36 ++++++++++++ ...lockdep-warning-about-non-static-key.patch | 55 ++++++++++++++++++ ...evice-in-ti_dra7_xbar_route_allocate.patch | 55 ++++++++++++++++++ ...-leak-in-ti_dra7_xbar_route_allocate.patch | 33 +++++++++++ ...nner-sun50i-a64-dma-fix-min-max-typo.patch | 34 +++++++++++ .../ida-don-t-use-bug_on-for-debugging.patch | 58 +++++++++++++++++++ queue-5.10/series | 6 ++ 7 files changed, 277 insertions(+) create mode 100644 queue-5.10/dmaengine-at_xdma-handle-errors-of-at_xdmac_alloc_desc-correctly.patch create mode 100644 queue-5.10/dmaengine-pl330-fix-lockdep-warning-about-non-static-key.patch create mode 100644 queue-5.10/dmaengine-ti-add-missing-put_device-in-ti_dra7_xbar_route_allocate.patch create mode 100644 queue-5.10/dmaengine-ti-fix-refcount-leak-in-ti_dra7_xbar_route_allocate.patch create mode 100644 queue-5.10/dt-bindings-dma-allwinner-sun50i-a64-dma-fix-min-max-typo.patch create mode 100644 queue-5.10/ida-don-t-use-bug_on-for-debugging.patch diff --git a/queue-5.10/dmaengine-at_xdma-handle-errors-of-at_xdmac_alloc_desc-correctly.patch b/queue-5.10/dmaengine-at_xdma-handle-errors-of-at_xdmac_alloc_desc-correctly.patch new file mode 100644 index 00000000000..e139723f237 --- /dev/null +++ b/queue-5.10/dmaengine-at_xdma-handle-errors-of-at_xdmac_alloc_desc-correctly.patch @@ -0,0 +1,36 @@ +From 3770d92bd5237d686e49da7b2fb86f53ee6ed259 Mon Sep 17 00:00:00 2001 +From: Michael Walle +Date: Thu, 26 May 2022 15:51:11 +0200 +Subject: dmaengine: at_xdma: handle errors of at_xdmac_alloc_desc() correctly + +From: Michael Walle + +commit 3770d92bd5237d686e49da7b2fb86f53ee6ed259 upstream. + +It seems that it is valid to have less than the requested number of +descriptors. But what is not valid and leads to subsequent errors is to +have zero descriptors. In that case, abort the probing. + +Fixes: e1f7c9eee707 ("dmaengine: at_xdmac: creation of the atmel eXtended DMA Controller driver") +Signed-off-by: Michael Walle +Link: https://lore.kernel.org/r/20220526135111.1470926-1-michael@walle.cc +Signed-off-by: Vinod Koul +Signed-off-by: Greg Kroah-Hartman +--- + drivers/dma/at_xdmac.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/drivers/dma/at_xdmac.c ++++ b/drivers/dma/at_xdmac.c +@@ -1838,6 +1838,11 @@ static int at_xdmac_alloc_chan_resources + for (i = 0; i < init_nr_desc_per_channel; i++) { + desc = at_xdmac_alloc_desc(chan, GFP_KERNEL); + if (!desc) { ++ if (i == 0) { ++ dev_warn(chan2dev(chan), ++ "can't allocate any descriptors\n"); ++ return -EIO; ++ } + dev_warn(chan2dev(chan), + "only %d descriptors have been allocated\n", i); + break; diff --git a/queue-5.10/dmaengine-pl330-fix-lockdep-warning-about-non-static-key.patch b/queue-5.10/dmaengine-pl330-fix-lockdep-warning-about-non-static-key.patch new file mode 100644 index 00000000000..34c0d0a6d5f --- /dev/null +++ b/queue-5.10/dmaengine-pl330-fix-lockdep-warning-about-non-static-key.patch @@ -0,0 +1,55 @@ +From b64b3b2f1d81f83519582e1feee87d77f51f5f17 Mon Sep 17 00:00:00 2001 +From: Dmitry Osipenko +Date: Fri, 20 May 2022 21:14:32 +0300 +Subject: dmaengine: pl330: Fix lockdep warning about non-static key + +From: Dmitry Osipenko + +commit b64b3b2f1d81f83519582e1feee87d77f51f5f17 upstream. + +The DEFINE_SPINLOCK() macro shouldn't be used for dynamically allocated +spinlocks. The lockdep warns about this and disables locking validator. +Fix the warning by making lock static. + + INFO: trying to register non-static key. + The code is fine but needs lockdep annotation, or maybe + you didn't initialize this object before use? + turning off the locking correctness validator. + Hardware name: Radxa ROCK Pi 4C (DT) + Call trace: + dump_backtrace.part.0+0xcc/0xe0 + show_stack+0x18/0x6c + dump_stack_lvl+0x8c/0xb8 + dump_stack+0x18/0x34 + register_lock_class+0x4a8/0x4cc + __lock_acquire+0x78/0x20cc + lock_acquire.part.0+0xe0/0x230 + lock_acquire+0x68/0x84 + _raw_spin_lock_irqsave+0x84/0xc4 + add_desc+0x44/0xc0 + pl330_get_desc+0x15c/0x1d0 + pl330_prep_dma_cyclic+0x100/0x270 + snd_dmaengine_pcm_trigger+0xec/0x1c0 + dmaengine_pcm_trigger+0x18/0x24 + ... + +Fixes: e588710311ee ("dmaengine: pl330: fix descriptor allocation fail") +Signed-off-by: Dmitry Osipenko +Link: https://lore.kernel.org/r/20220520181432.149904-1-dmitry.osipenko@collabora.com +Signed-off-by: Vinod Koul +Signed-off-by: Greg Kroah-Hartman +--- + drivers/dma/pl330.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/dma/pl330.c ++++ b/drivers/dma/pl330.c +@@ -2591,7 +2591,7 @@ static struct dma_pl330_desc *pl330_get_ + + /* If the DMAC pool is empty, alloc new */ + if (!desc) { +- DEFINE_SPINLOCK(lock); ++ static DEFINE_SPINLOCK(lock); + LIST_HEAD(pool); + + if (!add_desc(&pool, &lock, GFP_ATOMIC, 1)) diff --git a/queue-5.10/dmaengine-ti-add-missing-put_device-in-ti_dra7_xbar_route_allocate.patch b/queue-5.10/dmaengine-ti-add-missing-put_device-in-ti_dra7_xbar_route_allocate.patch new file mode 100644 index 00000000000..78269af0044 --- /dev/null +++ b/queue-5.10/dmaengine-ti-add-missing-put_device-in-ti_dra7_xbar_route_allocate.patch @@ -0,0 +1,55 @@ +From 615a4bfc426e11dba05c2cf343f9ac752fb381d2 Mon Sep 17 00:00:00 2001 +From: Miaoqian Lin +Date: Sun, 5 Jun 2022 08:27:22 +0400 +Subject: dmaengine: ti: Add missing put_device in ti_dra7_xbar_route_allocate + +From: Miaoqian Lin + +commit 615a4bfc426e11dba05c2cf343f9ac752fb381d2 upstream. + +of_find_device_by_node() takes reference, we should use put_device() +to release it when not need anymore. + +Fixes: a074ae38f859 ("dmaengine: Add driver for TI DMA crossbar on DRA7x") +Signed-off-by: Miaoqian Lin +Acked-by: Peter Ujfalusi +Link: https://lore.kernel.org/r/20220605042723.17668-1-linmq006@gmail.com +Signed-off-by: Vinod Koul +Signed-off-by: Greg Kroah-Hartman +--- + drivers/dma/ti/dma-crossbar.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/dma/ti/dma-crossbar.c ++++ b/drivers/dma/ti/dma-crossbar.c +@@ -245,6 +245,7 @@ static void *ti_dra7_xbar_route_allocate + if (dma_spec->args[0] >= xbar->xbar_requests) { + dev_err(&pdev->dev, "Invalid XBAR request number: %d\n", + dma_spec->args[0]); ++ put_device(&pdev->dev); + return ERR_PTR(-EINVAL); + } + +@@ -252,12 +253,14 @@ static void *ti_dra7_xbar_route_allocate + dma_spec->np = of_parse_phandle(ofdma->of_node, "dma-masters", 0); + if (!dma_spec->np) { + dev_err(&pdev->dev, "Can't get DMA master\n"); ++ put_device(&pdev->dev); + return ERR_PTR(-EINVAL); + } + + map = kzalloc(sizeof(*map), GFP_KERNEL); + if (!map) { + of_node_put(dma_spec->np); ++ put_device(&pdev->dev); + return ERR_PTR(-ENOMEM); + } + +@@ -269,6 +272,7 @@ static void *ti_dra7_xbar_route_allocate + dev_err(&pdev->dev, "Run out of free DMA requests\n"); + kfree(map); + of_node_put(dma_spec->np); ++ put_device(&pdev->dev); + return ERR_PTR(-ENOMEM); + } + set_bit(map->xbar_out, xbar->dma_inuse); diff --git a/queue-5.10/dmaengine-ti-fix-refcount-leak-in-ti_dra7_xbar_route_allocate.patch b/queue-5.10/dmaengine-ti-fix-refcount-leak-in-ti_dra7_xbar_route_allocate.patch new file mode 100644 index 00000000000..a14f1f8380b --- /dev/null +++ b/queue-5.10/dmaengine-ti-fix-refcount-leak-in-ti_dra7_xbar_route_allocate.patch @@ -0,0 +1,33 @@ +From c132fe78ad7b4ce8b5d49a501a15c29d08eeb23a Mon Sep 17 00:00:00 2001 +From: Miaoqian Lin +Date: Sun, 5 Jun 2022 08:27:23 +0400 +Subject: dmaengine: ti: Fix refcount leak in ti_dra7_xbar_route_allocate + +From: Miaoqian Lin + +commit c132fe78ad7b4ce8b5d49a501a15c29d08eeb23a upstream. + +of_parse_phandle() returns a node pointer with refcount +incremented, we should use of_node_put() on it when not needed anymore. + +Add missing of_node_put() in to fix this. + +Fixes: ec9bfa1e1a79 ("dmaengine: ti-dma-crossbar: dra7: Use bitops instead of idr") +Signed-off-by: Miaoqian Lin +Link: https://lore.kernel.org/r/20220605042723.17668-2-linmq006@gmail.com +Signed-off-by: Vinod Koul +Signed-off-by: Greg Kroah-Hartman +--- + drivers/dma/ti/dma-crossbar.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/dma/ti/dma-crossbar.c ++++ b/drivers/dma/ti/dma-crossbar.c +@@ -268,6 +268,7 @@ static void *ti_dra7_xbar_route_allocate + mutex_unlock(&xbar->mutex); + dev_err(&pdev->dev, "Run out of free DMA requests\n"); + kfree(map); ++ of_node_put(dma_spec->np); + return ERR_PTR(-ENOMEM); + } + set_bit(map->xbar_out, xbar->dma_inuse); diff --git a/queue-5.10/dt-bindings-dma-allwinner-sun50i-a64-dma-fix-min-max-typo.patch b/queue-5.10/dt-bindings-dma-allwinner-sun50i-a64-dma-fix-min-max-typo.patch new file mode 100644 index 00000000000..4b7b0ac6424 --- /dev/null +++ b/queue-5.10/dt-bindings-dma-allwinner-sun50i-a64-dma-fix-min-max-typo.patch @@ -0,0 +1,34 @@ +From 607a48c78e6b427b0b684d24e61c19e846ad65d6 Mon Sep 17 00:00:00 2001 +From: Samuel Holland +Date: Fri, 1 Jul 2022 22:19:02 -0500 +Subject: dt-bindings: dma: allwinner,sun50i-a64-dma: Fix min/max typo + +From: Samuel Holland + +commit 607a48c78e6b427b0b684d24e61c19e846ad65d6 upstream. + +The conditional block for variants with a second clock should have set +minItems, not maxItems, which was already 2. Since clock-names requires +two items, this typo should not have caused any problems. + +Fixes: edd14218bd66 ("dt-bindings: dmaengine: Convert Allwinner A31 and A64 DMA to a schema") +Signed-off-by: Samuel Holland +Reviewed-by: Rob Herring +Link: https://lore.kernel.org/r/20220702031903.21703-1-samuel@sholland.org +Signed-off-by: Vinod Koul +Signed-off-by: Greg Kroah-Hartman +--- + Documentation/devicetree/bindings/dma/allwinner,sun50i-a64-dma.yaml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/Documentation/devicetree/bindings/dma/allwinner,sun50i-a64-dma.yaml ++++ b/Documentation/devicetree/bindings/dma/allwinner,sun50i-a64-dma.yaml +@@ -61,7 +61,7 @@ if: + then: + properties: + clocks: +- maxItems: 2 ++ minItems: 2 + + required: + - clock-names diff --git a/queue-5.10/ida-don-t-use-bug_on-for-debugging.patch b/queue-5.10/ida-don-t-use-bug_on-for-debugging.patch new file mode 100644 index 00000000000..e69b8fab015 --- /dev/null +++ b/queue-5.10/ida-don-t-use-bug_on-for-debugging.patch @@ -0,0 +1,58 @@ +From fc82bbf4dede758007763867d0282353c06d1121 Mon Sep 17 00:00:00 2001 +From: Linus Torvalds +Date: Sun, 10 Jul 2022 13:55:49 -0700 +Subject: ida: don't use BUG_ON() for debugging + +From: Linus Torvalds + +commit fc82bbf4dede758007763867d0282353c06d1121 upstream. + +This is another old BUG_ON() that just shouldn't exist (see also commit +a382f8fee42c: "signal handling: don't use BUG_ON() for debugging"). + +In fact, as Matthew Wilcox points out, this condition shouldn't really +even result in a warning, since a negative id allocation result is just +a normal allocation failure: + + "I wonder if we should even warn here -- sure, the caller is trying to + free something that wasn't allocated, but we don't warn for + kfree(NULL)" + +and goes on to point out how that current error check is only causing +people to unnecessarily do their own index range checking before freeing +it. + +This was noted by Itay Iellin, because the bluetooth HCI socket cookie +code does *not* do that range checking, and ends up just freeing the +error case too, triggering the BUG_ON(). + +The HCI code requires CAP_NET_RAW, and seems to just result in an ugly +splat, but there really is no reason to BUG_ON() here, and we have +generally striven for allocation models where it's always ok to just do + + free(alloc()); + +even if the allocation were to fail for some random reason (usually +obviously that "random" reason being some resource limit). + +Fixes: 88eca0207cf1 ("ida: simplified functions for id allocation") +Reported-by: Itay Iellin +Suggested-by: Matthew Wilcox +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman +--- + lib/idr.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/lib/idr.c ++++ b/lib/idr.c +@@ -491,7 +491,8 @@ void ida_free(struct ida *ida, unsigned + struct ida_bitmap *bitmap; + unsigned long flags; + +- BUG_ON((int)id < 0); ++ if ((int)id < 0) ++ return; + + xas_lock_irqsave(&xas, flags); + bitmap = xas_load(&xas); diff --git a/queue-5.10/series b/queue-5.10/series index 756a45338aa..96d85e4ff98 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -47,3 +47,9 @@ dmaengine-imx-sdma-allow-imx8m-for-imx7-fw-revs.patch misc-rtsx_usb-fix-use-of-dma-mapped-buffer-for-usb-bulk-transfer.patch misc-rtsx_usb-use-separate-command-and-response-buffers.patch misc-rtsx_usb-set-return-value-in-rsp_buf-alloc-err-path.patch +dt-bindings-dma-allwinner-sun50i-a64-dma-fix-min-max-typo.patch +ida-don-t-use-bug_on-for-debugging.patch +dmaengine-pl330-fix-lockdep-warning-about-non-static-key.patch +dmaengine-at_xdma-handle-errors-of-at_xdmac_alloc_desc-correctly.patch +dmaengine-ti-fix-refcount-leak-in-ti_dra7_xbar_route_allocate.patch +dmaengine-ti-add-missing-put_device-in-ti_dra7_xbar_route_allocate.patch -- 2.47.3