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 2A86B30C345 for ; Thu, 25 Jun 2026 18:12:44 +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=1782411166; cv=none; b=cZo0HGWRylWvT929H4peNjS5huJHYZl0JFoxJBoEH9av1sPDMeijGMVR714BSHt/i7gqyE882n6I6RhxAYFChGHN1fJhYjBvBo/HasKYqTnVpLG6xLNPR9eUXSk5zGn7VLq+20Ake1T+vMeHKI2En8Wqo7z9XISL/pGsjYrB+nc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782411166; c=relaxed/simple; bh=XYNRYYneIOze7VO2TZ6DkbB2bB+6Rv2RayjOk4Zi6us=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=G7JeUVpLlrMfC2BCsKxj+Tph+HvLDdrwzsYWyUsiEsXnnU38vAaJnJECznWdYQcO5tqJfJmA6zw9DbiU4l+/Lhg9xpO67ja3g/aBy7gZ+ev68pQxKDv0hGVLU7GAOdIXDMMuI1iH/qBv41eBcROoc3aMwXldWHMv5j77yFBxRgo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=g+s+1Kjw; 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="g+s+1Kjw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4B0E81F00A3A; Thu, 25 Jun 2026 18:12:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782411164; bh=2RncQXwqznbhHie3Ilv2VL9/L076OrAzGH/nhSvBvr4=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=g+s+1KjweIhWVkk2zwPdcwali+AKhnshLhtPfX4lKUxr7Rm4fczlSUrF+3xor2VmL 8ynuieaJhOufUTN1HcyGJN/tTh0K8NWp+PY0gm6LxxLZ/EuA9dloNr2bVv5GRA8+Gz BMbM9fj/y/3dYDr/JB76N9BC9UenCPWas+fT8rvozXnlnwtP3ZN89PFfHf9IyCeDTh VXrgSDIYUQHbfRRPII3JL7wG+CVhUa7ZQ86vdne9IIKxb4onKBGsAvxxJrTne8UitT mrySyNfby6lGLmyAZstMwaeWD1vfHVgn8Ar7JgdD89ahrWeChZ8F1tOKpVYFruL665 CTe64EkMxnMzg== From: sashiko-bot@kernel.org Subject: Re: [PATCH v7 24/27] phy: rockchip: usbdp: Support going from DP-only mode to USB mode Reply-To: sashiko-reviews@lists.linux.dev To: "Sebastian Reichel" Cc: linux-phy@lists.infradead.org, robh@kernel.org, vkoul@kernel.org, devicetree@vger.kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, conor+dt@kernel.org In-Reply-To: <20260625-rockchip-usbdp-cleanup-v7-24-38eb3cf654fd@collabora.com> References: <20260625-rockchip-usbdp-cleanup-v7-0-38eb3cf654fd@collabora.com> <20260625-rockchip-usbdp-cleanup-v7-24-38eb3cf654fd@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Thu, 25 Jun 2026 18:12:43 +0000 Message-Id: <20260625181244.4B0E81F00A3A@smtp.kernel.org> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 4 potential issue(= s) to consider: New issues: - [High] The `typec_mux_set` early return condition is a tautology, causing= the function to always return 0 and ignore all events. - [High] The `usb_in_use` flag fails to record the USB controller's intent = if `phy_init` is called while a DP-only adapter is plugged in. - [High] The fallback USB power-on logic in `rk_udphy_typec_mux_set` will n= ever trigger due to mode transition interference from orientation switch ca= llbacks. Pre-existing issues: - [High] The `UDPHY_MODE_USB` state bit is leaked in `udphy->status` if the= USB controller unbinds/exits while the PHY is in DP-only mode. -- commit b29d116f72e458e2aa19213a694463c70672b033 Author: Sebastian Reichel phy: rockchip: usbdp: Support going from DP-only mode to USB mode When a USB-C adapter mapping all Superspeed lanes to DP is plugged in, USB support is disabled in the PHY. This patch tracks USB usage and powers on the USB PHY in the Type-C mux set callback to ensure USB functionality is restored when switching to a USB-capable adapter. > diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rock= chip/phy-rockchip-usbdp.c > index 6f3184011e5f2..1821418375968 100644 > --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c > +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c [ ... ] > @@ -1293,7 +1299,13 @@ static int rk_udphy_usb3_phy_init(struct phy *phy) > return 0; > } > =20 > - return rk_udphy_power_on(udphy, UDPHY_MODE_USB); > + ret =3D rk_udphy_power_on(udphy, UDPHY_MODE_USB); > + if (ret) > + return ret; > + > + udphy->usb_in_use =3D true; > + > + return 0; > } [Severity: High] If the USB controller probes and calls rk_udphy_usb3_phy_init() while a DP-only adapter is physically connected, udphy->mode will lack UDPHY_MODE_USB. The early return right before this will skip setting udphy->usb_in_use =3D true. Will this cause the fallback logic introduced below to fail when later switched to a USB-capable adapter? > static int rk_udphy_usb3_phy_exit(struct phy *phy) > @@ -1302,6 +1314,8 @@ static int rk_udphy_usb3_phy_exit(struct phy *phy) > =20 > guard(mutex)(&udphy->mutex); > =20 > + udphy->usb_in_use =3D false; > + > /* DP only or high-speed */ > if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs) > return 0; > =20 > rk_udphy_power_off(udphy, UDPHY_MODE_USB); [Severity: High] This is a pre-existing issue, but does this early return bypass state cleanup if the USB controller unbinds while the PHY is in DP-only mode? If udphy->mode lacks UDPHY_MODE_USB, rk_udphy_power_off() is skipped, which permanently leaves UDPHY_MODE_USB set in udphy->status and leaks hardware clocks and resets. > @@ -1321,6 +1335,7 @@ static int rk_udphy_typec_mux_set(struct typec_mux_= dev *mux, > struct typec_mux_state *state) > { > struct rk_udphy *udphy =3D typec_mux_get_drvdata(mux); > + u8 old_mode; > =20 > /* > * Ignore mux events not involving Safe State, USB State or DP AltMode, > * because the mode field is being reused, e.g. state->mode =3D=3D 4 co= uld > * be either TYPEC_MODE_USB4 or TYPEC_DP_STATE_C. > */ > if (state->mode >=3D TYPEC_STATE_MODAL || !state->alt || > state->alt->svid !=3D USB_TYPEC_DP_SID) > return 0; [Severity: High] Is this early return condition a tautology that drops all events? For Safe and USB states, state->alt is NULL, so !state->alt evaluates to true. For DP AltMode states, state->mode >=3D TYPEC_STATE_MODAL evaluates to true. Since these use logical OR, the function will always return 0. > =20 > guard(mutex)(&udphy->mutex); > =20 > + old_mode =3D udphy->mode; > + > rk_udphy_set_typec_state(udphy, state->mode); > =20 > + /* > + * If the new mode includes USB but the old one didn't (e.g. leaving > + * DP-only), and the USB PHY was already initialized by the USB > + * controller, we need to power on the USB side now since no > + * subsequent phy_init call will come from the controller. > + */ > + if ((udphy->mode & UDPHY_MODE_USB) && !(old_mode & UDPHY_MODE_USB) && > + udphy->usb_in_use && !udphy->hs) > + return rk_udphy_power_on(udphy, UDPHY_MODE_USB); > + > return 0; > } [Severity: High] Will this fallback logic ever execute during a replug? When swapping a DP-only adapter for a USB-capable one, the orientation swit= ch callback rk_udphy_orien_sw_set() is typically invoked first. This sets the mode to UDPHY_MODE_DP_USB. By the time rk_udphy_typec_mux_set() is called here, udphy->mode already includes UDPHY_MODE_USB, so old_mode will have it as well. As a result, !(old_mode & UDPHY_MODE_USB) will evaluate to false and bypass this logic. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260625-rockchip-u= sbdp-cleanup-v7-0-38eb3cf654fd@collabora.com?part=3D24 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 C0C5DCDE000 for ; Thu, 25 Jun 2026 18:12:47 +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=VMGmPL2DDPTd71Cjs+4Cj6NHPSrBmB7roSJ+Wao+zH8=; b=SaprdBWFKWZ0hU u0rGJIFv+hrkk5Pm8qQEkN0FMefeExSUMNRz1lmWfKgXbpR/Q3NJllBWYr5mU8sF91aEVfhmi2cQ5 fejwBi97qaiyorx9SE0Hd82DW+4XPG13QHAk8/iTCNkQutnw39WTHh5/TaOj+acPN5/FwautgIdyr YkV13zrGViGwmvcSaiC2zcz9Nc+Sj3kr7bD0U53k+/aYKBFBnqDsXaOk0fq0/+E1vX6F4m+a0/QeH bR1naQ/kllr5gpctzQl/ApitWqkKX80Vvu3OiEklj7tete/qPX6Phg76SHSgXIyaon6u/1pUrbKjp gsTZyGe9KHICgBHquaMA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wcoZD-00000009fOp-2HPg; Thu, 25 Jun 2026 18:12:47 +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 1wcoZB-00000009fOb-44oF for linux-phy@lists.infradead.org; Thu, 25 Jun 2026 18:12:46 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 27AC960098; Thu, 25 Jun 2026 18:12:45 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4B0E81F00A3A; Thu, 25 Jun 2026 18:12:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782411164; bh=2RncQXwqznbhHie3Ilv2VL9/L076OrAzGH/nhSvBvr4=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=g+s+1KjweIhWVkk2zwPdcwali+AKhnshLhtPfX4lKUxr7Rm4fczlSUrF+3xor2VmL 8ynuieaJhOufUTN1HcyGJN/tTh0K8NWp+PY0gm6LxxLZ/EuA9dloNr2bVv5GRA8+Gz BMbM9fj/y/3dYDr/JB76N9BC9UenCPWas+fT8rvozXnlnwtP3ZN89PFfHf9IyCeDTh VXrgSDIYUQHbfRRPII3JL7wG+CVhUa7ZQ86vdne9IIKxb4onKBGsAvxxJrTne8UitT mrySyNfby6lGLmyAZstMwaeWD1vfHVgn8Ar7JgdD89ahrWeChZ8F1tOKpVYFruL665 CTe64EkMxnMzg== From: sashiko-bot@kernel.org Subject: Re: [PATCH v7 24/27] phy: rockchip: usbdp: Support going from DP-only mode to USB mode To: "Sebastian Reichel" Cc: linux-phy@lists.infradead.org, robh@kernel.org, vkoul@kernel.org, devicetree@vger.kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com, conor+dt@kernel.org In-Reply-To: <20260625-rockchip-usbdp-cleanup-v7-24-38eb3cf654fd@collabora.com> References: <20260625-rockchip-usbdp-cleanup-v7-0-38eb3cf654fd@collabora.com> <20260625-rockchip-usbdp-cleanup-v7-24-38eb3cf654fd@collabora.com> Date: Thu, 25 Jun 2026 18:12:43 +0000 Message-Id: <20260625181244.4B0E81F00A3A@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 NCBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpOZXcgaXNzdWVzOgotIFtIaWdoXSBU aGUgYHR5cGVjX211eF9zZXRgIGVhcmx5IHJldHVybiBjb25kaXRpb24gaXMgYSB0YXV0b2xvZ3ks IGNhdXNpbmcgdGhlIGZ1bmN0aW9uIHRvIGFsd2F5cyByZXR1cm4gMCBhbmQgaWdub3JlIGFsbCBl dmVudHMuCi0gW0hpZ2hdIFRoZSBgdXNiX2luX3VzZWAgZmxhZyBmYWlscyB0byByZWNvcmQgdGhl IFVTQiBjb250cm9sbGVyJ3MgaW50ZW50IGlmIGBwaHlfaW5pdGAgaXMgY2FsbGVkIHdoaWxlIGEg RFAtb25seSBhZGFwdGVyIGlzIHBsdWdnZWQgaW4uCi0gW0hpZ2hdIFRoZSBmYWxsYmFjayBVU0Ig cG93ZXItb24gbG9naWMgaW4gYHJrX3VkcGh5X3R5cGVjX211eF9zZXRgIHdpbGwgbmV2ZXIgdHJp Z2dlciBkdWUgdG8gbW9kZSB0cmFuc2l0aW9uIGludGVyZmVyZW5jZSBmcm9tIG9yaWVudGF0aW9u IHN3aXRjaCBjYWxsYmFja3MuCgpQcmUtZXhpc3RpbmcgaXNzdWVzOgotIFtIaWdoXSBUaGUgYFVE UEhZX01PREVfVVNCYCBzdGF0ZSBiaXQgaXMgbGVha2VkIGluIGB1ZHBoeS0+c3RhdHVzYCBpZiB0 aGUgVVNCIGNvbnRyb2xsZXIgdW5iaW5kcy9leGl0cyB3aGlsZSB0aGUgUEhZIGlzIGluIERQLW9u bHkgbW9kZS4KLS0KCmNvbW1pdCBiMjlkMTE2ZjcyZTQ1OGUyYWExOTIxM2E2OTQ0NjNjNzA2NzJi MDMzCkF1dGhvcjogU2ViYXN0aWFuIFJlaWNoZWwgPHNlYmFzdGlhbi5yZWljaGVsQGNvbGxhYm9y YS5jb20+CgpwaHk6IHJvY2tjaGlwOiB1c2JkcDogU3VwcG9ydCBnb2luZyBmcm9tIERQLW9ubHkg bW9kZSB0byBVU0IgbW9kZQoKV2hlbiBhIFVTQi1DIGFkYXB0ZXIgbWFwcGluZyBhbGwgU3VwZXJz cGVlZCBsYW5lcyB0byBEUCBpcyBwbHVnZ2VkIGluLApVU0Igc3VwcG9ydCBpcyBkaXNhYmxlZCBp biB0aGUgUEhZLiBUaGlzIHBhdGNoIHRyYWNrcyBVU0IgdXNhZ2UgYW5kCnBvd2VycyBvbiB0aGUg VVNCIFBIWSBpbiB0aGUgVHlwZS1DIG11eCBzZXQgY2FsbGJhY2sgdG8gZW5zdXJlIFVTQgpmdW5j dGlvbmFsaXR5IGlzIHJlc3RvcmVkIHdoZW4gc3dpdGNoaW5nIHRvIGEgVVNCLWNhcGFibGUgYWRh cHRlci4KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC11 c2JkcC5jIGIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLXVzYmRwLmMKPiBpbmRl eCA2ZjMxODQwMTFlNWYyLi4xODIxNDE4Mzc1OTY4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcGh5 L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC11c2JkcC5jCj4gKysrIGIvZHJpdmVycy9waHkvcm9ja2No aXAvcGh5LXJvY2tjaGlwLXVzYmRwLmMKWyAuLi4gXQo+IEBAIC0xMjkzLDcgKzEyOTksMTMgQEAg c3RhdGljIGludCBya191ZHBoeV91c2IzX3BoeV9pbml0KHN0cnVjdCBwaHkgKnBoeSkKPiAgCQly ZXR1cm4gMDsKPiAgCX0KPiAgCj4gLQlyZXR1cm4gcmtfdWRwaHlfcG93ZXJfb24odWRwaHksIFVE UEhZX01PREVfVVNCKTsKPiArCXJldCA9IHJrX3VkcGh5X3Bvd2VyX29uKHVkcGh5LCBVRFBIWV9N T0RFX1VTQik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJdWRwaHktPnVz Yl9pbl91c2UgPSB0cnVlOwo+ICsKPiArCXJldHVybiAwOwo+ICB9CgpbU2V2ZXJpdHk6IEhpZ2hd CklmIHRoZSBVU0IgY29udHJvbGxlciBwcm9iZXMgYW5kIGNhbGxzIHJrX3VkcGh5X3VzYjNfcGh5 X2luaXQoKSB3aGlsZSBhCkRQLW9ubHkgYWRhcHRlciBpcyBwaHlzaWNhbGx5IGNvbm5lY3RlZCwg dWRwaHktPm1vZGUgd2lsbCBsYWNrClVEUEhZX01PREVfVVNCLiBUaGUgZWFybHkgcmV0dXJuIHJp Z2h0IGJlZm9yZSB0aGlzIHdpbGwgc2tpcCBzZXR0aW5nCnVkcGh5LT51c2JfaW5fdXNlID0gdHJ1 ZS4KCldpbGwgdGhpcyBjYXVzZSB0aGUgZmFsbGJhY2sgbG9naWMgaW50cm9kdWNlZCBiZWxvdyB0 byBmYWlsIHdoZW4gbGF0ZXIKc3dpdGNoZWQgdG8gYSBVU0ItY2FwYWJsZSBhZGFwdGVyPwoKPiAg c3RhdGljIGludCBya191ZHBoeV91c2IzX3BoeV9leGl0KHN0cnVjdCBwaHkgKnBoeSkKPiBAQCAt MTMwMiw2ICsxMzE0LDggQEAgc3RhdGljIGludCBya191ZHBoeV91c2IzX3BoeV9leGl0KHN0cnVj dCBwaHkgKnBoeSkKPiAgCj4gIAlndWFyZChtdXRleCkoJnVkcGh5LT5tdXRleCk7Cj4gIAo+ICsJ dWRwaHktPnVzYl9pbl91c2UgPSBmYWxzZTsKPiArCj4gIAkvKiBEUCBvbmx5IG9yIGhpZ2gtc3Bl ZWQgKi8KPiAgCWlmICghKHVkcGh5LT5tb2RlICYgVURQSFlfTU9ERV9VU0IpIHx8IHVkcGh5LT5o cykKPiAgCQlyZXR1cm4gMDsKPiAgCj4gIAlya191ZHBoeV9wb3dlcl9vZmYodWRwaHksIFVEUEhZ X01PREVfVVNCKTsKCltTZXZlcml0eTogSGlnaF0KVGhpcyBpcyBhIHByZS1leGlzdGluZyBpc3N1 ZSwgYnV0IGRvZXMgdGhpcyBlYXJseSByZXR1cm4gYnlwYXNzIHN0YXRlCmNsZWFudXAgaWYgdGhl IFVTQiBjb250cm9sbGVyIHVuYmluZHMgd2hpbGUgdGhlIFBIWSBpcyBpbiBEUC1vbmx5IG1vZGU/ CgpJZiB1ZHBoeS0+bW9kZSBsYWNrcyBVRFBIWV9NT0RFX1VTQiwgcmtfdWRwaHlfcG93ZXJfb2Zm KCkgaXMgc2tpcHBlZCwgd2hpY2gKcGVybWFuZW50bHkgbGVhdmVzIFVEUEhZX01PREVfVVNCIHNl dCBpbiB1ZHBoeS0+c3RhdHVzIGFuZCBsZWFrcyBoYXJkd2FyZQpjbG9ja3MgYW5kIHJlc2V0cy4K Cj4gQEAgLTEzMjEsNiArMTMzNSw3IEBAIHN0YXRpYyBpbnQgcmtfdWRwaHlfdHlwZWNfbXV4X3Nl dChzdHJ1Y3QgdHlwZWNfbXV4X2RldiAqbXV4LAo+ICAJCQkJICBzdHJ1Y3QgdHlwZWNfbXV4X3N0 YXRlICpzdGF0ZSkKPiAgewo+ICAJc3RydWN0IHJrX3VkcGh5ICp1ZHBoeSA9IHR5cGVjX211eF9n ZXRfZHJ2ZGF0YShtdXgpOwo+ICsJdTggb2xkX21vZGU7Cj4gIAo+ICAJLyoKPiAgCSAqIElnbm9y ZSBtdXggZXZlbnRzIG5vdCBpbnZvbHZpbmcgU2FmZSBTdGF0ZSwgVVNCIFN0YXRlIG9yIERQIEFs dE1vZGUsCj4gIAkgKiBiZWNhdXNlIHRoZSBtb2RlIGZpZWxkIGlzIGJlaW5nIHJldXNlZCwgZS5n LiBzdGF0ZS0+bW9kZSA9PSA0IGNvdWxkCj4gIAkgKiBiZSBlaXRoZXIgVFlQRUNfTU9ERV9VU0I0 IG9yIFRZUEVDX0RQX1NUQVRFX0MuCj4gIAkgKi8KPiAgCWlmIChzdGF0ZS0+bW9kZSA+PSBUWVBF Q19TVEFURV9NT0RBTCB8fCAhc3RhdGUtPmFsdCB8fAo+ICAJICAgIHN0YXRlLT5hbHQtPnN2aWQg IT0gVVNCX1RZUEVDX0RQX1NJRCkKPiAgCQlyZXR1cm4gMDsKCltTZXZlcml0eTogSGlnaF0KSXMg dGhpcyBlYXJseSByZXR1cm4gY29uZGl0aW9uIGEgdGF1dG9sb2d5IHRoYXQgZHJvcHMgYWxsIGV2 ZW50cz8KCkZvciBTYWZlIGFuZCBVU0Igc3RhdGVzLCBzdGF0ZS0+YWx0IGlzIE5VTEwsIHNvICFz dGF0ZS0+YWx0IGV2YWx1YXRlcyB0bwp0cnVlLiBGb3IgRFAgQWx0TW9kZSBzdGF0ZXMsIHN0YXRl LT5tb2RlID49IFRZUEVDX1NUQVRFX01PREFMIGV2YWx1YXRlcyB0bwp0cnVlLiBTaW5jZSB0aGVz ZSB1c2UgbG9naWNhbCBPUiwgdGhlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiAwLgoKPiAg Cj4gIAlndWFyZChtdXRleCkoJnVkcGh5LT5tdXRleCk7Cj4gIAo+ICsJb2xkX21vZGUgPSB1ZHBo eS0+bW9kZTsKPiArCj4gIAlya191ZHBoeV9zZXRfdHlwZWNfc3RhdGUodWRwaHksIHN0YXRlLT5t b2RlKTsKPiAgCj4gKwkvKgo+ICsJICogSWYgdGhlIG5ldyBtb2RlIGluY2x1ZGVzIFVTQiBidXQg dGhlIG9sZCBvbmUgZGlkbid0IChlLmcuIGxlYXZpbmcKPiArCSAqIERQLW9ubHkpLCBhbmQgdGhl IFVTQiBQSFkgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYnkgdGhlIFVTQgo+ICsJICogY29udHJv bGxlciwgd2UgbmVlZCB0byBwb3dlciBvbiB0aGUgVVNCIHNpZGUgbm93IHNpbmNlIG5vCj4gKwkg KiBzdWJzZXF1ZW50IHBoeV9pbml0IGNhbGwgd2lsbCBjb21lIGZyb20gdGhlIGNvbnRyb2xsZXIu Cj4gKwkgKi8KPiArCWlmICgodWRwaHktPm1vZGUgJiBVRFBIWV9NT0RFX1VTQikgJiYgIShvbGRf bW9kZSAmIFVEUEhZX01PREVfVVNCKSAmJgo+ICsJICAgIHVkcGh5LT51c2JfaW5fdXNlICYmICF1 ZHBoeS0+aHMpCj4gKwkJcmV0dXJuIHJrX3VkcGh5X3Bvd2VyX29uKHVkcGh5LCBVRFBIWV9NT0RF X1VTQik7Cj4gKwo+ICAJcmV0dXJuIDA7Cj4gIH0KCltTZXZlcml0eTogSGlnaF0KV2lsbCB0aGlz IGZhbGxiYWNrIGxvZ2ljIGV2ZXIgZXhlY3V0ZSBkdXJpbmcgYSByZXBsdWc/CgpXaGVuIHN3YXBw aW5nIGEgRFAtb25seSBhZGFwdGVyIGZvciBhIFVTQi1jYXBhYmxlIG9uZSwgdGhlIG9yaWVudGF0 aW9uIHN3aXRjaApjYWxsYmFjayBya191ZHBoeV9vcmllbl9zd19zZXQoKSBpcyB0eXBpY2FsbHkg aW52b2tlZCBmaXJzdC4gVGhpcyBzZXRzIHRoZQptb2RlIHRvIFVEUEhZX01PREVfRFBfVVNCLgoK QnkgdGhlIHRpbWUgcmtfdWRwaHlfdHlwZWNfbXV4X3NldCgpIGlzIGNhbGxlZCBoZXJlLCB1ZHBo eS0+bW9kZSBhbHJlYWR5CmluY2x1ZGVzIFVEUEhZX01PREVfVVNCLCBzbyBvbGRfbW9kZSB3aWxs IGhhdmUgaXQgYXMgd2VsbC4gQXMgYSByZXN1bHQsCiEob2xkX21vZGUgJiBVRFBIWV9NT0RFX1VT Qikgd2lsbCBldmFsdWF0ZSB0byBmYWxzZSBhbmQgYnlwYXNzIHRoaXMgbG9naWMuCgotLSAKU2Fz aGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYwNjI1 LXJvY2tjaGlwLXVzYmRwLWNsZWFudXAtdjctMC0zOGViM2NmNjU0ZmRAY29sbGFib3JhLmNvbT9w YXJ0PTI0CgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1waHlAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1waHkK