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 C24F0C61DB9 for ; Fri, 28 Aug 2026 09:04:44 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id ED64C10F301; Fri, 28 Aug 2026 09:04:43 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="GyblVS6A"; dkim-atps=neutral Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5461310F301 for ; Fri, 28 Aug 2026 09:04:42 +0000 (UTC) Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 9A40E601F7; Fri, 28 Aug 2026 09:04:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 020EA1F000E9; Fri, 28 Aug 2026 09:04:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1787907881; bh=wNslpbbiWhhziyESvBTgmPZlIYJZZTzsUdAjpzjD20E=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=GyblVS6Ax+vy0FgglWG8+QLy2Sr/vkwhQIu0SG3W8hERp3tdgtC0flBmw6RWVrDoU 4tdu4cO0PQ+lFJSFLcbRqMl1xGQEOFN9/Lk6jz+vO4+UmqZPllDu0+zuz8uC08ReQ0 jeQYRLAXr4Aj32QZgMm+FickhfesrYLPeHE5tOop3nlQhel1QLZ8dGpXWKX+AiYHXI mRaTZejDzFoZIJP83S6hoopRM6W1oh0wBqqo2VRDUOWb40yD7f6QR/ZNdUBoEX7MaH quLWyEV5m1oDNEaUwq2CTg1j40GM64KUXQv35he83wMr1V4ak98KWMWaaBqco+/jMw ghSNCXMpsx2JA== From: sashiko-bot@kernel.org Subject: Re: [PATCH v7 2/7] drm/bridge: Implement generic USB Type-C DP HPD bridge To: "Chaoyi Chen" Cc: olteanv@gmail.com, linux-phy@lists.infradead.org, vkoul@kernel.org, neil.armstrong@linaro.org, dri-devel@lists.freedesktop.org In-Reply-To: <20260828084737.565-3-kernel@airkyi.com> References: <20260828084737.565-1-kernel@airkyi.com> <20260828084737.565-3-kernel@airkyi.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 28 Aug 2026 09:04:40 +0000 Message-Id: <20260828090441.020EA1F000E9@smtp.kernel.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: , Reply-To: sashiko-reviews@lists.linux.dev Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Thank you for your contribution! Sashiko AI review found 4 potential issue(= s) to consider: - [High] Attaching devm actions to an unowned device without strict depende= ncies causes a use-after-free panic on module unload. - [Medium] Missing NULL check for the OF device node causes broken bridge r= egistration on non-Device Tree systems for multi-port controllers. - [Medium] Concurrent execution of bus iteration and notifier callback caus= es duplicate bridge registration. - [Low] The Kconfig dependency allows the module to be built when CONFIG_TY= PEC is disabled, causing a link error. -- commit 9eab2892d2a7baba27c2d68547a8aad1b13a8541 Author: Chaoyi Chen drm/bridge: Implement generic USB Type-C DP HPD bridge This commit implements a generic DisplayPort HPD bridge based on USB Type-C events. It registers a bus notifier on the typec_bus to automatically create HPD bridges for Type-C ports with the DP alternate mode. This removes the need for individual USB-C controller drivers to manually register the bridg= e. > diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kcon= fig > index 4a57d49b4c6d3..9739b2a197586 100644 > --- a/drivers/gpu/drm/bridge/Kconfig > +++ b/drivers/gpu/drm/bridge/Kconfig > @@ -30,6 +30,16 @@ config DRM_AUX_HPD_BRIDGE [ ... ] > +if DRM_AUX_HPD_BRIDGE > +config DRM_AUX_HPD_TYPEC_BRIDGE > + tristate > + depends on TYPEC || !TYPEC [Severity: Low] Will this dependency allow the module to be built when CONFIG_TYPEC is disabled?=20 If CONFIG_TYPEC=3Dn, the condition "!TYPEC" evaluates to true. However, the= =20 source file unconditionally uses symbols from the Type-C subsystem, which=20 would result in unresolved external symbols during linking. > + default TYPEC > + help > + Simple bridge that terminates the bridge chain and provides HPD > + support. It build bridge on each USB-C connector device node. > +endif [ ... ] > diff --git a/drivers/gpu/drm/bridge/aux-hpd-typec-dp-bridge.c b/drivers/g= pu/drm/bridge/aux-hpd-typec-dp-bridge.c > new file mode 100644 > index 0000000000000..682bc192e0934 > --- /dev/null > +++ b/drivers/gpu/drm/bridge/aux-hpd-typec-dp-bridge.c [ ... ] > +static int drm_typec_bus_event(struct notifier_block *nb, unsigned long = action, > + void *data) > +{ > + struct device *dev =3D (struct device *)data; > + struct typec_altmode *alt =3D to_typec_altmode(dev); > + struct device_node *np; > + > + if (action !=3D BUS_NOTIFY_ADD_DEVICE) > + return NOTIFY_OK; > + > + /* > + * alt->dev.parent->parent : USB-C controller device > + * alt->dev.parent : USB-C connector device > + */ > + if (is_typec_port_altmode(&alt->dev) && alt->svid =3D=3D USB_TYPEC_DP_S= ID) { > + np =3D to_of_node(alt->dev.parent->fwnode); > + if (!drm_dev_has_dp_hpd_bridge(alt->dev.parent->parent, np)) [Severity: Medium] What happens on non-Device Tree systems (like ACPI) where to_of_node()=20 returns NULL?=20 It looks like np will be NULL, and if there are multiple ports on the same= =20 controller, they could all alias to the same NULL platform data. Does this= =20 mean only the first port gets a bridge and subsequent ports are skipped? > + drm_dp_hpd_bridge_register(alt->dev.parent->parent, np); [Severity: High] Does attaching a devm-managed resource to the unowned USB-C controller device (alt->dev.parent->parent) risk a use-after-free on module unload?=20 Since the observer module doesn't clean these up on exit, the devm actions could outlive the module. This might crash the system when the controller=20 is eventually unbound and devres executes the unmapped cleanup action. > + } > + > + return NOTIFY_OK; > +} [ ... ] > +static int __init drm_aux_hpd_typec_dp_bridge_module_init(void) > +{ > + bus_register_notifier(&typec_bus, &drm_typec_event_nb); > + /* > + * Before module initialization, some devices may have already been add= ed. > + * Register the HPD bridge for these devices. > + */ > + bus_for_each_dev(&typec_bus, NULL, NULL, check_device_already_added); [Severity: Medium] Can a device be processed twice here?=20 By registering the bus notifier before iterating over existing devices, is= =20 there a race condition where a newly added device triggers the notifier=20 concurrently while bus_for_each_dev() is evaluating it?=20 The check-and-register sequence in drm_typec_bus_event() doesn't appear to= =20 use locking, which might lead to duplicate bridge registrations. > + return 0; > +} --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260828084737.565-= 1-kernel@airkyi.com?part=3D2 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 B8B07C61DC6 for ; Fri, 28 Aug 2026 09:04:45 +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:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: References:In-Reply-To:Cc:To:Subject:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=4qxRq8I4saCvUNuYqIz5uL1phZJtas5B+k9gPiJEHFU=; b=FG8TSq+gctKyDQ hLTx4spkyQLcdPSMOs95SqvMhflZPYLDqpKqSubX11VhljkehvUqFFHslqvJSzBoTGuEpm9U2lGr7 HvvQk2n9PsG+BocwnKahb5Ir104f7u+1VfvBCYwkRH4wPn4z4woKjr5X+cKFos5pUh2JCcq7YdQ0y 0G9vLNOHgXbALLbJrh0BnHwHSbZw/8M8L4DsStBTjfvjjUSAHniApYhRS9PM+0f6uASieieGECrTd 0IFCSNHmbmaKcACV8Gl1W7xJAdKMe9w6P5jdaCnCkcOTFDKp8aUoQiF5Wwmx2iC+Hd0r7Loyc4Xeg uHHBwmjRjEnJdmHxLF0w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wzsVw-00000005Owm-4ANY; Fri, 28 Aug 2026 09:04:44 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wzsVu-00000005OwU-1se3 for linux-phy@lists.infradead.org; Fri, 28 Aug 2026 09:04:44 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 9A40E601F7; Fri, 28 Aug 2026 09:04:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 020EA1F000E9; Fri, 28 Aug 2026 09:04:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1787907881; bh=wNslpbbiWhhziyESvBTgmPZlIYJZZTzsUdAjpzjD20E=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=GyblVS6Ax+vy0FgglWG8+QLy2Sr/vkwhQIu0SG3W8hERp3tdgtC0flBmw6RWVrDoU 4tdu4cO0PQ+lFJSFLcbRqMl1xGQEOFN9/Lk6jz+vO4+UmqZPllDu0+zuz8uC08ReQ0 jeQYRLAXr4Aj32QZgMm+FickhfesrYLPeHE5tOop3nlQhel1QLZ8dGpXWKX+AiYHXI mRaTZejDzFoZIJP83S6hoopRM6W1oh0wBqqo2VRDUOWb40yD7f6QR/ZNdUBoEX7MaH quLWyEV5m1oDNEaUwq2CTg1j40GM64KUXQv35he83wMr1V4ak98KWMWaaBqco+/jMw ghSNCXMpsx2JA== From: sashiko-bot@kernel.org Subject: Re: [PATCH v7 2/7] drm/bridge: Implement generic USB Type-C DP HPD bridge To: "Chaoyi Chen" Cc: olteanv@gmail.com, linux-phy@lists.infradead.org, vkoul@kernel.org, neil.armstrong@linaro.org, dri-devel@lists.freedesktop.org In-Reply-To: <20260828084737.565-3-kernel@airkyi.com> References: <20260828084737.565-1-kernel@airkyi.com> <20260828084737.565-3-kernel@airkyi.com> Date: Fri, 28 Aug 2026 09:04:40 +0000 Message-Id: <20260828090441.020EA1F000E9@smtp.kernel.org> X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg NCBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIEF0dGFjaGluZyBkZXZt IGFjdGlvbnMgdG8gYW4gdW5vd25lZCBkZXZpY2Ugd2l0aG91dCBzdHJpY3QgZGVwZW5kZW5jaWVz IGNhdXNlcyBhIHVzZS1hZnRlci1mcmVlIHBhbmljIG9uIG1vZHVsZSB1bmxvYWQuCi0gW01lZGl1 bV0gTWlzc2luZyBOVUxMIGNoZWNrIGZvciB0aGUgT0YgZGV2aWNlIG5vZGUgY2F1c2VzIGJyb2tl biBicmlkZ2UgcmVnaXN0cmF0aW9uIG9uIG5vbi1EZXZpY2UgVHJlZSBzeXN0ZW1zIGZvciBtdWx0 aS1wb3J0IGNvbnRyb2xsZXJzLgotIFtNZWRpdW1dIENvbmN1cnJlbnQgZXhlY3V0aW9uIG9mIGJ1 cyBpdGVyYXRpb24gYW5kIG5vdGlmaWVyIGNhbGxiYWNrIGNhdXNlcyBkdXBsaWNhdGUgYnJpZGdl IHJlZ2lzdHJhdGlvbi4KLSBbTG93XSBUaGUgS2NvbmZpZyBkZXBlbmRlbmN5IGFsbG93cyB0aGUg bW9kdWxlIHRvIGJlIGJ1aWx0IHdoZW4gQ09ORklHX1RZUEVDIGlzIGRpc2FibGVkLCBjYXVzaW5n IGEgbGluayBlcnJvci4KLS0KCmNvbW1pdCA5ZWFiMjg5MmQyYTdiYWJhMjdjMmQ2ODU0N2E4YWFk MWIxM2E4NTQxCkF1dGhvcjogQ2hhb3lpIENoZW4gPGNoYW95aS5jaGVuQHJvY2stY2hpcHMuY29t PgoKZHJtL2JyaWRnZTogSW1wbGVtZW50IGdlbmVyaWMgVVNCIFR5cGUtQyBEUCBIUEQgYnJpZGdl CgpUaGlzIGNvbW1pdCBpbXBsZW1lbnRzIGEgZ2VuZXJpYyBEaXNwbGF5UG9ydCBIUEQgYnJpZGdl IGJhc2VkIG9uIFVTQiBUeXBlLUMKZXZlbnRzLiBJdCByZWdpc3RlcnMgYSBidXMgbm90aWZpZXIg b24gdGhlIHR5cGVjX2J1cyB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZQpIUEQgYnJpZGdlcyBmb3Ig VHlwZS1DIHBvcnRzIHdpdGggdGhlIERQIGFsdGVybmF0ZSBtb2RlLiBUaGlzIHJlbW92ZXMgdGhl Cm5lZWQgZm9yIGluZGl2aWR1YWwgVVNCLUMgY29udHJvbGxlciBkcml2ZXJzIHRvIG1hbnVhbGx5 IHJlZ2lzdGVyIHRoZSBicmlkZ2UuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKPiBpbmRleCA0YTU3 ZDQ5YjRjNmQzLi45NzM5YjJhMTk3NTg2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwo+IEBA IC0zMCw2ICszMCwxNiBAQCBjb25maWcgRFJNX0FVWF9IUERfQlJJREdFClsgLi4uIF0KPiAraWYg RFJNX0FVWF9IUERfQlJJREdFCj4gK2NvbmZpZyBEUk1fQVVYX0hQRF9UWVBFQ19CUklER0UKPiAr CXRyaXN0YXRlCj4gKwlkZXBlbmRzIG9uIFRZUEVDIHx8ICFUWVBFQwoKW1NldmVyaXR5OiBMb3dd CldpbGwgdGhpcyBkZXBlbmRlbmN5IGFsbG93IHRoZSBtb2R1bGUgdG8gYmUgYnVpbHQgd2hlbiBD T05GSUdfVFlQRUMgaXMKZGlzYWJsZWQ/IAoKSWYgQ09ORklHX1RZUEVDPW4sIHRoZSBjb25kaXRp b24gIiFUWVBFQyIgZXZhbHVhdGVzIHRvIHRydWUuIEhvd2V2ZXIsIHRoZSAKc291cmNlIGZpbGUg dW5jb25kaXRpb25hbGx5IHVzZXMgc3ltYm9scyBmcm9tIHRoZSBUeXBlLUMgc3Vic3lzdGVtLCB3 aGljaCAKd291bGQgcmVzdWx0IGluIHVucmVzb2x2ZWQgZXh0ZXJuYWwgc3ltYm9scyBkdXJpbmcg bGlua2luZy4KCj4gKwlkZWZhdWx0IFRZUEVDCj4gKwloZWxwCj4gKwkgIFNpbXBsZSBicmlkZ2Ug dGhhdCB0ZXJtaW5hdGVzIHRoZSBicmlkZ2UgY2hhaW4gYW5kIHByb3ZpZGVzIEhQRAo+ICsJICBz dXBwb3J0LiBJdCBidWlsZCBicmlkZ2Ugb24gZWFjaCBVU0ItQyBjb25uZWN0b3IgZGV2aWNlIG5v ZGUuCj4gK2VuZGlmClsgLi4uIF0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9hdXgtaHBkLXR5cGVjLWRwLWJyaWRnZS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hdXgt aHBkLXR5cGVjLWRwLWJyaWRnZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwMDAwMDAwLi42ODJiYzE5MmUwOTM0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvYXV4LWhwZC10eXBlYy1kcC1icmlkZ2UuYwpbIC4uLiBdCj4gK3N0YXRp YyBpbnQgZHJtX3R5cGVjX2J1c19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNp Z25lZCBsb25nIGFjdGlvbiwKPiArCQkJICAgICAgIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVj dCBkZXZpY2UgKmRldiA9IChzdHJ1Y3QgZGV2aWNlICopZGF0YTsKPiArCXN0cnVjdCB0eXBlY19h bHRtb2RlICphbHQgPSB0b190eXBlY19hbHRtb2RlKGRldik7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5wOwo+ICsKPiArCWlmIChhY3Rpb24gIT0gQlVTX05PVElGWV9BRERfREVWSUNFKQo+ICsJ CXJldHVybiBOT1RJRllfT0s7Cj4gKwo+ICsJLyoKPiArCSAqIGFsdC0+ZGV2LnBhcmVudC0+cGFy ZW50IDogVVNCLUMgY29udHJvbGxlciBkZXZpY2UKPiArCSAqIGFsdC0+ZGV2LnBhcmVudCAgICAg ICAgIDogVVNCLUMgY29ubmVjdG9yIGRldmljZQo+ICsJICovCj4gKwlpZiAoaXNfdHlwZWNfcG9y dF9hbHRtb2RlKCZhbHQtPmRldikgJiYgYWx0LT5zdmlkID09IFVTQl9UWVBFQ19EUF9TSUQpIHsK PiArCQlucCA9IHRvX29mX25vZGUoYWx0LT5kZXYucGFyZW50LT5md25vZGUpOwo+ICsJCWlmICgh ZHJtX2Rldl9oYXNfZHBfaHBkX2JyaWRnZShhbHQtPmRldi5wYXJlbnQtPnBhcmVudCwgbnApKQoK W1NldmVyaXR5OiBNZWRpdW1dCldoYXQgaGFwcGVucyBvbiBub24tRGV2aWNlIFRyZWUgc3lzdGVt cyAobGlrZSBBQ1BJKSB3aGVyZSB0b19vZl9ub2RlKCkgCnJldHVybnMgTlVMTD8gCgpJdCBsb29r cyBsaWtlIG5wIHdpbGwgYmUgTlVMTCwgYW5kIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBwb3J0cyBv biB0aGUgc2FtZSAKY29udHJvbGxlciwgdGhleSBjb3VsZCBhbGwgYWxpYXMgdG8gdGhlIHNhbWUg TlVMTCBwbGF0Zm9ybSBkYXRhLiBEb2VzIHRoaXMgCm1lYW4gb25seSB0aGUgZmlyc3QgcG9ydCBn ZXRzIGEgYnJpZGdlIGFuZCBzdWJzZXF1ZW50IHBvcnRzIGFyZSBza2lwcGVkPwoKPiArCQkJZHJt X2RwX2hwZF9icmlkZ2VfcmVnaXN0ZXIoYWx0LT5kZXYucGFyZW50LT5wYXJlbnQsIG5wKTsKCltT ZXZlcml0eTogSGlnaF0KRG9lcyBhdHRhY2hpbmcgYSBkZXZtLW1hbmFnZWQgcmVzb3VyY2UgdG8g dGhlIHVub3duZWQgVVNCLUMgY29udHJvbGxlcgpkZXZpY2UgKGFsdC0+ZGV2LnBhcmVudC0+cGFy ZW50KSByaXNrIGEgdXNlLWFmdGVyLWZyZWUgb24gbW9kdWxlIHVubG9hZD8gCgpTaW5jZSB0aGUg b2JzZXJ2ZXIgbW9kdWxlIGRvZXNuJ3QgY2xlYW4gdGhlc2UgdXAgb24gZXhpdCwgdGhlIGRldm0g YWN0aW9ucwpjb3VsZCBvdXRsaXZlIHRoZSBtb2R1bGUuIFRoaXMgbWlnaHQgY3Jhc2ggdGhlIHN5 c3RlbSB3aGVuIHRoZSBjb250cm9sbGVyIAppcyBldmVudHVhbGx5IHVuYm91bmQgYW5kIGRldnJl cyBleGVjdXRlcyB0aGUgdW5tYXBwZWQgY2xlYW51cCBhY3Rpb24uCgo+ICsJfQo+ICsKPiArCXJl dHVybiBOT1RJRllfT0s7Cj4gK30KWyAuLi4gXQo+ICtzdGF0aWMgaW50IF9faW5pdCBkcm1fYXV4 X2hwZF90eXBlY19kcF9icmlkZ2VfbW9kdWxlX2luaXQodm9pZCkKPiArewo+ICsJYnVzX3JlZ2lz dGVyX25vdGlmaWVyKCZ0eXBlY19idXMsICZkcm1fdHlwZWNfZXZlbnRfbmIpOwo+ICsJLyoKPiAr CSAqIEJlZm9yZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIHNvbWUgZGV2aWNlcyBtYXkgaGF2ZSBh bHJlYWR5IGJlZW4gYWRkZWQuCj4gKwkgKiBSZWdpc3RlciB0aGUgSFBEIGJyaWRnZSBmb3IgdGhl c2UgZGV2aWNlcy4KPiArCSAqLwo+ICsJYnVzX2Zvcl9lYWNoX2RldigmdHlwZWNfYnVzLCBOVUxM LCBOVUxMLCBjaGVja19kZXZpY2VfYWxyZWFkeV9hZGRlZCk7CgpbU2V2ZXJpdHk6IE1lZGl1bV0K Q2FuIGEgZGV2aWNlIGJlIHByb2Nlc3NlZCB0d2ljZSBoZXJlPyAKCkJ5IHJlZ2lzdGVyaW5nIHRo ZSBidXMgbm90aWZpZXIgYmVmb3JlIGl0ZXJhdGluZyBvdmVyIGV4aXN0aW5nIGRldmljZXMsIGlz IAp0aGVyZSBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgbmV3bHkgYWRkZWQgZGV2aWNlIHRyaWdn ZXJzIHRoZSBub3RpZmllciAKY29uY3VycmVudGx5IHdoaWxlIGJ1c19mb3JfZWFjaF9kZXYoKSBp cyBldmFsdWF0aW5nIGl0PyAKClRoZSBjaGVjay1hbmQtcmVnaXN0ZXIgc2VxdWVuY2UgaW4gZHJt X3R5cGVjX2J1c19ldmVudCgpIGRvZXNuJ3QgYXBwZWFyIHRvIAp1c2UgbG9ja2luZywgd2hpY2gg bWlnaHQgbGVhZCB0byBkdXBsaWNhdGUgYnJpZGdlIHJlZ2lzdHJhdGlvbnMuCgo+ICsJcmV0dXJu IDA7Cj4gK30KCi0tIApTYXNoaWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hpa28uZGV2LyMv cGF0Y2hzZXQvMjAyNjA4MjgwODQ3MzcuNTY1LTEta2VybmVsQGFpcmt5aS5jb20/cGFydD0yCgot LSAKbGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1waHkK