From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net [217.70.183.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E43A0145323; Mon, 26 May 2025 07:20:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.199 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748244041; cv=none; b=thq+XN7yLTFYgC428Kwkh6sAgQNV8izgH372vMlDoGf/8XSGbcCnhEcZ3E5XGNslPnOxIN3dJ74E1fWUBRDAritlZoZeGfmOQT1+79A+Dy4hps0omzEo3sen2yqHGeHhODTGS6xoo4W+vaaYjE8aop43m+ZrHj45kHnz6Vj2rE4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748244041; c=relaxed/simple; bh=E7nsl7EWs55+/uUhfc7iqd4zyB1Z1lv1eOZEgqQ0ZBI=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=eD154JLeQPwa+KzKGaJc94uFlLAYtljoMRo4Nduvf+4tGjcJKlvw90nT4VxMlMdSAXhYEcyBWBA5HZ6Eb/k5HjKwtQnyEPwg7bTN++3SkB6sLhAOwKNosaqwp8x/mDiUMbkQH0P9ofTsxYOL9QoCfiP5OytR954dMh2g3aLtV5M= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=ERsZFnNG; arc=none smtp.client-ip=217.70.183.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="ERsZFnNG" Received: by mail.gandi.net (Postfix) with ESMTPSA id 16875442B5; Mon, 26 May 2025 07:20:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1748244030; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QLkd7DkuwItmUeCsro4GRU7KY1n+af+fkKCtRJvc72M=; b=ERsZFnNGGx1taTjFML/F7g48As15TWrVqpm7AQM6ITdhjMQXPkfTl1YTY624dt2A61ojKn C4GrIy3LvMnZuQ3f48MHbrAItO9yt2FMHAqBFQBNWnAd4H+GlbFkLp+0Q5jpHR5ME8BtSC rLb2TykZsJeBxh/2UPnUC+byagvOBWEHs+mzz5buaw+VAmwRzWbNg55alaA49c/WX7dEK/ fsh2zNr1ZhqaGyMrCEJNSdr/QBQDpvqqwK5PYQ+P4KU7TlWYdbGXAPWQsVfUnDZH7GHJxL bRcPS+1N1hdPuMOBL2LrEIz8HJMPOUVPD7+c3bsfVFBouRX3auSsw6Kbri6nhA== Date: Mon, 26 May 2025 09:20:24 +0200 From: Luca Ceresoli To: Liu Ying Cc: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Jagan Teki , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Douglas Anderson , Chun-Kuang Hu , Krzysztof Kozlowski , Anusha Srivatsa , Paul Kocialkowski , Dmitry Baryshkov , Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, asahi@lists.linux.dev, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-renesas-soc@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-stm32@st-md-mailman.stormreply.com Subject: Re: [PATCH v2 30/34] drm/bridge: imx8qxp-pixel-combiner: convert to devm_drm_bridge_alloc() API Message-ID: <20250526092024.48cae4ae@booty> In-Reply-To: <67252c36-8b31-4c40-9d89-4f502da4a087@nxp.com> References: <20250424-drm-bridge-convert-to-alloc-api-v2-0-8f91a404d86b@bootlin.com> <20250424-drm-bridge-convert-to-alloc-api-v2-30-8f91a404d86b@bootlin.com> <553d62ed-976a-4e17-9678-cdc3d40ce4a7@nxp.com> <20250430112944.1b39caab@booty> <20250506224720.5cbcf3e1@booty> <67252c36-8b31-4c40-9d89-4f502da4a087@nxp.com> Organization: Bootlin X-Mailer: Claws Mail 4.3.1 (GTK 3.24.49; x86_64-redhat-linux-gnu) Precedence: bulk X-Mailing-List: asahi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddtgdduieeltdculddtuddrgeefvddrtddtmdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhepfffhvfevuffkjghfohfogggtgfesthhqredtredtjeenucfhrhhomhepnfhutggrucevvghrvghsohhlihcuoehluhgtrgdrtggvrhgvshholhhisegsohhothhlihhnrdgtohhmqeenucggtffrrghtthgvrhhnpefgfeetieeutdeifefggfegheelgeefiefgffeifeeujeehkeffgeehhfevfefhjeenucffohhmrghinhepkhgvrhhnvghlrdhorhhgpdhfrhgvvgguvghskhhtohhprdhorhhgpdgsohhothhlihhnrdgtohhmnecukfhppedvrgdtvdemieejtdemvddtvddtmegvrgdtudemsggvgedumeelhegvjeemfeegfeemledufegvnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepvdgrtddvmeeijedtmedvtddvtdemvggrtddumegsvgegudemleehvgejmeefgeefmeeludefvgdphhgvlhhopegsohhothihpdhmrghilhhfrhhomheplhhutggrrdgtvghrvghsohhlihessghoohhtlhhinhdrtghomhdpnhgspghrtghpthhtohepfeelpdhrtghpthhtohepvhhitghtohhrrdhlihhusehngihprdgtohhmpdhrtghpthhtohepmhgrrghrthgvnhdrlhgrnhhkh hhorhhstheslhhinhhugidrihhnthgvlhdrtghomhdprhgtphhtthhopehmrhhiphgrrhgusehkvghrnhgvlhdrohhrghdprhgtphhtthhopehtiihimhhmvghrmhgrnhhnsehsuhhsvgdruggvpdhrtghpthhtoheprghirhhlihgvugesghhmrghilhdrtghomhdprhgtphhtthhopehsihhmohhnrgesfhhffihllhdrtghhpdhrtghpthhtoheprghnughriigvjhdrhhgrjhgurgesihhnthgvlhdrtghomhdprhgtphhtthhopehnvghilhdrrghrmhhsthhrohhngheslhhinhgrrhhordhorhhg X-GND-Sasl: luca.ceresoli@bootlin.com Hello Liu, On Thu, 22 May 2025 11:01:13 +0800 Liu Ying wrote: > On 05/07/2025, Luca Ceresoli wrote: >=20 > [...] >=20 > >> After looking into this patch and patch 31(though I've already provide= d my A-b) > >> more closely, I think the imx8qxp_pc and imx8{qm,qxp}_ldb main structu= res > >> should have the same life time with the embedded DRM bridges, because = for > >> example the clk_apb clock in struct imx8qxp_pc would be accessed by the > >> imx8qxp_pc_bridge_mode_set DRM bridge callback. But, IIUC, your patch= es extend > >> the life time for the embedded channel/bridge structures only, but not= for the > >> main structures. What do you think ? =20 > >=20 > > I see you concern, but I'm sure the change I'm introducing is not > > creating the problem you are concerned about. > >=20 > > The key aspect is that my patch is merely changing the lifetime of the > > _allocation_ of the drm_bridge, not its usage. On drm_bridge_remove() > > the bridge is removed from its encoder chain and it is completely not > > reachable, both before and after my patch. With my patch it is not =20 >=20 > drm_bridge_remove() only removes a bridge from the global bridge_list def= ined > in drm_bridge.c. drm_bridge_detach() is the one which removes a bridge f= rom > it's encoder chain. It looks like you wrongly thought drm_bridge_remove() > is drm_bridge_detach(). Indeed my sentence was inaccurate, sorry about that. > So, even if drm_bridge_remove() is called, the removed > bridge could still be in it's encoder chain, hence an atomic commit could= still > access the allocated bridge(with lifetime extended) and the clock_apb clo= ck > for example in struct imx8qxp_pc could also be accessed. That's why I th= ink > the main structures should have the same lifetime with the allocated brid= ge. As the long-term goal is to allow bridges to be hot-removable, decoupling the lifetime of the various components is a necessary step. Definitely it will open other issues, and especially the removal during atomic updates. This has been discussed already, and there is a proposed plan to handle it. First, here is the grand plan (mentioned in the v3 cover letter): 1. =E2=9E=9C add refcounting to DRM bridges (struct drm_bridge) 2. handle gracefully atomic updates during bridge removal 3. avoid DSI host drivers to have dangling pointers to DSI devices 4. finally, let bridges be removable (depends on 1+2+3) We are now at step 1. Your concern, as I understand it, will be addressed at step 2. Bridges won't be removable until step 4, so the current changes are not introducing a misbehavior but rather preparing the ground with all the necessary infrastructure changes. Step 2 was discussed in the past [0], and the idea proposed by Maxime is to introduce a "gone" or "unplugged" flag and drm_bridge_enter() / drm_bridge_exit() functions. The principle is the same as struct drm_device.unplugged and drm_dev_enter/exit(). In a nutshell the idea is: - drm_bridge.unplugged is initialized to false - drm_bridge_enter() returns false if drm_bridge.unplugged =3D=3D true - any code holding a pointer to the bridge (including the bridge driver itself) and operating on the bridge (including removal) needs to do: if (drm_bridge_enter()) { do something; drm_bridge_exit(); } - when the bridge is removed, the driver removal function sets dev_bridge.unplugged =3D true The "do something" above includes any access to device resources, including clocks (and clk_apb). In other words, two pieces of code can not access the bridge structure at the same time. This includes bridge removal VS any atomic operations. Do you think this addresses your concern? For you to have a better picture of the path, here's an additional clarification about drm_bridge_attach/detach() and drm_bridge_add/remove(). As part of step 1 of the grand plan, both of them will drm_bridge_get/put() the bridge, so that no bridge is freed if it is either in the global bridge_list or in any encoder chain. Patches for this are already approved by Maxime [1][2]. They cannot be applied until all bridge drivers have been converted to the new devm_drm_bridge_alloc() API, so they depend on this series to be completely applied. We are getting pretty close: as of now the entire series has been applied except for this and another driver. [0] https://lore.kernel.org/all/20250129125153.35d0487a@booty/t/#u [1] https://patchwork.freedesktop.org/patch/643095/ [2] https://patchwork.freedesktop.org/patch/643096/ Best regards, Luca --=20 Luca Ceresoli, Bootlin Embedded Linux and Kernel engineering https://bootlin.com 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 96753C5AD49 for ; Mon, 26 May 2025 08:34:15 +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:MIME-Version:References:In-Reply-To: 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=ivtpDcyb/pvvr19j5jmlXctShcytsa045xhyDwX+8NA=; b=vFAfW0rJaZRh/H de4nulmyIcyh3osSxuTKzSXgrGzha/eV6dDilS2io4VHaVPxW1R7n7RMXvcGykT2g2I1RZw3K9RIW EknAn916mNC77kgGkv01ZJ50CXRGX0Ve5M04URmqiwHnMyeZpA93rkMfHL+e1sBZHhRNY6tX/bijC 5sGJb1SMnyvuMAtaNIcxE66Nwu0Sw0k5b6/RpBqvyFFmjl60vHgL2d3euD9ynRtUMadymyGdvMaQ8 aOL2/RwqQIctdaiVOcE2P6cguSC54nrMiOfYPAE87JnHk2uf9O+zvMcVhlp6hLW5/r1tSuvDM1nXm Gcf+L4qjLmsySbqwgReA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uJTHb-00000008OlQ-1Zf7; Mon, 26 May 2025 08:34:07 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uJS8W-00000008GkH-46mC; Mon, 26 May 2025 07:20:41 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:References:In-Reply-To:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=QLkd7DkuwItmUeCsro4GRU7KY1n+af+fkKCtRJvc72M=; b=C9EsklqshQgYWys2W87LIn6xRy CKGwRyMJZhxns+WlIfA+095HyIrfwyXNe/jK/tGS41AkaKhx7HpcrxmXd+LgLViN+Tlj5qFICWkwn 9oyVE/7HCfRN2piAwCrF3LOI+fpTRSmWtppypmhT4/dQ7l6H+uBOjYTM4N7ybiq/wdS7oD1p/bfGu JI/Uo4YwkLvX3YrmzAWFGKhRIkp0etA83yfDu/YjsSYTOiIDJ3HML8AthfbQfrzu4hk/oySz/j4cp xCXqvViKGY2hblU8MbsA9w3gBO84fRmpuUzoge1ZROWZFxl8KrvoO5OCju3EIi7Nb5qnCyoUbaoFk SMjhuxOw==; Received: from relay9-d.mail.gandi.net ([2001:4b98:dc4:8::229]) by desiato.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uJS8T-00000001orP-0b7K; Mon, 26 May 2025 07:20:39 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 16875442B5; Mon, 26 May 2025 07:20:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1748244030; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QLkd7DkuwItmUeCsro4GRU7KY1n+af+fkKCtRJvc72M=; b=ERsZFnNGGx1taTjFML/F7g48As15TWrVqpm7AQM6ITdhjMQXPkfTl1YTY624dt2A61ojKn C4GrIy3LvMnZuQ3f48MHbrAItO9yt2FMHAqBFQBNWnAd4H+GlbFkLp+0Q5jpHR5ME8BtSC rLb2TykZsJeBxh/2UPnUC+byagvOBWEHs+mzz5buaw+VAmwRzWbNg55alaA49c/WX7dEK/ fsh2zNr1ZhqaGyMrCEJNSdr/QBQDpvqqwK5PYQ+P4KU7TlWYdbGXAPWQsVfUnDZH7GHJxL bRcPS+1N1hdPuMOBL2LrEIz8HJMPOUVPD7+c3bsfVFBouRX3auSsw6Kbri6nhA== Date: Mon, 26 May 2025 09:20:24 +0200 From: Luca Ceresoli To: Liu Ying Cc: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Jagan Teki , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Douglas Anderson , Chun-Kuang Hu , Krzysztof Kozlowski , Anusha Srivatsa , Paul Kocialkowski , Dmitry Baryshkov , Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, asahi@lists.linux.dev, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-renesas-soc@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-stm32@st-md-mailman.stormreply.com Subject: Re: [PATCH v2 30/34] drm/bridge: imx8qxp-pixel-combiner: convert to devm_drm_bridge_alloc() API Message-ID: <20250526092024.48cae4ae@booty> In-Reply-To: <67252c36-8b31-4c40-9d89-4f502da4a087@nxp.com> References: <20250424-drm-bridge-convert-to-alloc-api-v2-0-8f91a404d86b@bootlin.com> <20250424-drm-bridge-convert-to-alloc-api-v2-30-8f91a404d86b@bootlin.com> <553d62ed-976a-4e17-9678-cdc3d40ce4a7@nxp.com> <20250430112944.1b39caab@booty> <20250506224720.5cbcf3e1@booty> <67252c36-8b31-4c40-9d89-4f502da4a087@nxp.com> Organization: Bootlin X-Mailer: Claws Mail 4.3.1 (GTK 3.24.49; x86_64-redhat-linux-gnu) MIME-Version: 1.0 X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddtgdduieeltdculddtuddrgeefvddrtddtmdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhepfffhvfevuffkjghfohfogggtgfesthhqredtredtjeenucfhrhhomhepnfhutggrucevvghrvghsohhlihcuoehluhgtrgdrtggvrhgvshholhhisegsohhothhlihhnrdgtohhmqeenucggtffrrghtthgvrhhnpefgfeetieeutdeifefggfegheelgeefiefgffeifeeujeehkeffgeehhfevfefhjeenucffohhmrghinhepkhgvrhhnvghlrdhorhhgpdhfrhgvvgguvghskhhtohhprdhorhhgpdgsohhothhlihhnrdgtohhmnecukfhppedvrgdtvdemieejtdemvddtvddtmegvrgdtudemsggvgedumeelhegvjeemfeegfeemledufegvnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepvdgrtddvmeeijedtmedvtddvtdemvggrtddumegsvgegudemleehvgejmeefgeefmeeludefvgdphhgvlhhopegsohhothihpdhmrghilhhfrhhomheplhhutggrrdgtvghrvghsohhlihessghoohhtlhhinhdrtghomhdpnhgspghrtghpthhtohepfeelpdhrtghpthhtohepvhhitghtohhrrdhlihhusehngihprdgtohhmpdhrtghpthhtohepmhgrrghrthgvnhdrlhgrnhhkh hhorhhstheslhhinhhugidrihhnthgvlhdrtghomhdprhgtphhtthhopehmrhhiphgrrhgusehkvghrnhgvlhdrohhrghdprhgtphhtthhopehtiihimhhmvghrmhgrnhhnsehsuhhsvgdruggvpdhrtghpthhtoheprghirhhlihgvugesghhmrghilhdrtghomhdprhgtphhtthhopehsihhmohhnrgesfhhffihllhdrtghhpdhrtghpthhtoheprghnughriigvjhdrhhgrjhgurgesihhnthgvlhdrtghomhdprhgtphhtthhopehnvghilhdrrghrmhhsthhrohhngheslhhinhgrrhhordhorhhg X-GND-Sasl: luca.ceresoli@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250526_082037_457679_AE2BA1CA X-CRM114-Status: GOOD ( 29.40 ) 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 SGVsbG8gTGl1LAoKT24gVGh1LCAyMiBNYXkgMjAyNSAxMTowMToxMyArMDgwMApMaXUgWWluZyA8 dmljdG9yLmxpdUBueHAuY29tPiB3cm90ZToKCj4gT24gMDUvMDcvMjAyNSwgTHVjYSBDZXJlc29s aSB3cm90ZToKPiAKPiBbLi4uXQo+IAo+ID4+IEFmdGVyIGxvb2tpbmcgaW50byB0aGlzIHBhdGNo IGFuZCBwYXRjaCAzMSh0aG91Z2ggSSd2ZSBhbHJlYWR5IHByb3ZpZGVkIG15IEEtYikKPiA+PiBt b3JlIGNsb3NlbHksIEkgdGhpbmsgdGhlIGlteDhxeHBfcGMgYW5kIGlteDh7cW0scXhwfV9sZGIg bWFpbiBzdHJ1Y3R1cmVzCj4gPj4gc2hvdWxkIGhhdmUgdGhlIHNhbWUgbGlmZSB0aW1lIHdpdGgg dGhlIGVtYmVkZGVkIERSTSBicmlkZ2VzLCBiZWNhdXNlIGZvcgo+ID4+IGV4YW1wbGUgdGhlIGNs a19hcGIgY2xvY2sgaW4gc3RydWN0IGlteDhxeHBfcGMgd291bGQgYmUgYWNjZXNzZWQgYnkgdGhl Cj4gPj4gaW14OHF4cF9wY19icmlkZ2VfbW9kZV9zZXQgRFJNIGJyaWRnZSBjYWxsYmFjay4gIEJ1 dCwgSUlVQywgeW91ciBwYXRjaGVzIGV4dGVuZAo+ID4+IHRoZSBsaWZlIHRpbWUgZm9yIHRoZSBl bWJlZGRlZCBjaGFubmVsL2JyaWRnZSBzdHJ1Y3R1cmVzIG9ubHksIGJ1dCBub3QgZm9yIHRoZQo+ ID4+IG1haW4gc3RydWN0dXJlcy4gIFdoYXQgZG8geW91IHRoaW5rID8gIAo+ID4gCj4gPiBJIHNl ZSB5b3UgY29uY2VybiwgYnV0IEknbSBzdXJlIHRoZSBjaGFuZ2UgSSdtIGludHJvZHVjaW5nIGlz IG5vdAo+ID4gY3JlYXRpbmcgdGhlIHByb2JsZW0geW91IGFyZSBjb25jZXJuZWQgYWJvdXQuCj4g PiAKPiA+IFRoZSBrZXkgYXNwZWN0IGlzIHRoYXQgbXkgcGF0Y2ggaXMgbWVyZWx5IGNoYW5naW5n IHRoZSBsaWZldGltZSBvZiB0aGUKPiA+IF9hbGxvY2F0aW9uXyBvZiB0aGUgZHJtX2JyaWRnZSwg bm90IGl0cyB1c2FnZS4gT24gZHJtX2JyaWRnZV9yZW1vdmUoKQo+ID4gdGhlIGJyaWRnZSBpcyBy ZW1vdmVkIGZyb20gaXRzIGVuY29kZXIgY2hhaW4gYW5kIGl0IGlzIGNvbXBsZXRlbHkgbm90Cj4g PiByZWFjaGFibGUsIGJvdGggYmVmb3JlIGFuZCBhZnRlciBteSBwYXRjaC4gV2l0aCBteSBwYXRj aCBpdCBpcyBub3QgIAo+IAo+IGRybV9icmlkZ2VfcmVtb3ZlKCkgb25seSByZW1vdmVzIGEgYnJp ZGdlIGZyb20gdGhlIGdsb2JhbCBicmlkZ2VfbGlzdCBkZWZpbmVkCj4gaW4gZHJtX2JyaWRnZS5j LiAgZHJtX2JyaWRnZV9kZXRhY2goKSBpcyB0aGUgb25lIHdoaWNoIHJlbW92ZXMgYSBicmlkZ2Ug ZnJvbQo+IGl0J3MgZW5jb2RlciBjaGFpbi4gIEl0IGxvb2tzIGxpa2UgeW91IHdyb25nbHkgdGhv dWdodCBkcm1fYnJpZGdlX3JlbW92ZSgpCj4gaXMgZHJtX2JyaWRnZV9kZXRhY2goKS4KCkluZGVl ZCBteSBzZW50ZW5jZSB3YXMgaW5hY2N1cmF0ZSwgc29ycnkgYWJvdXQgdGhhdC4KCj4gU28sIGV2 ZW4gaWYgZHJtX2JyaWRnZV9yZW1vdmUoKSBpcyBjYWxsZWQsIHRoZSByZW1vdmVkCj4gYnJpZGdl IGNvdWxkIHN0aWxsIGJlIGluIGl0J3MgZW5jb2RlciBjaGFpbiwgaGVuY2UgYW4gYXRvbWljIGNv bW1pdCBjb3VsZCBzdGlsbAo+IGFjY2VzcyB0aGUgYWxsb2NhdGVkIGJyaWRnZSh3aXRoIGxpZmV0 aW1lIGV4dGVuZGVkKSBhbmQgdGhlIGNsb2NrX2FwYiBjbG9jawo+IGZvciBleGFtcGxlIGluIHN0 cnVjdCBpbXg4cXhwX3BjIGNvdWxkIGFsc28gYmUgYWNjZXNzZWQuICBUaGF0J3Mgd2h5IEkgdGhp bmsKPiB0aGUgbWFpbiBzdHJ1Y3R1cmVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGxpZmV0aW1lIHdp dGggdGhlIGFsbG9jYXRlZCBicmlkZ2UuCgpBcyB0aGUgbG9uZy10ZXJtIGdvYWwgaXMgdG8gYWxs b3cgYnJpZGdlcyB0byBiZSBob3QtcmVtb3ZhYmxlLApkZWNvdXBsaW5nIHRoZSBsaWZldGltZSBv ZiB0aGUgdmFyaW91cyBjb21wb25lbnRzIGlzIGEgbmVjZXNzYXJ5IHN0ZXAuCkRlZmluaXRlbHkg aXQgd2lsbCBvcGVuIG90aGVyIGlzc3VlcywgYW5kIGVzcGVjaWFsbHkgdGhlIHJlbW92YWwgZHVy aW5nCmF0b21pYyB1cGRhdGVzLiBUaGlzIGhhcyBiZWVuIGRpc2N1c3NlZCBhbHJlYWR5LCBhbmQg dGhlcmUgaXMgYQpwcm9wb3NlZCBwbGFuIHRvIGhhbmRsZSBpdC4KCkZpcnN0LCBoZXJlIGlzIHRo ZSBncmFuZCBwbGFuIChtZW50aW9uZWQgaW4gdGhlIHYzIGNvdmVyIGxldHRlcik6CgogMS4g4p6c IGFkZCByZWZjb3VudGluZyB0byBEUk0gYnJpZGdlcyAoc3RydWN0IGRybV9icmlkZ2UpCiAyLiBo YW5kbGUgZ3JhY2VmdWxseSBhdG9taWMgdXBkYXRlcyBkdXJpbmcgYnJpZGdlIHJlbW92YWwKIDMu IGF2b2lkIERTSSBob3N0IGRyaXZlcnMgdG8gaGF2ZSBkYW5nbGluZyBwb2ludGVycyB0byBEU0kg ZGV2aWNlcwogNC4gZmluYWxseSwgbGV0IGJyaWRnZXMgYmUgcmVtb3ZhYmxlIChkZXBlbmRzIG9u IDErMiszKQoKV2UgYXJlIG5vdyBhdCBzdGVwIDEuIFlvdXIgY29uY2VybiwgYXMgSSB1bmRlcnN0 YW5kIGl0LCB3aWxsIGJlCmFkZHJlc3NlZCBhdCBzdGVwIDIuIEJyaWRnZXMgd29uJ3QgYmUgcmVt b3ZhYmxlIHVudGlsIHN0ZXAgNCwgc28gdGhlCmN1cnJlbnQgY2hhbmdlcyBhcmUgbm90IGludHJv ZHVjaW5nIGEgbWlzYmVoYXZpb3IgYnV0IHJhdGhlciBwcmVwYXJpbmcKdGhlIGdyb3VuZCB3aXRo IGFsbCB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGNoYW5nZXMuCgpTdGVwIDIgd2FzIGRp c2N1c3NlZCBpbiB0aGUgcGFzdCBbMF0sIGFuZCB0aGUgaWRlYSBwcm9wb3NlZCBieSBNYXhpbWUK aXMgdG8gaW50cm9kdWNlIGEgImdvbmUiIG9yICJ1bnBsdWdnZWQiIGZsYWcgYW5kIGRybV9icmlk Z2VfZW50ZXIoKSAvCmRybV9icmlkZ2VfZXhpdCgpIGZ1bmN0aW9ucy4gVGhlIHByaW5jaXBsZSBp cyB0aGUgc2FtZSBhcyBzdHJ1Y3QKZHJtX2RldmljZS51bnBsdWdnZWQgYW5kIGRybV9kZXZfZW50 ZXIvZXhpdCgpLgoKSW4gYSBudXRzaGVsbCB0aGUgaWRlYSBpczoKCiAtIGRybV9icmlkZ2UudW5w bHVnZ2VkIGlzIGluaXRpYWxpemVkIHRvIGZhbHNlCiAtIGRybV9icmlkZ2VfZW50ZXIoKSByZXR1 cm5zIGZhbHNlIGlmIGRybV9icmlkZ2UudW5wbHVnZ2VkID09IHRydWUKIC0gYW55IGNvZGUgaG9s ZGluZyBhIHBvaW50ZXIgdG8gdGhlIGJyaWRnZSAoaW5jbHVkaW5nIHRoZSBicmlkZ2UgZHJpdmVy CiAgIGl0c2VsZikgYW5kIG9wZXJhdGluZyBvbiB0aGUgYnJpZGdlIChpbmNsdWRpbmcgcmVtb3Zh bCkgbmVlZHMgdG8gZG86CiAgICAgaWYgKGRybV9icmlkZ2VfZW50ZXIoKSkgewogICAgICAgICBk byBzb21ldGhpbmc7CiAgICAgICAgIGRybV9icmlkZ2VfZXhpdCgpOwogICAgIH0KIC0gd2hlbiB0 aGUgYnJpZGdlIGlzIHJlbW92ZWQsIHRoZSBkcml2ZXIgcmVtb3ZhbCBmdW5jdGlvbiBzZXRzCiAg IGRldl9icmlkZ2UudW5wbHVnZ2VkID0gdHJ1ZQoKVGhlICJkbyBzb21ldGhpbmciIGFib3ZlIGlu Y2x1ZGVzIGFueSBhY2Nlc3MgdG8gZGV2aWNlIHJlc291cmNlcywKaW5jbHVkaW5nIGNsb2NrcyAo YW5kIGNsa19hcGIpLgoKSW4gb3RoZXIgd29yZHMsIHR3byBwaWVjZXMgb2YgY29kZSBjYW4gbm90 IGFjY2VzcyB0aGUgYnJpZGdlIHN0cnVjdHVyZQphdCB0aGUgc2FtZSB0aW1lLiBUaGlzIGluY2x1 ZGVzIGJyaWRnZSByZW1vdmFsIFZTIGFueSBhdG9taWMgb3BlcmF0aW9ucy4KCkRvIHlvdSB0aGlu ayB0aGlzIGFkZHJlc3NlcyB5b3VyIGNvbmNlcm4/CgoKRm9yIHlvdSB0byBoYXZlIGEgYmV0dGVy IHBpY3R1cmUgb2YgdGhlIHBhdGgsIGhlcmUncyBhbiBhZGRpdGlvbmFsCmNsYXJpZmljYXRpb24g YWJvdXQgZHJtX2JyaWRnZV9hdHRhY2gvZGV0YWNoKCkgYW5kCmRybV9icmlkZ2VfYWRkL3JlbW92 ZSgpLiBBcyBwYXJ0IG9mIHN0ZXAgMSBvZiB0aGUgZ3JhbmQgcGxhbiwgYm90aCBvZgp0aGVtIHdp bGwgZHJtX2JyaWRnZV9nZXQvcHV0KCkgdGhlIGJyaWRnZSwgc28gdGhhdCBubyBicmlkZ2UgaXMg ZnJlZWQKaWYgaXQgaXMgZWl0aGVyIGluIHRoZSBnbG9iYWwgYnJpZGdlX2xpc3Qgb3IgaW4gYW55 IGVuY29kZXIgY2hhaW4uCgpQYXRjaGVzIGZvciB0aGlzIGFyZSBhbHJlYWR5IGFwcHJvdmVkIGJ5 IE1heGltZSBbMV1bMl0uIFRoZXkgY2Fubm90IGJlCmFwcGxpZWQgdW50aWwgYWxsIGJyaWRnZSBk cml2ZXJzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gdGhlIG5ldwpkZXZtX2RybV9icmlkZ2VfYWxs b2MoKSBBUEksIHNvIHRoZXkgZGVwZW5kIG9uIHRoaXMgc2VyaWVzIHRvIGJlCmNvbXBsZXRlbHkg YXBwbGllZC4gV2UgYXJlIGdldHRpbmcgcHJldHR5IGNsb3NlOiBhcyBvZiBub3cgdGhlIGVudGly ZQpzZXJpZXMgaGFzIGJlZW4gYXBwbGllZCBleGNlcHQgZm9yIHRoaXMgYW5kIGFub3RoZXIgZHJp dmVyLgoKWzBdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2FsbC8yMDI1MDEyOTEyNTE1My4zNWQw NDg3YUBib290eS90LyN1ClsxXSBodHRwczovL3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvcGF0 Y2gvNjQzMDk1LwpbMl0gaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3JnL3BhdGNoLzY0 MzA5Ni8KCkJlc3QgcmVnYXJkcywKTHVjYQoKLS0gCkx1Y2EgQ2VyZXNvbGksIEJvb3RsaW4KRW1i ZWRkZWQgTGludXggYW5kIEtlcm5lbCBlbmdpbmVlcmluZwpodHRwczovL2Jvb3RsaW4uY29tCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hbWxv Z2ljIG1haWxpbmcgbGlzdApsaW51eC1hbWxvZ2ljQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hbWxvZ2ljCg==