From: Greg Kroah-Hartman Date: Mon, 7 Mar 2022 16:17:20 +0000 (+0100) Subject: drop queue-5.15/bpf-arm64-use-emit_addr_mov_i64-for-bpf_pseudo_func.patch and queue... X-Git-Tag: v4.9.305~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1f8853bd2f9d8bf00d95a4717c005de522168fe7;p=thirdparty%2Fkernel%2Fstable-queue.git drop queue-5.15/bpf-arm64-use-emit_addr_mov_i64-for-bpf_pseudo_func.patch and queue-5.15/drm-mediatek-mtk_dsi-avoid-eprobe_defer-loop-with-ex.patch --- diff --git a/queue-5.15/bpf-arm64-use-emit_addr_mov_i64-for-bpf_pseudo_func.patch b/queue-5.15/bpf-arm64-use-emit_addr_mov_i64-for-bpf_pseudo_func.patch deleted file mode 100644 index bf002988a21..00000000000 --- a/queue-5.15/bpf-arm64-use-emit_addr_mov_i64-for-bpf_pseudo_func.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 53a9337e96db2364cceb9f409f78256373b83800 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 31 Dec 2021 23:10:18 +0800 -Subject: bpf, arm64: Use emit_addr_mov_i64() for BPF_PSEUDO_FUNC - -From: Hou Tao - -[ Upstream commit e4a41c2c1fa916547e63440c73a51a5eb06247af ] - -The following error is reported when running "./test_progs -t for_each" -under arm64: - - bpf_jit: multi-func JIT bug 58 != 56 - [...] - JIT doesn't support bpf-to-bpf calls - -The root cause is the size of BPF_PSEUDO_FUNC instruction increases -from 2 to 3 after the address of called bpf-function is settled and -there are two bpf-to-bpf calls in test_pkt_access. The generated -instructions are shown below: - - 0x48: 21 00 C0 D2 movz x1, #0x1, lsl #32 - 0x4c: 21 00 80 F2 movk x1, #0x1 - - 0x48: E1 3F C0 92 movn x1, #0x1ff, lsl #32 - 0x4c: 41 FE A2 F2 movk x1, #0x17f2, lsl #16 - 0x50: 81 70 9F F2 movk x1, #0xfb84 - -Fixing it by using emit_addr_mov_i64() for BPF_PSEUDO_FUNC, so -the size of jited image will not change. - -Fixes: 69c087ba6225 ("bpf: Add bpf_for_each_map_elem() helper") -Signed-off-by: Hou Tao -Signed-off-by: Daniel Borkmann -Link: https://lore.kernel.org/bpf/20211231151018.3781550-1-houtao1@huawei.com -Signed-off-by: Sasha Levin ---- - arch/arm64/net/bpf_jit_comp.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c -index 465c44d0c72fc..3d7381ffc1712 100644 ---- a/arch/arm64/net/bpf_jit_comp.c -+++ b/arch/arm64/net/bpf_jit_comp.c -@@ -788,7 +788,10 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, - u64 imm64; - - imm64 = (u64)insn1.imm << 32 | (u32)imm; -- emit_a64_mov_i64(dst, imm64, ctx); -+ if (bpf_pseudo_func(insn)) -+ emit_addr_mov_i64(dst, imm64, ctx); -+ else -+ emit_a64_mov_i64(dst, imm64, ctx); - - return 1; - } --- -2.34.1 - diff --git a/queue-5.15/drm-mediatek-mtk_dsi-avoid-eprobe_defer-loop-with-ex.patch b/queue-5.15/drm-mediatek-mtk_dsi-avoid-eprobe_defer-loop-with-ex.patch deleted file mode 100644 index 32489dfce12..00000000000 --- a/queue-5.15/drm-mediatek-mtk_dsi-avoid-eprobe_defer-loop-with-ex.patch +++ /dev/null @@ -1,268 +0,0 @@ -From 460c08e7fbc77dbfe90b71ecd174041ef795413f Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 31 Jan 2022 09:55:20 +0100 -Subject: drm/mediatek: mtk_dsi: Avoid EPROBE_DEFER loop with external bridge -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: AngeloGioacchino Del Regno - -[ Upstream commit 647474b8d980256b26b1cd112d7333a4dbd4260a ] - -DRM bridge drivers are now attaching their DSI device at probe time, -which requires us to register our DSI host in order to let the bridge -to probe: this recently started producing an endless -EPROBE_DEFER -loop on some machines that are using external bridges, like the -parade-ps8640, found on the ACER Chromebook R13. - -Now that the DSI hosts/devices probe sequence is documented, we can -do adjustments to the mtk_dsi driver as to both fix now and make sure -to avoid this situation in the future: for this, following what is -documented in drm_bridge.c, move the mtk_dsi component_add() to the -mtk_dsi_ops.attach callback and delete it in the detach callback; -keeping in mind that we are registering a drm_bridge for our DSI, -which is only used/attached if the DSI Host is bound, it wouldn't -make sense to keep adding our bridge at probe time (as it would -be useless to have it if mtk_dsi_ops.attach() fails!), so also move -that one to the dsi host attach function (and remove it in detach). - -Cc: # 5.15.x -Signed-off-by: AngeloGioacchino Del Regno -Reviewed-by: Andrzej Hajda -Reviewed-by: Jagan Teki -Tested-by: Nícolas F. R. A. Prado -Signed-off-by: Chun-Kuang Hu -Signed-off-by: Sasha Levin ---- - drivers/gpu/drm/mediatek/mtk_dsi.c | 167 +++++++++++++++-------------- - 1 file changed, 84 insertions(+), 83 deletions(-) - -diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c -index 5d90d2eb00193..bced4c7d668e3 100644 ---- a/drivers/gpu/drm/mediatek/mtk_dsi.c -+++ b/drivers/gpu/drm/mediatek/mtk_dsi.c -@@ -786,18 +786,101 @@ void mtk_dsi_ddp_stop(struct device *dev) - mtk_dsi_poweroff(dsi); - } - -+static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi) -+{ -+ int ret; -+ -+ ret = drm_simple_encoder_init(drm, &dsi->encoder, -+ DRM_MODE_ENCODER_DSI); -+ if (ret) { -+ DRM_ERROR("Failed to encoder init to drm\n"); -+ return ret; -+ } -+ -+ dsi->encoder.possible_crtcs = mtk_drm_find_possible_crtc_by_comp(drm, dsi->host.dev); -+ -+ ret = drm_bridge_attach(&dsi->encoder, &dsi->bridge, NULL, -+ DRM_BRIDGE_ATTACH_NO_CONNECTOR); -+ if (ret) -+ goto err_cleanup_encoder; -+ -+ dsi->connector = drm_bridge_connector_init(drm, &dsi->encoder); -+ if (IS_ERR(dsi->connector)) { -+ DRM_ERROR("Unable to create bridge connector\n"); -+ ret = PTR_ERR(dsi->connector); -+ goto err_cleanup_encoder; -+ } -+ drm_connector_attach_encoder(dsi->connector, &dsi->encoder); -+ -+ return 0; -+ -+err_cleanup_encoder: -+ drm_encoder_cleanup(&dsi->encoder); -+ return ret; -+} -+ -+static int mtk_dsi_bind(struct device *dev, struct device *master, void *data) -+{ -+ int ret; -+ struct drm_device *drm = data; -+ struct mtk_dsi *dsi = dev_get_drvdata(dev); -+ -+ ret = mtk_dsi_encoder_init(drm, dsi); -+ if (ret) -+ return ret; -+ -+ return device_reset_optional(dev); -+} -+ -+static void mtk_dsi_unbind(struct device *dev, struct device *master, -+ void *data) -+{ -+ struct mtk_dsi *dsi = dev_get_drvdata(dev); -+ -+ drm_encoder_cleanup(&dsi->encoder); -+} -+ -+static const struct component_ops mtk_dsi_component_ops = { -+ .bind = mtk_dsi_bind, -+ .unbind = mtk_dsi_unbind, -+}; -+ - static int mtk_dsi_host_attach(struct mipi_dsi_host *host, - struct mipi_dsi_device *device) - { - struct mtk_dsi *dsi = host_to_dsi(host); -+ struct device *dev = host->dev; -+ int ret; - - dsi->lanes = device->lanes; - dsi->format = device->format; - dsi->mode_flags = device->mode_flags; -+ dsi->next_bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, 0); -+ if (IS_ERR(dsi->next_bridge)) -+ return PTR_ERR(dsi->next_bridge); -+ -+ drm_bridge_add(&dsi->bridge); -+ -+ ret = component_add(host->dev, &mtk_dsi_component_ops); -+ if (ret) { -+ DRM_ERROR("failed to add dsi_host component: %d\n", ret); -+ drm_bridge_remove(&dsi->bridge); -+ return ret; -+ } - - return 0; - } - -+static int mtk_dsi_host_detach(struct mipi_dsi_host *host, -+ struct mipi_dsi_device *device) -+{ -+ struct mtk_dsi *dsi = host_to_dsi(host); -+ -+ component_del(host->dev, &mtk_dsi_component_ops); -+ drm_bridge_remove(&dsi->bridge); -+ return 0; -+} -+ - static void mtk_dsi_wait_for_idle(struct mtk_dsi *dsi) - { - int ret; -@@ -938,73 +1021,14 @@ static ssize_t mtk_dsi_host_transfer(struct mipi_dsi_host *host, - - static const struct mipi_dsi_host_ops mtk_dsi_ops = { - .attach = mtk_dsi_host_attach, -+ .detach = mtk_dsi_host_detach, - .transfer = mtk_dsi_host_transfer, - }; - --static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi) --{ -- int ret; -- -- ret = drm_simple_encoder_init(drm, &dsi->encoder, -- DRM_MODE_ENCODER_DSI); -- if (ret) { -- DRM_ERROR("Failed to encoder init to drm\n"); -- return ret; -- } -- -- dsi->encoder.possible_crtcs = mtk_drm_find_possible_crtc_by_comp(drm, dsi->host.dev); -- -- ret = drm_bridge_attach(&dsi->encoder, &dsi->bridge, NULL, -- DRM_BRIDGE_ATTACH_NO_CONNECTOR); -- if (ret) -- goto err_cleanup_encoder; -- -- dsi->connector = drm_bridge_connector_init(drm, &dsi->encoder); -- if (IS_ERR(dsi->connector)) { -- DRM_ERROR("Unable to create bridge connector\n"); -- ret = PTR_ERR(dsi->connector); -- goto err_cleanup_encoder; -- } -- drm_connector_attach_encoder(dsi->connector, &dsi->encoder); -- -- return 0; -- --err_cleanup_encoder: -- drm_encoder_cleanup(&dsi->encoder); -- return ret; --} -- --static int mtk_dsi_bind(struct device *dev, struct device *master, void *data) --{ -- int ret; -- struct drm_device *drm = data; -- struct mtk_dsi *dsi = dev_get_drvdata(dev); -- -- ret = mtk_dsi_encoder_init(drm, dsi); -- if (ret) -- return ret; -- -- return device_reset_optional(dev); --} -- --static void mtk_dsi_unbind(struct device *dev, struct device *master, -- void *data) --{ -- struct mtk_dsi *dsi = dev_get_drvdata(dev); -- -- drm_encoder_cleanup(&dsi->encoder); --} -- --static const struct component_ops mtk_dsi_component_ops = { -- .bind = mtk_dsi_bind, -- .unbind = mtk_dsi_unbind, --}; -- - static int mtk_dsi_probe(struct platform_device *pdev) - { - struct mtk_dsi *dsi; - struct device *dev = &pdev->dev; -- struct drm_panel *panel; - struct resource *regs; - int irq_num; - int ret; -@@ -1021,19 +1045,6 @@ static int mtk_dsi_probe(struct platform_device *pdev) - return ret; - } - -- ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0, -- &panel, &dsi->next_bridge); -- if (ret) -- goto err_unregister_host; -- -- if (panel) { -- dsi->next_bridge = devm_drm_panel_bridge_add(dev, panel); -- if (IS_ERR(dsi->next_bridge)) { -- ret = PTR_ERR(dsi->next_bridge); -- goto err_unregister_host; -- } -- } -- - dsi->driver_data = of_device_get_match_data(dev); - - dsi->engine_clk = devm_clk_get(dev, "engine"); -@@ -1098,14 +1109,6 @@ static int mtk_dsi_probe(struct platform_device *pdev) - dsi->bridge.of_node = dev->of_node; - dsi->bridge.type = DRM_MODE_CONNECTOR_DSI; - -- drm_bridge_add(&dsi->bridge); -- -- ret = component_add(&pdev->dev, &mtk_dsi_component_ops); -- if (ret) { -- dev_err(&pdev->dev, "failed to add component: %d\n", ret); -- goto err_unregister_host; -- } -- - return 0; - - err_unregister_host: -@@ -1118,8 +1121,6 @@ static int mtk_dsi_remove(struct platform_device *pdev) - struct mtk_dsi *dsi = platform_get_drvdata(pdev); - - mtk_output_dsi_disable(dsi); -- drm_bridge_remove(&dsi->bridge); -- component_del(&pdev->dev, &mtk_dsi_component_ops); - mipi_dsi_host_unregister(&dsi->host); - - return 0; --- -2.34.1 - diff --git a/queue-5.15/series b/queue-5.15/series index 4f4adcc3157..3e8fa2ccc0f 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -45,7 +45,6 @@ nfsd-fix-zero-length-nfsv3-writes.patch io_uring-fix-no-lock-protection-for-ctx-cq_extra.patch tools-resolve_btf_ids-close-elf-file-on-error.patch mtd-spi-nor-fix-mtd-size-for-s3an-flashes.patch -bpf-arm64-use-emit_addr_mov_i64-for-bpf_pseudo_func.patch mips-fix-local_-add-sub-_return-on-mips64.patch signal-in-get_signal-test-for-signal_group_exit-ever.patch pci-mediatek-gen3-disable-dvfsrc-voltage-request.patch @@ -123,7 +122,6 @@ ibmvnic-don-t-release-napi-in-__ibmvnic_open.patch of-net-move-of_net-under-net.patch net-ethernet-litex-add-the-dependency-on-has_iomem.patch drm-mediatek-mtk_dsi-reset-the-dsi0-hardware.patch -drm-mediatek-mtk_dsi-avoid-eprobe_defer-loop-with-ex.patch cifs-protect-session-channel-fields-with-chan_lock.patch cifs-fix-confusing-unneeded-warning-message-on-smb2..patch drm-amd-display-fix-stream-link_enc-unassigned-durin.patch