]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.1-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 9 Sep 2023 21:27:39 +0000 (22:27 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 9 Sep 2023 21:27:39 +0000 (22:27 +0100)
added patches:
block-don-t-add-or-resize-partition-on-the-disk-with-genhd_fl_no_part.patch
bpf-fix-issue-in-verifying-allow_ptr_leaks.patch
drm-amd-display-add-smu-write-msg-id-fail-retry-process.patch
media-dvb-symbol-fixup-for-dvb_attach.patch
media-venus-hfi_venus-write-to-vidc_ctrl_init-after-unmasking-interrupts.patch
ntb-clean-up-tx-tail-index-on-link-down.patch
ntb-drop-packets-when-qp-link-is-down.patch
ntb-fix-calculation-ntb_transport_tx_free_entry.patch
parisc-fix-proc-cpuinfo-output-for-lscpu.patch
pci-free-released-resource-after-coalescing.patch
pci-hv-fix-a-crash-in-hv_pci_restore_msi_msg-during-hibernation.patch
pci-pm-only-read-pci_pm_ctrl-register-when-available.patch
procfs-block-chmod-on-proc-thread-self-comm.patch
revert-pci-mark-nvidia-t4-gpus-to-avoid-bus-reset.patch
revert-scsi-qla2xxx-fix-buffer-overrun.patch
scsi-mpt3sas-perform-additional-retries-if-doorbell-read-returns-0.patch

17 files changed:
queue-6.1/block-don-t-add-or-resize-partition-on-the-disk-with-genhd_fl_no_part.patch [new file with mode: 0644]
queue-6.1/bpf-fix-issue-in-verifying-allow_ptr_leaks.patch [new file with mode: 0644]
queue-6.1/drm-amd-display-add-smu-write-msg-id-fail-retry-process.patch [new file with mode: 0644]
queue-6.1/media-dvb-symbol-fixup-for-dvb_attach.patch [new file with mode: 0644]
queue-6.1/media-venus-hfi_venus-write-to-vidc_ctrl_init-after-unmasking-interrupts.patch [new file with mode: 0644]
queue-6.1/ntb-clean-up-tx-tail-index-on-link-down.patch [new file with mode: 0644]
queue-6.1/ntb-drop-packets-when-qp-link-is-down.patch [new file with mode: 0644]
queue-6.1/ntb-fix-calculation-ntb_transport_tx_free_entry.patch [new file with mode: 0644]
queue-6.1/parisc-fix-proc-cpuinfo-output-for-lscpu.patch [new file with mode: 0644]
queue-6.1/pci-free-released-resource-after-coalescing.patch [new file with mode: 0644]
queue-6.1/pci-hv-fix-a-crash-in-hv_pci_restore_msi_msg-during-hibernation.patch [new file with mode: 0644]
queue-6.1/pci-pm-only-read-pci_pm_ctrl-register-when-available.patch [new file with mode: 0644]
queue-6.1/procfs-block-chmod-on-proc-thread-self-comm.patch [new file with mode: 0644]
queue-6.1/revert-pci-mark-nvidia-t4-gpus-to-avoid-bus-reset.patch [new file with mode: 0644]
queue-6.1/revert-scsi-qla2xxx-fix-buffer-overrun.patch [new file with mode: 0644]
queue-6.1/scsi-mpt3sas-perform-additional-retries-if-doorbell-read-returns-0.patch [new file with mode: 0644]
queue-6.1/series

diff --git a/queue-6.1/block-don-t-add-or-resize-partition-on-the-disk-with-genhd_fl_no_part.patch b/queue-6.1/block-don-t-add-or-resize-partition-on-the-disk-with-genhd_fl_no_part.patch
new file mode 100644 (file)
index 0000000..7da861e
--- /dev/null
@@ -0,0 +1,38 @@
+From 1a721de8489fa559ff4471f73c58bb74ac5580d3 Mon Sep 17 00:00:00 2001
+From: Li Lingfeng <lilingfeng3@huawei.com>
+Date: Thu, 31 Aug 2023 15:59:00 +0800
+Subject: block: don't add or resize partition on the disk with GENHD_FL_NO_PART
+
+From: Li Lingfeng <lilingfeng3@huawei.com>
+
+commit 1a721de8489fa559ff4471f73c58bb74ac5580d3 upstream.
+
+Commit a33df75c6328 ("block: use an xarray for disk->part_tbl") remove
+disk_expand_part_tbl() in add_partition(), which means all kinds of
+devices will support extended dynamic `dev_t`.
+However, some devices with GENHD_FL_NO_PART are not expected to add or
+resize partition.
+Fix this by adding check of GENHD_FL_NO_PART before add or resize
+partition.
+
+Fixes: a33df75c6328 ("block: use an xarray for disk->part_tbl")
+Signed-off-by: Li Lingfeng <lilingfeng3@huawei.com>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Link: https://lore.kernel.org/r/20230831075900.1725842-1-lilingfeng@huaweicloud.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ block/ioctl.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/block/ioctl.c
++++ b/block/ioctl.c
+@@ -20,6 +20,8 @@ static int blkpg_do_ioctl(struct block_d
+       struct blkpg_partition p;
+       long long start, length;
++      if (disk->flags & GENHD_FL_NO_PART)
++              return -EINVAL;
+       if (!capable(CAP_SYS_ADMIN))
+               return -EACCES;
+       if (copy_from_user(&p, upart, sizeof(struct blkpg_partition)))
diff --git a/queue-6.1/bpf-fix-issue-in-verifying-allow_ptr_leaks.patch b/queue-6.1/bpf-fix-issue-in-verifying-allow_ptr_leaks.patch
new file mode 100644 (file)
index 0000000..342695b
--- /dev/null
@@ -0,0 +1,90 @@
+From d75e30dddf73449bc2d10bb8e2f1a2c446bc67a2 Mon Sep 17 00:00:00 2001
+From: Yafang Shao <laoar.shao@gmail.com>
+Date: Wed, 23 Aug 2023 02:07:02 +0000
+Subject: bpf: Fix issue in verifying allow_ptr_leaks
+
+From: Yafang Shao <laoar.shao@gmail.com>
+
+commit d75e30dddf73449bc2d10bb8e2f1a2c446bc67a2 upstream.
+
+After we converted the capabilities of our networking-bpf program from
+cap_sys_admin to cap_net_admin+cap_bpf, our networking-bpf program
+failed to start. Because it failed the bpf verifier, and the error log
+is "R3 pointer comparison prohibited".
+
+A simple reproducer as follows,
+
+SEC("cls-ingress")
+int ingress(struct __sk_buff *skb)
+{
+       struct iphdr *iph = (void *)(long)skb->data + sizeof(struct ethhdr);
+
+       if ((long)(iph + 1) > (long)skb->data_end)
+               return TC_ACT_STOLEN;
+       return TC_ACT_OK;
+}
+
+Per discussion with Yonghong and Alexei [1], comparison of two packet
+pointers is not a pointer leak. This patch fixes it.
+
+Our local kernel is 6.1.y and we expect this fix to be backported to
+6.1.y, so stable is CCed.
+
+[1]. https://lore.kernel.org/bpf/CAADnVQ+Nmspr7Si+pxWn8zkE7hX-7s93ugwC+94aXSy4uQ9vBg@mail.gmail.com/
+
+Suggested-by: Yonghong Song <yonghong.song@linux.dev>
+Suggested-by: Alexei Starovoitov <alexei.starovoitov@gmail.com>
+Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
+Acked-by: Eduard Zingerman <eddyz87@gmail.com>
+Cc: stable@vger.kernel.org
+Link: https://lore.kernel.org/r/20230823020703.3790-2-laoar.shao@gmail.com
+Signed-off-by: Alexei Starovoitov <ast@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ kernel/bpf/verifier.c |   17 +++++++++--------
+ 1 file changed, 9 insertions(+), 8 deletions(-)
+
+--- a/kernel/bpf/verifier.c
++++ b/kernel/bpf/verifier.c
+@@ -10401,6 +10401,12 @@ static int check_cond_jmp_op(struct bpf_
+               return -EINVAL;
+       }
++      /* check src2 operand */
++      err = check_reg_arg(env, insn->dst_reg, SRC_OP);
++      if (err)
++              return err;
++
++      dst_reg = &regs[insn->dst_reg];
+       if (BPF_SRC(insn->code) == BPF_X) {
+               if (insn->imm != 0) {
+                       verbose(env, "BPF_JMP/JMP32 uses reserved fields\n");
+@@ -10412,12 +10418,13 @@ static int check_cond_jmp_op(struct bpf_
+               if (err)
+                       return err;
+-              if (is_pointer_value(env, insn->src_reg)) {
++              src_reg = &regs[insn->src_reg];
++              if (!(reg_is_pkt_pointer_any(dst_reg) && reg_is_pkt_pointer_any(src_reg)) &&
++                  is_pointer_value(env, insn->src_reg)) {
+                       verbose(env, "R%d pointer comparison prohibited\n",
+                               insn->src_reg);
+                       return -EACCES;
+               }
+-              src_reg = &regs[insn->src_reg];
+       } else {
+               if (insn->src_reg != BPF_REG_0) {
+                       verbose(env, "BPF_JMP/JMP32 uses reserved fields\n");
+@@ -10425,12 +10432,6 @@ static int check_cond_jmp_op(struct bpf_
+               }
+       }
+-      /* check src2 operand */
+-      err = check_reg_arg(env, insn->dst_reg, SRC_OP);
+-      if (err)
+-              return err;
+-
+-      dst_reg = &regs[insn->dst_reg];
+       is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
+       if (BPF_SRC(insn->code) == BPF_K) {
diff --git a/queue-6.1/drm-amd-display-add-smu-write-msg-id-fail-retry-process.patch b/queue-6.1/drm-amd-display-add-smu-write-msg-id-fail-retry-process.patch
new file mode 100644 (file)
index 0000000..cafc216
--- /dev/null
@@ -0,0 +1,69 @@
+From 72105dcfa3d12b5af49311f857e3490baa225135 Mon Sep 17 00:00:00 2001
+From: Fudong Wang <fudong.wang@amd.com>
+Date: Fri, 11 Aug 2023 08:24:59 +0800
+Subject: drm/amd/display: Add smu write msg id fail retry process
+
+From: Fudong Wang <fudong.wang@amd.com>
+
+commit 72105dcfa3d12b5af49311f857e3490baa225135 upstream.
+
+A benchmark stress test (12-40 machines x 48hours) found that DCN315 has
+cases where DC writes to an indirect register to set the smu clock msg
+id, but when we go to read the same indirect register the returned msg
+id doesn't match with what we just set it to. So, to fix this retry the
+write until the register's value matches with the requested value.
+
+Cc: stable@vger.kernel.org # 6.1+
+Fixes: f94903996140 ("drm/amd/display: Add DCN315 CLK_MGR")
+Reviewed-by: Charlene Liu <charlene.liu@amd.com>
+Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
+Signed-off-by: Fudong Wang <fudong.wang@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/amd/display/dc/clk_mgr/dcn315/dcn315_smu.c |   20 ++++++++++---
+ 1 file changed, 16 insertions(+), 4 deletions(-)
+
+--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn315/dcn315_smu.c
++++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn315/dcn315_smu.c
+@@ -32,6 +32,7 @@
+ #define MAX_INSTANCE                                        6
+ #define MAX_SEGMENT                                         6
++#define SMU_REGISTER_WRITE_RETRY_COUNT                      5
+ struct IP_BASE_INSTANCE
+ {
+@@ -134,6 +135,8 @@ static int dcn315_smu_send_msg_with_para
+               unsigned int msg_id, unsigned int param)
+ {
+       uint32_t result;
++      uint32_t i = 0;
++      uint32_t read_back_data;
+       result = dcn315_smu_wait_for_response(clk_mgr, 10, 200000);
+@@ -150,10 +153,19 @@ static int dcn315_smu_send_msg_with_para
+       /* Set the parameter register for the SMU message, unit is Mhz */
+       REG_WRITE(MP1_SMN_C2PMSG_37, param);
+-      /* Trigger the message transaction by writing the message ID */
+-      generic_write_indirect_reg(CTX,
+-              REG_NBIO(RSMU_INDEX), REG_NBIO(RSMU_DATA),
+-              mmMP1_C2PMSG_3, msg_id);
++      for (i = 0; i < SMU_REGISTER_WRITE_RETRY_COUNT; i++) {
++              /* Trigger the message transaction by writing the message ID */
++              generic_write_indirect_reg(CTX,
++                      REG_NBIO(RSMU_INDEX), REG_NBIO(RSMU_DATA),
++                      mmMP1_C2PMSG_3, msg_id);
++              read_back_data = generic_read_indirect_reg(CTX,
++                      REG_NBIO(RSMU_INDEX), REG_NBIO(RSMU_DATA),
++                      mmMP1_C2PMSG_3);
++              if (read_back_data == msg_id)
++                      break;
++              udelay(2);
++              smu_print("SMU msg id write fail %x times. \n", i + 1);
++      }
+       result = dcn315_smu_wait_for_response(clk_mgr, 10, 200000);
diff --git a/queue-6.1/media-dvb-symbol-fixup-for-dvb_attach.patch b/queue-6.1/media-dvb-symbol-fixup-for-dvb_attach.patch
new file mode 100644 (file)
index 0000000..94d015d
--- /dev/null
@@ -0,0 +1,1288 @@
+From 86495af1171e1feec79faa9b64c05c89f46e41d1 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Fri, 8 Sep 2023 10:20:36 +0100
+Subject: media: dvb: symbol fixup for dvb_attach()
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+commit 86495af1171e1feec79faa9b64c05c89f46e41d1 upstream.
+
+In commit 9011e49d54dc ("modules: only allow symbol_get of
+EXPORT_SYMBOL_GPL modules") the use of symbol_get is properly restricted
+to GPL-only marked symbols.  This interacts oddly with the DVB logic
+which only uses dvb_attach() to load the dvb driver which then uses
+symbol_get().
+
+Fix this up by properly marking all of the dvb_attach attach symbols as
+EXPORT_SYMBOL_GPL().
+
+Fixes: 9011e49d54dc ("modules: only allow symbol_get of EXPORT_SYMBOL_GPL modules")
+Cc: stable <stable@kernel.org>
+Reported-by: Stefan Lippers-Hollmann <s.l-h@gmx.de>
+Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
+Cc: Christoph Hellwig <hch@lst.de>
+Cc: linux-media@vger.kernel.org
+Cc: linux-modules@vger.kernel.org
+Acked-by: Luis Chamberlain <mcgrof@kernel.org>
+Acked-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Link: https://lore.kernel.org/r/20230908092035.3815268-2-gregkh@linuxfoundation.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/media/dvb-frontends/ascot2e.c             |    2 +-
+ drivers/media/dvb-frontends/atbm8830.c            |    2 +-
+ drivers/media/dvb-frontends/au8522_dig.c          |    2 +-
+ drivers/media/dvb-frontends/bcm3510.c             |    2 +-
+ drivers/media/dvb-frontends/cx22700.c             |    2 +-
+ drivers/media/dvb-frontends/cx22702.c             |    2 +-
+ drivers/media/dvb-frontends/cx24110.c             |    2 +-
+ drivers/media/dvb-frontends/cx24113.c             |    2 +-
+ drivers/media/dvb-frontends/cx24116.c             |    2 +-
+ drivers/media/dvb-frontends/cx24120.c             |    2 +-
+ drivers/media/dvb-frontends/cx24123.c             |    2 +-
+ drivers/media/dvb-frontends/cxd2820r_core.c       |    2 +-
+ drivers/media/dvb-frontends/cxd2841er.c           |    4 ++--
+ drivers/media/dvb-frontends/cxd2880/cxd2880_top.c |    2 +-
+ drivers/media/dvb-frontends/dib0070.c             |    2 +-
+ drivers/media/dvb-frontends/dib0090.c             |    4 ++--
+ drivers/media/dvb-frontends/dib3000mb.c           |    2 +-
+ drivers/media/dvb-frontends/dib3000mc.c           |    2 +-
+ drivers/media/dvb-frontends/dib7000m.c            |    2 +-
+ drivers/media/dvb-frontends/dib7000p.c            |    2 +-
+ drivers/media/dvb-frontends/dib8000.c             |    2 +-
+ drivers/media/dvb-frontends/dib9000.c             |    2 +-
+ drivers/media/dvb-frontends/drx39xyj/drxj.c       |    2 +-
+ drivers/media/dvb-frontends/drxd_hard.c           |    2 +-
+ drivers/media/dvb-frontends/drxk_hard.c           |    2 +-
+ drivers/media/dvb-frontends/ds3000.c              |    2 +-
+ drivers/media/dvb-frontends/dvb-pll.c             |    2 +-
+ drivers/media/dvb-frontends/ec100.c               |    2 +-
+ drivers/media/dvb-frontends/helene.c              |    4 ++--
+ drivers/media/dvb-frontends/horus3a.c             |    2 +-
+ drivers/media/dvb-frontends/isl6405.c             |    2 +-
+ drivers/media/dvb-frontends/isl6421.c             |    2 +-
+ drivers/media/dvb-frontends/isl6423.c             |    2 +-
+ drivers/media/dvb-frontends/itd1000.c             |    2 +-
+ drivers/media/dvb-frontends/ix2505v.c             |    2 +-
+ drivers/media/dvb-frontends/l64781.c              |    2 +-
+ drivers/media/dvb-frontends/lg2160.c              |    2 +-
+ drivers/media/dvb-frontends/lgdt3305.c            |    2 +-
+ drivers/media/dvb-frontends/lgdt3306a.c           |    2 +-
+ drivers/media/dvb-frontends/lgdt330x.c            |    2 +-
+ drivers/media/dvb-frontends/lgs8gxx.c             |    2 +-
+ drivers/media/dvb-frontends/lnbh25.c              |    2 +-
+ drivers/media/dvb-frontends/lnbp21.c              |    4 ++--
+ drivers/media/dvb-frontends/lnbp22.c              |    2 +-
+ drivers/media/dvb-frontends/m88ds3103.c           |    2 +-
+ drivers/media/dvb-frontends/m88rs2000.c           |    2 +-
+ drivers/media/dvb-frontends/mb86a16.c             |    2 +-
+ drivers/media/dvb-frontends/mb86a20s.c            |    2 +-
+ drivers/media/dvb-frontends/mt312.c               |    2 +-
+ drivers/media/dvb-frontends/mt352.c               |    2 +-
+ drivers/media/dvb-frontends/nxt200x.c             |    2 +-
+ drivers/media/dvb-frontends/nxt6000.c             |    2 +-
+ drivers/media/dvb-frontends/or51132.c             |    2 +-
+ drivers/media/dvb-frontends/or51211.c             |    2 +-
+ drivers/media/dvb-frontends/s5h1409.c             |    2 +-
+ drivers/media/dvb-frontends/s5h1411.c             |    2 +-
+ drivers/media/dvb-frontends/s5h1420.c             |    2 +-
+ drivers/media/dvb-frontends/s5h1432.c             |    2 +-
+ drivers/media/dvb-frontends/s921.c                |    2 +-
+ drivers/media/dvb-frontends/si21xx.c              |    2 +-
+ drivers/media/dvb-frontends/sp887x.c              |    2 +-
+ drivers/media/dvb-frontends/stb0899_drv.c         |    2 +-
+ drivers/media/dvb-frontends/stb6000.c             |    2 +-
+ drivers/media/dvb-frontends/stb6100.c             |    2 +-
+ drivers/media/dvb-frontends/stv0288.c             |    2 +-
+ drivers/media/dvb-frontends/stv0297.c             |    2 +-
+ drivers/media/dvb-frontends/stv0299.c             |    2 +-
+ drivers/media/dvb-frontends/stv0367.c             |    6 +++---
+ drivers/media/dvb-frontends/stv0900_core.c        |    2 +-
+ drivers/media/dvb-frontends/stv090x.c             |    2 +-
+ drivers/media/dvb-frontends/stv6110.c             |    2 +-
+ drivers/media/dvb-frontends/stv6110x.c            |    2 +-
+ drivers/media/dvb-frontends/tda10021.c            |    2 +-
+ drivers/media/dvb-frontends/tda10023.c            |    2 +-
+ drivers/media/dvb-frontends/tda10048.c            |    2 +-
+ drivers/media/dvb-frontends/tda1004x.c            |    4 ++--
+ drivers/media/dvb-frontends/tda10086.c            |    2 +-
+ drivers/media/dvb-frontends/tda665x.c             |    2 +-
+ drivers/media/dvb-frontends/tda8083.c             |    2 +-
+ drivers/media/dvb-frontends/tda8261.c             |    2 +-
+ drivers/media/dvb-frontends/tda826x.c             |    2 +-
+ drivers/media/dvb-frontends/ts2020.c              |    2 +-
+ drivers/media/dvb-frontends/tua6100.c             |    2 +-
+ drivers/media/dvb-frontends/ves1820.c             |    2 +-
+ drivers/media/dvb-frontends/ves1x93.c             |    2 +-
+ drivers/media/dvb-frontends/zl10036.c             |    2 +-
+ drivers/media/dvb-frontends/zl10039.c             |    2 +-
+ drivers/media/dvb-frontends/zl10353.c             |    2 +-
+ drivers/media/pci/bt8xx/dst.c                     |    2 +-
+ drivers/media/pci/bt8xx/dst_ca.c                  |    2 +-
+ drivers/media/pci/ddbridge/ddbridge-dummy-fe.c    |    2 +-
+ drivers/media/tuners/fc0011.c                     |    2 +-
+ drivers/media/tuners/fc0012.c                     |    2 +-
+ drivers/media/tuners/fc0013.c                     |    2 +-
+ drivers/media/tuners/max2165.c                    |    2 +-
+ drivers/media/tuners/mc44s803.c                   |    2 +-
+ drivers/media/tuners/mt2060.c                     |    2 +-
+ drivers/media/tuners/mt2131.c                     |    2 +-
+ drivers/media/tuners/mt2266.c                     |    2 +-
+ drivers/media/tuners/mxl5005s.c                   |    2 +-
+ drivers/media/tuners/qt1010.c                     |    2 +-
+ drivers/media/tuners/tda18218.c                   |    2 +-
+ drivers/media/tuners/xc2028.c                     |    2 +-
+ drivers/media/tuners/xc4000.c                     |    2 +-
+ drivers/media/tuners/xc5000.c                     |    2 +-
+ 105 files changed, 112 insertions(+), 112 deletions(-)
+
+--- a/drivers/media/dvb-frontends/ascot2e.c
++++ b/drivers/media/dvb-frontends/ascot2e.c
+@@ -533,7 +533,7 @@ struct dvb_frontend *ascot2e_attach(stru
+               priv->i2c_address, priv->i2c);
+       return fe;
+ }
+-EXPORT_SYMBOL(ascot2e_attach);
++EXPORT_SYMBOL_GPL(ascot2e_attach);
+ MODULE_DESCRIPTION("Sony ASCOT2E terr/cab tuner driver");
+ MODULE_AUTHOR("info@netup.ru");
+--- a/drivers/media/dvb-frontends/atbm8830.c
++++ b/drivers/media/dvb-frontends/atbm8830.c
+@@ -489,7 +489,7 @@ error_out:
+       return NULL;
+ }
+-EXPORT_SYMBOL(atbm8830_attach);
++EXPORT_SYMBOL_GPL(atbm8830_attach);
+ MODULE_DESCRIPTION("AltoBeam ATBM8830/8831 GB20600 demodulator driver");
+ MODULE_AUTHOR("David T. L. Wong <davidtlwong@gmail.com>");
+--- a/drivers/media/dvb-frontends/au8522_dig.c
++++ b/drivers/media/dvb-frontends/au8522_dig.c
+@@ -879,7 +879,7 @@ error:
+       au8522_release_state(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(au8522_attach);
++EXPORT_SYMBOL_GPL(au8522_attach);
+ static const struct dvb_frontend_ops au8522_ops = {
+       .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },
+--- a/drivers/media/dvb-frontends/bcm3510.c
++++ b/drivers/media/dvb-frontends/bcm3510.c
+@@ -835,7 +835,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(bcm3510_attach);
++EXPORT_SYMBOL_GPL(bcm3510_attach);
+ static const struct dvb_frontend_ops bcm3510_ops = {
+       .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },
+--- a/drivers/media/dvb-frontends/cx22700.c
++++ b/drivers/media/dvb-frontends/cx22700.c
+@@ -432,4 +432,4 @@ MODULE_DESCRIPTION("Conexant CX22700 DVB
+ MODULE_AUTHOR("Holger Waechtler");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(cx22700_attach);
++EXPORT_SYMBOL_GPL(cx22700_attach);
+--- a/drivers/media/dvb-frontends/cx22702.c
++++ b/drivers/media/dvb-frontends/cx22702.c
+@@ -604,7 +604,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(cx22702_attach);
++EXPORT_SYMBOL_GPL(cx22702_attach);
+ static const struct dvb_frontend_ops cx22702_ops = {
+       .delsys = { SYS_DVBT },
+--- a/drivers/media/dvb-frontends/cx24110.c
++++ b/drivers/media/dvb-frontends/cx24110.c
+@@ -653,4 +653,4 @@ MODULE_DESCRIPTION("Conexant CX24110 DVB
+ MODULE_AUTHOR("Peter Hettkamp");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(cx24110_attach);
++EXPORT_SYMBOL_GPL(cx24110_attach);
+--- a/drivers/media/dvb-frontends/cx24113.c
++++ b/drivers/media/dvb-frontends/cx24113.c
+@@ -590,7 +590,7 @@ error:
+       return NULL;
+ }
+-EXPORT_SYMBOL(cx24113_attach);
++EXPORT_SYMBOL_GPL(cx24113_attach);
+ module_param(debug, int, 0644);
+ MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)");
+--- a/drivers/media/dvb-frontends/cx24116.c
++++ b/drivers/media/dvb-frontends/cx24116.c
+@@ -1133,7 +1133,7 @@ struct dvb_frontend *cx24116_attach(cons
+       state->frontend.demodulator_priv = state;
+       return &state->frontend;
+ }
+-EXPORT_SYMBOL(cx24116_attach);
++EXPORT_SYMBOL_GPL(cx24116_attach);
+ /*
+  * Initialise or wake up device
+--- a/drivers/media/dvb-frontends/cx24120.c
++++ b/drivers/media/dvb-frontends/cx24120.c
+@@ -305,7 +305,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(cx24120_attach);
++EXPORT_SYMBOL_GPL(cx24120_attach);
+ static int cx24120_test_rom(struct cx24120_state *state)
+ {
+--- a/drivers/media/dvb-frontends/cx24123.c
++++ b/drivers/media/dvb-frontends/cx24123.c
+@@ -1096,7 +1096,7 @@ error:
+       return NULL;
+ }
+-EXPORT_SYMBOL(cx24123_attach);
++EXPORT_SYMBOL_GPL(cx24123_attach);
+ static const struct dvb_frontend_ops cx24123_ops = {
+       .delsys = { SYS_DVBS },
+--- a/drivers/media/dvb-frontends/cxd2820r_core.c
++++ b/drivers/media/dvb-frontends/cxd2820r_core.c
+@@ -536,7 +536,7 @@ struct dvb_frontend *cxd2820r_attach(con
+       return pdata.get_dvb_frontend(client);
+ }
+-EXPORT_SYMBOL(cxd2820r_attach);
++EXPORT_SYMBOL_GPL(cxd2820r_attach);
+ static struct dvb_frontend *cxd2820r_get_dvb_frontend(struct i2c_client *client)
+ {
+--- a/drivers/media/dvb-frontends/cxd2841er.c
++++ b/drivers/media/dvb-frontends/cxd2841er.c
+@@ -3930,14 +3930,14 @@ struct dvb_frontend *cxd2841er_attach_s(
+ {
+       return cxd2841er_attach(cfg, i2c, SYS_DVBS);
+ }
+-EXPORT_SYMBOL(cxd2841er_attach_s);
++EXPORT_SYMBOL_GPL(cxd2841er_attach_s);
+ struct dvb_frontend *cxd2841er_attach_t_c(struct cxd2841er_config *cfg,
+                                       struct i2c_adapter *i2c)
+ {
+       return cxd2841er_attach(cfg, i2c, 0);
+ }
+-EXPORT_SYMBOL(cxd2841er_attach_t_c);
++EXPORT_SYMBOL_GPL(cxd2841er_attach_t_c);
+ static const struct dvb_frontend_ops cxd2841er_dvbs_s2_ops = {
+       .delsys = { SYS_DVBS, SYS_DVBS2 },
+--- a/drivers/media/dvb-frontends/cxd2880/cxd2880_top.c
++++ b/drivers/media/dvb-frontends/cxd2880/cxd2880_top.c
+@@ -1950,7 +1950,7 @@ struct dvb_frontend *cxd2880_attach(stru
+       return fe;
+ }
+-EXPORT_SYMBOL(cxd2880_attach);
++EXPORT_SYMBOL_GPL(cxd2880_attach);
+ MODULE_DESCRIPTION("Sony CXD2880 DVB-T2/T tuner + demod driver");
+ MODULE_AUTHOR("Sony Semiconductor Solutions Corporation");
+--- a/drivers/media/dvb-frontends/dib0070.c
++++ b/drivers/media/dvb-frontends/dib0070.c
+@@ -762,7 +762,7 @@ free_mem:
+       fe->tuner_priv = NULL;
+       return NULL;
+ }
+-EXPORT_SYMBOL(dib0070_attach);
++EXPORT_SYMBOL_GPL(dib0070_attach);
+ MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
+ MODULE_DESCRIPTION("Driver for the DiBcom 0070 base-band RF Tuner");
+--- a/drivers/media/dvb-frontends/dib0090.c
++++ b/drivers/media/dvb-frontends/dib0090.c
+@@ -2634,7 +2634,7 @@ struct dvb_frontend *dib0090_register(st
+       return NULL;
+ }
+-EXPORT_SYMBOL(dib0090_register);
++EXPORT_SYMBOL_GPL(dib0090_register);
+ struct dvb_frontend *dib0090_fw_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct dib0090_config *config)
+ {
+@@ -2660,7 +2660,7 @@ free_mem:
+       fe->tuner_priv = NULL;
+       return NULL;
+ }
+-EXPORT_SYMBOL(dib0090_fw_register);
++EXPORT_SYMBOL_GPL(dib0090_fw_register);
+ MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
+ MODULE_AUTHOR("Olivier Grenie <olivier.grenie@parrot.com>");
+--- a/drivers/media/dvb-frontends/dib3000mb.c
++++ b/drivers/media/dvb-frontends/dib3000mb.c
+@@ -815,4 +815,4 @@ MODULE_AUTHOR(DRIVER_AUTHOR);
+ MODULE_DESCRIPTION(DRIVER_DESC);
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(dib3000mb_attach);
++EXPORT_SYMBOL_GPL(dib3000mb_attach);
+--- a/drivers/media/dvb-frontends/dib3000mc.c
++++ b/drivers/media/dvb-frontends/dib3000mc.c
+@@ -935,7 +935,7 @@ error:
+       kfree(st);
+       return NULL;
+ }
+-EXPORT_SYMBOL(dib3000mc_attach);
++EXPORT_SYMBOL_GPL(dib3000mc_attach);
+ static const struct dvb_frontend_ops dib3000mc_ops = {
+       .delsys = { SYS_DVBT },
+--- a/drivers/media/dvb-frontends/dib7000m.c
++++ b/drivers/media/dvb-frontends/dib7000m.c
+@@ -1434,7 +1434,7 @@ error:
+       kfree(st);
+       return NULL;
+ }
+-EXPORT_SYMBOL(dib7000m_attach);
++EXPORT_SYMBOL_GPL(dib7000m_attach);
+ static const struct dvb_frontend_ops dib7000m_ops = {
+       .delsys = { SYS_DVBT },
+--- a/drivers/media/dvb-frontends/dib7000p.c
++++ b/drivers/media/dvb-frontends/dib7000p.c
+@@ -2822,7 +2822,7 @@ void *dib7000p_attach(struct dib7000p_op
+       return ops;
+ }
+-EXPORT_SYMBOL(dib7000p_attach);
++EXPORT_SYMBOL_GPL(dib7000p_attach);
+ static const struct dvb_frontend_ops dib7000p_ops = {
+       .delsys = { SYS_DVBT },
+--- a/drivers/media/dvb-frontends/dib8000.c
++++ b/drivers/media/dvb-frontends/dib8000.c
+@@ -4527,7 +4527,7 @@ void *dib8000_attach(struct dib8000_ops
+       return ops;
+ }
+-EXPORT_SYMBOL(dib8000_attach);
++EXPORT_SYMBOL_GPL(dib8000_attach);
+ MODULE_AUTHOR("Olivier Grenie <Olivier.Grenie@parrot.com, Patrick Boettcher <patrick.boettcher@posteo.de>");
+ MODULE_DESCRIPTION("Driver for the DiBcom 8000 ISDB-T demodulator");
+--- a/drivers/media/dvb-frontends/dib9000.c
++++ b/drivers/media/dvb-frontends/dib9000.c
+@@ -2546,7 +2546,7 @@ error:
+       kfree(st);
+       return NULL;
+ }
+-EXPORT_SYMBOL(dib9000_attach);
++EXPORT_SYMBOL_GPL(dib9000_attach);
+ static const struct dvb_frontend_ops dib9000_ops = {
+       .delsys = { SYS_DVBT },
+--- a/drivers/media/dvb-frontends/drx39xyj/drxj.c
++++ b/drivers/media/dvb-frontends/drx39xyj/drxj.c
+@@ -12368,7 +12368,7 @@ error:
+       return NULL;
+ }
+-EXPORT_SYMBOL(drx39xxj_attach);
++EXPORT_SYMBOL_GPL(drx39xxj_attach);
+ static const struct dvb_frontend_ops drx39xxj_ops = {
+       .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },
+--- a/drivers/media/dvb-frontends/drxd_hard.c
++++ b/drivers/media/dvb-frontends/drxd_hard.c
+@@ -2939,7 +2939,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(drxd_attach);
++EXPORT_SYMBOL_GPL(drxd_attach);
+ MODULE_DESCRIPTION("DRXD driver");
+ MODULE_AUTHOR("Micronas");
+--- a/drivers/media/dvb-frontends/drxk_hard.c
++++ b/drivers/media/dvb-frontends/drxk_hard.c
+@@ -6833,7 +6833,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(drxk_attach);
++EXPORT_SYMBOL_GPL(drxk_attach);
+ MODULE_DESCRIPTION("DRX-K driver");
+ MODULE_AUTHOR("Ralph Metzler");
+--- a/drivers/media/dvb-frontends/ds3000.c
++++ b/drivers/media/dvb-frontends/ds3000.c
+@@ -859,7 +859,7 @@ struct dvb_frontend *ds3000_attach(const
+       ds3000_set_voltage(&state->frontend, SEC_VOLTAGE_OFF);
+       return &state->frontend;
+ }
+-EXPORT_SYMBOL(ds3000_attach);
++EXPORT_SYMBOL_GPL(ds3000_attach);
+ static int ds3000_set_carrier_offset(struct dvb_frontend *fe,
+                                       s32 carrier_offset_khz)
+--- a/drivers/media/dvb-frontends/dvb-pll.c
++++ b/drivers/media/dvb-frontends/dvb-pll.c
+@@ -866,7 +866,7 @@ out:
+       return NULL;
+ }
+-EXPORT_SYMBOL(dvb_pll_attach);
++EXPORT_SYMBOL_GPL(dvb_pll_attach);
+ static int
+--- a/drivers/media/dvb-frontends/ec100.c
++++ b/drivers/media/dvb-frontends/ec100.c
+@@ -299,7 +299,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(ec100_attach);
++EXPORT_SYMBOL_GPL(ec100_attach);
+ static const struct dvb_frontend_ops ec100_ops = {
+       .delsys = { SYS_DVBT },
+--- a/drivers/media/dvb-frontends/helene.c
++++ b/drivers/media/dvb-frontends/helene.c
+@@ -1025,7 +1025,7 @@ struct dvb_frontend *helene_attach_s(str
+                       priv->i2c_address, priv->i2c);
+       return fe;
+ }
+-EXPORT_SYMBOL(helene_attach_s);
++EXPORT_SYMBOL_GPL(helene_attach_s);
+ struct dvb_frontend *helene_attach(struct dvb_frontend *fe,
+               const struct helene_config *config,
+@@ -1061,7 +1061,7 @@ struct dvb_frontend *helene_attach(struc
+                       priv->i2c_address, priv->i2c);
+       return fe;
+ }
+-EXPORT_SYMBOL(helene_attach);
++EXPORT_SYMBOL_GPL(helene_attach);
+ static int helene_probe(struct i2c_client *client,
+                       const struct i2c_device_id *id)
+--- a/drivers/media/dvb-frontends/horus3a.c
++++ b/drivers/media/dvb-frontends/horus3a.c
+@@ -395,7 +395,7 @@ struct dvb_frontend *horus3a_attach(stru
+               priv->i2c_address, priv->i2c);
+       return fe;
+ }
+-EXPORT_SYMBOL(horus3a_attach);
++EXPORT_SYMBOL_GPL(horus3a_attach);
+ MODULE_DESCRIPTION("Sony HORUS3A satellite tuner driver");
+ MODULE_AUTHOR("Sergey Kozlov <serjk@netup.ru>");
+--- a/drivers/media/dvb-frontends/isl6405.c
++++ b/drivers/media/dvb-frontends/isl6405.c
+@@ -141,7 +141,7 @@ struct dvb_frontend *isl6405_attach(stru
+       return fe;
+ }
+-EXPORT_SYMBOL(isl6405_attach);
++EXPORT_SYMBOL_GPL(isl6405_attach);
+ MODULE_DESCRIPTION("Driver for lnb supply and control ic isl6405");
+ MODULE_AUTHOR("Hartmut Hackmann & Oliver Endriss");
+--- a/drivers/media/dvb-frontends/isl6421.c
++++ b/drivers/media/dvb-frontends/isl6421.c
+@@ -213,7 +213,7 @@ struct dvb_frontend *isl6421_attach(stru
+       return fe;
+ }
+-EXPORT_SYMBOL(isl6421_attach);
++EXPORT_SYMBOL_GPL(isl6421_attach);
+ MODULE_DESCRIPTION("Driver for lnb supply and control ic isl6421");
+ MODULE_AUTHOR("Andrew de Quincey & Oliver Endriss");
+--- a/drivers/media/dvb-frontends/isl6423.c
++++ b/drivers/media/dvb-frontends/isl6423.c
+@@ -289,7 +289,7 @@ exit:
+       fe->sec_priv = NULL;
+       return NULL;
+ }
+-EXPORT_SYMBOL(isl6423_attach);
++EXPORT_SYMBOL_GPL(isl6423_attach);
+ MODULE_DESCRIPTION("ISL6423 SEC");
+ MODULE_AUTHOR("Manu Abraham");
+--- a/drivers/media/dvb-frontends/itd1000.c
++++ b/drivers/media/dvb-frontends/itd1000.c
+@@ -389,7 +389,7 @@ struct dvb_frontend *itd1000_attach(stru
+       return fe;
+ }
+-EXPORT_SYMBOL(itd1000_attach);
++EXPORT_SYMBOL_GPL(itd1000_attach);
+ MODULE_AUTHOR("Patrick Boettcher <pb@linuxtv.org>");
+ MODULE_DESCRIPTION("Integrant ITD1000 driver");
+--- a/drivers/media/dvb-frontends/ix2505v.c
++++ b/drivers/media/dvb-frontends/ix2505v.c
+@@ -302,7 +302,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(ix2505v_attach);
++EXPORT_SYMBOL_GPL(ix2505v_attach);
+ module_param_named(debug, ix2505v_debug, int, 0644);
+ MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
+--- a/drivers/media/dvb-frontends/l64781.c
++++ b/drivers/media/dvb-frontends/l64781.c
+@@ -593,4 +593,4 @@ MODULE_DESCRIPTION("LSI L64781 DVB-T Dem
+ MODULE_AUTHOR("Holger Waechtler, Marko Kohtala");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(l64781_attach);
++EXPORT_SYMBOL_GPL(l64781_attach);
+--- a/drivers/media/dvb-frontends/lg2160.c
++++ b/drivers/media/dvb-frontends/lg2160.c
+@@ -1426,7 +1426,7 @@ struct dvb_frontend *lg2160_attach(const
+       return &state->frontend;
+ }
+-EXPORT_SYMBOL(lg2160_attach);
++EXPORT_SYMBOL_GPL(lg2160_attach);
+ MODULE_DESCRIPTION("LG Electronics LG216x ATSC/MH Demodulator Driver");
+ MODULE_AUTHOR("Michael Krufky <mkrufky@linuxtv.org>");
+--- a/drivers/media/dvb-frontends/lgdt3305.c
++++ b/drivers/media/dvb-frontends/lgdt3305.c
+@@ -1148,7 +1148,7 @@ fail:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(lgdt3305_attach);
++EXPORT_SYMBOL_GPL(lgdt3305_attach);
+ static const struct dvb_frontend_ops lgdt3304_ops = {
+       .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },
+--- a/drivers/media/dvb-frontends/lgdt3306a.c
++++ b/drivers/media/dvb-frontends/lgdt3306a.c
+@@ -1859,7 +1859,7 @@ fail:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(lgdt3306a_attach);
++EXPORT_SYMBOL_GPL(lgdt3306a_attach);
+ #ifdef DBG_DUMP
+--- a/drivers/media/dvb-frontends/lgdt330x.c
++++ b/drivers/media/dvb-frontends/lgdt330x.c
+@@ -928,7 +928,7 @@ struct dvb_frontend *lgdt330x_attach(con
+       return lgdt330x_get_dvb_frontend(client);
+ }
+-EXPORT_SYMBOL(lgdt330x_attach);
++EXPORT_SYMBOL_GPL(lgdt330x_attach);
+ static const struct dvb_frontend_ops lgdt3302_ops = {
+       .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },
+--- a/drivers/media/dvb-frontends/lgs8gxx.c
++++ b/drivers/media/dvb-frontends/lgs8gxx.c
+@@ -1043,7 +1043,7 @@ error_out:
+       return NULL;
+ }
+-EXPORT_SYMBOL(lgs8gxx_attach);
++EXPORT_SYMBOL_GPL(lgs8gxx_attach);
+ MODULE_DESCRIPTION("Legend Silicon LGS8913/LGS8GXX DMB-TH demodulator driver");
+ MODULE_AUTHOR("David T. L. Wong <davidtlwong@gmail.com>");
+--- a/drivers/media/dvb-frontends/lnbh25.c
++++ b/drivers/media/dvb-frontends/lnbh25.c
+@@ -173,7 +173,7 @@ struct dvb_frontend *lnbh25_attach(struc
+               __func__, priv->i2c_address);
+       return fe;
+ }
+-EXPORT_SYMBOL(lnbh25_attach);
++EXPORT_SYMBOL_GPL(lnbh25_attach);
+ MODULE_DESCRIPTION("ST LNBH25 driver");
+ MODULE_AUTHOR("info@netup.ru");
+--- a/drivers/media/dvb-frontends/lnbp21.c
++++ b/drivers/media/dvb-frontends/lnbp21.c
+@@ -155,7 +155,7 @@ struct dvb_frontend *lnbh24_attach(struc
+       return lnbx2x_attach(fe, i2c, override_set, override_clear,
+                                                       i2c_addr, LNBH24_TTX);
+ }
+-EXPORT_SYMBOL(lnbh24_attach);
++EXPORT_SYMBOL_GPL(lnbh24_attach);
+ struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe,
+                               struct i2c_adapter *i2c, u8 override_set,
+@@ -164,7 +164,7 @@ struct dvb_frontend *lnbp21_attach(struc
+       return lnbx2x_attach(fe, i2c, override_set, override_clear,
+                                                       0x08, LNBP21_ISEL);
+ }
+-EXPORT_SYMBOL(lnbp21_attach);
++EXPORT_SYMBOL_GPL(lnbp21_attach);
+ MODULE_DESCRIPTION("Driver for lnb supply and control ic lnbp21, lnbh24");
+ MODULE_AUTHOR("Oliver Endriss, Igor M. Liplianin");
+--- a/drivers/media/dvb-frontends/lnbp22.c
++++ b/drivers/media/dvb-frontends/lnbp22.c
+@@ -125,7 +125,7 @@ struct dvb_frontend *lnbp22_attach(struc
+       return fe;
+ }
+-EXPORT_SYMBOL(lnbp22_attach);
++EXPORT_SYMBOL_GPL(lnbp22_attach);
+ MODULE_DESCRIPTION("Driver for lnb supply and control ic lnbp22");
+ MODULE_AUTHOR("Dominik Kuhlen");
+--- a/drivers/media/dvb-frontends/m88ds3103.c
++++ b/drivers/media/dvb-frontends/m88ds3103.c
+@@ -1695,7 +1695,7 @@ struct dvb_frontend *m88ds3103_attach(co
+       *tuner_i2c_adapter = pdata.get_i2c_adapter(client);
+       return pdata.get_dvb_frontend(client);
+ }
+-EXPORT_SYMBOL(m88ds3103_attach);
++EXPORT_SYMBOL_GPL(m88ds3103_attach);
+ static const struct dvb_frontend_ops m88ds3103_ops = {
+       .delsys = {SYS_DVBS, SYS_DVBS2},
+--- a/drivers/media/dvb-frontends/m88rs2000.c
++++ b/drivers/media/dvb-frontends/m88rs2000.c
+@@ -808,7 +808,7 @@ error:
+       return NULL;
+ }
+-EXPORT_SYMBOL(m88rs2000_attach);
++EXPORT_SYMBOL_GPL(m88rs2000_attach);
+ MODULE_DESCRIPTION("M88RS2000 DVB-S Demodulator driver");
+ MODULE_AUTHOR("Malcolm Priestley tvboxspy@gmail.com");
+--- a/drivers/media/dvb-frontends/mb86a16.c
++++ b/drivers/media/dvb-frontends/mb86a16.c
+@@ -1848,6 +1848,6 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(mb86a16_attach);
++EXPORT_SYMBOL_GPL(mb86a16_attach);
+ MODULE_LICENSE("GPL");
+ MODULE_AUTHOR("Manu Abraham");
+--- a/drivers/media/dvb-frontends/mb86a20s.c
++++ b/drivers/media/dvb-frontends/mb86a20s.c
+@@ -2081,7 +2081,7 @@ struct dvb_frontend *mb86a20s_attach(con
+       dev_info(&i2c->dev, "Detected a Fujitsu mb86a20s frontend\n");
+       return &state->frontend;
+ }
+-EXPORT_SYMBOL(mb86a20s_attach);
++EXPORT_SYMBOL_GPL(mb86a20s_attach);
+ static const struct dvb_frontend_ops mb86a20s_ops = {
+       .delsys = { SYS_ISDBT },
+--- a/drivers/media/dvb-frontends/mt312.c
++++ b/drivers/media/dvb-frontends/mt312.c
+@@ -827,7 +827,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(mt312_attach);
++EXPORT_SYMBOL_GPL(mt312_attach);
+ module_param(debug, int, 0644);
+ MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
+--- a/drivers/media/dvb-frontends/mt352.c
++++ b/drivers/media/dvb-frontends/mt352.c
+@@ -593,4 +593,4 @@ MODULE_DESCRIPTION("Zarlink MT352 DVB-T
+ MODULE_AUTHOR("Holger Waechtler, Daniel Mack, Antonio Mancuso");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(mt352_attach);
++EXPORT_SYMBOL_GPL(mt352_attach);
+--- a/drivers/media/dvb-frontends/nxt200x.c
++++ b/drivers/media/dvb-frontends/nxt200x.c
+@@ -1216,5 +1216,5 @@ MODULE_DESCRIPTION("NXT200X (ATSC 8VSB &
+ MODULE_AUTHOR("Kirk Lapray, Michael Krufky, Jean-Francois Thibert, and Taylor Jacob");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(nxt200x_attach);
++EXPORT_SYMBOL_GPL(nxt200x_attach);
+--- a/drivers/media/dvb-frontends/nxt6000.c
++++ b/drivers/media/dvb-frontends/nxt6000.c
+@@ -621,4 +621,4 @@ MODULE_DESCRIPTION("NxtWave NXT6000 DVB-
+ MODULE_AUTHOR("Florian Schirmer");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(nxt6000_attach);
++EXPORT_SYMBOL_GPL(nxt6000_attach);
+--- a/drivers/media/dvb-frontends/or51132.c
++++ b/drivers/media/dvb-frontends/or51132.c
+@@ -605,4 +605,4 @@ MODULE_AUTHOR("Kirk Lapray");
+ MODULE_AUTHOR("Trent Piepho");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(or51132_attach);
++EXPORT_SYMBOL_GPL(or51132_attach);
+--- a/drivers/media/dvb-frontends/or51211.c
++++ b/drivers/media/dvb-frontends/or51211.c
+@@ -551,5 +551,5 @@ MODULE_DESCRIPTION("Oren OR51211 VSB [pc
+ MODULE_AUTHOR("Kirk Lapray");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(or51211_attach);
++EXPORT_SYMBOL_GPL(or51211_attach);
+--- a/drivers/media/dvb-frontends/s5h1409.c
++++ b/drivers/media/dvb-frontends/s5h1409.c
+@@ -981,7 +981,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(s5h1409_attach);
++EXPORT_SYMBOL_GPL(s5h1409_attach);
+ static const struct dvb_frontend_ops s5h1409_ops = {
+       .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },
+--- a/drivers/media/dvb-frontends/s5h1411.c
++++ b/drivers/media/dvb-frontends/s5h1411.c
+@@ -900,7 +900,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(s5h1411_attach);
++EXPORT_SYMBOL_GPL(s5h1411_attach);
+ static const struct dvb_frontend_ops s5h1411_ops = {
+       .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },
+--- a/drivers/media/dvb-frontends/s5h1420.c
++++ b/drivers/media/dvb-frontends/s5h1420.c
+@@ -918,7 +918,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(s5h1420_attach);
++EXPORT_SYMBOL_GPL(s5h1420_attach);
+ static const struct dvb_frontend_ops s5h1420_ops = {
+       .delsys = { SYS_DVBS },
+--- a/drivers/media/dvb-frontends/s5h1432.c
++++ b/drivers/media/dvb-frontends/s5h1432.c
+@@ -355,7 +355,7 @@ struct dvb_frontend *s5h1432_attach(cons
+       return &state->frontend;
+ }
+-EXPORT_SYMBOL(s5h1432_attach);
++EXPORT_SYMBOL_GPL(s5h1432_attach);
+ static const struct dvb_frontend_ops s5h1432_ops = {
+       .delsys = { SYS_DVBT },
+--- a/drivers/media/dvb-frontends/s921.c
++++ b/drivers/media/dvb-frontends/s921.c
+@@ -495,7 +495,7 @@ struct dvb_frontend *s921_attach(const s
+       return &state->frontend;
+ }
+-EXPORT_SYMBOL(s921_attach);
++EXPORT_SYMBOL_GPL(s921_attach);
+ static const struct dvb_frontend_ops s921_ops = {
+       .delsys = { SYS_ISDBT },
+--- a/drivers/media/dvb-frontends/si21xx.c
++++ b/drivers/media/dvb-frontends/si21xx.c
+@@ -937,7 +937,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(si21xx_attach);
++EXPORT_SYMBOL_GPL(si21xx_attach);
+ module_param(debug, int, 0644);
+ MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
+--- a/drivers/media/dvb-frontends/sp887x.c
++++ b/drivers/media/dvb-frontends/sp887x.c
+@@ -624,4 +624,4 @@ MODULE_PARM_DESC(debug, "Turn on/off fro
+ MODULE_DESCRIPTION("Spase sp887x DVB-T demodulator driver");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(sp887x_attach);
++EXPORT_SYMBOL_GPL(sp887x_attach);
+--- a/drivers/media/dvb-frontends/stb0899_drv.c
++++ b/drivers/media/dvb-frontends/stb0899_drv.c
+@@ -1638,7 +1638,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(stb0899_attach);
++EXPORT_SYMBOL_GPL(stb0899_attach);
+ MODULE_PARM_DESC(verbose, "Set Verbosity level");
+ MODULE_AUTHOR("Manu Abraham");
+ MODULE_DESCRIPTION("STB0899 Multi-Std frontend");
+--- a/drivers/media/dvb-frontends/stb6000.c
++++ b/drivers/media/dvb-frontends/stb6000.c
+@@ -232,7 +232,7 @@ struct dvb_frontend *stb6000_attach(stru
+       return fe;
+ }
+-EXPORT_SYMBOL(stb6000_attach);
++EXPORT_SYMBOL_GPL(stb6000_attach);
+ module_param(debug, int, 0644);
+ MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
+--- a/drivers/media/dvb-frontends/stb6100.c
++++ b/drivers/media/dvb-frontends/stb6100.c
+@@ -557,7 +557,7 @@ static void stb6100_release(struct dvb_f
+       kfree(state);
+ }
+-EXPORT_SYMBOL(stb6100_attach);
++EXPORT_SYMBOL_GPL(stb6100_attach);
+ MODULE_PARM_DESC(verbose, "Set Verbosity level");
+ MODULE_AUTHOR("Manu Abraham");
+--- a/drivers/media/dvb-frontends/stv0288.c
++++ b/drivers/media/dvb-frontends/stv0288.c
+@@ -590,7 +590,7 @@ error:
+       return NULL;
+ }
+-EXPORT_SYMBOL(stv0288_attach);
++EXPORT_SYMBOL_GPL(stv0288_attach);
+ module_param(debug_legacy_dish_switch, int, 0444);
+ MODULE_PARM_DESC(debug_legacy_dish_switch,
+--- a/drivers/media/dvb-frontends/stv0297.c
++++ b/drivers/media/dvb-frontends/stv0297.c
+@@ -710,4 +710,4 @@ MODULE_DESCRIPTION("ST STV0297 DVB-C Dem
+ MODULE_AUTHOR("Dennis Noermann and Andrew de Quincey");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(stv0297_attach);
++EXPORT_SYMBOL_GPL(stv0297_attach);
+--- a/drivers/media/dvb-frontends/stv0299.c
++++ b/drivers/media/dvb-frontends/stv0299.c
+@@ -752,4 +752,4 @@ MODULE_DESCRIPTION("ST STV0299 DVB Demod
+ MODULE_AUTHOR("Ralph Metzler, Holger Waechtler, Peter Schildmann, Felix Domke, Andreas Oberritter, Andrew de Quincey, Kenneth Aafly");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(stv0299_attach);
++EXPORT_SYMBOL_GPL(stv0299_attach);
+--- a/drivers/media/dvb-frontends/stv0367.c
++++ b/drivers/media/dvb-frontends/stv0367.c
+@@ -1750,7 +1750,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(stv0367ter_attach);
++EXPORT_SYMBOL_GPL(stv0367ter_attach);
+ static int stv0367cab_gate_ctrl(struct dvb_frontend *fe, int enable)
+ {
+@@ -2919,7 +2919,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(stv0367cab_attach);
++EXPORT_SYMBOL_GPL(stv0367cab_attach);
+ /*
+  * Functions for operation on Digital Devices hardware
+@@ -3340,7 +3340,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(stv0367ddb_attach);
++EXPORT_SYMBOL_GPL(stv0367ddb_attach);
+ MODULE_PARM_DESC(debug, "Set debug");
+ MODULE_PARM_DESC(i2c_debug, "Set i2c debug");
+--- a/drivers/media/dvb-frontends/stv0900_core.c
++++ b/drivers/media/dvb-frontends/stv0900_core.c
+@@ -1957,7 +1957,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(stv0900_attach);
++EXPORT_SYMBOL_GPL(stv0900_attach);
+ MODULE_PARM_DESC(debug, "Set debug");
+--- a/drivers/media/dvb-frontends/stv090x.c
++++ b/drivers/media/dvb-frontends/stv090x.c
+@@ -5072,7 +5072,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(stv090x_attach);
++EXPORT_SYMBOL_GPL(stv090x_attach);
+ static const struct i2c_device_id stv090x_id_table[] = {
+       {"stv090x", 0},
+--- a/drivers/media/dvb-frontends/stv6110.c
++++ b/drivers/media/dvb-frontends/stv6110.c
+@@ -427,7 +427,7 @@ struct dvb_frontend *stv6110_attach(stru
+       return fe;
+ }
+-EXPORT_SYMBOL(stv6110_attach);
++EXPORT_SYMBOL_GPL(stv6110_attach);
+ module_param(debug, int, 0644);
+ MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
+--- a/drivers/media/dvb-frontends/stv6110x.c
++++ b/drivers/media/dvb-frontends/stv6110x.c
+@@ -468,7 +468,7 @@ const struct stv6110x_devctl *stv6110x_a
+       dev_info(&stv6110x->i2c->dev, "Attaching STV6110x\n");
+       return stv6110x->devctl;
+ }
+-EXPORT_SYMBOL(stv6110x_attach);
++EXPORT_SYMBOL_GPL(stv6110x_attach);
+ static const struct i2c_device_id stv6110x_id_table[] = {
+       {"stv6110x", 0},
+--- a/drivers/media/dvb-frontends/tda10021.c
++++ b/drivers/media/dvb-frontends/tda10021.c
+@@ -523,4 +523,4 @@ MODULE_DESCRIPTION("Philips TDA10021 DVB
+ MODULE_AUTHOR("Ralph Metzler, Holger Waechtler, Markus Schulz");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(tda10021_attach);
++EXPORT_SYMBOL_GPL(tda10021_attach);
+--- a/drivers/media/dvb-frontends/tda10023.c
++++ b/drivers/media/dvb-frontends/tda10023.c
+@@ -594,4 +594,4 @@ MODULE_DESCRIPTION("Philips TDA10023 DVB
+ MODULE_AUTHOR("Georg Acher, Hartmut Birr");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(tda10023_attach);
++EXPORT_SYMBOL_GPL(tda10023_attach);
+--- a/drivers/media/dvb-frontends/tda10048.c
++++ b/drivers/media/dvb-frontends/tda10048.c
+@@ -1138,7 +1138,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(tda10048_attach);
++EXPORT_SYMBOL_GPL(tda10048_attach);
+ static const struct dvb_frontend_ops tda10048_ops = {
+       .delsys = { SYS_DVBT },
+--- a/drivers/media/dvb-frontends/tda1004x.c
++++ b/drivers/media/dvb-frontends/tda1004x.c
+@@ -1378,5 +1378,5 @@ MODULE_DESCRIPTION("Philips TDA10045H &
+ MODULE_AUTHOR("Andrew de Quincey & Robert Schlabbach");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(tda10045_attach);
+-EXPORT_SYMBOL(tda10046_attach);
++EXPORT_SYMBOL_GPL(tda10045_attach);
++EXPORT_SYMBOL_GPL(tda10046_attach);
+--- a/drivers/media/dvb-frontends/tda10086.c
++++ b/drivers/media/dvb-frontends/tda10086.c
+@@ -764,4 +764,4 @@ MODULE_DESCRIPTION("Philips TDA10086 DVB
+ MODULE_AUTHOR("Andrew de Quincey");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(tda10086_attach);
++EXPORT_SYMBOL_GPL(tda10086_attach);
+--- a/drivers/media/dvb-frontends/tda665x.c
++++ b/drivers/media/dvb-frontends/tda665x.c
+@@ -227,7 +227,7 @@ struct dvb_frontend *tda665x_attach(stru
+       return fe;
+ }
+-EXPORT_SYMBOL(tda665x_attach);
++EXPORT_SYMBOL_GPL(tda665x_attach);
+ MODULE_DESCRIPTION("TDA665x driver");
+ MODULE_AUTHOR("Manu Abraham");
+--- a/drivers/media/dvb-frontends/tda8083.c
++++ b/drivers/media/dvb-frontends/tda8083.c
+@@ -481,4 +481,4 @@ MODULE_DESCRIPTION("Philips TDA8083 DVB-
+ MODULE_AUTHOR("Ralph Metzler, Holger Waechtler");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(tda8083_attach);
++EXPORT_SYMBOL_GPL(tda8083_attach);
+--- a/drivers/media/dvb-frontends/tda8261.c
++++ b/drivers/media/dvb-frontends/tda8261.c
+@@ -188,7 +188,7 @@ exit:
+       return NULL;
+ }
+-EXPORT_SYMBOL(tda8261_attach);
++EXPORT_SYMBOL_GPL(tda8261_attach);
+ MODULE_AUTHOR("Manu Abraham");
+ MODULE_DESCRIPTION("TDA8261 8PSK/QPSK Tuner");
+--- a/drivers/media/dvb-frontends/tda826x.c
++++ b/drivers/media/dvb-frontends/tda826x.c
+@@ -164,7 +164,7 @@ struct dvb_frontend *tda826x_attach(stru
+       return fe;
+ }
+-EXPORT_SYMBOL(tda826x_attach);
++EXPORT_SYMBOL_GPL(tda826x_attach);
+ module_param(debug, int, 0644);
+ MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
+--- a/drivers/media/dvb-frontends/ts2020.c
++++ b/drivers/media/dvb-frontends/ts2020.c
+@@ -525,7 +525,7 @@ struct dvb_frontend *ts2020_attach(struc
+       return fe;
+ }
+-EXPORT_SYMBOL(ts2020_attach);
++EXPORT_SYMBOL_GPL(ts2020_attach);
+ /*
+  * We implement own regmap locking due to legacy DVB attach which uses frontend
+--- a/drivers/media/dvb-frontends/tua6100.c
++++ b/drivers/media/dvb-frontends/tua6100.c
+@@ -186,7 +186,7 @@ struct dvb_frontend *tua6100_attach(stru
+       fe->tuner_priv = priv;
+       return fe;
+ }
+-EXPORT_SYMBOL(tua6100_attach);
++EXPORT_SYMBOL_GPL(tua6100_attach);
+ MODULE_DESCRIPTION("DVB tua6100 driver");
+ MODULE_AUTHOR("Andrew de Quincey");
+--- a/drivers/media/dvb-frontends/ves1820.c
++++ b/drivers/media/dvb-frontends/ves1820.c
+@@ -434,4 +434,4 @@ MODULE_DESCRIPTION("VLSI VES1820 DVB-C D
+ MODULE_AUTHOR("Ralph Metzler, Holger Waechtler");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(ves1820_attach);
++EXPORT_SYMBOL_GPL(ves1820_attach);
+--- a/drivers/media/dvb-frontends/ves1x93.c
++++ b/drivers/media/dvb-frontends/ves1x93.c
+@@ -540,4 +540,4 @@ MODULE_DESCRIPTION("VLSI VES1x93 DVB-S D
+ MODULE_AUTHOR("Ralph Metzler");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(ves1x93_attach);
++EXPORT_SYMBOL_GPL(ves1x93_attach);
+--- a/drivers/media/dvb-frontends/zl10036.c
++++ b/drivers/media/dvb-frontends/zl10036.c
+@@ -496,7 +496,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(zl10036_attach);
++EXPORT_SYMBOL_GPL(zl10036_attach);
+ module_param_named(debug, zl10036_debug, int, 0644);
+ MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
+--- a/drivers/media/dvb-frontends/zl10039.c
++++ b/drivers/media/dvb-frontends/zl10039.c
+@@ -295,7 +295,7 @@ error:
+       kfree(state);
+       return NULL;
+ }
+-EXPORT_SYMBOL(zl10039_attach);
++EXPORT_SYMBOL_GPL(zl10039_attach);
+ module_param(debug, int, 0644);
+ MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
+--- a/drivers/media/dvb-frontends/zl10353.c
++++ b/drivers/media/dvb-frontends/zl10353.c
+@@ -665,4 +665,4 @@ MODULE_DESCRIPTION("Zarlink ZL10353 DVB-
+ MODULE_AUTHOR("Chris Pascoe");
+ MODULE_LICENSE("GPL");
+-EXPORT_SYMBOL(zl10353_attach);
++EXPORT_SYMBOL_GPL(zl10353_attach);
+--- a/drivers/media/pci/bt8xx/dst.c
++++ b/drivers/media/pci/bt8xx/dst.c
+@@ -1722,7 +1722,7 @@ struct dst_state *dst_attach(struct dst_
+       return state;                           /*      Manu (DST is a card not a frontend)     */
+ }
+-EXPORT_SYMBOL(dst_attach);
++EXPORT_SYMBOL_GPL(dst_attach);
+ static const struct dvb_frontend_ops dst_dvbt_ops = {
+       .delsys = { SYS_DVBT },
+--- a/drivers/media/pci/bt8xx/dst_ca.c
++++ b/drivers/media/pci/bt8xx/dst_ca.c
+@@ -668,7 +668,7 @@ struct dvb_device *dst_ca_attach(struct
+       return NULL;
+ }
+-EXPORT_SYMBOL(dst_ca_attach);
++EXPORT_SYMBOL_GPL(dst_ca_attach);
+ MODULE_DESCRIPTION("DST DVB-S/T/C Combo CA driver");
+ MODULE_AUTHOR("Manu Abraham");
+--- a/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c
++++ b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c
+@@ -112,7 +112,7 @@ struct dvb_frontend *ddbridge_dummy_fe_q
+       state->frontend.demodulator_priv = state;
+       return &state->frontend;
+ }
+-EXPORT_SYMBOL(ddbridge_dummy_fe_qam_attach);
++EXPORT_SYMBOL_GPL(ddbridge_dummy_fe_qam_attach);
+ static const struct dvb_frontend_ops ddbridge_dummy_fe_qam_ops = {
+       .delsys = { SYS_DVBC_ANNEX_A },
+--- a/drivers/media/tuners/fc0011.c
++++ b/drivers/media/tuners/fc0011.c
+@@ -499,7 +499,7 @@ struct dvb_frontend *fc0011_attach(struc
+       return fe;
+ }
+-EXPORT_SYMBOL(fc0011_attach);
++EXPORT_SYMBOL_GPL(fc0011_attach);
+ MODULE_DESCRIPTION("Fitipower FC0011 silicon tuner driver");
+ MODULE_AUTHOR("Michael Buesch <m@bues.ch>");
+--- a/drivers/media/tuners/fc0012.c
++++ b/drivers/media/tuners/fc0012.c
+@@ -495,7 +495,7 @@ err:
+       return fe;
+ }
+-EXPORT_SYMBOL(fc0012_attach);
++EXPORT_SYMBOL_GPL(fc0012_attach);
+ MODULE_DESCRIPTION("Fitipower FC0012 silicon tuner driver");
+ MODULE_AUTHOR("Hans-Frieder Vogt <hfvogt@gmx.net>");
+--- a/drivers/media/tuners/fc0013.c
++++ b/drivers/media/tuners/fc0013.c
+@@ -608,7 +608,7 @@ struct dvb_frontend *fc0013_attach(struc
+       return fe;
+ }
+-EXPORT_SYMBOL(fc0013_attach);
++EXPORT_SYMBOL_GPL(fc0013_attach);
+ MODULE_DESCRIPTION("Fitipower FC0013 silicon tuner driver");
+ MODULE_AUTHOR("Hans-Frieder Vogt <hfvogt@gmx.net>");
+--- a/drivers/media/tuners/max2165.c
++++ b/drivers/media/tuners/max2165.c
+@@ -410,7 +410,7 @@ struct dvb_frontend *max2165_attach(stru
+       return fe;
+ }
+-EXPORT_SYMBOL(max2165_attach);
++EXPORT_SYMBOL_GPL(max2165_attach);
+ MODULE_AUTHOR("David T. L. Wong <davidtlwong@gmail.com>");
+ MODULE_DESCRIPTION("Maxim MAX2165 silicon tuner driver");
+--- a/drivers/media/tuners/mc44s803.c
++++ b/drivers/media/tuners/mc44s803.c
+@@ -356,7 +356,7 @@ error:
+       kfree(priv);
+       return NULL;
+ }
+-EXPORT_SYMBOL(mc44s803_attach);
++EXPORT_SYMBOL_GPL(mc44s803_attach);
+ MODULE_AUTHOR("Jochen Friedrich");
+ MODULE_DESCRIPTION("Freescale MC44S803 silicon tuner driver");
+--- a/drivers/media/tuners/mt2060.c
++++ b/drivers/media/tuners/mt2060.c
+@@ -440,7 +440,7 @@ struct dvb_frontend * mt2060_attach(stru
+       return fe;
+ }
+-EXPORT_SYMBOL(mt2060_attach);
++EXPORT_SYMBOL_GPL(mt2060_attach);
+ static int mt2060_probe(struct i2c_client *client,
+                       const struct i2c_device_id *id)
+--- a/drivers/media/tuners/mt2131.c
++++ b/drivers/media/tuners/mt2131.c
+@@ -274,7 +274,7 @@ struct dvb_frontend * mt2131_attach(stru
+       fe->tuner_priv = priv;
+       return fe;
+ }
+-EXPORT_SYMBOL(mt2131_attach);
++EXPORT_SYMBOL_GPL(mt2131_attach);
+ MODULE_AUTHOR("Steven Toth");
+ MODULE_DESCRIPTION("Microtune MT2131 silicon tuner driver");
+--- a/drivers/media/tuners/mt2266.c
++++ b/drivers/media/tuners/mt2266.c
+@@ -336,7 +336,7 @@ struct dvb_frontend * mt2266_attach(stru
+       mt2266_calibrate(priv);
+       return fe;
+ }
+-EXPORT_SYMBOL(mt2266_attach);
++EXPORT_SYMBOL_GPL(mt2266_attach);
+ MODULE_AUTHOR("Olivier DANET");
+ MODULE_DESCRIPTION("Microtune MT2266 silicon tuner driver");
+--- a/drivers/media/tuners/mxl5005s.c
++++ b/drivers/media/tuners/mxl5005s.c
+@@ -4116,7 +4116,7 @@ struct dvb_frontend *mxl5005s_attach(str
+       fe->tuner_priv = state;
+       return fe;
+ }
+-EXPORT_SYMBOL(mxl5005s_attach);
++EXPORT_SYMBOL_GPL(mxl5005s_attach);
+ MODULE_DESCRIPTION("MaxLinear MXL5005S silicon tuner driver");
+ MODULE_AUTHOR("Steven Toth");
+--- a/drivers/media/tuners/qt1010.c
++++ b/drivers/media/tuners/qt1010.c
+@@ -440,7 +440,7 @@ struct dvb_frontend * qt1010_attach(stru
+       fe->tuner_priv = priv;
+       return fe;
+ }
+-EXPORT_SYMBOL(qt1010_attach);
++EXPORT_SYMBOL_GPL(qt1010_attach);
+ MODULE_DESCRIPTION("Quantek QT1010 silicon tuner driver");
+ MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
+--- a/drivers/media/tuners/tda18218.c
++++ b/drivers/media/tuners/tda18218.c
+@@ -336,7 +336,7 @@ struct dvb_frontend *tda18218_attach(str
+       return fe;
+ }
+-EXPORT_SYMBOL(tda18218_attach);
++EXPORT_SYMBOL_GPL(tda18218_attach);
+ MODULE_DESCRIPTION("NXP TDA18218HN silicon tuner driver");
+ MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
+--- a/drivers/media/tuners/xc2028.c
++++ b/drivers/media/tuners/xc2028.c
+@@ -1512,7 +1512,7 @@ fail:
+       return NULL;
+ }
+-EXPORT_SYMBOL(xc2028_attach);
++EXPORT_SYMBOL_GPL(xc2028_attach);
+ MODULE_DESCRIPTION("Xceive xc2028/xc3028 tuner driver");
+ MODULE_AUTHOR("Michel Ludwig <michel.ludwig@gmail.com>");
+--- a/drivers/media/tuners/xc4000.c
++++ b/drivers/media/tuners/xc4000.c
+@@ -1742,7 +1742,7 @@ fail2:
+       xc4000_release(fe);
+       return NULL;
+ }
+-EXPORT_SYMBOL(xc4000_attach);
++EXPORT_SYMBOL_GPL(xc4000_attach);
+ MODULE_AUTHOR("Steven Toth, Davide Ferri");
+ MODULE_DESCRIPTION("Xceive xc4000 silicon tuner driver");
+--- a/drivers/media/tuners/xc5000.c
++++ b/drivers/media/tuners/xc5000.c
+@@ -1460,7 +1460,7 @@ fail:
+       xc5000_release(fe);
+       return NULL;
+ }
+-EXPORT_SYMBOL(xc5000_attach);
++EXPORT_SYMBOL_GPL(xc5000_attach);
+ MODULE_AUTHOR("Steven Toth");
+ MODULE_DESCRIPTION("Xceive xc5000 silicon tuner driver");
diff --git a/queue-6.1/media-venus-hfi_venus-write-to-vidc_ctrl_init-after-unmasking-interrupts.patch b/queue-6.1/media-venus-hfi_venus-write-to-vidc_ctrl_init-after-unmasking-interrupts.patch
new file mode 100644 (file)
index 0000000..e8c5af7
--- /dev/null
@@ -0,0 +1,42 @@
+From d74e481609808330b4625b3691cf01e1f56e255e Mon Sep 17 00:00:00 2001
+From: Konrad Dybcio <konrad.dybcio@linaro.org>
+Date: Tue, 30 May 2023 14:30:36 +0200
+Subject: media: venus: hfi_venus: Write to VIDC_CTRL_INIT after unmasking interrupts
+
+From: Konrad Dybcio <konrad.dybcio@linaro.org>
+
+commit d74e481609808330b4625b3691cf01e1f56e255e upstream.
+
+The startup procedure shouldn't be started with interrupts masked, as that
+may entail silent failures.
+
+Kick off initialization only after the interrupts are unmasked.
+
+Cc: stable@vger.kernel.org # v4.12+
+Fixes: d96d3f30c0f2 ("[media] media: venus: hfi: add Venus HFI files")
+Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
+Signed-off-by: Stanimir Varbanov <stanimir.k.varbanov@gmail.com>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/media/platform/qcom/venus/hfi_venus.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/media/platform/qcom/venus/hfi_venus.c
++++ b/drivers/media/platform/qcom/venus/hfi_venus.c
+@@ -453,7 +453,6 @@ static int venus_boot_core(struct venus_
+       void __iomem *wrapper_base = hdev->core->wrapper_base;
+       int ret = 0;
+-      writel(BIT(VIDC_CTRL_INIT_CTRL_SHIFT), cpu_cs_base + VIDC_CTRL_INIT);
+       if (IS_V6(hdev->core)) {
+               mask_val = readl(wrapper_base + WRAPPER_INTR_MASK);
+               mask_val &= ~(WRAPPER_INTR_MASK_A2HWD_BASK_V6 |
+@@ -464,6 +463,7 @@ static int venus_boot_core(struct venus_
+       writel(mask_val, wrapper_base + WRAPPER_INTR_MASK);
+       writel(1, cpu_cs_base + CPU_CS_SCIACMDARG3);
++      writel(BIT(VIDC_CTRL_INIT_CTRL_SHIFT), cpu_cs_base + VIDC_CTRL_INIT);
+       while (!ctrl_status && count < max_tries) {
+               ctrl_status = readl(cpu_cs_base + CPU_CS_SCIACMDARG0);
+               if ((ctrl_status & CPU_CS_SCIACMDARG0_ERROR_STATUS_MASK) == 4) {
diff --git a/queue-6.1/ntb-clean-up-tx-tail-index-on-link-down.patch b/queue-6.1/ntb-clean-up-tx-tail-index-on-link-down.patch
new file mode 100644 (file)
index 0000000..24b1bb2
--- /dev/null
@@ -0,0 +1,58 @@
+From cc79bd2738c2d40aba58b2be6ce47dc0e471df0e Mon Sep 17 00:00:00 2001
+From: Dave Jiang <dave.jiang@intel.com>
+Date: Tue, 22 Aug 2023 09:04:45 -0700
+Subject: ntb: Clean up tx tail index on link down
+
+From: Dave Jiang <dave.jiang@intel.com>
+
+commit cc79bd2738c2d40aba58b2be6ce47dc0e471df0e upstream.
+
+The tx tail index is not reset when the link goes down. This causes the
+tail index to go out of sync when the link goes down and comes back up.
+Refactor the ntb_qp_link_down_reset() and reset the tail index as well.
+
+Fixes: 2849b5d70641 ("NTB: Reset transport QP link stats on down")
+Reported-by: Yuan Y Lu <yuan.y.lu@intel.com>
+Tested-by: Yuan Y Lu <yuan.y.lu@intel.com>
+Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
+Signed-off-by: Dave Jiang <dave.jiang@intel.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/ntb/ntb_transport.c |   11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+--- a/drivers/ntb/ntb_transport.c
++++ b/drivers/ntb/ntb_transport.c
+@@ -909,7 +909,7 @@ static int ntb_set_mw(struct ntb_transpo
+       return 0;
+ }
+-static void ntb_qp_link_down_reset(struct ntb_transport_qp *qp)
++static void ntb_qp_link_context_reset(struct ntb_transport_qp *qp)
+ {
+       qp->link_is_up = false;
+       qp->active = false;
+@@ -932,6 +932,13 @@ static void ntb_qp_link_down_reset(struc
+       qp->tx_async = 0;
+ }
++static void ntb_qp_link_down_reset(struct ntb_transport_qp *qp)
++{
++      ntb_qp_link_context_reset(qp);
++      if (qp->remote_rx_info)
++              qp->remote_rx_info->entry = qp->rx_max_entry - 1;
++}
++
+ static void ntb_qp_link_cleanup(struct ntb_transport_qp *qp)
+ {
+       struct ntb_transport_ctx *nt = qp->transport;
+@@ -1174,7 +1181,7 @@ static int ntb_transport_init_queue(stru
+       qp->ndev = nt->ndev;
+       qp->client_ready = false;
+       qp->event_handler = NULL;
+-      ntb_qp_link_down_reset(qp);
++      ntb_qp_link_context_reset(qp);
+       if (mw_num < qp_count % mw_count)
+               num_qps_mw = qp_count / mw_count + 1;
diff --git a/queue-6.1/ntb-drop-packets-when-qp-link-is-down.patch b/queue-6.1/ntb-drop-packets-when-qp-link-is-down.patch
new file mode 100644 (file)
index 0000000..9fdf11f
--- /dev/null
@@ -0,0 +1,42 @@
+From f195a1a6fe416882984f8bd6c61afc1383171860 Mon Sep 17 00:00:00 2001
+From: Dave Jiang <dave.jiang@intel.com>
+Date: Tue, 22 Aug 2023 09:04:51 -0700
+Subject: ntb: Drop packets when qp link is down
+
+From: Dave Jiang <dave.jiang@intel.com>
+
+commit f195a1a6fe416882984f8bd6c61afc1383171860 upstream.
+
+Currently when the transport receive packets after netdev has closed the
+transport returns error and triggers tx errors to be incremented and
+carrier to be stopped. There is no reason to return error if the device is
+already closed. Drop the packet and return 0.
+
+Fixes: e26a5843f7f5 ("NTB: Split ntb_hw_intel and ntb_transport drivers")
+Reported-by: Yuan Y Lu <yuan.y.lu@intel.com>
+Tested-by: Yuan Y Lu <yuan.y.lu@intel.com>
+Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
+Signed-off-by: Dave Jiang <dave.jiang@intel.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/ntb/ntb_transport.c |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/drivers/ntb/ntb_transport.c
++++ b/drivers/ntb/ntb_transport.c
+@@ -2276,9 +2276,13 @@ int ntb_transport_tx_enqueue(struct ntb_
+       struct ntb_queue_entry *entry;
+       int rc;
+-      if (!qp || !qp->link_is_up || !len)
++      if (!qp || !len)
+               return -EINVAL;
++      /* If the qp link is down already, just ignore. */
++      if (!qp->link_is_up)
++              return 0;
++
+       entry = ntb_list_rm(&qp->ntb_tx_free_q_lock, &qp->tx_free_q);
+       if (!entry) {
+               qp->tx_err_no_buf++;
diff --git a/queue-6.1/ntb-fix-calculation-ntb_transport_tx_free_entry.patch b/queue-6.1/ntb-fix-calculation-ntb_transport_tx_free_entry.patch
new file mode 100644 (file)
index 0000000..47c81b2
--- /dev/null
@@ -0,0 +1,35 @@
+From 5a7693e6bbf19b22fd6c1d2c4b7beb0a03969e2c Mon Sep 17 00:00:00 2001
+From: Dave Jiang <dave.jiang@intel.com>
+Date: Tue, 22 Aug 2023 09:04:57 -0700
+Subject: ntb: Fix calculation ntb_transport_tx_free_entry()
+
+From: Dave Jiang <dave.jiang@intel.com>
+
+commit 5a7693e6bbf19b22fd6c1d2c4b7beb0a03969e2c upstream.
+
+ntb_transport_tx_free_entry() never returns 0 with the current
+calculation. If head == tail, then it would return qp->tx_max_entry.
+Change compare to tail >= head and when they are equal, a 0 would be
+returned.
+
+Fixes: e74bfeedad08 ("NTB: Add flow control to the ntb_netdev")
+Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
+Signed-off-by: renlonglong <ren.longlong@h3c.com>
+Signed-off-by: Dave Jiang <dave.jiang@intel.com>
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/ntb/ntb_transport.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/ntb/ntb_transport.c
++++ b/drivers/ntb/ntb_transport.c
+@@ -2429,7 +2429,7 @@ unsigned int ntb_transport_tx_free_entry
+       unsigned int head = qp->tx_index;
+       unsigned int tail = qp->remote_rx_info->entry;
+-      return tail > head ? tail - head : qp->tx_max_entry + tail - head;
++      return tail >= head ? tail - head : qp->tx_max_entry + tail - head;
+ }
+ EXPORT_SYMBOL_GPL(ntb_transport_tx_free_entry);
diff --git a/queue-6.1/parisc-fix-proc-cpuinfo-output-for-lscpu.patch b/queue-6.1/parisc-fix-proc-cpuinfo-output-for-lscpu.patch
new file mode 100644 (file)
index 0000000..fecf4e8
--- /dev/null
@@ -0,0 +1,61 @@
+From 9f5ba4b3e1b3c123eeca5d2d09161e8720048b5c Mon Sep 17 00:00:00 2001
+From: Helge Deller <deller@gmx.de>
+Date: Fri, 18 Aug 2023 22:48:04 +0200
+Subject: parisc: Fix /proc/cpuinfo output for lscpu
+
+From: Helge Deller <deller@gmx.de>
+
+commit 9f5ba4b3e1b3c123eeca5d2d09161e8720048b5c upstream.
+
+The lscpu command is broken since commit cab56b51ec0e ("parisc: Fix
+device names in /proc/iomem") added the PA pathname to all PA
+devices, includig the CPUs.
+
+lscpu parses /proc/cpuinfo and now believes it found different CPU
+types since every CPU is listed with an unique identifier (PA
+pathname).
+
+Fix this problem by simply dropping the PA pathname when listing the
+CPUs in /proc/cpuinfo. There is no need to show the pathname in this
+procfs file.
+
+Fixes: cab56b51ec0e ("parisc: Fix device names in /proc/iomem")
+Signed-off-by: Helge Deller <deller@gmx.de>
+Cc: <stable@vger.kernel.org> # v4.9+
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/parisc/kernel/processor.c |   13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+--- a/arch/parisc/kernel/processor.c
++++ b/arch/parisc/kernel/processor.c
+@@ -372,10 +372,18 @@ int
+ show_cpuinfo (struct seq_file *m, void *v)
+ {
+       unsigned long cpu;
++      char cpu_name[60], *p;
++
++      /* strip PA path from CPU name to not confuse lscpu */
++      strlcpy(cpu_name, per_cpu(cpu_data, 0).dev->name, sizeof(cpu_name));
++      p = strrchr(cpu_name, '[');
++      if (p)
++              *(--p) = 0;
+       for_each_online_cpu(cpu) {
+-              const struct cpuinfo_parisc *cpuinfo = &per_cpu(cpu_data, cpu);
+ #ifdef CONFIG_SMP
++              const struct cpuinfo_parisc *cpuinfo = &per_cpu(cpu_data, cpu);
++
+               if (0 == cpuinfo->hpa)
+                       continue;
+ #endif
+@@ -420,8 +428,7 @@ show_cpuinfo (struct seq_file *m, void *
+               seq_printf(m, "model\t\t: %s - %s\n",
+                                boot_cpu_data.pdc.sys_model_name,
+-                               cpuinfo->dev ?
+-                               cpuinfo->dev->name : "Unknown");
++                               cpu_name);
+               seq_printf(m, "hversion\t: 0x%08x\n"
+                               "sversion\t: 0x%08x\n",
diff --git a/queue-6.1/pci-free-released-resource-after-coalescing.patch b/queue-6.1/pci-free-released-resource-after-coalescing.patch
new file mode 100644 (file)
index 0000000..5ea0d9d
--- /dev/null
@@ -0,0 +1,35 @@
+From 8ec9c1d5d0a5a4744516adb483b97a238892f9d5 Mon Sep 17 00:00:00 2001
+From: Ross Lagerwall <ross.lagerwall@citrix.com>
+Date: Wed, 6 Sep 2023 12:08:46 +0100
+Subject: PCI: Free released resource after coalescing
+
+From: Ross Lagerwall <ross.lagerwall@citrix.com>
+
+commit 8ec9c1d5d0a5a4744516adb483b97a238892f9d5 upstream.
+
+release_resource() doesn't actually free the resource or resource list
+entry so free the resource list entry to avoid a leak.
+
+Closes: https://lore.kernel.org/r/878r9sga1t.fsf@kernel.org/
+Fixes: e54223275ba1 ("PCI: Release resource invalidated by coalescing")
+Link: https://lore.kernel.org/r/20230906110846.225369-1-ross.lagerwall@citrix.com
+Reported-by: Kalle Valo <kvalo@kernel.org>
+Tested-by: Kalle Valo <kvalo@kernel.org>
+Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Cc: stable@vger.kernel.org      # v5.16+
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/pci/probe.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/pci/probe.c
++++ b/drivers/pci/probe.c
+@@ -996,6 +996,7 @@ static int pci_register_host_bridge(stru
+               res = window->res;
+               if (!res->flags && !res->start && !res->end) {
+                       release_resource(res);
++                      resource_list_destroy_entry(window);
+                       continue;
+               }
diff --git a/queue-6.1/pci-hv-fix-a-crash-in-hv_pci_restore_msi_msg-during-hibernation.patch b/queue-6.1/pci-hv-fix-a-crash-in-hv_pci_restore_msi_msg-during-hibernation.patch
new file mode 100644 (file)
index 0000000..13fe7ac
--- /dev/null
@@ -0,0 +1,41 @@
+From 04bbe863241a9be7d57fb4cf217ee4a72f480e70 Mon Sep 17 00:00:00 2001
+From: Dexuan Cui <decui@microsoft.com>
+Date: Wed, 16 Aug 2023 10:59:39 -0700
+Subject: PCI: hv: Fix a crash in hv_pci_restore_msi_msg() during hibernation
+
+From: Dexuan Cui <decui@microsoft.com>
+
+commit 04bbe863241a9be7d57fb4cf217ee4a72f480e70 upstream.
+
+When a Linux VM with an assigned PCI device runs on Hyper-V, if the PCI
+device driver is not loaded yet (i.e. MSI-X/MSI is not enabled on the
+device yet), doing a VM hibernation triggers a panic in
+hv_pci_restore_msi_msg() -> msi_lock_descs(&pdev->dev), because
+pdev->dev.msi.data is still NULL.
+
+Avoid the panic by checking if MSI-X/MSI is enabled.
+
+Link: https://lore.kernel.org/r/20230816175939.21566-1-decui@microsoft.com
+Fixes: dc2b453290c4 ("PCI: hv: Rework MSI handling")
+Signed-off-by: Dexuan Cui <decui@microsoft.com>
+Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
+Reviewed-by: sathyanarayanan.kuppuswamy@linux.intel.com
+Reviewed-by: Michael Kelley <mikelley@microsoft.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/pci/controller/pci-hyperv.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/pci/controller/pci-hyperv.c
++++ b/drivers/pci/controller/pci-hyperv.c
+@@ -3930,6 +3930,9 @@ static int hv_pci_restore_msi_msg(struct
+       struct msi_desc *entry;
+       int ret = 0;
++      if (!pdev->msi_enabled && !pdev->msix_enabled)
++              return 0;
++
+       msi_lock_descs(&pdev->dev);
+       msi_for_each_desc(entry, &pdev->dev, MSI_DESC_ASSOCIATED) {
+               irq_data = irq_get_irq_data(entry->irq);
diff --git a/queue-6.1/pci-pm-only-read-pci_pm_ctrl-register-when-available.patch b/queue-6.1/pci-pm-only-read-pci_pm_ctrl-register-when-available.patch
new file mode 100644 (file)
index 0000000..51e7f55
--- /dev/null
@@ -0,0 +1,73 @@
+From 5694ba13b004eea683c6d4faeb6d6e7a9636bda0 Mon Sep 17 00:00:00 2001
+From: Feiyang Chen <chenfeiyang@loongson.cn>
+Date: Thu, 24 Aug 2023 09:37:38 +0800
+Subject: PCI/PM: Only read PCI_PM_CTRL register when available
+
+From: Feiyang Chen <chenfeiyang@loongson.cn>
+
+commit 5694ba13b004eea683c6d4faeb6d6e7a9636bda0 upstream.
+
+For a device with no Power Management Capability, pci_power_up() previously
+returned 0 (success) if the platform was able to put the device in D0,
+which led to pci_set_full_power_state() trying to read PCI_PM_CTRL, even
+though it doesn't exist.
+
+Since dev->pm_cap == 0 in this case, pci_set_full_power_state() actually
+read the wrong register, interpreted it as PCI_PM_CTRL, and corrupted
+dev->current_state.  This led to messages like this in some cases:
+
+  pci 0000:01:00.0: Refused to change power state from D3hot to D0
+
+To prevent this, make pci_power_up() always return a negative failure code
+if the device lacks a Power Management Capability, even if non-PCI platform
+power management has been able to put the device in D0.  The failure will
+prevent pci_set_full_power_state() from trying to access PCI_PM_CTRL.
+
+Fixes: e200904b275c ("PCI/PM: Split pci_power_up()")
+Link: https://lore.kernel.org/r/20230824013738.1894965-1-chenfeiyang@loongson.cn
+Signed-off-by: Feiyang Chen <chenfeiyang@loongson.cn>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Reviewed-by: "Rafael J. Wysocki" <rafael@kernel.org>
+Cc: stable@vger.kernel.org     # v5.19+
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/pci/pci.c |   13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+--- a/drivers/pci/pci.c
++++ b/drivers/pci/pci.c
+@@ -1193,6 +1193,10 @@ static int pci_dev_wait(struct pci_dev *
+  *
+  * On success, return 0 or 1, depending on whether or not it is necessary to
+  * restore the device's BARs subsequently (1 is returned in that case).
++ *
++ * On failure, return a negative error code.  Always return failure if @dev
++ * lacks a Power Management Capability, even if the platform was able to
++ * put the device in D0 via non-PCI means.
+  */
+ int pci_power_up(struct pci_dev *dev)
+ {
+@@ -1209,9 +1213,6 @@ int pci_power_up(struct pci_dev *dev)
+               else
+                       dev->current_state = state;
+-              if (state == PCI_D0)
+-                      return 0;
+-
+               return -EIO;
+       }
+@@ -1269,8 +1270,12 @@ static int pci_set_full_power_state(stru
+       int ret;
+       ret = pci_power_up(dev);
+-      if (ret < 0)
++      if (ret < 0) {
++              if (dev->current_state == PCI_D0)
++                      return 0;
++
+               return ret;
++      }
+       pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
+       dev->current_state = pmcsr & PCI_PM_CTRL_STATE_MASK;
diff --git a/queue-6.1/procfs-block-chmod-on-proc-thread-self-comm.patch b/queue-6.1/procfs-block-chmod-on-proc-thread-self-comm.patch
new file mode 100644 (file)
index 0000000..e068f7e
--- /dev/null
@@ -0,0 +1,42 @@
+From ccf61486fe1e1a48e18c638d1813cda77b3c0737 Mon Sep 17 00:00:00 2001
+From: Aleksa Sarai <cyphar@cyphar.com>
+Date: Fri, 14 Jul 2023 00:09:58 +1000
+Subject: procfs: block chmod on /proc/thread-self/comm
+
+From: Aleksa Sarai <cyphar@cyphar.com>
+
+commit ccf61486fe1e1a48e18c638d1813cda77b3c0737 upstream.
+
+Due to an oversight in commit 1b3044e39a89 ("procfs: fix pthread
+cross-thread naming if !PR_DUMPABLE") in switching from REG to NOD,
+chmod operations on /proc/thread-self/comm were no longer blocked as
+they are on almost all other procfs files.
+
+A very similar situation with /proc/self/environ was used to as a root
+exploit a long time ago, but procfs has SB_I_NOEXEC so this is simply a
+correctness issue.
+
+Ref: https://lwn.net/Articles/191954/
+Ref: 6d76fa58b050 ("Don't allow chmod() on the /proc/<pid>/ files")
+Fixes: 1b3044e39a89 ("procfs: fix pthread cross-thread naming if !PR_DUMPABLE")
+Cc: stable@vger.kernel.org # v4.7+
+Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
+Message-Id: <20230713141001.27046-1-cyphar@cyphar.com>
+Signed-off-by: Christian Brauner <brauner@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/proc/base.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/fs/proc/base.c
++++ b/fs/proc/base.c
+@@ -3581,7 +3581,8 @@ static int proc_tid_comm_permission(stru
+ }
+ static const struct inode_operations proc_tid_comm_inode_operations = {
+-              .permission = proc_tid_comm_permission,
++              .setattr        = proc_setattr,
++              .permission     = proc_tid_comm_permission,
+ };
+ /*
diff --git a/queue-6.1/revert-pci-mark-nvidia-t4-gpus-to-avoid-bus-reset.patch b/queue-6.1/revert-pci-mark-nvidia-t4-gpus-to-avoid-bus-reset.patch
new file mode 100644 (file)
index 0000000..dc88567
--- /dev/null
@@ -0,0 +1,42 @@
+From 5260bd6d36c83c5b269c33baaaf8c78e520908b0 Mon Sep 17 00:00:00 2001
+From: Bjorn Helgaas <bhelgaas@google.com>
+Date: Fri, 8 Sep 2023 14:55:30 -0500
+Subject: Revert "PCI: Mark NVIDIA T4 GPUs to avoid bus reset"
+
+From: Bjorn Helgaas <bhelgaas@google.com>
+
+commit 5260bd6d36c83c5b269c33baaaf8c78e520908b0 upstream.
+
+This reverts commit d5af729dc2071273f14cbb94abbc60608142fd83.
+
+d5af729dc207 ("PCI: Mark NVIDIA T4 GPUs to avoid bus reset") avoided
+Secondary Bus Reset on the T4 because the reset seemed to not work when the
+T4 was directly attached to a Root Port.
+
+But NVIDIA thinks the issue is probably related to some issue with the Root
+Port, not with the T4.  The T4 provides neither PM nor FLR reset, so
+masking bus reset compromises this device for assignment scenarios.
+
+Revert d5af729dc207 as requested by Wu Zongyong.  This will leave SBR
+broken in the specific configuration Wu tested, as it was in v6.5, so Wu
+will debug that further.
+
+Link: https://lore.kernel.org/r/ZPqMCDWvITlOLHgJ@wuzongyong-alibaba
+Link: https://lore.kernel.org/r/20230908201104.GA305023@bhelgaas
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/pci/quirks.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/pci/quirks.c
++++ b/drivers/pci/quirks.c
+@@ -3631,7 +3631,7 @@ static void quirk_no_bus_reset(struct pc
+  */
+ static void quirk_nvidia_no_bus_reset(struct pci_dev *dev)
+ {
+-      if ((dev->device & 0xffc0) == 0x2340 || dev->device == 0x1eb8)
++      if ((dev->device & 0xffc0) == 0x2340)
+               quirk_no_bus_reset(dev);
+ }
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID,
diff --git a/queue-6.1/revert-scsi-qla2xxx-fix-buffer-overrun.patch b/queue-6.1/revert-scsi-qla2xxx-fix-buffer-overrun.patch
new file mode 100644 (file)
index 0000000..1bb6508
--- /dev/null
@@ -0,0 +1,33 @@
+From 641671d97b9199f1ba35ccc2222d4b189a6a5de5 Mon Sep 17 00:00:00 2001
+From: Nilesh Javali <njavali@marvell.com>
+Date: Mon, 21 Aug 2023 18:30:44 +0530
+Subject: Revert "scsi: qla2xxx: Fix buffer overrun"
+
+From: Nilesh Javali <njavali@marvell.com>
+
+commit 641671d97b9199f1ba35ccc2222d4b189a6a5de5 upstream.
+
+Revert due to Get PLOGI Template failed.
+This reverts commit b68710a8094fdffe8dd4f7a82c82649f479bb453.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Nilesh Javali <njavali@marvell.com>
+Link: https://lore.kernel.org/r/20230821130045.34850-9-njavali@marvell.com
+Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/scsi/qla2xxx/qla_init.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/scsi/qla2xxx/qla_init.c
++++ b/drivers/scsi/qla2xxx/qla_init.c
+@@ -5571,7 +5571,7 @@ static void qla_get_login_template(scsi_
+       __be32 *q;
+       memset(ha->init_cb, 0, ha->init_cb_size);
+-      sz = min_t(int, sizeof(struct fc_els_csp), ha->init_cb_size);
++      sz = min_t(int, sizeof(struct fc_els_flogi), ha->init_cb_size);
+       rval = qla24xx_get_port_login_templ(vha, ha->init_cb_dma,
+                                           ha->init_cb, sz);
+       if (rval != QLA_SUCCESS) {
diff --git a/queue-6.1/scsi-mpt3sas-perform-additional-retries-if-doorbell-read-returns-0.patch b/queue-6.1/scsi-mpt3sas-perform-additional-retries-if-doorbell-read-returns-0.patch
new file mode 100644 (file)
index 0000000..edec817
--- /dev/null
@@ -0,0 +1,182 @@
+From 4ca10f3e31745d35249a727ecd108eb58f0a8c5e Mon Sep 17 00:00:00 2001
+From: Ranjan Kumar <ranjan.kumar@broadcom.com>
+Date: Tue, 29 Aug 2023 14:30:19 +0530
+Subject: scsi: mpt3sas: Perform additional retries if doorbell read returns 0
+
+From: Ranjan Kumar <ranjan.kumar@broadcom.com>
+
+commit 4ca10f3e31745d35249a727ecd108eb58f0a8c5e upstream.
+
+The driver retries certain register reads 3 times if the returned value is
+0. This was done because the controller could return 0 for certain
+registers if other registers were being accessed concurrently by the BMC.
+
+In certain systems with increased BMC interactions, the register values
+returned can be 0 for longer than 3 retries. Change the retry count from 3
+to 30 for the affected registers to prevent problems with out-of-band
+management.
+
+Fixes: b899202901a8 ("scsi: mpt3sas: Add separate function for aero doorbell reads")
+Cc: stable@vger.kernel.org
+Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com>
+Link: https://lore.kernel.org/r/20230829090020.5417-2-ranjan.kumar@broadcom.com
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/scsi/mpt3sas/mpt3sas_base.c |   46 +++++++++++++++++++++++++-----------
+ drivers/scsi/mpt3sas/mpt3sas_base.h |    1 
+ 2 files changed, 34 insertions(+), 13 deletions(-)
+
+--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
++++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
+@@ -139,6 +139,9 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPT
+ static void
+ _base_clear_outstanding_commands(struct MPT3SAS_ADAPTER *ioc);
++static u32
++_base_readl_ext_retry(const volatile void __iomem *addr);
++
+ /**
+  * mpt3sas_base_check_cmd_timeout - Function
+  *            to check timeout and command termination due
+@@ -214,6 +217,20 @@ _base_readl_aero(const volatile void __i
+       return ret_val;
+ }
++static u32
++_base_readl_ext_retry(const volatile void __iomem *addr)
++{
++      u32 i, ret_val;
++
++      for (i = 0 ; i < 30 ; i++) {
++              ret_val = readl(addr);
++              if (ret_val == 0)
++                      continue;
++      }
++
++      return ret_val;
++}
++
+ static inline u32
+ _base_readl(const volatile void __iomem *addr)
+ {
+@@ -941,7 +958,7 @@ mpt3sas_halt_firmware(struct MPT3SAS_ADA
+       dump_stack();
+-      doorbell = ioc->base_readl(&ioc->chip->Doorbell);
++      doorbell = ioc->base_readl_ext_retry(&ioc->chip->Doorbell);
+       if ((doorbell & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_FAULT) {
+               mpt3sas_print_fault_code(ioc, doorbell &
+                   MPI2_DOORBELL_DATA_MASK);
+@@ -6697,7 +6714,7 @@ mpt3sas_base_get_iocstate(struct MPT3SAS
+ {
+       u32 s, sc;
+-      s = ioc->base_readl(&ioc->chip->Doorbell);
++      s = ioc->base_readl_ext_retry(&ioc->chip->Doorbell);
+       sc = s & MPI2_IOC_STATE_MASK;
+       return cooked ? sc : s;
+ }
+@@ -6842,7 +6859,7 @@ _base_wait_for_doorbell_ack(struct MPT3S
+                                          __func__, count, timeout));
+                       return 0;
+               } else if (int_status & MPI2_HIS_IOC2SYS_DB_STATUS) {
+-                      doorbell = ioc->base_readl(&ioc->chip->Doorbell);
++                      doorbell = ioc->base_readl_ext_retry(&ioc->chip->Doorbell);
+                       if ((doorbell & MPI2_IOC_STATE_MASK) ==
+                           MPI2_IOC_STATE_FAULT) {
+                               mpt3sas_print_fault_code(ioc, doorbell);
+@@ -6882,7 +6899,7 @@ _base_wait_for_doorbell_not_used(struct
+       count = 0;
+       cntdn = 1000 * timeout;
+       do {
+-              doorbell_reg = ioc->base_readl(&ioc->chip->Doorbell);
++              doorbell_reg = ioc->base_readl_ext_retry(&ioc->chip->Doorbell);
+               if (!(doorbell_reg & MPI2_DOORBELL_USED)) {
+                       dhsprintk(ioc,
+                                 ioc_info(ioc, "%s: successful count(%d), timeout(%d)\n",
+@@ -7030,7 +7047,7 @@ _base_handshake_req_reply_wait(struct MP
+       __le32 *mfp;
+       /* make sure doorbell is not in use */
+-      if ((ioc->base_readl(&ioc->chip->Doorbell) & MPI2_DOORBELL_USED)) {
++      if ((ioc->base_readl_ext_retry(&ioc->chip->Doorbell) & MPI2_DOORBELL_USED)) {
+               ioc_err(ioc, "doorbell is in use (line=%d)\n", __LINE__);
+               return -EFAULT;
+       }
+@@ -7079,7 +7096,7 @@ _base_handshake_req_reply_wait(struct MP
+       }
+       /* read the first two 16-bits, it gives the total length of the reply */
+-      reply[0] = le16_to_cpu(ioc->base_readl(&ioc->chip->Doorbell)
++      reply[0] = le16_to_cpu(ioc->base_readl_ext_retry(&ioc->chip->Doorbell)
+           & MPI2_DOORBELL_DATA_MASK);
+       writel(0, &ioc->chip->HostInterruptStatus);
+       if ((_base_wait_for_doorbell_int(ioc, 5))) {
+@@ -7087,7 +7104,7 @@ _base_handshake_req_reply_wait(struct MP
+                       __LINE__);
+               return -EFAULT;
+       }
+-      reply[1] = le16_to_cpu(ioc->base_readl(&ioc->chip->Doorbell)
++      reply[1] = le16_to_cpu(ioc->base_readl_ext_retry(&ioc->chip->Doorbell)
+           & MPI2_DOORBELL_DATA_MASK);
+       writel(0, &ioc->chip->HostInterruptStatus);
+@@ -7098,10 +7115,10 @@ _base_handshake_req_reply_wait(struct MP
+                       return -EFAULT;
+               }
+               if (i >=  reply_bytes/2) /* overflow case */
+-                      ioc->base_readl(&ioc->chip->Doorbell);
++                      ioc->base_readl_ext_retry(&ioc->chip->Doorbell);
+               else
+                       reply[i] = le16_to_cpu(
+-                          ioc->base_readl(&ioc->chip->Doorbell)
++                          ioc->base_readl_ext_retry(&ioc->chip->Doorbell)
+                           & MPI2_DOORBELL_DATA_MASK);
+               writel(0, &ioc->chip->HostInterruptStatus);
+       }
+@@ -7960,7 +7977,7 @@ _base_diag_reset(struct MPT3SAS_ADAPTER
+                       goto out;
+               }
+-              host_diagnostic = ioc->base_readl(&ioc->chip->HostDiagnostic);
++              host_diagnostic = ioc->base_readl_ext_retry(&ioc->chip->HostDiagnostic);
+               drsprintk(ioc,
+                         ioc_info(ioc, "wrote magic sequence: count(%d), host_diagnostic(0x%08x)\n",
+                                  count, host_diagnostic));
+@@ -7980,7 +7997,7 @@ _base_diag_reset(struct MPT3SAS_ADAPTER
+       for (count = 0; count < (300000000 /
+               MPI2_HARD_RESET_PCIE_SECOND_READ_DELAY_MICRO_SEC); count++) {
+-              host_diagnostic = ioc->base_readl(&ioc->chip->HostDiagnostic);
++              host_diagnostic = ioc->base_readl_ext_retry(&ioc->chip->HostDiagnostic);
+               if (host_diagnostic == 0xFFFFFFFF) {
+                       ioc_info(ioc,
+@@ -8370,10 +8387,13 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPT
+       ioc->rdpq_array_enable_assigned = 0;
+       ioc->use_32bit_dma = false;
+       ioc->dma_mask = 64;
+-      if (ioc->is_aero_ioc)
++      if (ioc->is_aero_ioc) {
+               ioc->base_readl = &_base_readl_aero;
+-      else
++              ioc->base_readl_ext_retry = &_base_readl_ext_retry;
++      } else {
+               ioc->base_readl = &_base_readl;
++              ioc->base_readl_ext_retry = &_base_readl;
++      }
+       r = mpt3sas_base_map_resources(ioc);
+       if (r)
+               goto out_free_resources;
+--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
++++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
+@@ -1618,6 +1618,7 @@ struct MPT3SAS_ADAPTER {
+       u8              diag_trigger_active;
+       u8              atomic_desc_capable;
+       BASE_READ_REG   base_readl;
++      BASE_READ_REG   base_readl_ext_retry;
+       struct SL_WH_MASTER_TRIGGER_T diag_trigger_master;
+       struct SL_WH_EVENT_TRIGGERS_T diag_trigger_event;
+       struct SL_WH_SCSI_TRIGGERS_T diag_trigger_scsi;
index 6de93407bed9a0c26344e0bbaf8df326d6e316d8..ddf92c93f6c769a2d22e07675ce6ebd739150d0f 100644 (file)
@@ -544,3 +544,19 @@ loongarch-mm-add-p-d_leaf-definitions.patch
 i3c-master-svc-fix-probe-failure-when-no-i3c-device-exist.patch
 arm64-csum-fix-oob-access-in-ip-checksum-code-for-negative-lengths.patch
 alsa-hda-cirrus-fix-broken-audio-on-hardware-with-two-cs42l42-codecs.patch
+media-dvb-symbol-fixup-for-dvb_attach.patch
+media-venus-hfi_venus-write-to-vidc_ctrl_init-after-unmasking-interrupts.patch
+revert-scsi-qla2xxx-fix-buffer-overrun.patch
+scsi-mpt3sas-perform-additional-retries-if-doorbell-read-returns-0.patch
+pci-free-released-resource-after-coalescing.patch
+pci-hv-fix-a-crash-in-hv_pci_restore_msi_msg-during-hibernation.patch
+pci-pm-only-read-pci_pm_ctrl-register-when-available.patch
+ntb-drop-packets-when-qp-link-is-down.patch
+ntb-clean-up-tx-tail-index-on-link-down.patch
+ntb-fix-calculation-ntb_transport_tx_free_entry.patch
+revert-pci-mark-nvidia-t4-gpus-to-avoid-bus-reset.patch
+block-don-t-add-or-resize-partition-on-the-disk-with-genhd_fl_no_part.patch
+procfs-block-chmod-on-proc-thread-self-comm.patch
+parisc-fix-proc-cpuinfo-output-for-lscpu.patch
+drm-amd-display-add-smu-write-msg-id-fail-retry-process.patch
+bpf-fix-issue-in-verifying-allow_ptr_leaks.patch