From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CF28AC54EE9 for ; Tue, 20 Sep 2022 11:49:49 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D525E10E4E9; Tue, 20 Sep 2022 11:49:47 +0000 (UTC) Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2478110E4E9 for ; Tue, 20 Sep 2022 11:49:45 +0000 (UTC) Received: from localhost (unknown [IPv6:2a02:8010:65b5:0:bbb0:f8ec:7bc9:dbe4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: alarumbe) by madras.collabora.co.uk (Postfix) with ESMTPSA id C6B326601F6E; Tue, 20 Sep 2022 12:49:43 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1663674583; bh=4eTpa1Jd1zZfzcC0CqiMuqGI/ay0GGLs3hTXn9LuRHY=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=cc8Anwvu2FCYaWXxFePVBCyS9c3HTe/BeQahd1w1d6+WcozlUjALzKHNbv5zltVAw gWIjTzWlu37xujo0hW4KMPLsaKUlg0jNwvuGARBSZhmNPxnwusSFEmFwqDifK7BTIq hPi3R6vUZ4+X2ded3/zv9qSug5HvhVQB288b3e94hTkNXwRJf0fU32tRLzzpMiJF9u BximAd/Zp6igjRWuytB+kzuDthRjUgU2PhsfgIet8I9zEQsom2o0ZEVImafdIl4DDa INnU5yk6vMFWstABJJNBYKStKvXVWm2idgyfTi9x0XB8BgGfeYYpcxSFun6kIytsck USHsGplMy/NNg== Date: Tue, 20 Sep 2022 12:49:41 +0100 From: =?utf-8?Q?Adri=C3=A1n?= Larumbe To: Neil Armstrong Subject: Re: [PATCH 3/3] drm/meson: remove drm bridges at aggregate driver unbind time Message-ID: <20220920114941.32k5ifwgayahzvl5@sobremesa> References: <20220919010940.419893-1-adrian.larumbe@collabora.com> <20220919010940.419893-4-adrian.larumbe@collabora.com> <7d545acf-eeba-b81a-0935-f0b71e98a82a@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <7d545acf-eeba-b81a-0935-f0b71e98a82a@linaro.org> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: khilman@baylibre.com, linux-amlogic@lists.infradead.org, dri-devel@lists.freedesktop.org, narmstrong@baylibre.com Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On 19.09.2022 15:03, Neil Armstrong wrote: > On 19/09/2022 03:09, Adrián Larumbe wrote: > > drm bridges added by meson_encoder_hdmi_init and meson_encoder_cvbs_init > > were not manually removed at module unload time, which caused dangling > > references to freed memory to remain linked in the global bridge_list. > > > > When loading the driver modules back in, the same functions would again > > call drm_bridge_add, and when traversing the global bridge_list, would > > end up peeking into freed memory. > > > > Once again KASAN revealed the problem: > > > > [ +0.000095] ============================================================= > > [ +0.000008] BUG: KASAN: use-after-free in __list_add_valid+0x9c/0x120 > > [ +0.000018] Read of size 8 at addr ffff00003da291f0 by task modprobe/2483 > > > > [ +0.000018] CPU: 3 PID: 2483 Comm: modprobe Tainted: G C O 5.19.0-rc6-lrmbkasan+ #1 > > [ +0.000011] Hardware name: Hardkernel ODROID-N2Plus (DT) > > [ +0.000008] Call trace: > > [ +0.000006] dump_backtrace+0x1ec/0x280 > > [ +0.000012] show_stack+0x24/0x80 > > [ +0.000008] dump_stack_lvl+0x98/0xd4 > > [ +0.000011] print_address_description.constprop.0+0x80/0x520 > > [ +0.000011] print_report+0x128/0x260 > > [ +0.000008] kasan_report+0xb8/0xfc > > [ +0.000008] __asan_report_load8_noabort+0x3c/0x50 > > [ +0.000009] __list_add_valid+0x9c/0x120 > > [ +0.000009] drm_bridge_add+0x6c/0x104 [drm] > > [ +0.000165] dw_hdmi_probe+0x1900/0x2360 [dw_hdmi] > > [ +0.000022] meson_dw_hdmi_bind+0x520/0x814 [meson_dw_hdmi] > > [ +0.000014] component_bind+0x174/0x520 > > [ +0.000012] component_bind_all+0x1a8/0x38c > > [ +0.000010] meson_drv_bind_master+0x5e8/0xb74 [meson_drm] > > [ +0.000032] meson_drv_bind+0x20/0x2c [meson_drm] > > [ +0.000027] try_to_bring_up_aggregate_device+0x19c/0x390 > > [ +0.000010] component_master_add_with_match+0x1c8/0x284 > > [ +0.000009] meson_drv_probe+0x274/0x280 [meson_drm] > > [ +0.000026] platform_probe+0xd0/0x220 > > [ +0.000009] really_probe+0x3ac/0xa80 > > [ +0.000009] __driver_probe_device+0x1f8/0x400 > > [ +0.000009] driver_probe_device+0x68/0x1b0 > > [ +0.000009] __driver_attach+0x20c/0x480 > > [ +0.000008] bus_for_each_dev+0x114/0x1b0 > > [ +0.000009] driver_attach+0x48/0x64 > > [ +0.000008] bus_add_driver+0x390/0x564 > > [ +0.000009] driver_register+0x1a8/0x3e4 > > [ +0.000009] __platform_driver_register+0x6c/0x94 > > [ +0.000008] meson_drm_platform_driver_init+0x3c/0x1000 [meson_drm] > > [ +0.000027] do_one_initcall+0xc4/0x2b0 > > [ +0.000011] do_init_module+0x154/0x570 > > [ +0.000011] load_module+0x1a78/0x1ea4 > > [ +0.000008] __do_sys_init_module+0x184/0x1cc > > [ +0.000009] __arm64_sys_init_module+0x78/0xb0 > > [ +0.000009] invoke_syscall+0x74/0x260 > > [ +0.000009] el0_svc_common.constprop.0+0xcc/0x260 > > [ +0.000008] do_el0_svc+0x50/0x70 > > [ +0.000007] el0_svc+0x68/0x1a0 > > [ +0.000012] el0t_64_sync_handler+0x11c/0x150 > > [ +0.000008] el0t_64_sync+0x18c/0x190 > > > > [ +0.000016] Allocated by task 879: > > [ +0.000008] kasan_save_stack+0x2c/0x5c > > [ +0.000011] __kasan_kmalloc+0x90/0xd0 > > [ +0.000007] __kmalloc+0x278/0x4a0 > > [ +0.000011] mpi_resize+0x13c/0x1d0 > > [ +0.000011] mpi_powm+0xd24/0x1570 > > [ +0.000009] rsa_enc+0x1a4/0x30c > > [ +0.000009] pkcs1pad_verify+0x3f0/0x580 > > [ +0.000009] public_key_verify_signature+0x7a8/0xba4 > > [ +0.000010] public_key_verify_signature_2+0x40/0x60 > > [ +0.000008] verify_signature+0xb4/0x114 > > [ +0.000008] pkcs7_validate_trust_one.constprop.0+0x3b8/0x574 > > [ +0.000009] pkcs7_validate_trust+0xb8/0x15c > > [ +0.000008] verify_pkcs7_message_sig+0xec/0x1b0 > > [ +0.000012] verify_pkcs7_signature+0x78/0xac > > [ +0.000007] mod_verify_sig+0x110/0x190 > > [ +0.000009] module_sig_check+0x114/0x1e0 > > [ +0.000009] load_module+0xa0/0x1ea4 > > [ +0.000008] __do_sys_init_module+0x184/0x1cc > > [ +0.000008] __arm64_sys_init_module+0x78/0xb0 > > [ +0.000008] invoke_syscall+0x74/0x260 > > [ +0.000009] el0_svc_common.constprop.0+0x1a8/0x260 > > [ +0.000008] do_el0_svc+0x50/0x70 > > [ +0.000007] el0_svc+0x68/0x1a0 > > [ +0.000009] el0t_64_sync_handler+0x11c/0x150 > > [ +0.000009] el0t_64_sync+0x18c/0x190 > > > > [ +0.000013] Freed by task 2422: > > [ +0.000008] kasan_save_stack+0x2c/0x5c > > [ +0.000009] kasan_set_track+0x2c/0x40 > > [ +0.000007] kasan_set_free_info+0x28/0x50 > > [ +0.000009] ____kasan_slab_free+0x128/0x1d4 > > [ +0.000008] __kasan_slab_free+0x18/0x24 > > [ +0.000007] slab_free_freelist_hook+0x108/0x230 > > [ +0.000010] kfree+0x110/0x35c > > [ +0.000008] release_nodes+0xf0/0x16c > > [ +0.000009] devres_release_group+0x180/0x270 > > [ +0.000008] take_down_aggregate_device+0xcc/0x160 > > [ +0.000010] component_del+0x18c/0x360 > > [ +0.000009] meson_dw_hdmi_remove+0x28/0x40 [meson_dw_hdmi] > > [ +0.000013] platform_remove+0x64/0xb0 > > [ +0.000008] device_remove+0xb8/0x154 > > [ +0.000009] device_release_driver_internal+0x398/0x5b0 > > [ +0.000009] driver_detach+0xac/0x1b0 > > [ +0.000009] bus_remove_driver+0x158/0x29c > > [ +0.000008] driver_unregister+0x70/0xb0 > > [ +0.000009] platform_driver_unregister+0x20/0x2c > > [ +0.000007] meson_dw_hdmi_platform_driver_exit+0x1c/0x30 [meson_dw_hdmi] > > [ +0.000012] __do_sys_delete_module+0x288/0x400 > > [ +0.000009] __arm64_sys_delete_module+0x5c/0x80 > > [ +0.000009] invoke_syscall+0x74/0x260 > > [ +0.000008] el0_svc_common.constprop.0+0xcc/0x260 > > [ +0.000008] do_el0_svc+0x50/0x70 > > [ +0.000007] el0_svc+0x68/0x1a0 > > [ +0.000008] el0t_64_sync_handler+0x11c/0x150 > > [ +0.000009] el0t_64_sync+0x18c/0x190 > > > > [ +0.000013] The buggy address belongs to the object at ffff00003da29000 > > which belongs to the cache kmalloc-1k of size 1024 > > [ +0.000008] The buggy address is located 496 bytes inside of > > 1024-byte region [ffff00003da29000, ffff00003da29400) > > > > [ +0.000015] The buggy address belongs to the physical page: > > [ +0.000009] page:fffffc0000f68a00 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x3da28 > > [ +0.000012] head:fffffc0000f68a00 order:3 compound_mapcount:0 compound_pincount:0 > > [ +0.000009] flags: 0xffff00000010200(slab|head|node=0|zone=0|lastcpupid=0xffff) > > [ +0.000019] raw: 0ffff00000010200 fffffc0000eb5c08 fffffc0000d96608 ffff000000002a80 > > [ +0.000008] raw: 0000000000000000 00000000000a000a 00000001ffffffff 0000000000000000 > > [ +0.000008] page dumped because: kasan: bad access detected > > > > [ +0.000011] Memory state around the buggy address: > > [ +0.000009] ffff00003da29080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb > > [ +0.000007] ffff00003da29100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb > > [ +0.000007] >ffff00003da29180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb > > [ +0.000007] ^ > > [ +0.000008] ffff00003da29200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb > > [ +0.000006] ffff00003da29280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb > > [ +0.000007] ================================================================== > > > > Fix by keeping track of which encoders were initialised in the meson_drm > > structure and manually removing their bridges at aggregate driver's unbind > > time. > > > > Signed-off-by: Adrián Larumbe > > --- > > drivers/gpu/drm/meson/meson_drv.c | 4 ++++ > > drivers/gpu/drm/meson/meson_drv.h | 7 +++++++ > > drivers/gpu/drm/meson/meson_encoder_cvbs.c | 7 +++++++ > > drivers/gpu/drm/meson/meson_encoder_cvbs.h | 1 + > > drivers/gpu/drm/meson/meson_encoder_hdmi.c | 7 +++++++ > > drivers/gpu/drm/meson/meson_encoder_hdmi.h | 1 + > > drivers/gpu/drm/meson/meson_venc.h | 15 +++++++++++++++ > > 7 files changed, 42 insertions(+) > > > > diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c > > index f3da1c214a7c..2b47154b73c2 100644 > > --- a/drivers/gpu/drm/meson/meson_drv.c > > +++ b/drivers/gpu/drm/meson/meson_drv.c > > @@ -387,6 +387,10 @@ static void meson_drv_unbind(struct device *dev) > > drm_atomic_helper_shutdown(drm); > > free_irq(priv->vsync_irq, drm); > > drm_dev_put(drm); > > + > > + meson_encoder_hdmi_remove(priv); > > + meson_encoder_cvbs_remove(priv); > > + > > component_unbind_all(dev, drm); > > if (priv->afbcd.ops) > > diff --git a/drivers/gpu/drm/meson/meson_drv.h b/drivers/gpu/drm/meson/meson_drv.h > > index 177dac3ca3be..2cf279fb4f82 100644 > > --- a/drivers/gpu/drm/meson/meson_drv.h > > +++ b/drivers/gpu/drm/meson/meson_drv.h > > @@ -25,6 +25,12 @@ enum vpu_compatible { > > VPU_COMPATIBLE_G12A = 3, > > }; > > +enum { > > + MESON_ENC_CVBS = 0, > > + MESON_ENC_HDMI, > > + MESON_ENC_LAST, > > +}; > > + > > struct meson_drm_match_data { > > enum vpu_compatible compat; > > struct meson_afbcd_ops *afbcd_ops; > > @@ -51,6 +57,7 @@ struct meson_drm { > > struct drm_crtc *crtc; > > struct drm_plane *primary_plane; > > struct drm_plane *overlay_plane; > > + struct drm_encoder *encoders[MESON_ENC_LAST]; > > const struct meson_drm_soc_limits *limits; > > diff --git a/drivers/gpu/drm/meson/meson_encoder_cvbs.c b/drivers/gpu/drm/meson/meson_encoder_cvbs.c > > index 8110a6e39320..00c958b08065 100644 > > --- a/drivers/gpu/drm/meson/meson_encoder_cvbs.c > > +++ b/drivers/gpu/drm/meson/meson_encoder_cvbs.c > > @@ -281,5 +281,12 @@ int meson_encoder_cvbs_init(struct meson_drm *priv) > > } > > drm_connector_attach_encoder(connector, &meson_encoder_cvbs->encoder); > > + priv->encoders[MESON_ENC_CVBS] = &meson_encoder_cvbs->encoder; > > + > > return 0; > > } > > + > > +void meson_encoder_cvbs_remove(struct meson_drm *priv) > > +{ > > + REMOVE_ENCODER_BRIDGES(cvbs, MESON_ENC_CVBS); > > +} > > diff --git a/drivers/gpu/drm/meson/meson_encoder_cvbs.h b/drivers/gpu/drm/meson/meson_encoder_cvbs.h > > index 61d9d183ce7f..09710fec3c66 100644 > > --- a/drivers/gpu/drm/meson/meson_encoder_cvbs.h > > +++ b/drivers/gpu/drm/meson/meson_encoder_cvbs.h > > @@ -25,5 +25,6 @@ struct meson_cvbs_mode { > > extern struct meson_cvbs_mode meson_cvbs_modes[MESON_CVBS_MODES_COUNT]; > > int meson_encoder_cvbs_init(struct meson_drm *priv); > > +void meson_encoder_cvbs_remove(struct meson_drm *priv); > > #endif /* __MESON_VENC_CVBS_H */ > > diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c b/drivers/gpu/drm/meson/meson_encoder_hdmi.c > > index 2f616c55c271..da6f2882cd97 100644 > > --- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c > > +++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c > > @@ -452,6 +452,8 @@ int meson_encoder_hdmi_init(struct meson_drm *priv) > > meson_encoder_hdmi->cec_notifier = notifier; > > } > > + priv->encoders[MESON_ENC_HDMI] = &meson_encoder_hdmi->encoder; > > + > > dev_dbg(priv->dev, "HDMI encoder initialized\n"); > > return 0; > > @@ -460,3 +462,8 @@ int meson_encoder_hdmi_init(struct meson_drm *priv) > > of_node_put(remote); > > return ret; > > } > > + > > +void meson_encoder_hdmi_remove(struct meson_drm *priv) > > +{ > > + REMOVE_ENCODER_BRIDGES(hdmi, MESON_ENC_HDMI); > > +} > > diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.h b/drivers/gpu/drm/meson/meson_encoder_hdmi.h > > index ed19494f0956..a6cd38eb5f71 100644 > > --- a/drivers/gpu/drm/meson/meson_encoder_hdmi.h > > +++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.h > > @@ -8,5 +8,6 @@ > > #define __MESON_ENCODER_HDMI_H > > int meson_encoder_hdmi_init(struct meson_drm *priv); > > +void meson_encoder_hdmi_remove(struct meson_drm *priv); > > #endif /* __MESON_ENCODER_HDMI_H */ > > diff --git a/drivers/gpu/drm/meson/meson_venc.h b/drivers/gpu/drm/meson/meson_venc.h > > index 9138255ffc9e..9fc572860f8c 100644 > > --- a/drivers/gpu/drm/meson/meson_venc.h > > +++ b/drivers/gpu/drm/meson/meson_venc.h > > @@ -47,6 +47,21 @@ struct meson_cvbs_enci_mode { > > unsigned int analog_sync_adj; > > }; > > +#define REMOVE_ENCODER_BRIDGES(type, order) \ > > +{ \ > > + struct meson_encoder_##type *meson_encoder_##type; \ > > + struct drm_encoder *encoder; \ > > + if (priv->encoders[order]) { \ > > + encoder = priv->encoders[order]; \ > > + meson_encoder_##type = \ > > + container_of(encoder, \ > > + struct meson_encoder_##type, \ > > + encoder); \ > > + drm_bridge_remove(&(meson_encoder_##type)->bridge); \ > > + drm_bridge_remove((meson_encoder_##type)->next_bridge); \ > > + } \ > > +} > > > This looks over-complicated, why not store the "struct meson_encoder_cvbs/_hdmi" raw pointer in the struct meson_drm encoders table instead ? > > With this no need to use container_of and directly call drm_bridge_remove() on bridge & next_bridge. Would it be alright if I store them as void pointers and cast them back to the right struct type in the corresponding encoder remove function? Or maybe keeping two separate struct pointer of the specific type rather than an array of generic ones. Also I thought abstracting the encoder type might spare us one forward declaration in meson_drm.h, but maybe that's not a big deal. I'm thinking that this means Meson VPU won't ever need to support new types of encoders, so a bit of code repetition in the encoder's bridge remove function is alright. > > + > > /* HDMI Clock parameters */ > > enum drm_mode_status > > meson_venc_hdmi_supported_mode(const struct drm_display_mode *mode); > > Thanks, > Neil Adrian From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E86E6ECAAD8 for ; Tue, 20 Sep 2022 11:50:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=kmfABJ3MysBKdP8AUu1WpaRvBIjRkCbTP4e5Qgx3eaE=; b=qNSfv9dmfqBmnC Q9Zu7g/wgNajbAx0qSul7JEFjJBXf4MxbsP59u07wnXSuDCRdtgsxnMD5MppmLI7bZ6sIgErr1pHD zw2ngLXCkS6+No5cDXjEcfiVH/YtfALowOpM8tVPVt8LB/XaBSR/r7+famK5+fyJL8E3XLZnLJyX6 ULBpL5nYazDNMUPwH2zOF6oAEQ5106dcace0DPCoGFmcF5kylSi8Vwtf3YmRvYWBmqZOpOzh4XNlH JwG8Oq26HfYePkozaFSBI6SVisgDNtRMcpPadgrnY4brb1Xz8t49ND4ql+uPn1BXdmyx2W1vdJhXx n03HZ3To70QaGLVoZn/w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oablM-003TeV-L3; Tue, 20 Sep 2022 11:50:04 +0000 Received: from madras.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e5ab]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oabl6-003TVV-6b for linux-amlogic@lists.infradead.org; Tue, 20 Sep 2022 11:49:50 +0000 Received: from localhost (unknown [IPv6:2a02:8010:65b5:0:bbb0:f8ec:7bc9:dbe4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: alarumbe) by madras.collabora.co.uk (Postfix) with ESMTPSA id C6B326601F6E; Tue, 20 Sep 2022 12:49:43 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1663674583; bh=4eTpa1Jd1zZfzcC0CqiMuqGI/ay0GGLs3hTXn9LuRHY=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=cc8Anwvu2FCYaWXxFePVBCyS9c3HTe/BeQahd1w1d6+WcozlUjALzKHNbv5zltVAw gWIjTzWlu37xujo0hW4KMPLsaKUlg0jNwvuGARBSZhmNPxnwusSFEmFwqDifK7BTIq hPi3R6vUZ4+X2ded3/zv9qSug5HvhVQB288b3e94hTkNXwRJf0fU32tRLzzpMiJF9u BximAd/Zp6igjRWuytB+kzuDthRjUgU2PhsfgIet8I9zEQsom2o0ZEVImafdIl4DDa INnU5yk6vMFWstABJJNBYKStKvXVWm2idgyfTi9x0XB8BgGfeYYpcxSFun6kIytsck USHsGplMy/NNg== Date: Tue, 20 Sep 2022 12:49:41 +0100 From: =?utf-8?Q?Adri=C3=A1n?= Larumbe To: Neil Armstrong Cc: narmstrong@baylibre.com, khilman@baylibre.com, linux-amlogic@lists.infradead.org, dri-devel@lists.freedesktop.org Subject: Re: [PATCH 3/3] drm/meson: remove drm bridges at aggregate driver unbind time Message-ID: <20220920114941.32k5ifwgayahzvl5@sobremesa> References: <20220919010940.419893-1-adrian.larumbe@collabora.com> <20220919010940.419893-4-adrian.larumbe@collabora.com> <7d545acf-eeba-b81a-0935-f0b71e98a82a@linaro.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <7d545acf-eeba-b81a-0935-f0b71e98a82a@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220920_044948_567000_FE27E604 X-CRM114-Status: GOOD ( 28.46 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org T24gMTkuMDkuMjAyMiAxNTowMywgTmVpbCBBcm1zdHJvbmcgd3JvdGU6Cj4gT24gMTkvMDkvMjAy MiAwMzowOSwgQWRyacOhbiBMYXJ1bWJlIHdyb3RlOgo+ID4gZHJtIGJyaWRnZXMgYWRkZWQgYnkg bWVzb25fZW5jb2Rlcl9oZG1pX2luaXQgYW5kIG1lc29uX2VuY29kZXJfY3Zic19pbml0Cj4gPiB3 ZXJlIG5vdCBtYW51YWxseSByZW1vdmVkIGF0IG1vZHVsZSB1bmxvYWQgdGltZSwgd2hpY2ggY2F1 c2VkIGRhbmdsaW5nCj4gPiByZWZlcmVuY2VzIHRvIGZyZWVkIG1lbW9yeSB0byByZW1haW4gbGlu a2VkIGluIHRoZSBnbG9iYWwgYnJpZGdlX2xpc3QuCj4gPiAKPiA+IFdoZW4gbG9hZGluZyB0aGUg ZHJpdmVyIG1vZHVsZXMgYmFjayBpbiwgdGhlIHNhbWUgZnVuY3Rpb25zIHdvdWxkIGFnYWluCj4g PiBjYWxsIGRybV9icmlkZ2VfYWRkLCBhbmQgd2hlbiB0cmF2ZXJzaW5nIHRoZSBnbG9iYWwgYnJp ZGdlX2xpc3QsIHdvdWxkCj4gPiBlbmQgdXAgcGVla2luZyBpbnRvIGZyZWVkIG1lbW9yeS4KPiA+ IAo+ID4gT25jZSBhZ2FpbiBLQVNBTiByZXZlYWxlZCB0aGUgcHJvYmxlbToKPiA+IAo+ID4gWyAg KzAuMDAwMDk1XSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Cj4gPiBbICArMC4wMDAwMDhdIEJVRzogS0FTQU46IHVzZS1hZnRlci1m cmVlIGluIF9fbGlzdF9hZGRfdmFsaWQrMHg5Yy8weDEyMAo+ID4gWyAgKzAuMDAwMDE4XSBSZWFk IG9mIHNpemUgOCBhdCBhZGRyIGZmZmYwMDAwM2RhMjkxZjAgYnkgdGFzayBtb2Rwcm9iZS8yNDgz Cj4gPiAKPiA+IFsgICswLjAwMDAxOF0gQ1BVOiAzIFBJRDogMjQ4MyBDb21tOiBtb2Rwcm9iZSBU YWludGVkOiBHICAgICAgICAgQyBPICAgICAgNS4xOS4wLXJjNi1scm1ia2FzYW4rICMxCj4gPiBb ICArMC4wMDAwMTFdIEhhcmR3YXJlIG5hbWU6IEhhcmRrZXJuZWwgT0RST0lELU4yUGx1cyAoRFQp Cj4gPiBbICArMC4wMDAwMDhdIENhbGwgdHJhY2U6Cj4gPiBbICArMC4wMDAwMDZdICBkdW1wX2Jh Y2t0cmFjZSsweDFlYy8weDI4MAo+ID4gWyAgKzAuMDAwMDEyXSAgc2hvd19zdGFjaysweDI0LzB4 ODAKPiA+IFsgICswLjAwMDAwOF0gIGR1bXBfc3RhY2tfbHZsKzB4OTgvMHhkNAo+ID4gWyAgKzAu MDAwMDExXSAgcHJpbnRfYWRkcmVzc19kZXNjcmlwdGlvbi5jb25zdHByb3AuMCsweDgwLzB4NTIw Cj4gPiBbICArMC4wMDAwMTFdICBwcmludF9yZXBvcnQrMHgxMjgvMHgyNjAKPiA+IFsgICswLjAw MDAwOF0gIGthc2FuX3JlcG9ydCsweGI4LzB4ZmMKPiA+IFsgICswLjAwMDAwOF0gIF9fYXNhbl9y ZXBvcnRfbG9hZDhfbm9hYm9ydCsweDNjLzB4NTAKPiA+IFsgICswLjAwMDAwOV0gIF9fbGlzdF9h ZGRfdmFsaWQrMHg5Yy8weDEyMAo+ID4gWyAgKzAuMDAwMDA5XSAgZHJtX2JyaWRnZV9hZGQrMHg2 Yy8weDEwNCBbZHJtXQo+ID4gWyAgKzAuMDAwMTY1XSAgZHdfaGRtaV9wcm9iZSsweDE5MDAvMHgy MzYwIFtkd19oZG1pXQo+ID4gWyAgKzAuMDAwMDIyXSAgbWVzb25fZHdfaGRtaV9iaW5kKzB4NTIw LzB4ODE0IFttZXNvbl9kd19oZG1pXQo+ID4gWyAgKzAuMDAwMDE0XSAgY29tcG9uZW50X2JpbmQr MHgxNzQvMHg1MjAKPiA+IFsgICswLjAwMDAxMl0gIGNvbXBvbmVudF9iaW5kX2FsbCsweDFhOC8w eDM4Ywo+ID4gWyAgKzAuMDAwMDEwXSAgbWVzb25fZHJ2X2JpbmRfbWFzdGVyKzB4NWU4LzB4Yjc0 IFttZXNvbl9kcm1dCj4gPiBbICArMC4wMDAwMzJdICBtZXNvbl9kcnZfYmluZCsweDIwLzB4MmMg W21lc29uX2RybV0KPiA+IFsgICswLjAwMDAyN10gIHRyeV90b19icmluZ191cF9hZ2dyZWdhdGVf ZGV2aWNlKzB4MTljLzB4MzkwCj4gPiBbICArMC4wMDAwMTBdICBjb21wb25lbnRfbWFzdGVyX2Fk ZF93aXRoX21hdGNoKzB4MWM4LzB4Mjg0Cj4gPiBbICArMC4wMDAwMDldICBtZXNvbl9kcnZfcHJv YmUrMHgyNzQvMHgyODAgW21lc29uX2RybV0KPiA+IFsgICswLjAwMDAyNl0gIHBsYXRmb3JtX3By b2JlKzB4ZDAvMHgyMjAKPiA+IFsgICswLjAwMDAwOV0gIHJlYWxseV9wcm9iZSsweDNhYy8weGE4 MAo+ID4gWyAgKzAuMDAwMDA5XSAgX19kcml2ZXJfcHJvYmVfZGV2aWNlKzB4MWY4LzB4NDAwCj4g PiBbICArMC4wMDAwMDldICBkcml2ZXJfcHJvYmVfZGV2aWNlKzB4NjgvMHgxYjAKPiA+IFsgICsw LjAwMDAwOV0gIF9fZHJpdmVyX2F0dGFjaCsweDIwYy8weDQ4MAo+ID4gWyAgKzAuMDAwMDA4XSAg YnVzX2Zvcl9lYWNoX2RldisweDExNC8weDFiMAo+ID4gWyAgKzAuMDAwMDA5XSAgZHJpdmVyX2F0 dGFjaCsweDQ4LzB4NjQKPiA+IFsgICswLjAwMDAwOF0gIGJ1c19hZGRfZHJpdmVyKzB4MzkwLzB4 NTY0Cj4gPiBbICArMC4wMDAwMDldICBkcml2ZXJfcmVnaXN0ZXIrMHgxYTgvMHgzZTQKPiA+IFsg ICswLjAwMDAwOV0gIF9fcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKzB4NmMvMHg5NAo+ID4gWyAg KzAuMDAwMDA4XSAgbWVzb25fZHJtX3BsYXRmb3JtX2RyaXZlcl9pbml0KzB4M2MvMHgxMDAwIFtt ZXNvbl9kcm1dCj4gPiBbICArMC4wMDAwMjddICBkb19vbmVfaW5pdGNhbGwrMHhjNC8weDJiMAo+ ID4gWyAgKzAuMDAwMDExXSAgZG9faW5pdF9tb2R1bGUrMHgxNTQvMHg1NzAKPiA+IFsgICswLjAw MDAxMV0gIGxvYWRfbW9kdWxlKzB4MWE3OC8weDFlYTQKPiA+IFsgICswLjAwMDAwOF0gIF9fZG9f c3lzX2luaXRfbW9kdWxlKzB4MTg0LzB4MWNjCj4gPiBbICArMC4wMDAwMDldICBfX2FybTY0X3N5 c19pbml0X21vZHVsZSsweDc4LzB4YjAKPiA+IFsgICswLjAwMDAwOV0gIGludm9rZV9zeXNjYWxs KzB4NzQvMHgyNjAKPiA+IFsgICswLjAwMDAwOV0gIGVsMF9zdmNfY29tbW9uLmNvbnN0cHJvcC4w KzB4Y2MvMHgyNjAKPiA+IFsgICswLjAwMDAwOF0gIGRvX2VsMF9zdmMrMHg1MC8weDcwCj4gPiBb ICArMC4wMDAwMDddICBlbDBfc3ZjKzB4NjgvMHgxYTAKPiA+IFsgICswLjAwMDAxMl0gIGVsMHRf NjRfc3luY19oYW5kbGVyKzB4MTFjLzB4MTUwCj4gPiBbICArMC4wMDAwMDhdICBlbDB0XzY0X3N5 bmMrMHgxOGMvMHgxOTAKPiA+IAo+ID4gWyAgKzAuMDAwMDE2XSBBbGxvY2F0ZWQgYnkgdGFzayA4 Nzk6Cj4gPiBbICArMC4wMDAwMDhdICBrYXNhbl9zYXZlX3N0YWNrKzB4MmMvMHg1Ywo+ID4gWyAg KzAuMDAwMDExXSAgX19rYXNhbl9rbWFsbG9jKzB4OTAvMHhkMAo+ID4gWyAgKzAuMDAwMDA3XSAg X19rbWFsbG9jKzB4Mjc4LzB4NGEwCj4gPiBbICArMC4wMDAwMTFdICBtcGlfcmVzaXplKzB4MTNj LzB4MWQwCj4gPiBbICArMC4wMDAwMTFdICBtcGlfcG93bSsweGQyNC8weDE1NzAKPiA+IFsgICsw LjAwMDAwOV0gIHJzYV9lbmMrMHgxYTQvMHgzMGMKPiA+IFsgICswLjAwMDAwOV0gIHBrY3MxcGFk X3ZlcmlmeSsweDNmMC8weDU4MAo+ID4gWyAgKzAuMDAwMDA5XSAgcHVibGljX2tleV92ZXJpZnlf c2lnbmF0dXJlKzB4N2E4LzB4YmE0Cj4gPiBbICArMC4wMDAwMTBdICBwdWJsaWNfa2V5X3Zlcmlm eV9zaWduYXR1cmVfMisweDQwLzB4NjAKPiA+IFsgICswLjAwMDAwOF0gIHZlcmlmeV9zaWduYXR1 cmUrMHhiNC8weDExNAo+ID4gWyAgKzAuMDAwMDA4XSAgcGtjczdfdmFsaWRhdGVfdHJ1c3Rfb25l LmNvbnN0cHJvcC4wKzB4M2I4LzB4NTc0Cj4gPiBbICArMC4wMDAwMDldICBwa2NzN192YWxpZGF0 ZV90cnVzdCsweGI4LzB4MTVjCj4gPiBbICArMC4wMDAwMDhdICB2ZXJpZnlfcGtjczdfbWVzc2Fn ZV9zaWcrMHhlYy8weDFiMAo+ID4gWyAgKzAuMDAwMDEyXSAgdmVyaWZ5X3BrY3M3X3NpZ25hdHVy ZSsweDc4LzB4YWMKPiA+IFsgICswLjAwMDAwN10gIG1vZF92ZXJpZnlfc2lnKzB4MTEwLzB4MTkw Cj4gPiBbICArMC4wMDAwMDldICBtb2R1bGVfc2lnX2NoZWNrKzB4MTE0LzB4MWUwCj4gPiBbICAr MC4wMDAwMDldICBsb2FkX21vZHVsZSsweGEwLzB4MWVhNAo+ID4gWyAgKzAuMDAwMDA4XSAgX19k b19zeXNfaW5pdF9tb2R1bGUrMHgxODQvMHgxY2MKPiA+IFsgICswLjAwMDAwOF0gIF9fYXJtNjRf c3lzX2luaXRfbW9kdWxlKzB4NzgvMHhiMAo+ID4gWyAgKzAuMDAwMDA4XSAgaW52b2tlX3N5c2Nh bGwrMHg3NC8weDI2MAo+ID4gWyAgKzAuMDAwMDA5XSAgZWwwX3N2Y19jb21tb24uY29uc3Rwcm9w LjArMHgxYTgvMHgyNjAKPiA+IFsgICswLjAwMDAwOF0gIGRvX2VsMF9zdmMrMHg1MC8weDcwCj4g PiBbICArMC4wMDAwMDddICBlbDBfc3ZjKzB4NjgvMHgxYTAKPiA+IFsgICswLjAwMDAwOV0gIGVs MHRfNjRfc3luY19oYW5kbGVyKzB4MTFjLzB4MTUwCj4gPiBbICArMC4wMDAwMDldICBlbDB0XzY0 X3N5bmMrMHgxOGMvMHgxOTAKPiA+IAo+ID4gWyAgKzAuMDAwMDEzXSBGcmVlZCBieSB0YXNrIDI0 MjI6Cj4gPiBbICArMC4wMDAwMDhdICBrYXNhbl9zYXZlX3N0YWNrKzB4MmMvMHg1Ywo+ID4gWyAg KzAuMDAwMDA5XSAga2FzYW5fc2V0X3RyYWNrKzB4MmMvMHg0MAo+ID4gWyAgKzAuMDAwMDA3XSAg a2FzYW5fc2V0X2ZyZWVfaW5mbysweDI4LzB4NTAKPiA+IFsgICswLjAwMDAwOV0gIF9fX19rYXNh bl9zbGFiX2ZyZWUrMHgxMjgvMHgxZDQKPiA+IFsgICswLjAwMDAwOF0gIF9fa2FzYW5fc2xhYl9m cmVlKzB4MTgvMHgyNAo+ID4gWyAgKzAuMDAwMDA3XSAgc2xhYl9mcmVlX2ZyZWVsaXN0X2hvb2sr MHgxMDgvMHgyMzAKPiA+IFsgICswLjAwMDAxMF0gIGtmcmVlKzB4MTEwLzB4MzVjCj4gPiBbICAr MC4wMDAwMDhdICByZWxlYXNlX25vZGVzKzB4ZjAvMHgxNmMKPiA+IFsgICswLjAwMDAwOV0gIGRl dnJlc19yZWxlYXNlX2dyb3VwKzB4MTgwLzB4MjcwCj4gPiBbICArMC4wMDAwMDhdICB0YWtlX2Rv d25fYWdncmVnYXRlX2RldmljZSsweGNjLzB4MTYwCj4gPiBbICArMC4wMDAwMTBdICBjb21wb25l bnRfZGVsKzB4MThjLzB4MzYwCj4gPiBbICArMC4wMDAwMDldICBtZXNvbl9kd19oZG1pX3JlbW92 ZSsweDI4LzB4NDAgW21lc29uX2R3X2hkbWldCj4gPiBbICArMC4wMDAwMTNdICBwbGF0Zm9ybV9y ZW1vdmUrMHg2NC8weGIwCj4gPiBbICArMC4wMDAwMDhdICBkZXZpY2VfcmVtb3ZlKzB4YjgvMHgx NTQKPiA+IFsgICswLjAwMDAwOV0gIGRldmljZV9yZWxlYXNlX2RyaXZlcl9pbnRlcm5hbCsweDM5 OC8weDViMAo+ID4gWyAgKzAuMDAwMDA5XSAgZHJpdmVyX2RldGFjaCsweGFjLzB4MWIwCj4gPiBb ICArMC4wMDAwMDldICBidXNfcmVtb3ZlX2RyaXZlcisweDE1OC8weDI5Ywo+ID4gWyAgKzAuMDAw MDA4XSAgZHJpdmVyX3VucmVnaXN0ZXIrMHg3MC8weGIwCj4gPiBbICArMC4wMDAwMDldICBwbGF0 Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcisweDIwLzB4MmMKPiA+IFsgICswLjAwMDAwN10gIG1lc29u X2R3X2hkbWlfcGxhdGZvcm1fZHJpdmVyX2V4aXQrMHgxYy8weDMwIFttZXNvbl9kd19oZG1pXQo+ ID4gWyAgKzAuMDAwMDEyXSAgX19kb19zeXNfZGVsZXRlX21vZHVsZSsweDI4OC8weDQwMAo+ID4g WyAgKzAuMDAwMDA5XSAgX19hcm02NF9zeXNfZGVsZXRlX21vZHVsZSsweDVjLzB4ODAKPiA+IFsg ICswLjAwMDAwOV0gIGludm9rZV9zeXNjYWxsKzB4NzQvMHgyNjAKPiA+IFsgICswLjAwMDAwOF0g IGVsMF9zdmNfY29tbW9uLmNvbnN0cHJvcC4wKzB4Y2MvMHgyNjAKPiA+IFsgICswLjAwMDAwOF0g IGRvX2VsMF9zdmMrMHg1MC8weDcwCj4gPiBbICArMC4wMDAwMDddICBlbDBfc3ZjKzB4NjgvMHgx YTAKPiA+IFsgICswLjAwMDAwOF0gIGVsMHRfNjRfc3luY19oYW5kbGVyKzB4MTFjLzB4MTUwCj4g PiBbICArMC4wMDAwMDldICBlbDB0XzY0X3N5bmMrMHgxOGMvMHgxOTAKPiA+IAo+ID4gWyAgKzAu MDAwMDEzXSBUaGUgYnVnZ3kgYWRkcmVzcyBiZWxvbmdzIHRvIHRoZSBvYmplY3QgYXQgZmZmZjAw MDAzZGEyOTAwMAo+ID4gICAgICAgICAgICAgICAgIHdoaWNoIGJlbG9uZ3MgdG8gdGhlIGNhY2hl IGttYWxsb2MtMWsgb2Ygc2l6ZSAxMDI0Cj4gPiBbICArMC4wMDAwMDhdIFRoZSBidWdneSBhZGRy ZXNzIGlzIGxvY2F0ZWQgNDk2IGJ5dGVzIGluc2lkZSBvZgo+ID4gICAgICAgICAgICAgICAgIDEw MjQtYnl0ZSByZWdpb24gW2ZmZmYwMDAwM2RhMjkwMDAsIGZmZmYwMDAwM2RhMjk0MDApCj4gPiAK PiA+IFsgICswLjAwMDAxNV0gVGhlIGJ1Z2d5IGFkZHJlc3MgYmVsb25ncyB0byB0aGUgcGh5c2lj YWwgcGFnZToKPiA+IFsgICswLjAwMDAwOV0gcGFnZTpmZmZmZmMwMDAwZjY4YTAwIHJlZmNvdW50 OjEgbWFwY291bnQ6MCBtYXBwaW5nOjAwMDAwMDAwMDAwMDAwMDAgaW5kZXg6MHgwIHBmbjoweDNk YTI4Cj4gPiBbICArMC4wMDAwMTJdIGhlYWQ6ZmZmZmZjMDAwMGY2OGEwMCBvcmRlcjozIGNvbXBv dW5kX21hcGNvdW50OjAgY29tcG91bmRfcGluY291bnQ6MAo+ID4gWyAgKzAuMDAwMDA5XSBmbGFn czogMHhmZmZmMDAwMDAwMTAyMDAoc2xhYnxoZWFkfG5vZGU9MHx6b25lPTB8bGFzdGNwdXBpZD0w eGZmZmYpCj4gPiBbICArMC4wMDAwMTldIHJhdzogMGZmZmYwMDAwMDAxMDIwMCBmZmZmZmMwMDAw ZWI1YzA4IGZmZmZmYzAwMDBkOTY2MDggZmZmZjAwMDAwMDAwMmE4MAo+ID4gWyAgKzAuMDAwMDA4 XSByYXc6IDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDBhMDAwYSAwMDAwMDAwMWZmZmZmZmZm IDAwMDAwMDAwMDAwMDAwMDAKPiA+IFsgICswLjAwMDAwOF0gcGFnZSBkdW1wZWQgYmVjYXVzZTog a2FzYW46IGJhZCBhY2Nlc3MgZGV0ZWN0ZWQKPiA+IAo+ID4gWyAgKzAuMDAwMDExXSBNZW1vcnkg c3RhdGUgYXJvdW5kIHRoZSBidWdneSBhZGRyZXNzOgo+ID4gWyAgKzAuMDAwMDA5XSAgZmZmZjAw MDAzZGEyOTA4MDogZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIg ZmIKPiA+IFsgICswLjAwMDAwN10gIGZmZmYwMDAwM2RhMjkxMDA6IGZiIGZiIGZiIGZiIGZiIGZi IGZiIGZiIGZiIGZiIGZiIGZiIGZiIGZiIGZiIGZiCj4gPiBbICArMC4wMDAwMDddID5mZmZmMDAw MDNkYTI5MTgwOiBmYiBmYiBmYiBmYiBmYiBmYiBmYiBmYiBmYiBmYiBmYiBmYiBmYiBmYiBmYiBm Ygo+ID4gWyAgKzAuMDAwMDA3XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXgo+ID4gWyAgKzAuMDAwMDA4XSAgZmZmZjAwMDAzZGEy OTIwMDogZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIKPiA+ IFsgICswLjAwMDAwNl0gIGZmZmYwMDAwM2RhMjkyODA6IGZiIGZiIGZiIGZiIGZiIGZiIGZiIGZi IGZiIGZiIGZiIGZiIGZiIGZiIGZiIGZiCj4gPiBbICArMC4wMDAwMDddID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ID4g Cj4gPiBGaXggYnkga2VlcGluZyB0cmFjayBvZiB3aGljaCBlbmNvZGVycyB3ZXJlIGluaXRpYWxp c2VkIGluIHRoZSBtZXNvbl9kcm0KPiA+IHN0cnVjdHVyZSBhbmQgbWFudWFsbHkgcmVtb3Zpbmcg dGhlaXIgYnJpZGdlcyBhdCBhZ2dyZWdhdGUgZHJpdmVyJ3MgdW5iaW5kCj4gPiB0aW1lLgo+ID4g Cj4gPiBTaWduZWQtb2ZmLWJ5OiBBZHJpw6FuIExhcnVtYmUgPGFkcmlhbi5sYXJ1bWJlQGNvbGxh Ym9yYS5jb20+Cj4gPiAtLS0KPiA+ICAgZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX2Rydi5j ICAgICAgICAgIHwgIDQgKysrKwo+ID4gICBkcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHJ2 LmggICAgICAgICAgfCAgNyArKysrKysrCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNv bl9lbmNvZGVyX2N2YnMuYyB8ICA3ICsrKysrKysKPiA+ICAgZHJpdmVycy9ncHUvZHJtL21lc29u L21lc29uX2VuY29kZXJfY3Zicy5oIHwgIDEgKwo+ID4gICBkcml2ZXJzL2dwdS9kcm0vbWVzb24v bWVzb25fZW5jb2Rlcl9oZG1pLmMgfCAgNyArKysrKysrCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9t ZXNvbi9tZXNvbl9lbmNvZGVyX2hkbWkuaCB8ICAxICsKPiA+ICAgZHJpdmVycy9ncHUvZHJtL21l c29uL21lc29uX3ZlbmMuaCAgICAgICAgIHwgMTUgKysrKysrKysrKysrKysrCj4gPiAgIDcgZmls ZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21lc29uL21lc29uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29u X2Rydi5jCj4gPiBpbmRleCBmM2RhMWMyMTRhN2MuLjJiNDcxNTRiNzNjMiAxMDA2NDQKPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9kcnYuYwo+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL21lc29uL21lc29uX2Rydi5jCj4gPiBAQCAtMzg3LDYgKzM4NywxMCBAQCBzdGF0aWMg dm9pZCBtZXNvbl9kcnZfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ICAgCWRybV9hdG9t aWNfaGVscGVyX3NodXRkb3duKGRybSk7Cj4gPiAgIAlmcmVlX2lycShwcml2LT52c3luY19pcnEs IGRybSk7Cj4gPiAgIAlkcm1fZGV2X3B1dChkcm0pOwo+ID4gKwo+ID4gKwltZXNvbl9lbmNvZGVy X2hkbWlfcmVtb3ZlKHByaXYpOwo+ID4gKwltZXNvbl9lbmNvZGVyX2N2YnNfcmVtb3ZlKHByaXYp Owo+ID4gKwo+ID4gICAJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pOwo+ID4gICAJaWYg KHByaXYtPmFmYmNkLm9wcykKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVzb24v bWVzb25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHJ2LmgKPiA+IGluZGV4 IDE3N2RhYzNjYTNiZS4uMmNmMjc5ZmI0ZjgyIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21lc29uL21lc29uX2Rydi5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVz b25fZHJ2LmgKPiA+IEBAIC0yNSw2ICsyNSwxMiBAQCBlbnVtIHZwdV9jb21wYXRpYmxlIHsKPiA+ ICAgCVZQVV9DT01QQVRJQkxFX0cxMkEgPSAzLAo+ID4gICB9Owo+ID4gK2VudW0gewo+ID4gKwlN RVNPTl9FTkNfQ1ZCUyA9IDAsCj4gPiArCU1FU09OX0VOQ19IRE1JLAo+ID4gKwlNRVNPTl9FTkNf TEFTVCwKPiA+ICt9Owo+ID4gKwo+ID4gICBzdHJ1Y3QgbWVzb25fZHJtX21hdGNoX2RhdGEgewo+ ID4gICAJZW51bSB2cHVfY29tcGF0aWJsZSBjb21wYXQ7Cj4gPiAgIAlzdHJ1Y3QgbWVzb25fYWZi Y2Rfb3BzICphZmJjZF9vcHM7Cj4gPiBAQCAtNTEsNiArNTcsNyBAQCBzdHJ1Y3QgbWVzb25fZHJt IHsKPiA+ICAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiA+ICAgCXN0cnVjdCBkcm1fcGxhbmUg KnByaW1hcnlfcGxhbmU7Cj4gPiAgIAlzdHJ1Y3QgZHJtX3BsYW5lICpvdmVybGF5X3BsYW5lOwo+ ID4gKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXJzW01FU09OX0VOQ19MQVNUXTsKPiA+ICAg CWNvbnN0IHN0cnVjdCBtZXNvbl9kcm1fc29jX2xpbWl0cyAqbGltaXRzOwo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9lbmNvZGVyX2N2YnMuYyBiL2RyaXZlcnMv Z3B1L2RybS9tZXNvbi9tZXNvbl9lbmNvZGVyX2N2YnMuYwo+ID4gaW5kZXggODExMGE2ZTM5MzIw Li4wMGM5NThiMDgwNjUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVz b25fZW5jb2Rlcl9jdmJzLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9l bmNvZGVyX2N2YnMuYwo+ID4gQEAgLTI4MSw1ICsyODEsMTIgQEAgaW50IG1lc29uX2VuY29kZXJf Y3Zic19pbml0KHN0cnVjdCBtZXNvbl9kcm0gKnByaXYpCj4gPiAgIAl9Cj4gPiAgIAlkcm1fY29u bmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgJm1lc29uX2VuY29kZXJfY3Zicy0+ZW5j b2Rlcik7Cj4gPiArCXByaXYtPmVuY29kZXJzW01FU09OX0VOQ19DVkJTXSA9ICZtZXNvbl9lbmNv ZGVyX2N2YnMtPmVuY29kZXI7Cj4gPiArCj4gPiAgIAlyZXR1cm4gMDsKPiA+ICAgfQo+ID4gKwo+ ID4gK3ZvaWQgbWVzb25fZW5jb2Rlcl9jdmJzX3JlbW92ZShzdHJ1Y3QgbWVzb25fZHJtICpwcml2 KQo+ID4gK3sKPiA+ICsJUkVNT1ZFX0VOQ09ERVJfQlJJREdFUyhjdmJzLCBNRVNPTl9FTkNfQ1ZC Uyk7Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9l bmNvZGVyX2N2YnMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9lbmNvZGVyX2N2YnMu aAo+ID4gaW5kZXggNjFkOWQxODNjZTdmLi4wOTcxMGZlYzNjNjYgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZW5jb2Rlcl9jdmJzLmgKPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9lbmNvZGVyX2N2YnMuaAo+ID4gQEAgLTI1LDUgKzI1LDYg QEAgc3RydWN0IG1lc29uX2N2YnNfbW9kZSB7Cj4gPiAgIGV4dGVybiBzdHJ1Y3QgbWVzb25fY3Zi c19tb2RlIG1lc29uX2N2YnNfbW9kZXNbTUVTT05fQ1ZCU19NT0RFU19DT1VOVF07Cj4gPiAgIGlu dCBtZXNvbl9lbmNvZGVyX2N2YnNfaW5pdChzdHJ1Y3QgbWVzb25fZHJtICpwcml2KTsKPiA+ICt2 b2lkIG1lc29uX2VuY29kZXJfY3Zic19yZW1vdmUoc3RydWN0IG1lc29uX2RybSAqcHJpdik7Cj4g PiAgICNlbmRpZiAvKiBfX01FU09OX1ZFTkNfQ1ZCU19IICovCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21lc29uL21lc29uX2VuY29kZXJfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJt L21lc29uL21lc29uX2VuY29kZXJfaGRtaS5jCj4gPiBpbmRleCAyZjYxNmM1NWMyNzEuLmRhNmYy ODgyY2Q5NyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9lbmNv ZGVyX2hkbWkuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX2VuY29kZXJf aGRtaS5jCj4gPiBAQCAtNDUyLDYgKzQ1Miw4IEBAIGludCBtZXNvbl9lbmNvZGVyX2hkbWlfaW5p dChzdHJ1Y3QgbWVzb25fZHJtICpwcml2KQo+ID4gICAJCW1lc29uX2VuY29kZXJfaGRtaS0+Y2Vj X25vdGlmaWVyID0gbm90aWZpZXI7Cj4gPiAgIAl9Cj4gPiArCXByaXYtPmVuY29kZXJzW01FU09O X0VOQ19IRE1JXSA9ICZtZXNvbl9lbmNvZGVyX2hkbWktPmVuY29kZXI7Cj4gPiArCj4gPiAgIAlk ZXZfZGJnKHByaXYtPmRldiwgIkhETUkgZW5jb2RlciBpbml0aWFsaXplZFxuIik7Cj4gPiAgIAly ZXR1cm4gMDsKPiA+IEBAIC00NjAsMyArNDYyLDggQEAgaW50IG1lc29uX2VuY29kZXJfaGRtaV9p bml0KHN0cnVjdCBtZXNvbl9kcm0gKnByaXYpCj4gPiAgIAlvZl9ub2RlX3B1dChyZW1vdGUpOwo+ ID4gICAJcmV0dXJuIHJldDsKPiA+ICAgfQo+ID4gKwo+ID4gK3ZvaWQgbWVzb25fZW5jb2Rlcl9o ZG1pX3JlbW92ZShzdHJ1Y3QgbWVzb25fZHJtICpwcml2KQo+ID4gK3sKPiA+ICsJUkVNT1ZFX0VO Q09ERVJfQlJJREdFUyhoZG1pLCBNRVNPTl9FTkNfSERNSSk7Cj4gPiArfQo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9lbmNvZGVyX2hkbWkuaCBiL2RyaXZlcnMv Z3B1L2RybS9tZXNvbi9tZXNvbl9lbmNvZGVyX2hkbWkuaAo+ID4gaW5kZXggZWQxOTQ5NGYwOTU2 Li5hNmNkMzhlYjVmNzEgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVz b25fZW5jb2Rlcl9oZG1pLmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9l bmNvZGVyX2hkbWkuaAo+ID4gQEAgLTgsNSArOCw2IEBACj4gPiAgICNkZWZpbmUgX19NRVNPTl9F TkNPREVSX0hETUlfSAo+ID4gICBpbnQgbWVzb25fZW5jb2Rlcl9oZG1pX2luaXQoc3RydWN0IG1l c29uX2RybSAqcHJpdik7Cj4gPiArdm9pZCBtZXNvbl9lbmNvZGVyX2hkbWlfcmVtb3ZlKHN0cnVj dCBtZXNvbl9kcm0gKnByaXYpOwo+ID4gICAjZW5kaWYgLyogX19NRVNPTl9FTkNPREVSX0hETUlf SCAqLwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl92ZW5jLmgg Yi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fdmVuYy5oCj4gPiBpbmRleCA5MTM4MjU1ZmZj OWUuLjlmYzU3Mjg2MGY4YyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9t ZXNvbl92ZW5jLmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl92ZW5jLmgK PiA+IEBAIC00Nyw2ICs0NywyMSBAQCBzdHJ1Y3QgbWVzb25fY3Zic19lbmNpX21vZGUgewo+ID4g ICAJdW5zaWduZWQgaW50IGFuYWxvZ19zeW5jX2FkajsKPiA+ICAgfTsKPiA+ICsjZGVmaW5lIFJF TU9WRV9FTkNPREVSX0JSSURHRVModHlwZSwgb3JkZXIpCQkJCVwKPiA+ICt7CQkJCQkJCQkJXAo+ ID4gKwlzdHJ1Y3QgbWVzb25fZW5jb2Rlcl8jI3R5cGUgKm1lc29uX2VuY29kZXJfIyN0eXBlOwkJ XAo+ID4gKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CQkJCQlcCj4gPiArCWlmIChwcml2 LT5lbmNvZGVyc1tvcmRlcl0pIHsJCQkJCVwKPiA+ICsJCWVuY29kZXIgPSBwcml2LT5lbmNvZGVy c1tvcmRlcl07CQkJXAo+ID4gKwkJbWVzb25fZW5jb2Rlcl8jI3R5cGUgPQkJCQkJXAo+ID4gKwkJ CWNvbnRhaW5lcl9vZihlbmNvZGVyLAkJCQlcCj4gPiArCQkJCSAgICAgc3RydWN0IG1lc29uX2Vu Y29kZXJfIyN0eXBlLAlcCj4gPiArCQkJCSAgICAgZW5jb2Rlcik7CQkJCVwKPiA+ICsJCWRybV9i cmlkZ2VfcmVtb3ZlKCYobWVzb25fZW5jb2Rlcl8jI3R5cGUpLT5icmlkZ2UpOwlcCj4gPiArCQlk cm1fYnJpZGdlX3JlbW92ZSgobWVzb25fZW5jb2Rlcl8jI3R5cGUpLT5uZXh0X2JyaWRnZSk7IFwK PiA+ICsJfQkJCQkJCQkJXAo+ID4gK30KPiAKPiAKPiBUaGlzIGxvb2tzIG92ZXItY29tcGxpY2F0 ZWQsIHdoeSBub3Qgc3RvcmUgdGhlICJzdHJ1Y3QgbWVzb25fZW5jb2Rlcl9jdmJzL19oZG1pIiBy YXcgcG9pbnRlciBpbiB0aGUgc3RydWN0IG1lc29uX2RybSBlbmNvZGVycyB0YWJsZSBpbnN0ZWFk ID8KPiAKPiBXaXRoIHRoaXMgbm8gbmVlZCB0byB1c2UgY29udGFpbmVyX29mIGFuZCBkaXJlY3Rs eSBjYWxsIGRybV9icmlkZ2VfcmVtb3ZlKCkgb24gYnJpZGdlICYgbmV4dF9icmlkZ2UuCgpXb3Vs ZCBpdCBiZSBhbHJpZ2h0IGlmIEkgc3RvcmUgdGhlbSBhcyB2b2lkIHBvaW50ZXJzIGFuZCBjYXN0 IHRoZW0gYmFjayB0byB0aGUKcmlnaHQgc3RydWN0IHR5cGUgaW4gdGhlIGNvcnJlc3BvbmRpbmcg ZW5jb2RlciByZW1vdmUgZnVuY3Rpb24/Ck9yIG1heWJlIGtlZXBpbmcgdHdvIHNlcGFyYXRlIHN0 cnVjdCBwb2ludGVyIG9mIHRoZSBzcGVjaWZpYyB0eXBlIHJhdGhlciB0aGFuIGFuCmFycmF5IG9m IGdlbmVyaWMgb25lcy4KCkFsc28gSSB0aG91Z2h0IGFic3RyYWN0aW5nIHRoZSBlbmNvZGVyIHR5 cGUgbWlnaHQgc3BhcmUgdXMgb25lIGZvcndhcmQKZGVjbGFyYXRpb24gaW4gbWVzb25fZHJtLmgs IGJ1dCBtYXliZSB0aGF0J3Mgbm90IGEgYmlnIGRlYWwuCkknbSB0aGlua2luZyB0aGF0IHRoaXMg bWVhbnMgTWVzb24gVlBVIHdvbid0IGV2ZXIgbmVlZCB0byBzdXBwb3J0IG5ldyB0eXBlcyBvZgpl bmNvZGVycywgc28gYSBiaXQgb2YgY29kZSByZXBldGl0aW9uIGluIHRoZSBlbmNvZGVyJ3MgYnJp ZGdlIHJlbW92ZSBmdW5jdGlvbiBpcwphbHJpZ2h0LgoKPiA+ICsKPiA+ICAgLyogSERNSSBDbG9j ayBwYXJhbWV0ZXJzICovCj4gPiAgIGVudW0gZHJtX21vZGVfc3RhdHVzCj4gPiAgIG1lc29uX3Zl bmNfaGRtaV9zdXBwb3J0ZWRfbW9kZShjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSk7Cj4gCj4gVGhhbmtzLAo+IE5laWwKCkFkcmlhbgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYW1sb2dpYyBtYWlsaW5nIGxpc3QKbGludXgt YW1sb2dpY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYW1sb2dpYwo=