]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.4
authorSasha Levin <sashal@kernel.org>
Fri, 10 Jun 2022 12:34:55 +0000 (08:34 -0400)
committerSasha Levin <sashal@kernel.org>
Fri, 10 Jun 2022 12:34:55 +0000 (08:34 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
12 files changed:
queue-5.4/dmaengine-zynqmp_dma-in-struct-zynqmp_dma_chan-fix-d.patch [new file with mode: 0644]
queue-5.4/f2fs-remove-warn_on-in-f2fs_is_valid_blkaddr.patch [new file with mode: 0644]
queue-5.4/i2c-cadence-increase-timeout-per-message-if-necessar.patch [new file with mode: 0644]
queue-5.4/m68knommu-fix-undefined-reference-to-_init_sp.patch [new file with mode: 0644]
queue-5.4/m68knommu-set-zero_page-to-the-allocated-zeroed-page.patch [new file with mode: 0644]
queue-5.4/mips-cpc-fix-refcount-leak-in-mips_cpc_default_phys_.patch [new file with mode: 0644]
queue-5.4/nfsv4-don-t-hold-the-layoutget-locks-across-multiple.patch [new file with mode: 0644]
queue-5.4/series
queue-5.4/tracing-avoid-adding-tracer-option-before-update_tra.patch [new file with mode: 0644]
queue-5.4/tracing-fix-sleeping-function-called-from-invalid-co.patch [new file with mode: 0644]
queue-5.4/video-fbdev-pxa3xx-gcu-release-the-resources-correct.patch [new file with mode: 0644]
queue-5.4/xprtrdma-treat-all-calls-not-a-bcall-when-bc_serv-is.patch [new file with mode: 0644]

diff --git a/queue-5.4/dmaengine-zynqmp_dma-in-struct-zynqmp_dma_chan-fix-d.patch b/queue-5.4/dmaengine-zynqmp_dma-in-struct-zynqmp_dma_chan-fix-d.patch
new file mode 100644 (file)
index 0000000..2b0eab9
--- /dev/null
@@ -0,0 +1,64 @@
+From 5b90f52ae09e2d47c3e9447ecd11ea4b9e36ef9a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 10 May 2022 12:42:40 +0530
+Subject: dmaengine: zynqmp_dma: In struct zynqmp_dma_chan fix desc_size data
+ type
+
+From: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
+
+[ Upstream commit f9a9f43a62a04ec3183fb0da9226c7706eed0115 ]
+
+In zynqmp_dma_alloc/free_chan_resources functions there is a
+potential overflow in the below expressions.
+
+dma_alloc_coherent(chan->dev, (2 * chan->desc_size *
+                  ZYNQMP_DMA_NUM_DESCS),
+                  &chan->desc_pool_p, GFP_KERNEL);
+
+dma_free_coherent(chan->dev,(2 * ZYNQMP_DMA_DESC_SIZE(chan) *
+                 ZYNQMP_DMA_NUM_DESCS),
+                chan->desc_pool_v, chan->desc_pool_p);
+
+The arguments desc_size and ZYNQMP_DMA_NUM_DESCS were 32 bit. Though
+this overflow condition is not observed but it is a potential problem
+in the case of 32-bit multiplication. Hence fix it by changing the
+desc_size data type to size_t.
+
+In addition to coverity fix it also reuse ZYNQMP_DMA_DESC_SIZE macro in
+dma_alloc_coherent API argument.
+
+Addresses-Coverity: Event overflow_before_widen.
+Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
+Link: https://lore.kernel.org/r/1652166762-18317-2-git-send-email-radhey.shyam.pandey@xilinx.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/xilinx/zynqmp_dma.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/dma/xilinx/zynqmp_dma.c b/drivers/dma/xilinx/zynqmp_dma.c
+index 84009c5e0f33..b61d0c79dffb 100644
+--- a/drivers/dma/xilinx/zynqmp_dma.c
++++ b/drivers/dma/xilinx/zynqmp_dma.c
+@@ -232,7 +232,7 @@ struct zynqmp_dma_chan {
+       bool is_dmacoherent;
+       struct tasklet_struct tasklet;
+       bool idle;
+-      u32 desc_size;
++      size_t desc_size;
+       bool err;
+       u32 bus_width;
+       u32 src_burst_len;
+@@ -489,7 +489,8 @@ static int zynqmp_dma_alloc_chan_resources(struct dma_chan *dchan)
+       }
+       chan->desc_pool_v = dma_alloc_coherent(chan->dev,
+-                                             (2 * chan->desc_size * ZYNQMP_DMA_NUM_DESCS),
++                                             (2 * ZYNQMP_DMA_DESC_SIZE(chan) *
++                                             ZYNQMP_DMA_NUM_DESCS),
+                                              &chan->desc_pool_p, GFP_KERNEL);
+       if (!chan->desc_pool_v)
+               return -ENOMEM;
+-- 
+2.35.1
+
diff --git a/queue-5.4/f2fs-remove-warn_on-in-f2fs_is_valid_blkaddr.patch b/queue-5.4/f2fs-remove-warn_on-in-f2fs_is_valid_blkaddr.patch
new file mode 100644 (file)
index 0000000..96b0e39
--- /dev/null
@@ -0,0 +1,60 @@
+From a028915241e4e939b67c1fb395d1a58abe7dd930 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 15 Apr 2022 21:19:02 +0800
+Subject: f2fs: remove WARN_ON in f2fs_is_valid_blkaddr
+
+From: Dongliang Mu <mudongliangabcd@gmail.com>
+
+[ Upstream commit dc2f78e2d4cc844a1458653d57ce1b54d4a29f21 ]
+
+Syzbot triggers two WARNs in f2fs_is_valid_blkaddr and
+__is_bitmap_valid. For example, in f2fs_is_valid_blkaddr,
+if type is DATA_GENERIC_ENHANCE or DATA_GENERIC_ENHANCE_READ,
+it invokes WARN_ON if blkaddr is not in the right range.
+The call trace is as follows:
+
+ f2fs_get_node_info+0x45f/0x1070
+ read_node_page+0x577/0x1190
+ __get_node_page.part.0+0x9e/0x10e0
+ __get_node_page
+ f2fs_get_node_page+0x109/0x180
+ do_read_inode
+ f2fs_iget+0x2a5/0x58b0
+ f2fs_fill_super+0x3b39/0x7ca0
+
+Fix these two WARNs by replacing WARN_ON with dump_stack.
+
+Reported-by: syzbot+763ae12a2ede1d99d4dc@syzkaller.appspotmail.com
+Signed-off-by: Dongliang Mu <mudongliangabcd@gmail.com>
+Reviewed-by: Chao Yu <chao@kernel.org>
+Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/f2fs/checkpoint.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
+index 54f0d2c4c7d8..44c5110e18f0 100644
+--- a/fs/f2fs/checkpoint.c
++++ b/fs/f2fs/checkpoint.c
+@@ -149,7 +149,7 @@ static bool __is_bitmap_valid(struct f2fs_sb_info *sbi, block_t blkaddr,
+               f2fs_err(sbi, "Inconsistent error blkaddr:%u, sit bitmap:%d",
+                        blkaddr, exist);
+               set_sbi_flag(sbi, SBI_NEED_FSCK);
+-              WARN_ON(1);
++              dump_stack();
+       }
+       return exist;
+ }
+@@ -187,7 +187,7 @@ bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
+                       f2fs_warn(sbi, "access invalid blkaddr:%u",
+                                 blkaddr);
+                       set_sbi_flag(sbi, SBI_NEED_FSCK);
+-                      WARN_ON(1);
++                      dump_stack();
+                       return false;
+               } else {
+                       return __is_bitmap_valid(sbi, blkaddr, type);
+-- 
+2.35.1
+
diff --git a/queue-5.4/i2c-cadence-increase-timeout-per-message-if-necessar.patch b/queue-5.4/i2c-cadence-increase-timeout-per-message-if-necessar.patch
new file mode 100644 (file)
index 0000000..2987a7c
--- /dev/null
@@ -0,0 +1,64 @@
+From 397ddd4d2f7536890e15eab111c0a172ea9a8777 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 Apr 2022 10:14:10 +0100
+Subject: i2c: cadence: Increase timeout per message if necessary
+
+From: Lucas Tanure <tanureal@opensource.cirrus.com>
+
+[ Upstream commit 96789dce043f5bff8b7d62aa28d52a7c59403a84 ]
+
+Timeout as 1 second sets an upper limit on the length
+of the transfer executed, but there is no maximum length
+of a write or read message set in i2c_adapter_quirks for
+this controller.
+
+This upper limit affects devices that require sending
+large firmware blobs over I2C.
+
+To remove that limitation, calculate the minimal time
+necessary, plus some wiggle room, for every message and
+use it instead of the default one second, if more than
+one second.
+
+Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com>
+Acked-by: Michal Simek <michal.simek@xilinx.com>
+Signed-off-by: Wolfram Sang <wsa@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/i2c/busses/i2c-cadence.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/i2c/busses/i2c-cadence.c b/drivers/i2c/busses/i2c-cadence.c
+index 17f0dd1f891e..8a3a0991bc1c 100644
+--- a/drivers/i2c/busses/i2c-cadence.c
++++ b/drivers/i2c/busses/i2c-cadence.c
+@@ -506,7 +506,7 @@ static void cdns_i2c_master_reset(struct i2c_adapter *adap)
+ static int cdns_i2c_process_msg(struct cdns_i2c *id, struct i2c_msg *msg,
+               struct i2c_adapter *adap)
+ {
+-      unsigned long time_left;
++      unsigned long time_left, msg_timeout;
+       u32 reg;
+       id->p_msg = msg;
+@@ -531,8 +531,16 @@ static int cdns_i2c_process_msg(struct cdns_i2c *id, struct i2c_msg *msg,
+       else
+               cdns_i2c_msend(id);
++      /* Minimal time to execute this message */
++      msg_timeout = msecs_to_jiffies((1000 * msg->len * BITS_PER_BYTE) / id->i2c_clk);
++      /* Plus some wiggle room */
++      msg_timeout += msecs_to_jiffies(500);
++
++      if (msg_timeout < adap->timeout)
++              msg_timeout = adap->timeout;
++
+       /* Wait for the signal of completion */
+-      time_left = wait_for_completion_timeout(&id->xfer_done, adap->timeout);
++      time_left = wait_for_completion_timeout(&id->xfer_done, msg_timeout);
+       if (time_left == 0) {
+               cdns_i2c_master_reset(adap);
+               dev_err(id->adap.dev.parent,
+-- 
+2.35.1
+
diff --git a/queue-5.4/m68knommu-fix-undefined-reference-to-_init_sp.patch b/queue-5.4/m68knommu-fix-undefined-reference-to-_init_sp.patch
new file mode 100644 (file)
index 0000000..e01bfe3
--- /dev/null
@@ -0,0 +1,43 @@
+From 01da67047bb5fa9f9c4a610e3f9878309640ca3b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 13 May 2022 17:27:39 +1000
+Subject: m68knommu: fix undefined reference to `_init_sp'
+
+From: Greg Ungerer <gerg@linux-m68k.org>
+
+[ Upstream commit a71b9e66fee47c59b3ec34e652b5c23bc6550794 ]
+
+When configuring a nommu classic m68k system enabling the uboot parameter
+passing support (CONFIG_UBOOT) will produce the following compile error:
+
+   m68k-linux-ld: arch/m68k/kernel/uboot.o: in function `process_uboot_commandline':
+   uboot.c:(.init.text+0x32): undefined reference to `_init_sp'
+
+The logic to support this option is only used on ColdFire based platforms
+(in its head.S startup code). So make the selection of this option
+depend on building for a ColdFire based platform.
+
+Reported-by: kernel test robot <lkp@intel.com>
+Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Signed-off-by: Greg Ungerer <gerg@linux-m68k.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/m68k/Kconfig.machine | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/m68k/Kconfig.machine b/arch/m68k/Kconfig.machine
+index b88a980f56f8..f0527b155c05 100644
+--- a/arch/m68k/Kconfig.machine
++++ b/arch/m68k/Kconfig.machine
+@@ -320,6 +320,7 @@ comment "Machine Options"
+ config UBOOT
+       bool "Support for U-Boot command line parameters"
++      depends on COLDFIRE
+       help
+         If you say Y here kernel will try to collect command
+         line parameters from the initial u-boot stack.
+-- 
+2.35.1
+
diff --git a/queue-5.4/m68knommu-set-zero_page-to-the-allocated-zeroed-page.patch b/queue-5.4/m68knommu-set-zero_page-to-the-allocated-zeroed-page.patch
new file mode 100644 (file)
index 0000000..d2cb892
--- /dev/null
@@ -0,0 +1,47 @@
+From e06eebe1b64d898695e1ac595265f0c194e48cbc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Apr 2022 23:27:47 +1000
+Subject: m68knommu: set ZERO_PAGE() to the allocated zeroed page
+
+From: Greg Ungerer <gerg@linux-m68k.org>
+
+[ Upstream commit dc068f46217970d9516f16cd37972a01d50dc055 ]
+
+The non-MMU m68k pagetable ZERO_PAGE() macro is being set to the
+somewhat non-sensical value of "virt_to_page(0)". The zeroth page
+is not in any way guaranteed to be a page full of "0". So the result
+is that ZERO_PAGE() will almost certainly contain random values.
+
+We already allocate a real "empty_zero_page" in the mm setup code shared
+between MMU m68k and non-MMU m68k. It is just not hooked up to the
+ZERO_PAGE() macro for the non-MMU m68k case.
+
+Fix ZERO_PAGE() to use the allocated "empty_zero_page" pointer.
+
+I am not aware of any specific issues caused by the old code.
+
+Link: https://lore.kernel.org/linux-m68k/2a462b23-5b8e-bbf4-ec7d-778434a3b9d7@google.com/T/#t
+Reported-by: Hugh Dickens <hughd@google.com>
+Signed-off-by: Greg Ungerer <gerg@linux-m68k.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/m68k/include/asm/pgtable_no.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/arch/m68k/include/asm/pgtable_no.h b/arch/m68k/include/asm/pgtable_no.h
+index c18165b0d904..6b0248466569 100644
+--- a/arch/m68k/include/asm/pgtable_no.h
++++ b/arch/m68k/include/asm/pgtable_no.h
+@@ -42,7 +42,8 @@ extern void paging_init(void);
+  * ZERO_PAGE is a global shared page that is always zero: used
+  * for zero-mapped memory areas etc..
+  */
+-#define ZERO_PAGE(vaddr)      (virt_to_page(0))
++extern void *empty_zero_page;
++#define ZERO_PAGE(vaddr)      (virt_to_page(empty_zero_page))
+ /*
+  * All 32bit addresses are effectively valid for vmalloc...
+-- 
+2.35.1
+
diff --git a/queue-5.4/mips-cpc-fix-refcount-leak-in-mips_cpc_default_phys_.patch b/queue-5.4/mips-cpc-fix-refcount-leak-in-mips_cpc_default_phys_.patch
new file mode 100644 (file)
index 0000000..b7e182f
--- /dev/null
@@ -0,0 +1,35 @@
+From c433ba3c132ccbf8187c6f6dcca54df5c82ede74 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 12:26:57 +0800
+Subject: mips: cpc: Fix refcount leak in mips_cpc_default_phys_base
+
+From: Gong Yuanjun <ruc_gongyuanjun@163.com>
+
+[ Upstream commit 4107fa700f314592850e2c64608f6ede4c077476 ]
+
+Add the missing of_node_put() to release the refcount incremented
+by of_find_compatible_node().
+
+Signed-off-by: Gong Yuanjun <ruc_gongyuanjun@163.com>
+Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
+Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/mips/kernel/mips-cpc.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/mips/kernel/mips-cpc.c b/arch/mips/kernel/mips-cpc.c
+index 69e3e0b556bf..1b0d4bb617a9 100644
+--- a/arch/mips/kernel/mips-cpc.c
++++ b/arch/mips/kernel/mips-cpc.c
+@@ -27,6 +27,7 @@ phys_addr_t __weak mips_cpc_default_phys_base(void)
+       cpc_node = of_find_compatible_node(of_root, NULL, "mti,mips-cpc");
+       if (cpc_node) {
+               err = of_address_to_resource(cpc_node, 0, &res);
++              of_node_put(cpc_node);
+               if (!err)
+                       return res.start;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.4/nfsv4-don-t-hold-the-layoutget-locks-across-multiple.patch b/queue-5.4/nfsv4-don-t-hold-the-layoutget-locks-across-multiple.patch
new file mode 100644 (file)
index 0000000..b1c6e76
--- /dev/null
@@ -0,0 +1,39 @@
+From b460d3108f714e74b86c1a6abb526a402fe1eee0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 May 2022 10:08:14 -0400
+Subject: NFSv4: Don't hold the layoutget locks across multiple RPC calls
+
+From: Trond Myklebust <trond.myklebust@hammerspace.com>
+
+[ Upstream commit 6949493884fe88500de4af182588e071cf1544ee ]
+
+When doing layoutget as part of the open() compound, we have to be
+careful to release the layout locks before we can call any further RPC
+calls, such as setattr(). The reason is that those calls could trigger
+a recall, which could deadlock.
+
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nfs/nfs4proc.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
+index cf3b00751ff6..ba4a03a69fbf 100644
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -3041,6 +3041,10 @@ static int _nfs4_open_and_get_state(struct nfs4_opendata *opendata,
+       }
+ out:
++      if (opendata->lgp) {
++              nfs4_lgopen_release(opendata->lgp);
++              opendata->lgp = NULL;
++      }
+       if (!opendata->cancelled)
+               nfs4_sequence_free_slot(&opendata->o_res.seq_res);
+       return ret;
+-- 
+2.35.1
+
index 63c4bf6801d0895fe9fed2865e22310e11fbd9fb..22e5f48c016a155bff8fb7704c47b726ad80c742 100644 (file)
@@ -335,3 +335,14 @@ tcp-tcp_rtx_synack-can-be-called-from-process-contex.patch
 afs-fix-infinite-loop-found-by-xfstest-generic-676.patch
 tipc-check-attribute-length-for-bearer-name.patch
 perf-c2c-fix-sorting-in-percent_rmt_hitm_cmp.patch
+mips-cpc-fix-refcount-leak-in-mips_cpc_default_phys_.patch
+tracing-fix-sleeping-function-called-from-invalid-co.patch
+tracing-avoid-adding-tracer-option-before-update_tra.patch
+f2fs-remove-warn_on-in-f2fs_is_valid_blkaddr.patch
+i2c-cadence-increase-timeout-per-message-if-necessar.patch
+m68knommu-set-zero_page-to-the-allocated-zeroed-page.patch
+m68knommu-fix-undefined-reference-to-_init_sp.patch
+dmaengine-zynqmp_dma-in-struct-zynqmp_dma_chan-fix-d.patch
+nfsv4-don-t-hold-the-layoutget-locks-across-multiple.patch
+video-fbdev-pxa3xx-gcu-release-the-resources-correct.patch
+xprtrdma-treat-all-calls-not-a-bcall-when-bc_serv-is.patch
diff --git a/queue-5.4/tracing-avoid-adding-tracer-option-before-update_tra.patch b/queue-5.4/tracing-avoid-adding-tracer-option-before-update_tra.patch
new file mode 100644 (file)
index 0000000..e907c6f
--- /dev/null
@@ -0,0 +1,66 @@
+From 680de37767ecab0410e33de26bdac794b7e5650b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 Apr 2022 20:24:06 +0800
+Subject: tracing: Avoid adding tracer option before update_tracer_options
+
+From: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
+
+[ Upstream commit ef9188bcc6ca1d8a2ad83e826b548e6820721061 ]
+
+To prepare for support asynchronous tracer_init_tracefs initcall,
+avoid calling create_trace_option_files before __update_tracer_options.
+Otherwise, create_trace_option_files will show warning because
+some tracers in trace_types list are already in tr->topts.
+
+For example, hwlat_tracer call register_tracer in late_initcall,
+and global_trace.dir is already created in tracing_init_dentry,
+hwlat_tracer will be put into tr->topts.
+Then if the __update_tracer_options is executed after hwlat_tracer
+registered, create_trace_option_files find that hwlat_tracer is
+already in tr->topts.
+
+Link: https://lkml.kernel.org/r/20220426122407.17042-2-mark-pk.tsai@mediatek.com
+
+Link: https://lore.kernel.org/lkml/20220322133339.GA32582@xsang-OptiPlex-9020/
+Reported-by: kernel test robot <oliver.sang@intel.com>
+Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
+Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/trace/trace.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
+index ce9165de019c..55da88f18342 100644
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -5638,12 +5638,18 @@ static void tracing_set_nop(struct trace_array *tr)
+       tr->current_trace = &nop_trace;
+ }
++static bool tracer_options_updated;
++
+ static void add_tracer_options(struct trace_array *tr, struct tracer *t)
+ {
+       /* Only enable if the directory has been created already. */
+       if (!tr->dir)
+               return;
++      /* Only create trace option files after update_tracer_options finish */
++      if (!tracer_options_updated)
++              return;
++
+       create_trace_option_files(tr, t);
+ }
+@@ -8391,6 +8397,7 @@ static void __update_tracer_options(struct trace_array *tr)
+ static void update_tracer_options(struct trace_array *tr)
+ {
+       mutex_lock(&trace_types_lock);
++      tracer_options_updated = true;
+       __update_tracer_options(tr);
+       mutex_unlock(&trace_types_lock);
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.4/tracing-fix-sleeping-function-called-from-invalid-co.patch b/queue-5.4/tracing-fix-sleeping-function-called-from-invalid-co.patch
new file mode 100644 (file)
index 0000000..3f616db
--- /dev/null
@@ -0,0 +1,93 @@
+From 49e263eef56bc513f6689f618830b9dcd11cde16 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 Apr 2022 09:39:10 +0800
+Subject: tracing: Fix sleeping function called from invalid context on RT
+ kernel
+
+From: Jun Miao <jun.miao@intel.com>
+
+[ Upstream commit 12025abdc8539ed9d5014e2d647a3fd1bd3de5cd ]
+
+When setting bootparams="trace_event=initcall:initcall_start tp_printk=1" in the
+cmdline, the output_printk() was called, and the spin_lock_irqsave() was called in the
+atomic and irq disable interrupt context suitation. On the PREEMPT_RT kernel,
+these locks are replaced with sleepable rt-spinlock, so the stack calltrace will
+be triggered.
+Fix it by raw_spin_lock_irqsave when PREEMPT_RT and "trace_event=initcall:initcall_start
+tp_printk=1" enabled.
+
+ BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:46
+ in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 1, name: swapper/0
+ preempt_count: 2, expected: 0
+ RCU nest depth: 0, expected: 0
+ Preemption disabled at:
+ [<ffffffff8992303e>] try_to_wake_up+0x7e/0xba0
+ CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.17.1-rt17+ #19 34c5812404187a875f32bee7977f7367f9679ea7
+ Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-2 04/01/2014
+ Call Trace:
+  <TASK>
+  dump_stack_lvl+0x60/0x8c
+  dump_stack+0x10/0x12
+  __might_resched.cold+0x11d/0x155
+  rt_spin_lock+0x40/0x70
+  trace_event_buffer_commit+0x2fa/0x4c0
+  ? map_vsyscall+0x93/0x93
+  trace_event_raw_event_initcall_start+0xbe/0x110
+  ? perf_trace_initcall_finish+0x210/0x210
+  ? probe_sched_wakeup+0x34/0x40
+  ? ttwu_do_wakeup+0xda/0x310
+  ? trace_hardirqs_on+0x35/0x170
+  ? map_vsyscall+0x93/0x93
+  do_one_initcall+0x217/0x3c0
+  ? trace_event_raw_event_initcall_level+0x170/0x170
+  ? push_cpu_stop+0x400/0x400
+  ? cblist_init_generic+0x241/0x290
+  kernel_init_freeable+0x1ac/0x347
+  ? _raw_spin_unlock_irq+0x65/0x80
+  ? rest_init+0xf0/0xf0
+  kernel_init+0x1e/0x150
+  ret_from_fork+0x22/0x30
+  </TASK>
+
+Link: https://lkml.kernel.org/r/20220419013910.894370-1-jun.miao@intel.com
+
+Signed-off-by: Jun Miao <jun.miao@intel.com>
+Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/trace/trace.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
+index 56619766e910..ce9165de019c 100644
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -2537,7 +2537,7 @@ trace_event_buffer_lock_reserve(struct ring_buffer **current_rb,
+ }
+ EXPORT_SYMBOL_GPL(trace_event_buffer_lock_reserve);
+-static DEFINE_SPINLOCK(tracepoint_iter_lock);
++static DEFINE_RAW_SPINLOCK(tracepoint_iter_lock);
+ static DEFINE_MUTEX(tracepoint_printk_mutex);
+ static void output_printk(struct trace_event_buffer *fbuffer)
+@@ -2558,14 +2558,14 @@ static void output_printk(struct trace_event_buffer *fbuffer)
+       event = &fbuffer->trace_file->event_call->event;
+-      spin_lock_irqsave(&tracepoint_iter_lock, flags);
++      raw_spin_lock_irqsave(&tracepoint_iter_lock, flags);
+       trace_seq_init(&iter->seq);
+       iter->ent = fbuffer->entry;
+       event_call->event.funcs->trace(iter, 0, event);
+       trace_seq_putc(&iter->seq, 0);
+       printk("%s", iter->seq.buffer);
+-      spin_unlock_irqrestore(&tracepoint_iter_lock, flags);
++      raw_spin_unlock_irqrestore(&tracepoint_iter_lock, flags);
+ }
+ int tracepoint_printk_sysctl(struct ctl_table *table, int write,
+-- 
+2.35.1
+
diff --git a/queue-5.4/video-fbdev-pxa3xx-gcu-release-the-resources-correct.patch b/queue-5.4/video-fbdev-pxa3xx-gcu-release-the-resources-correct.patch
new file mode 100644 (file)
index 0000000..cf6dbee
--- /dev/null
@@ -0,0 +1,67 @@
+From 3cb41c08c4e0868559fca472026eebe0359033b8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 13 May 2022 18:05:41 +0800
+Subject: video: fbdev: pxa3xx-gcu: release the resources correctly in
+ pxa3xx_gcu_probe/remove()
+
+From: Yang Yingliang <yangyingliang@huawei.com>
+
+[ Upstream commit d87ad457f7e1b8d2492ca5b1531eb35030a1cc8f ]
+
+In pxa3xx_gcu_probe(), the sequence of error lable is wrong, it will
+leads some resource leaked, so adjust the sequence to handle the error
+correctly, and if pxa3xx_gcu_add_buffer() fails, pxa3xx_gcu_free_buffers()
+need be called.
+In pxa3xx_gcu_remove(), add missing clk_disable_unpreprare().
+
+Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
+Signed-off-by: Helge Deller <deller@gmx.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/video/fbdev/pxa3xx-gcu.c | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/video/fbdev/pxa3xx-gcu.c b/drivers/video/fbdev/pxa3xx-gcu.c
+index 74ffb446e00c..7c4694d70dac 100644
+--- a/drivers/video/fbdev/pxa3xx-gcu.c
++++ b/drivers/video/fbdev/pxa3xx-gcu.c
+@@ -651,6 +651,7 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev)
+       for (i = 0; i < 8; i++) {
+               ret = pxa3xx_gcu_add_buffer(dev, priv);
+               if (ret) {
++                      pxa3xx_gcu_free_buffers(dev, priv);
+                       dev_err(dev, "failed to allocate DMA memory\n");
+                       goto err_disable_clk;
+               }
+@@ -667,15 +668,15 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev)
+                       SHARED_SIZE, irq);
+       return 0;
+-err_free_dma:
+-      dma_free_coherent(dev, SHARED_SIZE,
+-                      priv->shared, priv->shared_phys);
++err_disable_clk:
++      clk_disable_unprepare(priv->clk);
+ err_misc_deregister:
+       misc_deregister(&priv->misc_dev);
+-err_disable_clk:
+-      clk_disable_unprepare(priv->clk);
++err_free_dma:
++      dma_free_coherent(dev, SHARED_SIZE,
++                        priv->shared, priv->shared_phys);
+       return ret;
+ }
+@@ -688,6 +689,7 @@ static int pxa3xx_gcu_remove(struct platform_device *pdev)
+       pxa3xx_gcu_wait_idle(priv);
+       misc_deregister(&priv->misc_dev);
+       dma_free_coherent(dev, SHARED_SIZE, priv->shared, priv->shared_phys);
++      clk_disable_unprepare(priv->clk);
+       pxa3xx_gcu_free_buffers(dev, priv);
+       return 0;
+-- 
+2.35.1
+
diff --git a/queue-5.4/xprtrdma-treat-all-calls-not-a-bcall-when-bc_serv-is.patch b/queue-5.4/xprtrdma-treat-all-calls-not-a-bcall-when-bc_serv-is.patch
new file mode 100644 (file)
index 0000000..b49f331
--- /dev/null
@@ -0,0 +1,73 @@
+From 4560040fcd54f630f5d268802aa8d5c5f129a0be Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 22 May 2022 20:36:48 +0800
+Subject: xprtrdma: treat all calls not a bcall when bc_serv is NULL
+
+From: Kinglong Mee <kinglongmee@gmail.com>
+
+[ Upstream commit 11270e7ca268e8d61b5d9e5c3a54bd1550642c9c ]
+
+When a rdma server returns a fault format reply, nfs v3 client may
+treats it as a bcall when bc service is not exist.
+
+The debug message at rpcrdma_bc_receive_call are,
+
+[56579.837169] RPC:       rpcrdma_bc_receive_call: callback XID
+00000001, length=20
+[56579.837174] RPC:       rpcrdma_bc_receive_call: 00 00 00 01 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 04
+
+After that, rpcrdma_bc_receive_call will meets NULL pointer as,
+
+[  226.057890] BUG: unable to handle kernel NULL pointer dereference at
+00000000000000c8
+...
+[  226.058704] RIP: 0010:_raw_spin_lock+0xc/0x20
+...
+[  226.059732] Call Trace:
+[  226.059878]  rpcrdma_bc_receive_call+0x138/0x327 [rpcrdma]
+[  226.060011]  __ib_process_cq+0x89/0x170 [ib_core]
+[  226.060092]  ib_cq_poll_work+0x26/0x80 [ib_core]
+[  226.060257]  process_one_work+0x1a7/0x360
+[  226.060367]  ? create_worker+0x1a0/0x1a0
+[  226.060440]  worker_thread+0x30/0x390
+[  226.060500]  ? create_worker+0x1a0/0x1a0
+[  226.060574]  kthread+0x116/0x130
+[  226.060661]  ? kthread_flush_work_fn+0x10/0x10
+[  226.060724]  ret_from_fork+0x35/0x40
+...
+
+Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
+Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
+Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/sunrpc/xprtrdma/rpc_rdma.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
+index c091417bd799..60aaed9457e4 100644
+--- a/net/sunrpc/xprtrdma/rpc_rdma.c
++++ b/net/sunrpc/xprtrdma/rpc_rdma.c
+@@ -1042,6 +1042,7 @@ static bool
+ rpcrdma_is_bcall(struct rpcrdma_xprt *r_xprt, struct rpcrdma_rep *rep)
+ #if defined(CONFIG_SUNRPC_BACKCHANNEL)
+ {
++      struct rpc_xprt *xprt = &r_xprt->rx_xprt;
+       struct xdr_stream *xdr = &rep->rr_stream;
+       __be32 *p;
+@@ -1065,6 +1066,10 @@ rpcrdma_is_bcall(struct rpcrdma_xprt *r_xprt, struct rpcrdma_rep *rep)
+       if (*p != cpu_to_be32(RPC_CALL))
+               return false;
++      /* No bc service. */
++      if (xprt->bc_serv == NULL)
++              return false;
++
+       /* Now that we are sure this is a backchannel call,
+        * advance to the RPC header.
+        */
+-- 
+2.35.1
+