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 X-Spam-Level: X-Spam-Status: No, score=-5.4 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7DC51C2D0C6 for ; Fri, 27 Dec 2019 11:03:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3B7A920828 for ; Fri, 27 Dec 2019 11:03:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="KAoNsNwO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726379AbfL0LDp (ORCPT ); Fri, 27 Dec 2019 06:03:45 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:59160 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726053AbfL0LDp (ORCPT ); Fri, 27 Dec 2019 06:03:45 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20191227110342euoutp027ad7879946fedfce28ecbdd515f14468~kNYbkDbLg0344603446euoutp02Y for ; Fri, 27 Dec 2019 11:03:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20191227110342euoutp027ad7879946fedfce28ecbdd515f14468~kNYbkDbLg0344603446euoutp02Y DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1577444622; bh=7CiodF6lhHlhDpRiOd/eKxBgSk8F/RyuGNECvUfKCw0=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=KAoNsNwOMlXQ0Pzi9lShO69iktQ2sUc9dsB8Rdc/raBB9TLppk8+ctMTWhHNvJ2dF pUhj348RJRsAoWNGkEwJseUkiodpP5n5cpz/Cq+4wNtmBworOU9W0HShbDDnCXB5wV F3M8IRr3rb/2KrMs8V0S5so6mldIdz2VbL9RICp0= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20191227110342eucas1p28cd23e3b2a98d7177cb1446bf78cef27~kNYbL9yew2930829308eucas1p2Y; Fri, 27 Dec 2019 11:03:42 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 26.D9.61286.E05E50E5; Fri, 27 Dec 2019 11:03:42 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20191227110341eucas1p29b093c32e47d33e641d6211f447b8d9c~kNYaf0QF50089800898eucas1p2x; Fri, 27 Dec 2019 11:03:41 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20191227110341eusmtrp2e4938dd116e6bede0f69e187b2b01795~kNYae_giY1700917009eusmtrp2V; Fri, 27 Dec 2019 11:03:41 +0000 (GMT) X-AuditID: cbfec7f2-f0bff7000001ef66-c1-5e05e50e82dc Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 2C.E0.08375.D05E50E5; Fri, 27 Dec 2019 11:03:41 +0000 (GMT) Received: from [106.120.51.15] (unknown [106.120.51.15]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20191227110340eusmtip1fcceb1a658a39abae4f90874dfe174b6~kNYZohbVj2252922529eusmtip1G; Fri, 27 Dec 2019 11:03:40 +0000 (GMT) Subject: Re: [PATCH v4 04/11] drm/bridge: Make the bridge chain a double-linked list From: Marek Szyprowski To: Boris Brezillon , Andrzej Hajda Cc: Mark Rutland , Nikita Yushchenko , Jernej Skrabec , Jonas Karlman , Andrey Smirnov , Neil Armstrong , Seung-Woo Kim , Kyungmin Park , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, Rob Herring , Thierry Reding , Laurent Pinchart , kernel@collabora.com, Sam Ravnborg , Chris Healy Message-ID: Date: Fri, 27 Dec 2019 12:03:40 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1 MIME-Version: 1.0 In-Reply-To: <32c4c99a-c943-b1e8-d342-2fd8e8719ff0@samsung.com> Content-Transfer-Encoding: 8bit Content-Language: en-US X-Brightmail-Tracker: H4sIAAAAAAAAA01SfUxNYRj3nnPuuafmtNfFelbGdof5mD7kj9cQhu1gM8xnSJfO0ure7B75 iD/Sl0pR6Os2hFtyRybdVsnmxtxu6S6X8jFFw1qURrUW6rr3HtF/v+f3PL/3+f3ePRytOsP6 cdG6I6Jep4lVs95M9dMR+yKfz4rwoMFuP/K2wq4gyekrSPOzJopY6q0UufrERb0c6mdJ23AP TWy9bQy5b89SkJakXiXJyDUqSemr5xRpOLeHfLgbQ1IfPlGS8hEzIoUXe1gyUneFWaUSbl+5 jYT+16lK4UOekxJqOoxIqDV0KIXi9CKFUGnKYIXGHAclvD9rpQRjfhsrnKsyIeFR9kVGGKic uZkP814eKcZGHxX1gaER3ofqazvpwzZy/Hu2iU1EaYGZyIsDvARK7p9n3ViFyxHkpoRmIm8X HkSQcq9TIRcDCPIbS5TjCtNgBSM3biIYzemm5KIPQXfXR89bU/EOsP1O9ChYHAyZfZkefhoO g89dHR41jYcZKM9+7NrBcTwOhdKWHe4ZBs+B1tHLyI2n433gLDJTbszjKWAr+sS4sRdeCb/M vxRuTONZkGwupmXsC28/XfUYAvyIg/eOMUq2vRaqSmoZGU+FL9aqv3FmgLN2XJCMoMt+RykX WQheJBUieWoZvLP/ZN1OaTwf7tb9/b3VUFp/2kMD9oHXfVNkEz5wobqAlmke0tNU8vRcMFgr /q21tDroHKQ2TIhmmBDHMCGO4f/eEsSYkK8YL2mjRClYJx4LkDRaKV4XFXAwTluJXOfZPGb9 UYOGHAcaEOaQejIfVMOEqxSao9IJbQMCjlZP43VRinAVH6k5kSDq4/br42NFqQH5c4zalw+5 3rNPhaM0R8QYUTws6se7FOfl5zqbmgwoG7C2z5h+qhzniYMxNwKTnKnzlijjsyq2BazbXZb7 IKmzwHhqXtr2dUH1+e0bZtPa47usD5L3fl2o/t66MTDlGrkUZLa0l91rtG0KW0MvkG45X2m/ efnUxRUktDwMSRUjHcZJlkkni5duXVnc9Ga9/5Dl65rYnVu6Fkccs/NqRjqkCV5A6yXNHy5/ doGaAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprFKsWRmVeSWpSXmKPExsVy+t/xu7q8T1njDDrf6VjcWneO1aK5w9bi 9JlTTBYH9xxnsph/BCh05et7Nour318yW5x8c5XFYvO5HlaLs01v2C06Jy5ht1h6/SKTxaG+ aIsH67MtWvceYbdY8XMro8WMyS/ZLH7umsfiIOSxZt4aRo/3N1rZPR5M/c/ksePuEkaPnbPu snvM7pjJ6rFpVSebx4kJl5g87ncfZ/JYMu0qm0ffllWMHgd6J7N4fN4kF8AbpWdTlF9akqqQ kV9cYqsUbWhhpGdoaaFnZGKpZ2hsHmtlZKqkb2eTkpqTWZZapG+XoJexZ+c95oKTFhUfe1ex NTC26XcxcnJICJhIrPqyjqWLkYtDSGApo8Ss9cdZIBIyEienNbBC2MISf651sUEUvWaUuHbo CTNIQlggTOLknwZ2EJtNwFCi6y1IESeHiECURPenz8wgDcwCv1kk/j9dzAjRvY5VYmfDSqAV HBy8AnYSS8+GgTSwCKhKXPg7lxHEFhWIldi++SHYAl4BQYmTM5+AXcQpYC/xe+tvsIuYBcwk 5kHVMAvISzRvnQ1li0vcejKfaQKj0Cwk7bOQtMxC0jILScsCRpZVjCKppcW56bnFhnrFibnF pXnpesn5uZsYgeli27Gfm3cwXtoYfIhRgINRiYe3YxdLnBBrYllxZe4hRgkOZiUR3rx01jgh 3pTEyqrUovz4otKc1OJDjKZAz01klhJNzgemsrySeENTQ3MLS0NzY3NjMwslcd4OgYMxQgLp iSWp2ampBalFMH1MHJxSDYwR9SHtaqafZDgPr35t2WbQfzN8Z/BaxvlC3p+vp+wQzIuecHXN yQrxt9x2pRLV4Xrmxpe0Hrz2cdzXeDdSKE/kq1i5y1edy4qta5bcCTj35N7OJr+ju2Z4XfJl mb1gcX/lWSbOnk1HD8xa1XA4nbUn6mrS1HKL3i6dfx6TDopv27H5xvcfs3qVWIozEg21mIuK EwHKGG7cLQMAAA== X-CMS-MailID: 20191227110341eucas1p29b093c32e47d33e641d6211f447b8d9c X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20191203141542eucas1p23771a9c49ef18144c832fc536bdae61a X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191203141542eucas1p23771a9c49ef18144c832fc536bdae61a References: <20191203141515.3597631-1-boris.brezillon@collabora.com> <20191203141515.3597631-5-boris.brezillon@collabora.com> <4e901ab9-07d4-4238-7322-c7c5a3959513@samsung.com> <20191216155551.083dcbaf@collabora.com> <75a06e2a-4587-ee16-0f5d-af75fbe89793@samsung.com> <20191216162542.261c821c@collabora.com> <60f03d50-7c0f-c3d0-920f-0625c08b2171@samsung.com> <1010f5fc-0672-643c-4410-e053a928cb66@samsung.com> <20191224104422.25dbf980@collabora.com> <20191224104936.6a7c4977@collabora.com> <20191224110307.00ca841d@collabora.com> <32c4c99a-c943-b1e8-d342-2fd8e8719ff0@samsung.com> Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Hi All, On 27.12.2019 11:25, Marek Szyprowski wrote: > On 24.12.2019 11:03, Boris Brezillon wrote: >> On Tue, 24 Dec 2019 10:49:36 +0100 >> Boris Brezillon wrote: >>> On Tue, 24 Dec 2019 10:44:22 +0100 >>> Boris Brezillon wrote: >>>> On Tue, 24 Dec 2019 10:16:49 +0100 >>>> Andrzej Hajda wrote: >>>>> On 23.12.2019 10:55, Marek Szyprowski wrote: >>>>>> On 16.12.2019 16:25, Boris Brezillon wrote: >>>>>>> On Mon, 16 Dec 2019 16:02:36 +0100 >>>>>>> Marek Szyprowski wrote: >>>>>>>> On 16.12.2019 15:55, Boris Brezillon wrote: >>>>>>>>> On Mon, 16 Dec 2019 14:54:25 +0100 >>>>>>>>> Marek Szyprowski wrote: >>>>>>>>>> On 03.12.2019 15:15, Boris Brezillon wrote: >>>>>>>>>>> So that each element in the chain can easily access its >>>>>>>>>>> predecessor. >>>>>>>>>>> This will be needed to support bus format negotiation >>>>>>>>>>> between elements >>>>>>>>>>> of the bridge chain. >>>>>>>>>>> >>>>>>>>>>> Signed-off-by: Boris Brezillon >>>>>>>>>>> Reviewed-by: Neil Armstrong >>>>>>>>>>> Reviewed-by: Laurent Pinchart >>>>>>>>>>> >>>>>>>>>> I've noticed that this patch got merged to linux-next as commit >>>>>>>>>> 05193dc38197021894b17239fafbd2eb1afe5a45. Sadly it breaks >>>>>>>>>> booting of >>>>>>>>>> Samsung Exynos5250-based Arndale board. Booting stops after >>>>>>>>>> following >>>>>>>>>> messages: >>>>>>>>>> >>>>>>>>>> [drm] Exynos DRM: using 14400000.fimd device for DMA mapping >>>>>>>>>> operations >>>>>>>>>> exynos-drm exynos-drm: bound 14400000.fimd (ops >>>>>>>>>> fimd_component_ops) >>>>>>>>>> exynos-drm exynos-drm: bound 14450000.mixer (ops >>>>>>>>>> mixer_component_ops) >>>>>>>>>> exynos-drm exynos-drm: bound 14500000.dsi (ops >>>>>>>>>> exynos_dsi_component_ops) >>>>>>>>>> exynos-drm exynos-drm: bound 14530000.hdmi (ops >>>>>>>>>> hdmi_component_ops) >>>>>>>>>> [drm] Supports vblank timestamp caching Rev 2 (21.10.2013). >>>>>>>>>> [drm] No driver support for vblank timestamp query. >>>>>>>>>> [drm] Cannot find any crtc or sizes >>>>>>>>>> [drm] Cannot find any crtc or sizes >>>>>>>>>> [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on >>>>>>>>>> minor 0 >>>>>>>>>> >>>>>>>>>> I will try to debug this and provide more information soon. >>>>>>>>> Can you try with this diff applied? >>>>>>>> This patch doesn't change anything. >>>>>>> Okay. Can you do a list_for_each_entry() on both >>>>>>> encoder->bridge_chain >>>>>>> and dsi->bridge_chain (dump bridge pointers in a pr_info()) >>>>>>> before and >>>>>>> after the list_splice_init() call? >>>>>> encoder->bridge_chain contains only one element. dsi->drive_chain >>>>>> is empty. >>>>>> >>>>>> Replacing that list_splice() with >>>>>> INIT_LIST_HEAD(&encoder->bridge_chain) >>>>>> fixed the boot issue. >>>> If INIT_LIST_HEAD() worked, I don't understand why replacing the >>>> list_splice() call by a list_splice_init() (which doing a >>>> list_splice() >>>> + INIT_LIST_HEAD()) didn't fix the problem. Are you sure the >>>> list_splice_init() version doesn't work? >>>>>> It looks that this is related with the way the >>>>>> Exynos DSI handles bridges (in bridge and out brige?). Maybe Andrzej >>>>>> will give a bit more detailed comment and spread some light on this. >>>>> >>>>> Hi Marek, Boris, >>>>> >>>>> >>>>> I have not followed latest patches due to high work load, my bad. >>>>> Marek >>>>> thanks from pointing >>>>> >>>>> About ExynosDSI bridge handling: >>>>> >>>>> The order of calling encoder, bridge (and consequently panel) ops >>>>> enforced by DRM core (bridge->pre_enable, encoder->enable, >>>>> bridge->enable) does not fit to ExynosDSI hardware initialization >>>>> sequence, if I remember correctly it does not fit to whole MIPI DSI >>>>> standard (I think similar situation is with eDP). As a result DSI >>>>> drivers must use some ugly workarounds, rely on HW properly coping >>>>> with >>>>> incorrect sequences, or, as in case of ExynosDSI driver, just avoid >>>>> using encoder->bridge chaining and call bridge ops by itself when >>>>> suitable. >>>> Yes, that's definitely hack-ish, and I proposed 2 solutions to address >>>> that in previous versions of this patchset, unfortunately I didn't get >>>> any feedback so I went for the less invasive option (keep the hack but >>>> adapt it to the double-linked list changes), which still lead to >>>> regressions :-/. >>>> >>>> Just a reminder of my 2 proposals: >>>> >>>> 1/ implement the bridge_ops->pre_enable/post_disable() hooks so you >>>> can >>>>     split your enable/disable logic in 2 parts and make sure things >>>> are >>>>     ready when the panel/next bridge tries to send DSI commands >>>> 2/ move everything that's needed to send DSI commands out of the >>>>     ->enable() path (maybe in runtime PM resume/suspend hooks) so you >>>>     can call that in the DSI transfer path too >>>> >>>> As pointed out by Laurent, #1 doesn't work because some panel drivers >>>> send DSI commands in their ->prepare() hook, and ->pre_enable() >>>> methods >>>> are called in reverse order, meaning that the DRM panel bridge driver >>>> would try to issue DSI commands before the DSI host controllers is >>>> ready >>>> to send them. I still thing #2 is a good option. >>>>> So proper patch converting to double-linked list should not try to >>>>> splice ExynosDSI private bridge list with with encoder's, >>>>> encoder's list >>>>> should be always empty, as Marek suggested. >>>> That's exactly what I wanted to do: make the encoder's list empty >>>> after >>>> attach() and restore it to its initial state before unregistering >>>> the bridge, except I forgot that list_splice() doesn't call >>>> INIT_LIST_HEAD(). It's still not clear to me why replacing the >>>> list_splice() call by a list_splice_init() didn't work. >>> Okay, I think I figured it out: drm_bridge_chain_xx() helpers use >>> encoder->bridge_chain as their list head, and you'll never hit the >>> 'elem >>> is list head' condition since we moved all elems from >>> encoder->bridge_chain to exynos_dsi->bridge_chain. The only way this >>> can work is if we stop using the helpers and implement our own list >>> iterators. >> Just to make it clear, calling INIT_LIST_HEAD(encoder->bridge_chain) >> doesn't really fix the bug, it just prevents the hang (infinite loop) >> and turn all drm_bridge_chain_xx() calls into NOPs. > > Right, I've just checked it and indeed the display chain outputs > nothing after such 'fix'. To get it finally working I've replaced > drm_bridge_chain_*() operations for exynos_dsi 'out_bridge' by a > direct calls. I will submit a patch in a few minutes. I hope that such > workaround can be used now to fix the regression until a better > solution is agreed. I've posted a 'quick & working' fix for Exynos DRM DSI driver: https://lkml.org/lkml/2019/12/27/121 Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland 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 X-Spam-Level: X-Spam-Status: No, score=-5.0 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 317E9C2D0DA for ; Fri, 27 Dec 2019 11:03:47 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 0636620828 for ; Fri, 27 Dec 2019 11:03:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="KAoNsNwO" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0636620828 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6FE666E433; Fri, 27 Dec 2019 11:03:46 +0000 (UTC) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6C3806E433 for ; Fri, 27 Dec 2019 11:03:44 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20191227110342euoutp013cc044024cacd26232132e1bcba8e9e4~kNYbeoOeY0637506375euoutp01F for ; Fri, 27 Dec 2019 11:03:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20191227110342euoutp013cc044024cacd26232132e1bcba8e9e4~kNYbeoOeY0637506375euoutp01F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1577444622; bh=7CiodF6lhHlhDpRiOd/eKxBgSk8F/RyuGNECvUfKCw0=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=KAoNsNwOMlXQ0Pzi9lShO69iktQ2sUc9dsB8Rdc/raBB9TLppk8+ctMTWhHNvJ2dF pUhj348RJRsAoWNGkEwJseUkiodpP5n5cpz/Cq+4wNtmBworOU9W0HShbDDnCXB5wV F3M8IRr3rb/2KrMs8V0S5so6mldIdz2VbL9RICp0= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20191227110342eucas1p28cd23e3b2a98d7177cb1446bf78cef27~kNYbL9yew2930829308eucas1p2Y; Fri, 27 Dec 2019 11:03:42 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 26.D9.61286.E05E50E5; Fri, 27 Dec 2019 11:03:42 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20191227110341eucas1p29b093c32e47d33e641d6211f447b8d9c~kNYaf0QF50089800898eucas1p2x; Fri, 27 Dec 2019 11:03:41 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20191227110341eusmtrp2e4938dd116e6bede0f69e187b2b01795~kNYae_giY1700917009eusmtrp2V; Fri, 27 Dec 2019 11:03:41 +0000 (GMT) X-AuditID: cbfec7f2-f0bff7000001ef66-c1-5e05e50e82dc Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 2C.E0.08375.D05E50E5; Fri, 27 Dec 2019 11:03:41 +0000 (GMT) Received: from [106.120.51.15] (unknown [106.120.51.15]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20191227110340eusmtip1fcceb1a658a39abae4f90874dfe174b6~kNYZohbVj2252922529eusmtip1G; Fri, 27 Dec 2019 11:03:40 +0000 (GMT) Subject: Re: [PATCH v4 04/11] drm/bridge: Make the bridge chain a double-linked list From: Marek Szyprowski To: Boris Brezillon , Andrzej Hajda Message-ID: Date: Fri, 27 Dec 2019 12:03:40 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1 MIME-Version: 1.0 In-Reply-To: <32c4c99a-c943-b1e8-d342-2fd8e8719ff0@samsung.com> Content-Language: en-US X-Brightmail-Tracker: H4sIAAAAAAAAA01SfUxNYRj3nnPuuafmtNfFelbGdof5mD7kj9cQhu1gM8xnSJfO0ure7B75 iD/Sl0pR6Os2hFtyRybdVsnmxtxu6S6X8jFFw1qURrUW6rr3HtF/v+f3PL/3+f3ePRytOsP6 cdG6I6Jep4lVs95M9dMR+yKfz4rwoMFuP/K2wq4gyekrSPOzJopY6q0UufrERb0c6mdJ23AP TWy9bQy5b89SkJakXiXJyDUqSemr5xRpOLeHfLgbQ1IfPlGS8hEzIoUXe1gyUneFWaUSbl+5 jYT+16lK4UOekxJqOoxIqDV0KIXi9CKFUGnKYIXGHAclvD9rpQRjfhsrnKsyIeFR9kVGGKic uZkP814eKcZGHxX1gaER3ofqazvpwzZy/Hu2iU1EaYGZyIsDvARK7p9n3ViFyxHkpoRmIm8X HkSQcq9TIRcDCPIbS5TjCtNgBSM3biIYzemm5KIPQXfXR89bU/EOsP1O9ChYHAyZfZkefhoO g89dHR41jYcZKM9+7NrBcTwOhdKWHe4ZBs+B1tHLyI2n433gLDJTbszjKWAr+sS4sRdeCb/M vxRuTONZkGwupmXsC28/XfUYAvyIg/eOMUq2vRaqSmoZGU+FL9aqv3FmgLN2XJCMoMt+RykX WQheJBUieWoZvLP/ZN1OaTwf7tb9/b3VUFp/2kMD9oHXfVNkEz5wobqAlmke0tNU8vRcMFgr /q21tDroHKQ2TIhmmBDHMCGO4f/eEsSYkK8YL2mjRClYJx4LkDRaKV4XFXAwTluJXOfZPGb9 UYOGHAcaEOaQejIfVMOEqxSao9IJbQMCjlZP43VRinAVH6k5kSDq4/br42NFqQH5c4zalw+5 3rNPhaM0R8QYUTws6se7FOfl5zqbmgwoG7C2z5h+qhzniYMxNwKTnKnzlijjsyq2BazbXZb7 IKmzwHhqXtr2dUH1+e0bZtPa47usD5L3fl2o/t66MTDlGrkUZLa0l91rtG0KW0MvkG45X2m/ efnUxRUktDwMSRUjHcZJlkkni5duXVnc9Ga9/5Dl65rYnVu6Fkccs/NqRjqkCV5A6yXNHy5/ doGaAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprFKsWRmVeSWpSXmKPExsVy+t/xu7q8T1njDDrf6VjcWneO1aK5w9bi 9JlTTBYH9xxnsph/BCh05et7Nour318yW5x8c5XFYvO5HlaLs01v2C06Jy5ht1h6/SKTxaG+ aIsH67MtWvceYbdY8XMro8WMyS/ZLH7umsfiIOSxZt4aRo/3N1rZPR5M/c/ksePuEkaPnbPu snvM7pjJ6rFpVSebx4kJl5g87ncfZ/JYMu0qm0ffllWMHgd6J7N4fN4kF8AbpWdTlF9akqqQ kV9cYqsUbWhhpGdoaaFnZGKpZ2hsHmtlZKqkb2eTkpqTWZZapG+XoJexZ+c95oKTFhUfe1ex NTC26XcxcnJICJhIrPqyjqWLkYtDSGApo8Ss9cdZIBIyEienNbBC2MISf651sUEUvWaUuHbo CTNIQlggTOLknwZ2EJtNwFCi6y1IESeHiECURPenz8wgDcwCv1kk/j9dzAjRvY5VYmfDSqAV HBy8AnYSS8+GgTSwCKhKXPg7lxHEFhWIldi++SHYAl4BQYmTM5+AXcQpYC/xe+tvsIuYBcwk 5kHVMAvISzRvnQ1li0vcejKfaQKj0Cwk7bOQtMxC0jILScsCRpZVjCKppcW56bnFhnrFibnF pXnpesn5uZsYgeli27Gfm3cwXtoYfIhRgINRiYe3YxdLnBBrYllxZe4hRgkOZiUR3rx01jgh 3pTEyqrUovz4otKc1OJDjKZAz01klhJNzgemsrySeENTQ3MLS0NzY3NjMwslcd4OgYMxQgLp iSWp2ampBalFMH1MHJxSDYwR9SHtaqafZDgPr35t2WbQfzN8Z/BaxvlC3p+vp+wQzIuecHXN yQrxt9x2pRLV4Xrmxpe0Hrz2cdzXeDdSKE/kq1i5y1edy4qta5bcCTj35N7OJr+ju2Z4XfJl mb1gcX/lWSbOnk1HD8xa1XA4nbUn6mrS1HKL3i6dfx6TDopv27H5xvcfs3qVWIozEg21mIuK EwHKGG7cLQMAAA== X-CMS-MailID: 20191227110341eucas1p29b093c32e47d33e641d6211f447b8d9c X-Msg-Generator: CA X-RootMTR: 20191203141542eucas1p23771a9c49ef18144c832fc536bdae61a X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191203141542eucas1p23771a9c49ef18144c832fc536bdae61a References: <20191203141515.3597631-1-boris.brezillon@collabora.com> <20191203141515.3597631-5-boris.brezillon@collabora.com> <4e901ab9-07d4-4238-7322-c7c5a3959513@samsung.com> <20191216155551.083dcbaf@collabora.com> <75a06e2a-4587-ee16-0f5d-af75fbe89793@samsung.com> <20191216162542.261c821c@collabora.com> <60f03d50-7c0f-c3d0-920f-0625c08b2171@samsung.com> <1010f5fc-0672-643c-4410-e053a928cb66@samsung.com> <20191224104422.25dbf980@collabora.com> <20191224104936.6a7c4977@collabora.com> <20191224110307.00ca841d@collabora.com> <32c4c99a-c943-b1e8-d342-2fd8e8719ff0@samsung.com> 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: Mark Rutland , Nikita Yushchenko , Jernej Skrabec , Neil Armstrong , Andrey Smirnov , Jonas Karlman , Seung-Woo Kim , dri-devel@lists.freedesktop.org, Kyungmin Park , Rob Herring , Thierry Reding , Laurent Pinchart , kernel@collabora.com, Sam Ravnborg , Chris Healy , devicetree@vger.kernel.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" SGkgQWxsLAoKT24gMjcuMTIuMjAxOSAxMToyNSwgTWFyZWsgU3p5cHJvd3NraSB3cm90ZToKPiBP biAyNC4xMi4yMDE5IDExOjAzLCBCb3JpcyBCcmV6aWxsb24gd3JvdGU6Cj4+IE9uIFR1ZSwgMjQg RGVjIDIwMTkgMTA6NDk6MzYgKzAxMDAKPj4gQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxs b25AY29sbGFib3JhLmNvbT4gd3JvdGU6Cj4+PiBPbiBUdWUsIDI0IERlYyAyMDE5IDEwOjQ0OjIy ICswMTAwCj4+PiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBjb2xsYWJvcmEuY29t PiB3cm90ZToKPj4+PiBPbiBUdWUsIDI0IERlYyAyMDE5IDEwOjE2OjQ5ICswMTAwCj4+Pj4gQW5k cnplaiBIYWpkYSA8YS5oYWpkYUBzYW1zdW5nLmNvbT4gd3JvdGU6Cj4+Pj4+IE9uIDIzLjEyLjIw MTkgMTA6NTUsIE1hcmVrIFN6eXByb3dza2kgd3JvdGU6Cj4+Pj4+PiBPbiAxNi4xMi4yMDE5IDE2 OjI1LCBCb3JpcyBCcmV6aWxsb24gd3JvdGU6Cj4+Pj4+Pj4gT24gTW9uLCAxNiBEZWMgMjAxOSAx NjowMjozNiArMDEwMAo+Pj4+Pj4+IE1hcmVrIFN6eXByb3dza2kgPG0uc3p5cHJvd3NraUBzYW1z dW5nLmNvbT4gd3JvdGU6Cj4+Pj4+Pj4+IE9uIDE2LjEyLjIwMTkgMTU6NTUsIEJvcmlzIEJyZXpp bGxvbiB3cm90ZToKPj4+Pj4+Pj4+IE9uIE1vbiwgMTYgRGVjIDIwMTkgMTQ6NTQ6MjUgKzAxMDAK Pj4+Pj4+Pj4+IE1hcmVrIFN6eXByb3dza2kgPG0uc3p5cHJvd3NraUBzYW1zdW5nLmNvbT4gd3Jv dGU6Cj4+Pj4+Pj4+Pj4gT24gMDMuMTIuMjAxOSAxNToxNSwgQm9yaXMgQnJlemlsbG9uIHdyb3Rl Ogo+Pj4+Pj4+Pj4+PiBTbyB0aGF0IGVhY2ggZWxlbWVudCBpbiB0aGUgY2hhaW4gY2FuIGVhc2ls eSBhY2Nlc3MgaXRzIAo+Pj4+Pj4+Pj4+PiBwcmVkZWNlc3Nvci4KPj4+Pj4+Pj4+Pj4gVGhpcyB3 aWxsIGJlIG5lZWRlZCB0byBzdXBwb3J0IGJ1cyBmb3JtYXQgbmVnb3RpYXRpb24gCj4+Pj4+Pj4+ Pj4+IGJldHdlZW4gZWxlbWVudHMKPj4+Pj4+Pj4+Pj4gb2YgdGhlIGJyaWRnZSBjaGFpbi4KPj4+ Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogQm9yaXMgQnJlemlsbG9uIDxib3Jp cy5icmV6aWxsb25AY29sbGFib3JhLmNvbT4KPj4+Pj4+Pj4+Pj4gUmV2aWV3ZWQtYnk6IE5laWwg QXJtc3Ryb25nIDxuYXJtc3Ryb25nQGJheWxpYnJlLmNvbT4KPj4+Pj4+Pj4+Pj4gUmV2aWV3ZWQt Ynk6IExhdXJlbnQgUGluY2hhcnQgCj4+Pj4+Pj4+Pj4+IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFz b25ib2FyZC5jb20+Cj4+Pj4+Pj4+Pj4gSSd2ZSBub3RpY2VkIHRoYXQgdGhpcyBwYXRjaCBnb3Qg bWVyZ2VkIHRvIGxpbnV4LW5leHQgYXMgY29tbWl0Cj4+Pj4+Pj4+Pj4gMDUxOTNkYzM4MTk3MDIx ODk0YjE3MjM5ZmFmYmQyZWIxYWZlNWE0NS4gU2FkbHkgaXQgYnJlYWtzIAo+Pj4+Pj4+Pj4+IGJv b3Rpbmcgb2YKPj4+Pj4+Pj4+PiBTYW1zdW5nIEV4eW5vczUyNTAtYmFzZWQgQXJuZGFsZSBib2Fy ZC4gQm9vdGluZyBzdG9wcyBhZnRlciAKPj4+Pj4+Pj4+PiBmb2xsb3dpbmcKPj4+Pj4+Pj4+PiBt ZXNzYWdlczoKPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IFtkcm1dIEV4eW5vcyBEUk06IHVzaW5nIDE0 NDAwMDAwLmZpbWQgZGV2aWNlIGZvciBETUEgbWFwcGluZyAKPj4+Pj4+Pj4+PiBvcGVyYXRpb25z Cj4+Pj4+Pj4+Pj4gZXh5bm9zLWRybSBleHlub3MtZHJtOiBib3VuZCAxNDQwMDAwMC5maW1kIChv cHMgCj4+Pj4+Pj4+Pj4gZmltZF9jb21wb25lbnRfb3BzKQo+Pj4+Pj4+Pj4+IGV4eW5vcy1kcm0g ZXh5bm9zLWRybTogYm91bmQgMTQ0NTAwMDAubWl4ZXIgKG9wcyAKPj4+Pj4+Pj4+PiBtaXhlcl9j b21wb25lbnRfb3BzKQo+Pj4+Pj4+Pj4+IGV4eW5vcy1kcm0gZXh5bm9zLWRybTogYm91bmQgMTQ1 MDAwMDAuZHNpIChvcHMgCj4+Pj4+Pj4+Pj4gZXh5bm9zX2RzaV9jb21wb25lbnRfb3BzKQo+Pj4+ Pj4+Pj4+IGV4eW5vcy1kcm0gZXh5bm9zLWRybTogYm91bmQgMTQ1MzAwMDAuaGRtaSAob3BzIAo+ Pj4+Pj4+Pj4+IGhkbWlfY29tcG9uZW50X29wcykKPj4+Pj4+Pj4+PiBbZHJtXSBTdXBwb3J0cyB2 YmxhbmsgdGltZXN0YW1wIGNhY2hpbmcgUmV2IDIgKDIxLjEwLjIwMTMpLgo+Pj4+Pj4+Pj4+IFtk cm1dIE5vIGRyaXZlciBzdXBwb3J0IGZvciB2YmxhbmsgdGltZXN0YW1wIHF1ZXJ5Lgo+Pj4+Pj4+ Pj4+IFtkcm1dIENhbm5vdCBmaW5kIGFueSBjcnRjIG9yIHNpemVzCj4+Pj4+Pj4+Pj4gW2RybV0g Q2Fubm90IGZpbmQgYW55IGNydGMgb3Igc2l6ZXMKPj4+Pj4+Pj4+PiBbZHJtXSBJbml0aWFsaXpl ZCBleHlub3MgMS4xLjAgMjAxODAzMzAgZm9yIGV4eW5vcy1kcm0gb24gCj4+Pj4+Pj4+Pj4gbWlu b3IgMAo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gSSB3aWxsIHRyeSB0byBkZWJ1ZyB0aGlzIGFuZCBw cm92aWRlIG1vcmUgaW5mb3JtYXRpb24gc29vbi4KPj4+Pj4+Pj4+IENhbiB5b3UgdHJ5IHdpdGgg dGhpcyBkaWZmIGFwcGxpZWQ/Cj4+Pj4+Pj4+IFRoaXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYW55 dGhpbmcuCj4+Pj4+Pj4gT2theS4gQ2FuIHlvdSBkbyBhIGxpc3RfZm9yX2VhY2hfZW50cnkoKSBv biBib3RoIAo+Pj4+Pj4+IGVuY29kZXItPmJyaWRnZV9jaGFpbgo+Pj4+Pj4+IGFuZCBkc2ktPmJy aWRnZV9jaGFpbiAoZHVtcCBicmlkZ2UgcG9pbnRlcnMgaW4gYSBwcl9pbmZvKCkpIAo+Pj4+Pj4+ IGJlZm9yZSBhbmQKPj4+Pj4+PiBhZnRlciB0aGUgbGlzdF9zcGxpY2VfaW5pdCgpIGNhbGw/Cj4+ Pj4+PiBlbmNvZGVyLT5icmlkZ2VfY2hhaW4gY29udGFpbnMgb25seSBvbmUgZWxlbWVudC4gZHNp LT5kcml2ZV9jaGFpbiAKPj4+Pj4+IGlzIGVtcHR5Lgo+Pj4+Pj4KPj4+Pj4+IFJlcGxhY2luZyB0 aGF0IGxpc3Rfc3BsaWNlKCkgd2l0aCAKPj4+Pj4+IElOSVRfTElTVF9IRUFEKCZlbmNvZGVyLT5i cmlkZ2VfY2hhaW4pCj4+Pj4+PiBmaXhlZCB0aGUgYm9vdCBpc3N1ZS4KPj4+PiBJZiBJTklUX0xJ U1RfSEVBRCgpIHdvcmtlZCwgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSByZXBsYWNpbmcgdGhlCj4+ Pj4gbGlzdF9zcGxpY2UoKSBjYWxsIGJ5IGEgbGlzdF9zcGxpY2VfaW5pdCgpICh3aGljaCBkb2lu ZyBhIAo+Pj4+IGxpc3Rfc3BsaWNlKCkKPj4+PiArIElOSVRfTElTVF9IRUFEKCkpIGRpZG4ndCBm aXggdGhlIHByb2JsZW0uIEFyZSB5b3Ugc3VyZSB0aGUKPj4+PiBsaXN0X3NwbGljZV9pbml0KCkg dmVyc2lvbiBkb2Vzbid0IHdvcms/Cj4+Pj4+PiBJdCBsb29rcyB0aGF0IHRoaXMgaXMgcmVsYXRl ZCB3aXRoIHRoZSB3YXkgdGhlCj4+Pj4+PiBFeHlub3MgRFNJIGhhbmRsZXMgYnJpZGdlcyAoaW4g YnJpZGdlIGFuZCBvdXQgYnJpZ2U/KS4gTWF5YmUgQW5kcnplago+Pj4+Pj4gd2lsbCBnaXZlIGEg Yml0IG1vcmUgZGV0YWlsZWQgY29tbWVudCBhbmQgc3ByZWFkIHNvbWUgbGlnaHQgb24gdGhpcy4K Pj4+Pj4KPj4+Pj4gSGkgTWFyZWssIEJvcmlzLAo+Pj4+Pgo+Pj4+Pgo+Pj4+PiBJIGhhdmUgbm90 IGZvbGxvd2VkIGxhdGVzdCBwYXRjaGVzIGR1ZSB0byBoaWdoIHdvcmsgbG9hZCwgbXkgYmFkLiAK Pj4+Pj4gTWFyZWsKPj4+Pj4gdGhhbmtzIGZyb20gcG9pbnRpbmcKPj4+Pj4KPj4+Pj4gQWJvdXQg RXh5bm9zRFNJIGJyaWRnZSBoYW5kbGluZzoKPj4+Pj4KPj4+Pj4gVGhlIG9yZGVyIG9mIGNhbGxp bmcgZW5jb2RlciwgYnJpZGdlIChhbmQgY29uc2VxdWVudGx5IHBhbmVsKSBvcHMKPj4+Pj4gZW5m b3JjZWQgYnkgRFJNIGNvcmUgKGJyaWRnZS0+cHJlX2VuYWJsZSwgZW5jb2Rlci0+ZW5hYmxlLAo+ Pj4+PiBicmlkZ2UtPmVuYWJsZSkgZG9lcyBub3QgZml0IHRvIEV4eW5vc0RTSSBoYXJkd2FyZSBp bml0aWFsaXphdGlvbgo+Pj4+PiBzZXF1ZW5jZSwgaWYgSSByZW1lbWJlciBjb3JyZWN0bHkgaXQg ZG9lcyBub3QgZml0IHRvIHdob2xlIE1JUEkgRFNJCj4+Pj4+IHN0YW5kYXJkIChJIHRoaW5rIHNp bWlsYXIgc2l0dWF0aW9uIGlzIHdpdGggZURQKS4gQXMgYSByZXN1bHQgRFNJCj4+Pj4+IGRyaXZl cnMgbXVzdCB1c2Ugc29tZSB1Z2x5IHdvcmthcm91bmRzLCByZWx5IG9uIEhXIHByb3Blcmx5IGNv cGluZyAKPj4+Pj4gd2l0aAo+Pj4+PiBpbmNvcnJlY3Qgc2VxdWVuY2VzLCBvciwgYXMgaW4gY2Fz ZSBvZiBFeHlub3NEU0kgZHJpdmVyLCBqdXN0IGF2b2lkCj4+Pj4+IHVzaW5nIGVuY29kZXItPmJy aWRnZSBjaGFpbmluZyBhbmQgY2FsbCBicmlkZ2Ugb3BzIGJ5IGl0c2VsZiB3aGVuIAo+Pj4+PiBz dWl0YWJsZS4KPj4+PiBZZXMsIHRoYXQncyBkZWZpbml0ZWx5IGhhY2staXNoLCBhbmQgSSBwcm9w b3NlZCAyIHNvbHV0aW9ucyB0byBhZGRyZXNzCj4+Pj4gdGhhdCBpbiBwcmV2aW91cyB2ZXJzaW9u cyBvZiB0aGlzIHBhdGNoc2V0LCB1bmZvcnR1bmF0ZWx5IEkgZGlkbid0IGdldAo+Pj4+IGFueSBm ZWVkYmFjayBzbyBJIHdlbnQgZm9yIHRoZSBsZXNzIGludmFzaXZlIG9wdGlvbiAoa2VlcCB0aGUg aGFjayBidXQKPj4+PiBhZGFwdCBpdCB0byB0aGUgZG91YmxlLWxpbmtlZCBsaXN0IGNoYW5nZXMp LCB3aGljaCBzdGlsbCBsZWFkIHRvCj4+Pj4gcmVncmVzc2lvbnMgOi0vLgo+Pj4+Cj4+Pj4gSnVz dCBhIHJlbWluZGVyIG9mIG15IDIgcHJvcG9zYWxzOgo+Pj4+Cj4+Pj4gMS8gaW1wbGVtZW50IHRo ZSBicmlkZ2Vfb3BzLT5wcmVfZW5hYmxlL3Bvc3RfZGlzYWJsZSgpIGhvb2tzIHNvIHlvdSAKPj4+ PiBjYW4KPj4+PiDCoMKgwqAgc3BsaXQgeW91ciBlbmFibGUvZGlzYWJsZSBsb2dpYyBpbiAyIHBh cnRzIGFuZCBtYWtlIHN1cmUgdGhpbmdzIAo+Pj4+IGFyZQo+Pj4+IMKgwqDCoCByZWFkeSB3aGVu IHRoZSBwYW5lbC9uZXh0IGJyaWRnZSB0cmllcyB0byBzZW5kIERTSSBjb21tYW5kcwo+Pj4+IDIv IG1vdmUgZXZlcnl0aGluZyB0aGF0J3MgbmVlZGVkIHRvIHNlbmQgRFNJIGNvbW1hbmRzIG91dCBv ZiB0aGUKPj4+PiDCoMKgwqAgLT5lbmFibGUoKSBwYXRoIChtYXliZSBpbiBydW50aW1lIFBNIHJl c3VtZS9zdXNwZW5kIGhvb2tzKSBzbyB5b3UKPj4+PiDCoMKgwqAgY2FuIGNhbGwgdGhhdCBpbiB0 aGUgRFNJIHRyYW5zZmVyIHBhdGggdG9vCj4+Pj4KPj4+PiBBcyBwb2ludGVkIG91dCBieSBMYXVy ZW50LCAjMSBkb2Vzbid0IHdvcmsgYmVjYXVzZSBzb21lIHBhbmVsIGRyaXZlcnMKPj4+PiBzZW5k IERTSSBjb21tYW5kcyBpbiB0aGVpciAtPnByZXBhcmUoKSBob29rLCBhbmQgLT5wcmVfZW5hYmxl KCkgCj4+Pj4gbWV0aG9kcwo+Pj4+IGFyZSBjYWxsZWQgaW4gcmV2ZXJzZSBvcmRlciwgbWVhbmlu ZyB0aGF0IHRoZSBEUk0gcGFuZWwgYnJpZGdlIGRyaXZlcgo+Pj4+IHdvdWxkIHRyeSB0byBpc3N1 ZSBEU0kgY29tbWFuZHMgYmVmb3JlIHRoZSBEU0kgaG9zdCBjb250cm9sbGVycyBpcyAKPj4+PiBy ZWFkeQo+Pj4+IHRvIHNlbmQgdGhlbS4gSSBzdGlsbCB0aGluZyAjMiBpcyBhIGdvb2Qgb3B0aW9u Lgo+Pj4+PiBTbyBwcm9wZXIgcGF0Y2ggY29udmVydGluZyB0byBkb3VibGUtbGlua2VkIGxpc3Qg c2hvdWxkIG5vdCB0cnkgdG8KPj4+Pj4gc3BsaWNlIEV4eW5vc0RTSSBwcml2YXRlIGJyaWRnZSBs aXN0IHdpdGggd2l0aCBlbmNvZGVyJ3MsIAo+Pj4+PiBlbmNvZGVyJ3MgbGlzdAo+Pj4+PiBzaG91 bGQgYmUgYWx3YXlzIGVtcHR5LCBhcyBNYXJlayBzdWdnZXN0ZWQuCj4+Pj4gVGhhdCdzIGV4YWN0 bHkgd2hhdCBJIHdhbnRlZCB0byBkbzogbWFrZSB0aGUgZW5jb2RlcidzIGxpc3QgZW1wdHkgCj4+ Pj4gYWZ0ZXIKPj4+PiBhdHRhY2goKSBhbmQgcmVzdG9yZSBpdCB0byBpdHMgaW5pdGlhbCBzdGF0 ZSBiZWZvcmUgdW5yZWdpc3RlcmluZwo+Pj4+IHRoZSBicmlkZ2UsIGV4Y2VwdCBJIGZvcmdvdCB0 aGF0IGxpc3Rfc3BsaWNlKCkgZG9lc24ndCBjYWxsCj4+Pj4gSU5JVF9MSVNUX0hFQUQoKS4gSXQn cyBzdGlsbCBub3QgY2xlYXIgdG8gbWUgd2h5IHJlcGxhY2luZyB0aGUKPj4+PiBsaXN0X3NwbGlj ZSgpIGNhbGwgYnkgYSBsaXN0X3NwbGljZV9pbml0KCkgZGlkbid0IHdvcmsuCj4+PiBPa2F5LCBJ IHRoaW5rIEkgZmlndXJlZCBpdCBvdXQ6IGRybV9icmlkZ2VfY2hhaW5feHgoKSBoZWxwZXJzIHVz ZQo+Pj4gZW5jb2Rlci0+YnJpZGdlX2NoYWluIGFzIHRoZWlyIGxpc3QgaGVhZCwgYW5kIHlvdSds bCBuZXZlciBoaXQgdGhlIAo+Pj4gJ2VsZW0KPj4+IGlzIGxpc3QgaGVhZCcgY29uZGl0aW9uIHNp bmNlIHdlIG1vdmVkIGFsbCBlbGVtcyBmcm9tCj4+PiBlbmNvZGVyLT5icmlkZ2VfY2hhaW4gdG8g ZXh5bm9zX2RzaS0+YnJpZGdlX2NoYWluLiBUaGUgb25seSB3YXkgdGhpcwo+Pj4gY2FuIHdvcmsg aXMgaWYgd2Ugc3RvcCB1c2luZyB0aGUgaGVscGVycyBhbmQgaW1wbGVtZW50IG91ciBvd24gbGlz dAo+Pj4gaXRlcmF0b3JzLgo+PiBKdXN0IHRvIG1ha2UgaXQgY2xlYXIsIGNhbGxpbmcgSU5JVF9M SVNUX0hFQUQoZW5jb2Rlci0+YnJpZGdlX2NoYWluKQo+PiBkb2Vzbid0IHJlYWxseSBmaXggdGhl IGJ1ZywgaXQganVzdCBwcmV2ZW50cyB0aGUgaGFuZyAoaW5maW5pdGUgbG9vcCkKPj4gYW5kIHR1 cm4gYWxsIGRybV9icmlkZ2VfY2hhaW5feHgoKSBjYWxscyBpbnRvIE5PUHMuCj4KPiBSaWdodCwg SSd2ZSBqdXN0IGNoZWNrZWQgaXQgYW5kIGluZGVlZCB0aGUgZGlzcGxheSBjaGFpbiBvdXRwdXRz IAo+IG5vdGhpbmcgYWZ0ZXIgc3VjaCAnZml4Jy4gVG8gZ2V0IGl0IGZpbmFsbHkgd29ya2luZyBJ J3ZlIHJlcGxhY2VkIAo+IGRybV9icmlkZ2VfY2hhaW5fKigpIG9wZXJhdGlvbnMgZm9yIGV4eW5v c19kc2kgJ291dF9icmlkZ2UnIGJ5IGEgCj4gZGlyZWN0IGNhbGxzLiBJIHdpbGwgc3VibWl0IGEg cGF0Y2ggaW4gYSBmZXcgbWludXRlcy4gSSBob3BlIHRoYXQgc3VjaCAKPiB3b3JrYXJvdW5kIGNh biBiZSB1c2VkIG5vdyB0byBmaXggdGhlIHJlZ3Jlc3Npb24gdW50aWwgYSBiZXR0ZXIgCj4gc29s dXRpb24gaXMgYWdyZWVkLgoKSSd2ZSBwb3N0ZWQgYSAncXVpY2sgJiB3b3JraW5nJyBmaXggZm9y IEV4eW5vcyBEUk0gRFNJIGRyaXZlcjoKCmh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDE5LzEyLzI3 LzEyMQoKQmVzdCByZWdhcmRzCi0tIApNYXJlayBTenlwcm93c2tpLCBQaEQKU2Ftc3VuZyBSJkQg SW5zdGl0dXRlIFBvbGFuZAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCg==