From: Greg Kroah-Hartman Date: Sat, 9 Sep 2023 21:28:01 +0000 (+0100) Subject: 6.5-stable patches X-Git-Tag: v6.1.53~65 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=28379d4fa06c4548df47093f1db25244b3a3c756;p=thirdparty%2Fkernel%2Fstable-queue.git 6.5-stable patches added patches: block-don-t-add-or-resize-partition-on-the-disk-with-genhd_fl_no_part.patch block-fix-pin-count-management-when-merging-same-page-segments.patch bpf-fix-issue-in-verifying-allow_ptr_leaks.patch drm-amd-display-add-smu-write-msg-id-fail-retry-process.patch dt-bindings-pci-qcom-fix-sdx65-compatible.patch media-dvb-symbol-fixup-for-dvb_attach.patch media-nxp-fix-wrong-return-pointer-check-in-mxc_isi_crossbar_init.patch media-venus-hfi_venus-write-to-vidc_ctrl_init-after-unmasking-interrupts.patch misc-fastrpc-pass-proper-scm-arguments-for-static-process-init.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 --- diff --git a/queue-6.5/block-don-t-add-or-resize-partition-on-the-disk-with-genhd_fl_no_part.patch b/queue-6.5/block-don-t-add-or-resize-partition-on-the-disk-with-genhd_fl_no_part.patch new file mode 100644 index 00000000000..7da861eb366 --- /dev/null +++ b/queue-6.5/block-don-t-add-or-resize-partition-on-the-disk-with-genhd_fl_no_part.patch @@ -0,0 +1,38 @@ +From 1a721de8489fa559ff4471f73c58bb74ac5580d3 Mon Sep 17 00:00:00 2001 +From: Li Lingfeng +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 + +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 +Reviewed-by: Christoph Hellwig +Link: https://lore.kernel.org/r/20230831075900.1725842-1-lilingfeng@huaweicloud.com +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + 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.5/block-fix-pin-count-management-when-merging-same-page-segments.patch b/queue-6.5/block-fix-pin-count-management-when-merging-same-page-segments.patch new file mode 100644 index 00000000000..0a0890aa168 --- /dev/null +++ b/queue-6.5/block-fix-pin-count-management-when-merging-same-page-segments.patch @@ -0,0 +1,42 @@ +From 5905afc2c7bb713d52c7c7585565feecbb686b44 Mon Sep 17 00:00:00 2001 +From: Christoph Hellwig +Date: Tue, 5 Sep 2023 14:47:31 +0200 +Subject: block: fix pin count management when merging same-page segments + +From: Christoph Hellwig + +commit 5905afc2c7bb713d52c7c7585565feecbb686b44 upstream. + +There is no need to unpin the added page when adding it to the bio fails +as that is done by the loop below. Instead we want to unpin it when adding +a single page to the bio more than once as bio_release_pages will only +unpin it once. + +Fixes: d1916c86ccdc ("block: move same page handling from __bio_add_pc_page to the callers") +Signed-off-by: Christoph Hellwig +Reviewed-by: Damien Le Moal +Link: https://lore.kernel.org/r/20230905124731.328255-1-hch@lst.de +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + block/blk-map.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +--- a/block/blk-map.c ++++ b/block/blk-map.c +@@ -315,12 +315,11 @@ static int bio_map_user_iov(struct reque + n = bytes; + + if (!bio_add_hw_page(rq->q, bio, page, n, offs, +- max_sectors, &same_page)) { +- if (same_page) +- bio_release_page(bio, page); ++ max_sectors, &same_page)) + break; +- } + ++ if (same_page) ++ bio_release_page(bio, page); + bytes -= n; + offs = 0; + } diff --git a/queue-6.5/bpf-fix-issue-in-verifying-allow_ptr_leaks.patch b/queue-6.5/bpf-fix-issue-in-verifying-allow_ptr_leaks.patch new file mode 100644 index 00000000000..8db681d3829 --- /dev/null +++ b/queue-6.5/bpf-fix-issue-in-verifying-allow_ptr_leaks.patch @@ -0,0 +1,90 @@ +From d75e30dddf73449bc2d10bb8e2f1a2c446bc67a2 Mon Sep 17 00:00:00 2001 +From: Yafang Shao +Date: Wed, 23 Aug 2023 02:07:02 +0000 +Subject: bpf: Fix issue in verifying allow_ptr_leaks + +From: Yafang Shao + +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 +Suggested-by: Alexei Starovoitov +Signed-off-by: Yafang Shao +Acked-by: Eduard Zingerman +Cc: stable@vger.kernel.org +Link: https://lore.kernel.org/r/20230823020703.3790-2-laoar.shao@gmail.com +Signed-off-by: Alexei Starovoitov +Signed-off-by: Greg Kroah-Hartman +--- + kernel/bpf/verifier.c | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +--- a/kernel/bpf/verifier.c ++++ b/kernel/bpf/verifier.c +@@ -13816,6 +13816,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 = ®s[insn->dst_reg]; + if (BPF_SRC(insn->code) == BPF_X) { + if (insn->imm != 0) { + verbose(env, "BPF_JMP/JMP32 uses reserved fields\n"); +@@ -13827,12 +13833,13 @@ static int check_cond_jmp_op(struct bpf_ + if (err) + return err; + +- if (is_pointer_value(env, insn->src_reg)) { ++ src_reg = ®s[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 = ®s[insn->src_reg]; + } else { + if (insn->src_reg != BPF_REG_0) { + verbose(env, "BPF_JMP/JMP32 uses reserved fields\n"); +@@ -13840,12 +13847,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 = ®s[insn->dst_reg]; + is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32; + + if (BPF_SRC(insn->code) == BPF_K) { diff --git a/queue-6.5/drm-amd-display-add-smu-write-msg-id-fail-retry-process.patch b/queue-6.5/drm-amd-display-add-smu-write-msg-id-fail-retry-process.patch new file mode 100644 index 00000000000..cafc216acc7 --- /dev/null +++ b/queue-6.5/drm-amd-display-add-smu-write-msg-id-fail-retry-process.patch @@ -0,0 +1,69 @@ +From 72105dcfa3d12b5af49311f857e3490baa225135 Mon Sep 17 00:00:00 2001 +From: Fudong Wang +Date: Fri, 11 Aug 2023 08:24:59 +0800 +Subject: drm/amd/display: Add smu write msg id fail retry process + +From: Fudong Wang + +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 +Acked-by: Hamza Mahfooz +Signed-off-by: Fudong Wang +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman +--- + 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.5/dt-bindings-pci-qcom-fix-sdx65-compatible.patch b/queue-6.5/dt-bindings-pci-qcom-fix-sdx65-compatible.patch new file mode 100644 index 00000000000..31f33fbc95a --- /dev/null +++ b/queue-6.5/dt-bindings-pci-qcom-fix-sdx65-compatible.patch @@ -0,0 +1,65 @@ +From 15d63a897f79f465d71fb55cc11c6b7e20c19391 Mon Sep 17 00:00:00 2001 +From: Krzysztof Kozlowski +Date: Sun, 27 Aug 2023 10:53:51 +0200 +Subject: dt-bindings: PCI: qcom: Fix SDX65 compatible +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Krzysztof Kozlowski + +commit 15d63a897f79f465d71fb55cc11c6b7e20c19391 upstream. + +Commit c0aba9f32801 ("dt-bindings: PCI: qcom: Add SDX65 SoC") adding +SDX65 was never tested and is clearly bogus. The qcom,sdx65-pcie-ep +compatible is followed by a fallback in DTS, and there is no driver +matched by this compatible. Driver matches by its fallback +qcom,sdx55-pcie-ep. This also fixes dtbs_check warnings like: + + qcom-sdx65-mtp.dtb: pcie-ep@1c00000: compatible: ['qcom,sdx65-pcie-ep', 'qcom,sdx55-pcie-ep'] is too long + +[kwilczynski: commit log] +Fixes: c0aba9f32801 ("dt-bindings: PCI: qcom: Add SDX65 SoC") +Link: https://lore.kernel.org/linux-pci/20230827085351.21932-1-krzysztof.kozlowski@linaro.org +Signed-off-by: Krzysztof Kozlowski +Signed-off-by: Krzysztof Wilczyński +Acked-by: Conor Dooley +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman +--- + .../devicetree/bindings/pci/qcom,pcie-ep.yaml | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/Documentation/devicetree/bindings/pci/qcom,pcie-ep.yaml b/Documentation/devicetree/bindings/pci/qcom,pcie-ep.yaml +index 811112255d7d..c94b49498f69 100644 +--- a/Documentation/devicetree/bindings/pci/qcom,pcie-ep.yaml ++++ b/Documentation/devicetree/bindings/pci/qcom,pcie-ep.yaml +@@ -11,10 +11,13 @@ maintainers: + + properties: + compatible: +- enum: +- - qcom,sdx55-pcie-ep +- - qcom,sdx65-pcie-ep +- - qcom,sm8450-pcie-ep ++ oneOf: ++ - enum: ++ - qcom,sdx55-pcie-ep ++ - qcom,sm8450-pcie-ep ++ - items: ++ - const: qcom,sdx65-pcie-ep ++ - const: qcom,sdx55-pcie-ep + + reg: + items: +@@ -110,7 +113,6 @@ allOf: + contains: + enum: + - qcom,sdx55-pcie-ep +- - qcom,sdx65-pcie-ep + then: + properties: + clocks: +-- +2.42.0 + diff --git a/queue-6.5/media-dvb-symbol-fixup-for-dvb_attach.patch b/queue-6.5/media-dvb-symbol-fixup-for-dvb_attach.patch new file mode 100644 index 00000000000..506ab0528ed --- /dev/null +++ b/queue-6.5/media-dvb-symbol-fixup-for-dvb_attach.patch @@ -0,0 +1,1297 @@ +From 86495af1171e1feec79faa9b64c05c89f46e41d1 Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Fri, 8 Sep 2023 10:20:36 +0100 +Subject: media: dvb: symbol fixup for dvb_attach() + +From: Greg Kroah-Hartman + +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 +Reported-by: Stefan Lippers-Hollmann +Cc: Mauro Carvalho Chehab +Cc: Christoph Hellwig +Cc: linux-media@vger.kernel.org +Cc: linux-modules@vger.kernel.org +Acked-by: Luis Chamberlain +Acked-by: Hans Verkuil +Link: https://lore.kernel.org/r/20230908092035.3815268-2-gregkh@linuxfoundation.org +Signed-off-by: Greg Kroah-Hartman +--- + 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 +- + drivers/staging/media/av7110/sp8870.c | 2 +- + 106 files changed, 113 insertions(+), 113 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 "); +--- 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 "); + 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 "); + MODULE_AUTHOR("Olivier Grenie "); +--- 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 "); + 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 +@@ -12372,7 +12372,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) + { +--- 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 "); +--- 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 "); + 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 "); +--- 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 +@@ -927,7 +927,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 "); +--- 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 +@@ -1851,6 +1851,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 +@@ -2078,7 +2078,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 +@@ -5071,7 +5071,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 +@@ -467,7 +467,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 "); +--- 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 "); +--- 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 "); +--- 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 "); + 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) + { +--- 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 +@@ -4120,7 +4120,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 "); +--- 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 "); +--- 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 "); +--- 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"); +--- a/drivers/staging/media/av7110/sp8870.c ++++ b/drivers/staging/media/av7110/sp8870.c +@@ -606,4 +606,4 @@ MODULE_DESCRIPTION("Spase SP8870 DVB-T D + MODULE_AUTHOR("Juergen Peitz"); + MODULE_LICENSE("GPL"); + +-EXPORT_SYMBOL(sp8870_attach); ++EXPORT_SYMBOL_GPL(sp8870_attach); diff --git a/queue-6.5/media-nxp-fix-wrong-return-pointer-check-in-mxc_isi_crossbar_init.patch b/queue-6.5/media-nxp-fix-wrong-return-pointer-check-in-mxc_isi_crossbar_init.patch new file mode 100644 index 00000000000..3d2524f9d0f --- /dev/null +++ b/queue-6.5/media-nxp-fix-wrong-return-pointer-check-in-mxc_isi_crossbar_init.patch @@ -0,0 +1,34 @@ +From 4b60db99babad0254129ddc58e0927ffa9e93e35 Mon Sep 17 00:00:00 2001 +From: Yang Yingliang +Date: Tue, 25 Jul 2023 21:00:24 +0800 +Subject: media: nxp: Fix wrong return pointer check in mxc_isi_crossbar_init() + +From: Yang Yingliang + +commit 4b60db99babad0254129ddc58e0927ffa9e93e35 upstream. + +It should check 'xbar->inputs', when allocate memory for it. + +Cc: stable@vger.kernel.org +Fixes: cf21f328fcaf ("media: nxp: Add i.MX8 ISI driver") +Signed-off-by: Yang Yingliang +Reviewed-by: Fabio Estevam +Reviewed-by: Laurent Pinchart +Signed-off-by: Laurent Pinchart +Signed-off-by: Hans Verkuil +Signed-off-by: Greg Kroah-Hartman +--- + drivers/media/platform/nxp/imx8-isi/imx8-isi-crossbar.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-crossbar.c ++++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-crossbar.c +@@ -483,7 +483,7 @@ int mxc_isi_crossbar_init(struct mxc_isi + + xbar->inputs = kcalloc(xbar->num_sinks, sizeof(*xbar->inputs), + GFP_KERNEL); +- if (!xbar->pads) { ++ if (!xbar->inputs) { + ret = -ENOMEM; + goto err_free; + } diff --git a/queue-6.5/media-venus-hfi_venus-write-to-vidc_ctrl_init-after-unmasking-interrupts.patch b/queue-6.5/media-venus-hfi_venus-write-to-vidc_ctrl_init-after-unmasking-interrupts.patch new file mode 100644 index 00000000000..e8c5af7ed46 --- /dev/null +++ b/queue-6.5/media-venus-hfi_venus-write-to-vidc_ctrl_init-after-unmasking-interrupts.patch @@ -0,0 +1,42 @@ +From d74e481609808330b4625b3691cf01e1f56e255e Mon Sep 17 00:00:00 2001 +From: Konrad Dybcio +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 + +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 +Signed-off-by: Stanimir Varbanov +Signed-off-by: Hans Verkuil +Signed-off-by: Greg Kroah-Hartman +--- + 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.5/misc-fastrpc-pass-proper-scm-arguments-for-static-process-init.patch b/queue-6.5/misc-fastrpc-pass-proper-scm-arguments-for-static-process-init.patch new file mode 100644 index 00000000000..db873930b22 --- /dev/null +++ b/queue-6.5/misc-fastrpc-pass-proper-scm-arguments-for-static-process-init.patch @@ -0,0 +1,55 @@ +From fe6518d547fc52ba74201018dc9aeb364072ac78 Mon Sep 17 00:00:00 2001 +From: Ekansh Gupta +Date: Fri, 11 Aug 2023 12:56:43 +0100 +Subject: misc: fastrpc: Pass proper scm arguments for static process init + +From: Ekansh Gupta + +commit fe6518d547fc52ba74201018dc9aeb364072ac78 upstream. + +Memory is allocated for dynamic loading when audio daemon is trying +to attach to audioPD on DSP side. This memory is allocated from +reserved CMA memory region and needs ownership assignment to +new VMID in order to use it from audioPD. + +In the current implementation, arguments are not correctly passed +to the scm call which might result in failure of dynamic loading +on audioPD. Added changes to pass correct arguments during daemon +attach request. + +Fixes: 0871561055e6 ("misc: fastrpc: Add support for audiopd") +Cc: stable +Tested-by: Ekansh Gupta +Signed-off-by: Ekansh Gupta +Signed-off-by: Srinivas Kandagatla +Link: https://lore.kernel.org/r/20230811115643.38578-4-srinivas.kandagatla@linaro.org +Signed-off-by: Greg Kroah-Hartman +--- + drivers/misc/fastrpc.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +--- a/drivers/misc/fastrpc.c ++++ b/drivers/misc/fastrpc.c +@@ -1322,13 +1322,18 @@ static int fastrpc_init_create_static_pr + return 0; + err_invoke: + if (fl->cctx->vmcount) { +- struct qcom_scm_vmperm perm; ++ u64 src_perms = 0; ++ struct qcom_scm_vmperm dst_perms; ++ u32 i; + +- perm.vmid = QCOM_SCM_VMID_HLOS; +- perm.perm = QCOM_SCM_PERM_RWX; ++ for (i = 0; i < fl->cctx->vmcount; i++) ++ src_perms |= BIT(fl->cctx->vmperms[i].vmid); ++ ++ dst_perms.vmid = QCOM_SCM_VMID_HLOS; ++ dst_perms.perm = QCOM_SCM_PERM_RWX; + err = qcom_scm_assign_mem(fl->cctx->remote_heap->phys, + (u64)fl->cctx->remote_heap->size, +- &fl->cctx->perms, &perm, 1); ++ &src_perms, &dst_perms, 1); + if (err) + dev_err(fl->sctx->dev, "Failed to assign memory phys 0x%llx size 0x%llx err %d", + fl->cctx->remote_heap->phys, fl->cctx->remote_heap->size, err); diff --git a/queue-6.5/ntb-clean-up-tx-tail-index-on-link-down.patch b/queue-6.5/ntb-clean-up-tx-tail-index-on-link-down.patch new file mode 100644 index 00000000000..24b1bb220b0 --- /dev/null +++ b/queue-6.5/ntb-clean-up-tx-tail-index-on-link-down.patch @@ -0,0 +1,58 @@ +From cc79bd2738c2d40aba58b2be6ce47dc0e471df0e Mon Sep 17 00:00:00 2001 +From: Dave Jiang +Date: Tue, 22 Aug 2023 09:04:45 -0700 +Subject: ntb: Clean up tx tail index on link down + +From: Dave Jiang + +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 +Tested-by: Yuan Y Lu +Reviewed-by: Logan Gunthorpe +Signed-off-by: Dave Jiang +Signed-off-by: Jon Mason +Signed-off-by: Greg Kroah-Hartman +--- + 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.5/ntb-drop-packets-when-qp-link-is-down.patch b/queue-6.5/ntb-drop-packets-when-qp-link-is-down.patch new file mode 100644 index 00000000000..9fdf11fe226 --- /dev/null +++ b/queue-6.5/ntb-drop-packets-when-qp-link-is-down.patch @@ -0,0 +1,42 @@ +From f195a1a6fe416882984f8bd6c61afc1383171860 Mon Sep 17 00:00:00 2001 +From: Dave Jiang +Date: Tue, 22 Aug 2023 09:04:51 -0700 +Subject: ntb: Drop packets when qp link is down + +From: Dave Jiang + +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 +Tested-by: Yuan Y Lu +Reviewed-by: Logan Gunthorpe +Signed-off-by: Dave Jiang +Signed-off-by: Jon Mason +Signed-off-by: Greg Kroah-Hartman +--- + 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.5/ntb-fix-calculation-ntb_transport_tx_free_entry.patch b/queue-6.5/ntb-fix-calculation-ntb_transport_tx_free_entry.patch new file mode 100644 index 00000000000..47c81b27a09 --- /dev/null +++ b/queue-6.5/ntb-fix-calculation-ntb_transport_tx_free_entry.patch @@ -0,0 +1,35 @@ +From 5a7693e6bbf19b22fd6c1d2c4b7beb0a03969e2c Mon Sep 17 00:00:00 2001 +From: Dave Jiang +Date: Tue, 22 Aug 2023 09:04:57 -0700 +Subject: ntb: Fix calculation ntb_transport_tx_free_entry() + +From: Dave Jiang + +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 +Signed-off-by: renlonglong +Signed-off-by: Dave Jiang +Signed-off-by: Jon Mason +Signed-off-by: Greg Kroah-Hartman +--- + 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.5/parisc-fix-proc-cpuinfo-output-for-lscpu.patch b/queue-6.5/parisc-fix-proc-cpuinfo-output-for-lscpu.patch new file mode 100644 index 00000000000..eeabdcd4097 --- /dev/null +++ b/queue-6.5/parisc-fix-proc-cpuinfo-output-for-lscpu.patch @@ -0,0 +1,61 @@ +From 9f5ba4b3e1b3c123eeca5d2d09161e8720048b5c Mon Sep 17 00:00:00 2001 +From: Helge Deller +Date: Fri, 18 Aug 2023 22:48:04 +0200 +Subject: parisc: Fix /proc/cpuinfo output for lscpu + +From: Helge Deller + +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 +Cc: # v4.9+ +Signed-off-by: Greg Kroah-Hartman +--- + 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 +@@ -378,10 +378,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 +@@ -426,8 +434,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.5/pci-free-released-resource-after-coalescing.patch b/queue-6.5/pci-free-released-resource-after-coalescing.patch new file mode 100644 index 00000000000..ec1206e7b68 --- /dev/null +++ b/queue-6.5/pci-free-released-resource-after-coalescing.patch @@ -0,0 +1,35 @@ +From 8ec9c1d5d0a5a4744516adb483b97a238892f9d5 Mon Sep 17 00:00:00 2001 +From: Ross Lagerwall +Date: Wed, 6 Sep 2023 12:08:46 +0100 +Subject: PCI: Free released resource after coalescing + +From: Ross Lagerwall + +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 +Tested-by: Kalle Valo +Signed-off-by: Ross Lagerwall +Signed-off-by: Bjorn Helgaas +Cc: stable@vger.kernel.org # v5.16+ +Signed-off-by: Greg Kroah-Hartman +--- + drivers/pci/probe.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/pci/probe.c ++++ b/drivers/pci/probe.c +@@ -998,6 +998,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.5/pci-hv-fix-a-crash-in-hv_pci_restore_msi_msg-during-hibernation.patch b/queue-6.5/pci-hv-fix-a-crash-in-hv_pci_restore_msi_msg-during-hibernation.patch new file mode 100644 index 00000000000..0ecc815d05c --- /dev/null +++ b/queue-6.5/pci-hv-fix-a-crash-in-hv_pci_restore_msi_msg-during-hibernation.patch @@ -0,0 +1,41 @@ +From 04bbe863241a9be7d57fb4cf217ee4a72f480e70 Mon Sep 17 00:00:00 2001 +From: Dexuan Cui +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 + +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 +Signed-off-by: Lorenzo Pieralisi +Reviewed-by: sathyanarayanan.kuppuswamy@linux.intel.com +Reviewed-by: Michael Kelley +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman +--- + 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 +@@ -3983,6 +3983,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.5/pci-pm-only-read-pci_pm_ctrl-register-when-available.patch b/queue-6.5/pci-pm-only-read-pci_pm_ctrl-register-when-available.patch new file mode 100644 index 00000000000..c26d75cdf1e --- /dev/null +++ b/queue-6.5/pci-pm-only-read-pci_pm_ctrl-register-when-available.patch @@ -0,0 +1,73 @@ +From 5694ba13b004eea683c6d4faeb6d6e7a9636bda0 Mon Sep 17 00:00:00 2001 +From: Feiyang Chen +Date: Thu, 24 Aug 2023 09:37:38 +0800 +Subject: PCI/PM: Only read PCI_PM_CTRL register when available + +From: Feiyang Chen + +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 +Signed-off-by: Bjorn Helgaas +Reviewed-by: "Rafael J. Wysocki" +Cc: stable@vger.kernel.org # v5.19+ +Signed-off-by: Greg Kroah-Hartman +--- + drivers/pci/pci.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +--- a/drivers/pci/pci.c ++++ b/drivers/pci/pci.c +@@ -1226,6 +1226,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) + { +@@ -1242,9 +1246,6 @@ int pci_power_up(struct pci_dev *dev) + else + dev->current_state = state; + +- if (state == PCI_D0) +- return 0; +- + return -EIO; + } + +@@ -1302,8 +1303,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.5/procfs-block-chmod-on-proc-thread-self-comm.patch b/queue-6.5/procfs-block-chmod-on-proc-thread-self-comm.patch new file mode 100644 index 00000000000..1cda33a3b7e --- /dev/null +++ b/queue-6.5/procfs-block-chmod-on-proc-thread-self-comm.patch @@ -0,0 +1,42 @@ +From ccf61486fe1e1a48e18c638d1813cda77b3c0737 Mon Sep 17 00:00:00 2001 +From: Aleksa Sarai +Date: Fri, 14 Jul 2023 00:09:58 +1000 +Subject: procfs: block chmod on /proc/thread-self/comm + +From: Aleksa Sarai + +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// files") +Fixes: 1b3044e39a89 ("procfs: fix pthread cross-thread naming if !PR_DUMPABLE") +Cc: stable@vger.kernel.org # v4.7+ +Signed-off-by: Aleksa Sarai +Message-Id: <20230713141001.27046-1-cyphar@cyphar.com> +Signed-off-by: Christian Brauner +Signed-off-by: Greg Kroah-Hartman +--- + fs/proc/base.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/fs/proc/base.c ++++ b/fs/proc/base.c +@@ -3583,7 +3583,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.5/revert-pci-mark-nvidia-t4-gpus-to-avoid-bus-reset.patch b/queue-6.5/revert-pci-mark-nvidia-t4-gpus-to-avoid-bus-reset.patch new file mode 100644 index 00000000000..0344547d82f --- /dev/null +++ b/queue-6.5/revert-pci-mark-nvidia-t4-gpus-to-avoid-bus-reset.patch @@ -0,0 +1,42 @@ +From 5260bd6d36c83c5b269c33baaaf8c78e520908b0 Mon Sep 17 00:00:00 2001 +From: Bjorn Helgaas +Date: Fri, 8 Sep 2023 14:55:30 -0500 +Subject: Revert "PCI: Mark NVIDIA T4 GPUs to avoid bus reset" + +From: Bjorn Helgaas + +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 +Signed-off-by: Greg Kroah-Hartman +--- + drivers/pci/quirks.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/pci/quirks.c ++++ b/drivers/pci/quirks.c +@@ -3724,7 +3724,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.5/revert-scsi-qla2xxx-fix-buffer-overrun.patch b/queue-6.5/revert-scsi-qla2xxx-fix-buffer-overrun.patch new file mode 100644 index 00000000000..dc0d09c96df --- /dev/null +++ b/queue-6.5/revert-scsi-qla2xxx-fix-buffer-overrun.patch @@ -0,0 +1,33 @@ +From 641671d97b9199f1ba35ccc2222d4b189a6a5de5 Mon Sep 17 00:00:00 2001 +From: Nilesh Javali +Date: Mon, 21 Aug 2023 18:30:44 +0530 +Subject: Revert "scsi: qla2xxx: Fix buffer overrun" + +From: Nilesh Javali + +commit 641671d97b9199f1ba35ccc2222d4b189a6a5de5 upstream. + +Revert due to Get PLOGI Template failed. +This reverts commit b68710a8094fdffe8dd4f7a82c82649f479bb453. + +Cc: stable@vger.kernel.org +Signed-off-by: Nilesh Javali +Link: https://lore.kernel.org/r/20230821130045.34850-9-njavali@marvell.com +Reviewed-by: Himanshu Madhani +Signed-off-by: Martin K. Petersen +Signed-off-by: Greg Kroah-Hartman +--- + 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 +@@ -5549,7 +5549,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.5/scsi-mpt3sas-perform-additional-retries-if-doorbell-read-returns-0.patch b/queue-6.5/scsi-mpt3sas-perform-additional-retries-if-doorbell-read-returns-0.patch new file mode 100644 index 00000000000..1c3af9eb923 --- /dev/null +++ b/queue-6.5/scsi-mpt3sas-perform-additional-retries-if-doorbell-read-returns-0.patch @@ -0,0 +1,182 @@ +From 4ca10f3e31745d35249a727ecd108eb58f0a8c5e Mon Sep 17 00:00:00 2001 +From: Ranjan Kumar +Date: Tue, 29 Aug 2023 14:30:19 +0530 +Subject: scsi: mpt3sas: Perform additional retries if doorbell read returns 0 + +From: Ranjan Kumar + +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 +Link: https://lore.kernel.org/r/20230829090020.5417-2-ranjan.kumar@broadcom.com +Signed-off-by: Martin K. Petersen +Signed-off-by: Greg Kroah-Hartman +--- + 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 +@@ -138,6 +138,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 +@@ -213,6 +216,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) + { +@@ -940,7 +957,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); +@@ -6686,7 +6703,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; + } +@@ -6831,7 +6848,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); +@@ -6871,7 +6888,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", +@@ -7019,7 +7036,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; + } +@@ -7068,7 +7085,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))) { +@@ -7076,7 +7093,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); + +@@ -7087,10 +7104,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); + } +@@ -7949,7 +7966,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)); +@@ -7969,7 +7986,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, +@@ -8359,10 +8376,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; diff --git a/queue-6.5/series b/queue-6.5/series index 70d051a93a8..f4cc7be53fa 100644 --- a/queue-6.5/series +++ b/queue-6.5/series @@ -671,3 +671,23 @@ alsa-usb-audio-fix-potential-memory-leaks-at-error-path-for-ump-open.patch alsa-seq-fix-snd_seq_expand_var_event-call-to-user-space.patch alsa-hda-cirrus-fix-broken-audio-on-hardware-with-two-cs42l42-codecs.patch selftests-landlock-fix-a-resource-leak.patch +media-dvb-symbol-fixup-for-dvb_attach.patch +media-venus-hfi_venus-write-to-vidc_ctrl_init-after-unmasking-interrupts.patch +media-nxp-fix-wrong-return-pointer-check-in-mxc_isi_crossbar_init.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 +dt-bindings-pci-qcom-fix-sdx65-compatible.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-fix-pin-count-management-when-merging-same-page-segments.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 +misc-fastrpc-pass-proper-scm-arguments-for-static-process-init.patch +drm-amd-display-add-smu-write-msg-id-fail-retry-process.patch +bpf-fix-issue-in-verifying-allow_ptr_leaks.patch