From: Greg Kroah-Hartman Date: Mon, 11 Jul 2022 07:17:01 +0000 (+0200) Subject: 4.19-stable patches X-Git-Tag: v4.9.323~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c4a3d5e5c0f6e31bedfd9d4febc2a32d7f9a94a7;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-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 ida-don-t-use-bug_on-for-debugging.patch --- diff --git a/queue-4.19/dmaengine-at_xdma-handle-errors-of-at_xdmac_alloc_desc-correctly.patch b/queue-4.19/dmaengine-at_xdma-handle-errors-of-at_xdmac_alloc_desc-correctly.patch new file mode 100644 index 00000000000..0c74eff3648 --- /dev/null +++ b/queue-4.19/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 +@@ -1804,6 +1804,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_ATOMIC); + 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-4.19/dmaengine-pl330-fix-lockdep-warning-about-non-static-key.patch b/queue-4.19/dmaengine-pl330-fix-lockdep-warning-about-non-static-key.patch new file mode 100644 index 00000000000..0b3f6e307b3 --- /dev/null +++ b/queue-4.19/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 +@@ -2568,7 +2568,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-4.19/dmaengine-ti-add-missing-put_device-in-ti_dra7_xbar_route_allocate.patch b/queue-4.19/dmaengine-ti-add-missing-put_device-in-ti_dra7_xbar_route_allocate.patch new file mode 100644 index 00000000000..5f993a9f9cd --- /dev/null +++ b/queue-4.19/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 +@@ -251,6 +251,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); + } + +@@ -258,12 +259,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); + } + +@@ -275,6 +278,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-4.19/dmaengine-ti-fix-refcount-leak-in-ti_dra7_xbar_route_allocate.patch b/queue-4.19/dmaengine-ti-fix-refcount-leak-in-ti_dra7_xbar_route_allocate.patch new file mode 100644 index 00000000000..662522fa9d5 --- /dev/null +++ b/queue-4.19/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 +@@ -274,6 +274,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-4.19/ida-don-t-use-bug_on-for-debugging.patch b/queue-4.19/ida-don-t-use-bug_on-for-debugging.patch new file mode 100644 index 00000000000..dfd3d9a289b --- /dev/null +++ b/queue-4.19/ida-don-t-use-bug_on-for-debugging.patch @@ -0,0 +1,59 @@ +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 | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/lib/idr.c ++++ b/lib/idr.c +@@ -573,7 +573,9 @@ void ida_free(struct ida *ida, unsigned + { + unsigned long flags; + +- BUG_ON((int)id < 0); ++ if ((int)id < 0) ++ return; ++ + xa_lock_irqsave(&ida->ida_rt, flags); + ida_remove(ida, id); + xa_unlock_irqrestore(&ida->ida_rt, flags); diff --git a/queue-4.19/series b/queue-4.19/series index bb0531f9603..2dbd4030977 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -24,3 +24,8 @@ i2c-cadence-unregister-the-clk-notifier-in-error-pat.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 +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