From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 44E27246784; Fri, 16 Oct 2026 12:51:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792155062; cv=none; b=E/3U80tumwYIi5CYIzyRaBbv0gFHNdJRAvkkkCmK1TpLm3MMAkw/SmvMhwCloq6iWCU0RtlsTBRdIknWPxLhHgjBjWVf7CUoS9I6EDEb+ye+emiBYTH9YlXv9zRq6P8PvpsnXdzpKxI2evxf6VsGZ5JpcEkxBqARNIy/Y+Ev6bo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792155062; c=relaxed/simple; bh=qh2FU1UfTHBpj7DsOZQR13k9O4NJKziEAHRmOF03pvQ=; h=Message-ID:From:Subject:To:Cc:In-Reply-To:References:Content-Type: Date; b=HLDBwwzCfpLALXNEtA//0RTspC82HuF5ukFrjRI+rP1ItXy21Z0XVf/ilWqgCK6AD08Dhe54m/qATJFeA8ndtGZyS2KC1BHqIuJSNVFVFGHEW3Qrk6JnoiqSNa8L5aczJylXGwZ5mFEOJlSl4pgLZDT9KHyeBENv082pMT/gT3Y= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DBI57qAg; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DBI57qAg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 69F2F1F000C4; Fri, 16 Oct 2026 12:51:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792155060; bh=d+WdJzJtILJkxjVuh+bW292/ECfJKXQbsIGEdKBLmlA=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=DBI57qAgxy8LfoR8KYk4b/T5IZH0ooR/i2wM/L3Rjw2jqpaKseR28OPC0TH7yd5AR Qb4Y5QlAkngciw5/flllUg9MJ70M0g2ICFq3eVqTGfPzMogqvyJljYP46HOC2EuSk6 8Mec7qAVDx1LFzTzOJ/SD8wMC9Mx/ByCWL+fd26CG+fx73ZqZamMqI2CYTZtn2Jhqq T5uNQ2XhYz6AgIjHdJah5++Q15qVIdvNy4i6O8EUW4NDihUMuyV1iZNL1KcbNrVxy0 z74MzLqqSRyz/G1xG2XzfWs9k+29KUYG7mfEA5hxo7fKjpOLuc8Bjaxfwii+ClqBWF yOTXc3L8JJ74A== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v14 14/23] scsi: ufs: mediatek: Use the common PHY framework Reply-To: sashiko-reviews@lists.linux.dev To: "Louis-Alexis Eyraud" Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-scsi@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20261016-mt8196-ufs-v14-14-e8d565e0cd45@collabora.com> References: <20261016-mt8196-ufs-v14-0-e8d565e0cd45@collabora.com> <20261016-mt8196-ufs-v14-14-e8d565e0cd45@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 16 Oct 2026 12:50:59 +0000 Precedence: bulk X-Mailing-List: linux-scsi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 4 potential issue(= s) to consider: - [High] ufs/mediatek: PM state machine desync on PHY power-off failure - [High] scsi: ufs: mediatek: PHY incorrectly powered off during active lin= k runtime suspend - [Medium] ufs/mediatek: resource leak of PHY initialization on error path - [Medium] ufs/mediatek: PHY state desynchronization on regulator disable f= ailure -- commit d74957280789302bafd051c97a8d0add4f2d400a Author: Nicolas Frattaroli scsi: ufs: mediatek: Use the common PHY framework This patch transitions the Mediatek UFS driver to use the common PHY framew= ork instead of custom OF parsing and manual PHY device power management. It upd= ates ufs_mtk_init() to acquire and initialize the PHY via standard APIs and repl= aces pm_runtime_get_sync()/put_sync() calls with direct PHY power control. > diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-media= tek.c > index 41e2e9f867013..808365b880fd7 100644 > --- a/drivers/ufs/host/ufs-mediatek.c > +++ b/drivers/ufs/host/ufs-mediatek.c [ ... ] > @@ -1319,11 +1289,22 @@ static int ufs_mtk_init(struct ufs_hba *hba) > =20 > return 0; > =20 > +out_phy_exit: > + phy_exit(host->mphy); > out_variant_clear: > ufshcd_set_variant(hba, NULL); > return err; > } [Severity: Medium] Does this error path bypass phy_exit() if ufs_mtk_mphy_power_on() fails? Earlier in ufs_mtk_init(), phy_init(host->mphy) is called successfully. Lat= er in the same function, if ufs_mtk_mphy_power_on(hba, true) fails, the code jumps directly to out_variant_clear: err =3D ufs_mtk_mphy_power_on(hba, true); if (err) goto out_variant_clear; Since out_variant_clear is physically below out_phy_exit, this skips the newly introduced phy_exit(host->mphy) call, leaking the PHY initialization. [ ... ] > @@ -2533,8 +2477,11 @@ static int ufs_mtk_runtime_suspend(struct device *= dev) > if (ufs_mtk_is_rtff_mtcmos(hba)) > ufs_mtk_mtcmos_ctrl(false, res); > =20 > - if (host->phy_dev) > - pm_runtime_put_sync(host->phy_dev); > + ret =3D ufs_mtk_mphy_power_on(hba, false); > + if (ret) { > + dev_err(dev, "Failed to power off PHY: %pe\n", ERR_PTR(ret)); > + return ret; > + } > =20 > return 0; > } [Severity: High] Does returning an error here break the runtime PM contract? Before reaching this code, ufshcd_runtime_suspend(dev) has already suspended the UFS controller, and ufs_mtk_dev_vreg_set_lpm() has put regulators into low-power mode. Returning an error signals failure to the PM core, which aborts the suspend transition and leaves the device status as RPM_ACTIVE. Because the underlying hardware is already powered off, subsequent I/O requests will bypass runtime_resume() and access unpowered hardware. This can lead to bus timeouts or kernel crashes. [Severity: High] Does this unconditional power down break configurations where the UFS link is meant to remain active during runtime PM? If the system is configured to keep the link active during runtime suspend, the host controller can still be suspended once the device WLUN is suspende= d. Previously, pm_runtime_put_sync() would not physically power off the PHY because the Mediatek PHY driver lacks runtime PM ops. Instead, PHY power was safely managed by ufs_mtk_pwr_ctrl() which explicitly checks the link state and skips power-down if the link is active. By replacing this with an unconditional ufs_mtk_mphy_power_on(hba, false), this function blindly calls phy_power_off() regardless of the link state. This forces the PHY off while the MAC/SCSI layers expect it to remain activ= e, causing UFS access to hang on wake. [Severity: Medium] Can this call lead to a state desynchronization if the regulator disable fails? Inside the ufs_mtk_mphy_power_on(hba, false) helper function, the code powe= rs down the hardware and then disables the regulators: } else { phy_power_off(mphy); ret =3D ufs_mtk_09v_off(host, true); if (ret) return ret; } host->mphy_powered_on =3D on; If ufs_mtk_09v_off() fails, it returns early. This skips the assignment of host->mphy_powered_on =3D on (which would be false). Software will retain the belief that the PHY is still powered on. When the device subsequently resumes, ufs_mtk_mphy_power_on(hba, true) chec= ks if (on =3D=3D host->mphy_powered_on) which evaluates to true =3D=3D true, r= eturning 0 without calling phy_power_on(mphy). This leaves the hardware physically off while the driver expects it to be on, causing the UFS link to fail. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261016-mt8196-ufs= -v14-0-e8d565e0cd45@collabora.com?part=3D14 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 741E8CCA464 for ; Fri, 16 Oct 2026 12:51:03 +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:Date:References: In-Reply-To:Cc:To:Subject:From:Message-ID:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=x9xSu9bxOF0Z2qgUhuoGBugb+gSgAq0Q55WsLOyvCao=; b=olUKa5cIdaa9SE yUVq1oj/P48f5SPWswpSXjLopHutpBm5jB5XfJBH+9w/MbxPvvmJNZCy1Gp53gaB9Pnjlq5lYniCm r2RVUaWVNOqKRkYAj+OV2jgVzlHH8Thv/u4NydHsM1fyJsr2G7xYWM7DKOh+vpp++WRk3SBcqTmdN +PE1hCXZIpLaM6Krh4cESYMv68L3P27oMF0mS+Iz968dv+jnlwD30sSHl0LWchY50b54s6Pd4u8Nh T41HAA5KUS3U6tFXYPo4HTAECp8T9G0VkC21MVhJsvmPLCMEC4m0aNoVANOk9l8Ef/QqKB5KEee63 tC95Pff/z8WTfVymszLA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xHhOp-00000002xoH-0htS; Fri, 16 Oct 2026 12:51:03 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xHhOn-00000002xo3-4BEZ for linux-phy@lists.infradead.org; Fri, 16 Oct 2026 12:51:02 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 2F7EB60008; Fri, 16 Oct 2026 12:51:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 69F2F1F000C4; Fri, 16 Oct 2026 12:51:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792155060; bh=d+WdJzJtILJkxjVuh+bW292/ECfJKXQbsIGEdKBLmlA=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=DBI57qAgxy8LfoR8KYk4b/T5IZH0ooR/i2wM/L3Rjw2jqpaKseR28OPC0TH7yd5AR Qb4Y5QlAkngciw5/flllUg9MJ70M0g2ICFq3eVqTGfPzMogqvyJljYP46HOC2EuSk6 8Mec7qAVDx1LFzTzOJ/SD8wMC9Mx/ByCWL+fd26CG+fx73ZqZamMqI2CYTZtn2Jhqq T5uNQ2XhYz6AgIjHdJah5++Q15qVIdvNy4i6O8EUW4NDihUMuyV1iZNL1KcbNrVxy0 z74MzLqqSRyz/G1xG2XzfWs9k+29KUYG7mfEA5hxo7fKjpOLuc8Bjaxfwii+ClqBWF yOTXc3L8JJ74A== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v14 14/23] scsi: ufs: mediatek: Use the common PHY framework To: "Louis-Alexis Eyraud" Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-scsi@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20261016-mt8196-ufs-v14-14-e8d565e0cd45@collabora.com> References: <20261016-mt8196-ufs-v14-0-e8d565e0cd45@collabora.com> <20261016-mt8196-ufs-v14-14-e8d565e0cd45@collabora.com> Date: Fri, 16 Oct 2026 12:50:59 +0000 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 NCBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIHVmcy9tZWRpYXRlazog UE0gc3RhdGUgbWFjaGluZSBkZXN5bmMgb24gUEhZIHBvd2VyLW9mZiBmYWlsdXJlCi0gW0hpZ2hd IHNjc2k6IHVmczogbWVkaWF0ZWs6IFBIWSBpbmNvcnJlY3RseSBwb3dlcmVkIG9mZiBkdXJpbmcg YWN0aXZlIGxpbmsgcnVudGltZSBzdXNwZW5kCi0gW01lZGl1bV0gdWZzL21lZGlhdGVrOiByZXNv dXJjZSBsZWFrIG9mIFBIWSBpbml0aWFsaXphdGlvbiBvbiBlcnJvciBwYXRoCi0gW01lZGl1bV0g dWZzL21lZGlhdGVrOiBQSFkgc3RhdGUgZGVzeW5jaHJvbml6YXRpb24gb24gcmVndWxhdG9yIGRp c2FibGUgZmFpbHVyZQotLQoKY29tbWl0IGQ3NDk1NzI4MDc4OTMwMmJhZmQwNTFjOTdhOGQwYWRk NGYyZDQwMGEKQXV0aG9yOiBOaWNvbGFzIEZyYXR0YXJvbGkgPG5pY29sYXMuZnJhdHRhcm9saUBj b2xsYWJvcmEuY29tPgoKc2NzaTogdWZzOiBtZWRpYXRlazogVXNlIHRoZSBjb21tb24gUEhZIGZy YW1ld29yawoKVGhpcyBwYXRjaCB0cmFuc2l0aW9ucyB0aGUgTWVkaWF0ZWsgVUZTIGRyaXZlciB0 byB1c2UgdGhlIGNvbW1vbiBQSFkgZnJhbWV3b3JrCmluc3RlYWQgb2YgY3VzdG9tIE9GIHBhcnNp bmcgYW5kIG1hbnVhbCBQSFkgZGV2aWNlIHBvd2VyIG1hbmFnZW1lbnQuIEl0IHVwZGF0ZXMKdWZz X210a19pbml0KCkgdG8gYWNxdWlyZSBhbmQgaW5pdGlhbGl6ZSB0aGUgUEhZIHZpYSBzdGFuZGFy ZCBBUElzIGFuZCByZXBsYWNlcwpwbV9ydW50aW1lX2dldF9zeW5jKCkvcHV0X3N5bmMoKSBjYWxs cyB3aXRoIGRpcmVjdCBQSFkgcG93ZXIgY29udHJvbC4KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv dWZzL2hvc3QvdWZzLW1lZGlhdGVrLmMgYi9kcml2ZXJzL3Vmcy9ob3N0L3Vmcy1tZWRpYXRlay5j Cj4gaW5kZXggNDFlMmU5Zjg2NzAxMy4uODA4MzY1Yjg4MGZkNyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL3Vmcy9ob3N0L3Vmcy1tZWRpYXRlay5jCj4gKysrIGIvZHJpdmVycy91ZnMvaG9zdC91ZnMt bWVkaWF0ZWsuYwpbIC4uLiBdCj4gQEAgLTEzMTksMTEgKzEyODksMjIgQEAgc3RhdGljIGludCB1 ZnNfbXRrX2luaXQoc3RydWN0IHVmc19oYmEgKmhiYSkKPiAgCj4gIAlyZXR1cm4gMDsKPiAgCj4g K291dF9waHlfZXhpdDoKPiArCXBoeV9leGl0KGhvc3QtPm1waHkpOwo+ICBvdXRfdmFyaWFudF9j bGVhcjoKPiAgCXVmc2hjZF9zZXRfdmFyaWFudChoYmEsIE5VTEwpOwo+ICAJcmV0dXJuIGVycjsK PiAgfQoKW1NldmVyaXR5OiBNZWRpdW1dCkRvZXMgdGhpcyBlcnJvciBwYXRoIGJ5cGFzcyBwaHlf ZXhpdCgpIGlmIHVmc19tdGtfbXBoeV9wb3dlcl9vbigpIGZhaWxzPwoKRWFybGllciBpbiB1ZnNf bXRrX2luaXQoKSwgcGh5X2luaXQoaG9zdC0+bXBoeSkgaXMgY2FsbGVkIHN1Y2Nlc3NmdWxseS4g TGF0ZXIKaW4gdGhlIHNhbWUgZnVuY3Rpb24sIGlmIHVmc19tdGtfbXBoeV9wb3dlcl9vbihoYmEs IHRydWUpIGZhaWxzLCB0aGUgY29kZQpqdW1wcyBkaXJlY3RseSB0byBvdXRfdmFyaWFudF9jbGVh cjoKCiAgICBlcnIgPSB1ZnNfbXRrX21waHlfcG93ZXJfb24oaGJhLCB0cnVlKTsKICAgIGlmIChl cnIpCiAgICAgICAgZ290byBvdXRfdmFyaWFudF9jbGVhcjsKClNpbmNlIG91dF92YXJpYW50X2Ns ZWFyIGlzIHBoeXNpY2FsbHkgYmVsb3cgb3V0X3BoeV9leGl0LCB0aGlzIHNraXBzIHRoZQpuZXds eSBpbnRyb2R1Y2VkIHBoeV9leGl0KGhvc3QtPm1waHkpIGNhbGwsIGxlYWtpbmcgdGhlIFBIWSBp bml0aWFsaXphdGlvbi4KClsgLi4uIF0KPiBAQCAtMjUzMyw4ICsyNDc3LDExIEBAIHN0YXRpYyBp bnQgdWZzX210a19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICAJaWYgKHVm c19tdGtfaXNfcnRmZl9tdGNtb3MoaGJhKSkKPiAgCQl1ZnNfbXRrX210Y21vc19jdHJsKGZhbHNl LCByZXMpOwo+ICAKPiAtCWlmIChob3N0LT5waHlfZGV2KQo+IC0JCXBtX3J1bnRpbWVfcHV0X3N5 bmMoaG9zdC0+cGh5X2Rldik7Cj4gKwlyZXQgPSB1ZnNfbXRrX21waHlfcG93ZXJfb24oaGJhLCBm YWxzZSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcG93ZXIg b2ZmIFBIWTogJXBlXG4iLCBFUlJfUFRSKHJldCkpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4g IAo+ICAJcmV0dXJuIDA7Cj4gIH0KCltTZXZlcml0eTogSGlnaF0KRG9lcyByZXR1cm5pbmcgYW4g ZXJyb3IgaGVyZSBicmVhayB0aGUgcnVudGltZSBQTSBjb250cmFjdD8KCkJlZm9yZSByZWFjaGlu ZyB0aGlzIGNvZGUsIHVmc2hjZF9ydW50aW1lX3N1c3BlbmQoZGV2KSBoYXMgYWxyZWFkeSBzdXNw ZW5kZWQKdGhlIFVGUyBjb250cm9sbGVyLCBhbmQgdWZzX210a19kZXZfdnJlZ19zZXRfbHBtKCkg aGFzIHB1dCByZWd1bGF0b3JzIGludG8KbG93LXBvd2VyIG1vZGUuIFJldHVybmluZyBhbiBlcnJv ciBzaWduYWxzIGZhaWx1cmUgdG8gdGhlIFBNIGNvcmUsIHdoaWNoCmFib3J0cyB0aGUgc3VzcGVu ZCB0cmFuc2l0aW9uIGFuZCBsZWF2ZXMgdGhlIGRldmljZSBzdGF0dXMgYXMgUlBNX0FDVElWRS4K CkJlY2F1c2UgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaXMgYWxyZWFkeSBwb3dlcmVkIG9mZiwg c3Vic2VxdWVudCBJL08KcmVxdWVzdHMgd2lsbCBieXBhc3MgcnVudGltZV9yZXN1bWUoKSBhbmQg YWNjZXNzIHVucG93ZXJlZCBoYXJkd2FyZS4gVGhpcwpjYW4gbGVhZCB0byBidXMgdGltZW91dHMg b3Iga2VybmVsIGNyYXNoZXMuCgpbU2V2ZXJpdHk6IEhpZ2hdCkRvZXMgdGhpcyB1bmNvbmRpdGlv bmFsIHBvd2VyIGRvd24gYnJlYWsgY29uZmlndXJhdGlvbnMgd2hlcmUgdGhlIFVGUyBsaW5rCmlz IG1lYW50IHRvIHJlbWFpbiBhY3RpdmUgZHVyaW5nIHJ1bnRpbWUgUE0/CgpJZiB0aGUgc3lzdGVt IGlzIGNvbmZpZ3VyZWQgdG8ga2VlcCB0aGUgbGluayBhY3RpdmUgZHVyaW5nIHJ1bnRpbWUgc3Vz cGVuZCwKdGhlIGhvc3QgY29udHJvbGxlciBjYW4gc3RpbGwgYmUgc3VzcGVuZGVkIG9uY2UgdGhl IGRldmljZSBXTFVOIGlzIHN1c3BlbmRlZC4KUHJldmlvdXNseSwgcG1fcnVudGltZV9wdXRfc3lu YygpIHdvdWxkIG5vdCBwaHlzaWNhbGx5IHBvd2VyIG9mZiB0aGUgUEhZCmJlY2F1c2UgdGhlIE1l ZGlhdGVrIFBIWSBkcml2ZXIgbGFja3MgcnVudGltZSBQTSBvcHMuIEluc3RlYWQsIFBIWSBwb3dl ciB3YXMKc2FmZWx5IG1hbmFnZWQgYnkgdWZzX210a19wd3JfY3RybCgpIHdoaWNoIGV4cGxpY2l0 bHkgY2hlY2tzIHRoZSBsaW5rIHN0YXRlCmFuZCBza2lwcyBwb3dlci1kb3duIGlmIHRoZSBsaW5r IGlzIGFjdGl2ZS4KCkJ5IHJlcGxhY2luZyB0aGlzIHdpdGggYW4gdW5jb25kaXRpb25hbCB1ZnNf bXRrX21waHlfcG93ZXJfb24oaGJhLCBmYWxzZSksCnRoaXMgZnVuY3Rpb24gYmxpbmRseSBjYWxs cyBwaHlfcG93ZXJfb2ZmKCkgcmVnYXJkbGVzcyBvZiB0aGUgbGluayBzdGF0ZS4KVGhpcyBmb3Jj ZXMgdGhlIFBIWSBvZmYgd2hpbGUgdGhlIE1BQy9TQ1NJIGxheWVycyBleHBlY3QgaXQgdG8gcmVt YWluIGFjdGl2ZSwKY2F1c2luZyBVRlMgYWNjZXNzIHRvIGhhbmcgb24gd2FrZS4KCltTZXZlcml0 eTogTWVkaXVtXQpDYW4gdGhpcyBjYWxsIGxlYWQgdG8gYSBzdGF0ZSBkZXN5bmNocm9uaXphdGlv biBpZiB0aGUgcmVndWxhdG9yIGRpc2FibGUKZmFpbHM/CgpJbnNpZGUgdGhlIHVmc19tdGtfbXBo eV9wb3dlcl9vbihoYmEsIGZhbHNlKSBoZWxwZXIgZnVuY3Rpb24sIHRoZSBjb2RlIHBvd2Vycwpk b3duIHRoZSBoYXJkd2FyZSBhbmQgdGhlbiBkaXNhYmxlcyB0aGUgcmVndWxhdG9yczoKCgl9IGVs c2UgewoJCXBoeV9wb3dlcl9vZmYobXBoeSk7CgkJcmV0ID0gdWZzX210a18wOXZfb2ZmKGhvc3Qs IHRydWUpOwoJCWlmIChyZXQpCgkJCXJldHVybiByZXQ7Cgl9CgoJaG9zdC0+bXBoeV9wb3dlcmVk X29uID0gb247CgpJZiB1ZnNfbXRrXzA5dl9vZmYoKSBmYWlscywgaXQgcmV0dXJucyBlYXJseS4g VGhpcyBza2lwcyB0aGUgYXNzaWdubWVudApvZiBob3N0LT5tcGh5X3Bvd2VyZWRfb24gPSBvbiAo d2hpY2ggd291bGQgYmUgZmFsc2UpLiBTb2Z0d2FyZSB3aWxsIHJldGFpbgp0aGUgYmVsaWVmIHRo YXQgdGhlIFBIWSBpcyBzdGlsbCBwb3dlcmVkIG9uLgoKV2hlbiB0aGUgZGV2aWNlIHN1YnNlcXVl bnRseSByZXN1bWVzLCB1ZnNfbXRrX21waHlfcG93ZXJfb24oaGJhLCB0cnVlKSBjaGVja3MKaWYg KG9uID09IGhvc3QtPm1waHlfcG93ZXJlZF9vbikgd2hpY2ggZXZhbHVhdGVzIHRvIHRydWUgPT0g dHJ1ZSwgcmV0dXJuaW5nIDAKd2l0aG91dCBjYWxsaW5nIHBoeV9wb3dlcl9vbihtcGh5KS4gVGhp cyBsZWF2ZXMgdGhlIGhhcmR3YXJlIHBoeXNpY2FsbHkgb2ZmCndoaWxlIHRoZSBkcml2ZXIgZXhw ZWN0cyBpdCB0byBiZSBvbiwgY2F1c2luZyB0aGUgVUZTIGxpbmsgdG8gZmFpbC4KCi0tIApTYXNo aWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hpa28uZGV2LyMvcGF0Y2hzZXQvMjAyNjEwMTYt bXQ4MTk2LXVmcy12MTQtMC1lOGQ1NjVlMGNkNDVAY29sbGFib3JhLmNvbT9wYXJ0PTE0CgotLSAK bGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw czovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1waHkK