From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 99F1A2EA749; Sat, 16 May 2026 19:43:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778960594; cv=none; b=XnY9s8gnmTR3PotXikk39wHTHIUXzzH6eEsxFoeUqlXYFJlDu4dm4cBy9shP1sDoHDQcUU9uPoZadk1ckngAD6MwskAFwVfBKUNsN4ud0dsQ8tD3PO1xGbJ5G7bRD6hNylO98MNd29l7t3B5LwLmq2GwRcniDRnKDRmnjwfUsU8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778960594; c=relaxed/simple; bh=4p1ja3PdkljLMW/wiFgeXQ+4PM2PIeQxKd65WFYC730=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=lyZFffaz2cRuk7iP+jUgLIpizsaTSCb9+ba/IzonjfJj8JgJdKxWkwnexdViWc8esP8lxDf2SxoVAcEqBD6CIVq2+W2LOlQHScCBQhDpNg/7QsakjOama8GFDjD01pACEHVgvPiP9MqeiWDcfGd5REelzjLjJ2WiZQyKZlFMt2o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fUb8r7rc; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fUb8r7rc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4211FC19425; Sat, 16 May 2026 19:43:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778960594; bh=4p1ja3PdkljLMW/wiFgeXQ+4PM2PIeQxKd65WFYC730=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date:From; b=fUb8r7rcqcinn/8MiCslPLweUwWjvjJW1lS7AqLFan8gLSu0ZW033W0Dakzm8jHRA g9dXp0fA7UCuS8dsJyfykaDWWBIH1PyLOm6gydPtzSG2yqRmbfO0XcclIfN5tEr0D6 7+rKLeO8T+DoPTMNYv8Y8w0uPl0XpG4II0AS+DXI7kjd6aGfYaoZIzRL1GqoP4anPm tJjfderQdJZZhXGTR3KlOvdUQXSLLY7QmIWQYoc2ord7zuQakwMEPS1TQ8wrkq2Ydw yIlVpobUWhx12A7406t1mKYH7igK/8XIxyQTHegwF7SFOdYYuZ8UrmEQtS9m6GmkPq 4qePyl6zB2bFw== From: sashiko-bot@kernel.org Subject: Re: [PATCH v6 19/22] drm: bridge: dw_hdmi: Rework HDP and RXSENSE interrupt handling Reply-To: sashiko-reviews@lists.linux.dev To: "Jonas Karlman" Cc: neil.armstrong@linaro.org, linux-amlogic@lists.infradead.org, imx@lists.linux.dev, linux-sunxi@lists.linux.dev, Frank.Li@kernel.org In-Reply-To: <20260516183838.2024991-20-jonas@kwiboo.se> References: <20260516183838.2024991-20-jonas@kwiboo.se> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Sat, 16 May 2026 19:43:13 +0000 Message-Id: <20260516194314.4211FC19425@smtp.kernel.org> Precedence: bulk X-Mailing-List: imx@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 1 potential issue(= s) to consider: - [High] Clearing the W1C HPD interrupt after reading the live status and s= etting the new polarity creates a race condition that can permanently break= hotplug detection. -- commit 40973548d3ce7bfe1722c0d53b828f8ef0ca4d81 Author: Jonas Karlman drm: bridge: dw_hdmi: Rework HDP and RXSENSE interrupt handling This commit removes RXSENSE handling to simplify the HPD interrupt handling, depending instead on a delayed work to detect connection status or EDID changes. It also ensures the initial HPD interrupt polarity is based on the current HPD status. > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/= bridge/synopsys/dw-hdmi.c > index 300dac4a6c358..39e94d22249b2 100644 > --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c [ ... ] > @@ -3060,78 +3011,29 @@ static irqreturn_t dw_hdmi_hardirq(int irq, void = *dev_id) > =20 > static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) > { > struct dw_hdmi *hdmi =3D dev_id; > - u8 intr_stat, phy_int_pol, phy_pol_mask, phy_stat; > - enum drm_connector_status status =3D connector_status_unknown; > - > - intr_stat =3D hdmi_readb(hdmi, HDMI_IH_PHY_STAT0); > - phy_int_pol =3D hdmi_readb(hdmi, HDMI_PHY_POL0); > - phy_stat =3D hdmi_readb(hdmi, HDMI_PHY_STAT0); > - > - phy_pol_mask =3D 0; > - if (intr_stat & HDMI_IH_PHY_STAT0_HPD) > - phy_pol_mask |=3D HDMI_PHY_HPD; > - if (intr_stat & HDMI_IH_PHY_STAT0_RX_SENSE0) > - phy_pol_mask |=3D HDMI_PHY_RX_SENSE0; > - if (intr_stat & HDMI_IH_PHY_STAT0_RX_SENSE1) > - phy_pol_mask |=3D HDMI_PHY_RX_SENSE1; > - if (intr_stat & HDMI_IH_PHY_STAT0_RX_SENSE2) > - phy_pol_mask |=3D HDMI_PHY_RX_SENSE2; > - if (intr_stat & HDMI_IH_PHY_STAT0_RX_SENSE3) > - phy_pol_mask |=3D HDMI_PHY_RX_SENSE3; > - > - if (phy_pol_mask) > - hdmi_modb(hdmi, ~phy_int_pol, phy_pol_mask, HDMI_PHY_POL0); > + u8 intr_stat; > =20 > /* > - * RX sense tells us whether the TDMS transmitters are detecting > - * load - in other words, there's something listening on the > - * other end of the link. Use this to decide whether we should > - * power on the phy as HPD may be toggled by the sink to merely > - * ask the source to re-read the EDID. > + * Interrupt generation is accomplished in the following way: > + * interrupt =3D (mask =3D=3D 0) && (polarity =3D=3D status) > + * All interrupts are forwarded to the Interrupt Handler sticky bit > + * register ih_phy_stat0 and muted using the register ih_mute_phy_stat0. > */ > - if (intr_stat & > - (HDMI_IH_PHY_STAT0_RX_SENSE | HDMI_IH_PHY_STAT0_HPD)) { > - dw_hdmi_setup_rx_sense(hdmi, > - phy_stat & HDMI_PHY_HPD, > - phy_stat & HDMI_PHY_RX_SENSE); > - > - if ((intr_stat & HDMI_IH_PHY_STAT0_HPD) && > - (phy_stat & HDMI_PHY_HPD)) > - status =3D connector_status_connected; > + intr_stat =3D hdmi_readb(hdmi, HDMI_IH_PHY_STAT0); > + if (intr_stat & HDMI_IH_PHY_STAT0_HPD) { > + enum drm_connector_status status; > =20 > - if (!(phy_stat & (HDMI_PHY_HPD | HDMI_PHY_RX_SENSE))) > - status =3D connector_status_disconnected; > - } > + /* Set HPD interrupt polarity based on current HPD status. */ > + status =3D dw_hdmi_phy_read_hpd(hdmi, hdmi->phy.data); > + hdmi_modb(hdmi, status =3D=3D connector_status_connected ? > + 0 : HDMI_PHY_HPD, HDMI_PHY_HPD, HDMI_PHY_POL0); > =20 > - if (status !=3D connector_status_unknown) { > dev_dbg(hdmi->dev, "EVENT=3D%s\n", > status =3D=3D connector_status_connected ? > "plugin" : "plugout"); > @@ -3141,8 +3043,7 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_i= d) > } > =20 > hdmi_writeb(hdmi, intr_stat, HDMI_IH_PHY_STAT0); Can this sequence create a race condition that breaks hotplug detection? If the HPD line toggles (for example, due to contact bounce) after dw_hdmi_phy_read_hpd() but before this final hdmi_writeb(), the hardware could generate a new interrupt and set the sticky bit again. Since the final hdmi_writeb() writes the original intr_stat (which has the HPD bit set) back to the register, and the register is write-1-to-clear, it will clear this newly generated interrupt. This could leave the driver and hardware out of sync, with the hardware waiting for a polarity transition that has already occurred, causing all future plug/unplug events to be ignored. Should the interrupt status be cleared before reading the live state and updating the polarity to close this race window? > - hdmi_writeb(hdmi, ~(HDMI_IH_PHY_STAT0_HPD | HDMI_IH_PHY_STAT0_RX_SENSE), > - HDMI_IH_MUTE_PHY_STAT0); > + hdmi_writeb(hdmi, ~HDMI_IH_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0); > =20 > return IRQ_HANDLED; > } --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260516183838.2024= 991-1-jonas@kwiboo.se?part=3D19 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 18E47CD4851 for ; Sat, 16 May 2026 19:43:23 +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=4KVQWckWAvWupuAtXztlXvLHaDO50XMfn0KkvrYTsEU=; b=wgMN9nhioWFX4Y d9xjJYUBYcmqQ/ooFRsoWGYXU6/d5lQo6yAkYU2YS8TkjNWyNCAaZP5WT8WPbeeagGJyD2ZTaP6zw MP5lz0NdjySrgNQvd350KuZ+mr0X53fMXtV0fndl2ryGDQky371Z0HbFikXR/wrPp3owRYfENorBz BXt6giMeOYUUcO8hs+Fc7PBQUYSbkHWmXVvWttx4zFU/D7rWntcWsALNfgbY5vRZRUdr3jnLR/b2W ptmH1RDKRGfS6P5/mj/QqKdJ3K8lTpYjmsFNYP/wAsPnTdOMG5q4dyic65/aJMGI+np7Bm7nRnjH3 eBiDRh6ilxu9icPzLOgg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wOKut-0000000BOlP-3UXi; Sat, 16 May 2026 19:43:19 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wOKuq-0000000BOkD-2RKL for linux-amlogic@lists.infradead.org; Sat, 16 May 2026 19:43:17 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id 99E9843309; Sat, 16 May 2026 19:43:14 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4211FC19425; Sat, 16 May 2026 19:43:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778960594; bh=4p1ja3PdkljLMW/wiFgeXQ+4PM2PIeQxKd65WFYC730=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date:From; b=fUb8r7rcqcinn/8MiCslPLweUwWjvjJW1lS7AqLFan8gLSu0ZW033W0Dakzm8jHRA g9dXp0fA7UCuS8dsJyfykaDWWBIH1PyLOm6gydPtzSG2yqRmbfO0XcclIfN5tEr0D6 7+rKLeO8T+DoPTMNYv8Y8w0uPl0XpG4II0AS+DXI7kjd6aGfYaoZIzRL1GqoP4anPm tJjfderQdJZZhXGTR3KlOvdUQXSLLY7QmIWQYoc2ord7zuQakwMEPS1TQ8wrkq2Ydw yIlVpobUWhx12A7406t1mKYH7igK/8XIxyQTHegwF7SFOdYYuZ8UrmEQtS9m6GmkPq 4qePyl6zB2bFw== From: sashiko-bot@kernel.org Subject: Re: [PATCH v6 19/22] drm: bridge: dw_hdmi: Rework HDP and RXSENSE interrupt handling To: "Jonas Karlman" Cc: neil.armstrong@linaro.org, linux-amlogic@lists.infradead.org, imx@lists.linux.dev, linux-sunxi@lists.linux.dev, Frank.Li@kernel.org In-Reply-To: <20260516183838.2024991-20-jonas@kwiboo.se> References: <20260516183838.2024991-20-jonas@kwiboo.se> Date: Sat, 16 May 2026 19:43:13 +0000 Message-Id: <20260516194314.4211FC19425@smtp.kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260516_124316_663697_615321CA X-CRM114-Status: GOOD ( 21.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: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 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 VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MSBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIENsZWFyaW5nIHRoZSBX MUMgSFBEIGludGVycnVwdCBhZnRlciByZWFkaW5nIHRoZSBsaXZlIHN0YXR1cyBhbmQgc2V0dGlu ZyB0aGUgbmV3IHBvbGFyaXR5IGNyZWF0ZXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNhbiBwZXJt YW5lbnRseSBicmVhayBob3RwbHVnIGRldGVjdGlvbi4KLS0KCmNvbW1pdCA0MDk3MzU0OGQzY2U3 YmZlMTcyMmMwZDUzYjgyOGY4ZWYwY2E0ZDgxCkF1dGhvcjogSm9uYXMgS2FybG1hbiA8am9uYXNA a3dpYm9vLnNlPgoKZHJtOiBicmlkZ2U6IGR3X2hkbWk6IFJld29yayBIRFAgYW5kIFJYU0VOU0Ug aW50ZXJydXB0IGhhbmRsaW5nCgpUaGlzIGNvbW1pdCByZW1vdmVzIFJYU0VOU0UgaGFuZGxpbmcg dG8gc2ltcGxpZnkgdGhlIEhQRCBpbnRlcnJ1cHQKaGFuZGxpbmcsIGRlcGVuZGluZyBpbnN0ZWFk IG9uIGEgZGVsYXllZCB3b3JrIHRvIGRldGVjdCBjb25uZWN0aW9uCnN0YXR1cyBvciBFRElEIGNo YW5nZXMuIEl0IGFsc28gZW5zdXJlcyB0aGUgaW5pdGlhbCBIUEQgaW50ZXJydXB0CnBvbGFyaXR5 IGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IEhQRCBzdGF0dXMuCgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LWhkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2Uvc3lub3BzeXMvZHctaGRtaS5jCj4gaW5kZXggMzAwZGFjNGE2YzM1OC4uMzllOTRkMjIy NDliMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LWhk bWkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctaGRtaS5jCgpb IC4uLiBdCgo+IEBAIC0zMDYwLDc4ICszMDExLDI5IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBkd19o ZG1pX2hhcmRpcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQo+ICAKPiAgc3RhdGljIGlycXJldHVy bl90IGR3X2hkbWlfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKPiAgewo+ICAJc3RydWN0IGR3 X2hkbWkgKmhkbWkgPSBkZXZfaWQ7Cj4gLQl1OCBpbnRyX3N0YXQsIHBoeV9pbnRfcG9sLCBwaHlf cG9sX21hc2ssIHBoeV9zdGF0Owo+IC0JZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMg PSBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247Cj4gLQo+IC0JaW50cl9zdGF0ID0gaGRtaV9yZWFk YihoZG1pLCBIRE1JX0lIX1BIWV9TVEFUMCk7Cj4gLQlwaHlfaW50X3BvbCA9IGhkbWlfcmVhZGIo aGRtaSwgSERNSV9QSFlfUE9MMCk7Cj4gLQlwaHlfc3RhdCA9IGhkbWlfcmVhZGIoaGRtaSwgSERN SV9QSFlfU1RBVDApOwo+IC0KPiAtCXBoeV9wb2xfbWFzayA9IDA7Cj4gLQlpZiAoaW50cl9zdGF0 ICYgSERNSV9JSF9QSFlfU1RBVDBfSFBEKQo+IC0JCXBoeV9wb2xfbWFzayB8PSBIRE1JX1BIWV9I UEQ7Cj4gLQlpZiAoaW50cl9zdGF0ICYgSERNSV9JSF9QSFlfU1RBVDBfUlhfU0VOU0UwKQo+IC0J CXBoeV9wb2xfbWFzayB8PSBIRE1JX1BIWV9SWF9TRU5TRTA7Cj4gLQlpZiAoaW50cl9zdGF0ICYg SERNSV9JSF9QSFlfU1RBVDBfUlhfU0VOU0UxKQo+IC0JCXBoeV9wb2xfbWFzayB8PSBIRE1JX1BI WV9SWF9TRU5TRTE7Cj4gLQlpZiAoaW50cl9zdGF0ICYgSERNSV9JSF9QSFlfU1RBVDBfUlhfU0VO U0UyKQo+IC0JCXBoeV9wb2xfbWFzayB8PSBIRE1JX1BIWV9SWF9TRU5TRTI7Cj4gLQlpZiAoaW50 cl9zdGF0ICYgSERNSV9JSF9QSFlfU1RBVDBfUlhfU0VOU0UzKQo+IC0JCXBoeV9wb2xfbWFzayB8 PSBIRE1JX1BIWV9SWF9TRU5TRTM7Cj4gLQo+IC0JaWYgKHBoeV9wb2xfbWFzaykKPiAtCQloZG1p X21vZGIoaGRtaSwgfnBoeV9pbnRfcG9sLCBwaHlfcG9sX21hc2ssIEhETUlfUEhZX1BPTDApOwo+ ICsJdTggaW50cl9zdGF0Owo+ICAKPiAgCS8qCj4gLQkgKiBSWCBzZW5zZSB0ZWxscyB1cyB3aGV0 aGVyIHRoZSBURE1TIHRyYW5zbWl0dGVycyBhcmUgZGV0ZWN0aW5nCj4gLQkgKiBsb2FkIC0gaW4g b3RoZXIgd29yZHMsIHRoZXJlJ3Mgc29tZXRoaW5nIGxpc3RlbmluZyBvbiB0aGUKPiAtCSAqIG90 aGVyIGVuZCBvZiB0aGUgbGluay4gIFVzZSB0aGlzIHRvIGRlY2lkZSB3aGV0aGVyIHdlIHNob3Vs ZAo+IC0JICogcG93ZXIgb24gdGhlIHBoeSBhcyBIUEQgbWF5IGJlIHRvZ2dsZWQgYnkgdGhlIHNp bmsgdG8gbWVyZWx5Cj4gLQkgKiBhc2sgdGhlIHNvdXJjZSB0byByZS1yZWFkIHRoZSBFRElELgo+ ICsJICogSW50ZXJydXB0IGdlbmVyYXRpb24gaXMgYWNjb21wbGlzaGVkIGluIHRoZSBmb2xsb3dp bmcgd2F5Ogo+ICsJICogICBpbnRlcnJ1cHQgPSAobWFzayA9PSAwKSAmJiAocG9sYXJpdHkgPT0g c3RhdHVzKQo+ICsJICogQWxsIGludGVycnVwdHMgYXJlIGZvcndhcmRlZCB0byB0aGUgSW50ZXJy dXB0IEhhbmRsZXIgc3RpY2t5IGJpdAo+ICsJICogcmVnaXN0ZXIgaWhfcGh5X3N0YXQwIGFuZCBt dXRlZCB1c2luZyB0aGUgcmVnaXN0ZXIgaWhfbXV0ZV9waHlfc3RhdDAuCj4gIAkgKi8KPiAtCWlm IChpbnRyX3N0YXQgJgo+IC0JICAgIChIRE1JX0lIX1BIWV9TVEFUMF9SWF9TRU5TRSB8IEhETUlf SUhfUEhZX1NUQVQwX0hQRCkpIHsKPiAtCQlkd19oZG1pX3NldHVwX3J4X3NlbnNlKGhkbWksCj4g LQkJCQkgICAgICAgcGh5X3N0YXQgJiBIRE1JX1BIWV9IUEQsCj4gLQkJCQkgICAgICAgcGh5X3N0 YXQgJiBIRE1JX1BIWV9SWF9TRU5TRSk7Cj4gLQo+IC0JCWlmICgoaW50cl9zdGF0ICYgSERNSV9J SF9QSFlfU1RBVDBfSFBEKSAmJgo+IC0JCSAgICAocGh5X3N0YXQgJiBIRE1JX1BIWV9IUEQpKQo+ IC0JCQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKPiArCWludHJfc3RhdCA9 IGhkbWlfcmVhZGIoaGRtaSwgSERNSV9JSF9QSFlfU1RBVDApOwo+ICsJaWYgKGludHJfc3RhdCAm IEhETUlfSUhfUEhZX1NUQVQwX0hQRCkgewo+ICsJCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMg c3RhdHVzOwo+ICAKPiAtCQlpZiAoIShwaHlfc3RhdCAmIChIRE1JX1BIWV9IUEQgfCBIRE1JX1BI WV9SWF9TRU5TRSkpKQo+IC0JCQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3Rl ZDsKPiAtCX0KPiArCQkvKiBTZXQgSFBEIGludGVycnVwdCBwb2xhcml0eSBiYXNlZCBvbiBjdXJy ZW50IEhQRCBzdGF0dXMuICovCj4gKwkJc3RhdHVzID0gZHdfaGRtaV9waHlfcmVhZF9ocGQoaGRt aSwgaGRtaS0+cGh5LmRhdGEpOwo+ICsJCWhkbWlfbW9kYihoZG1pLCBzdGF0dXMgPT0gY29ubmVj dG9yX3N0YXR1c19jb25uZWN0ZWQgPwo+ICsJCQkgIDAgOiBIRE1JX1BIWV9IUEQsIEhETUlfUEhZ X0hQRCwgSERNSV9QSFlfUE9MMCk7Cj4gIAo+IC0JaWYgKHN0YXR1cyAhPSBjb25uZWN0b3Jfc3Rh dHVzX3Vua25vd24pIHsKPiAgCQlkZXZfZGJnKGhkbWktPmRldiwgIkVWRU5UPSVzXG4iLAo+ICAJ CQlzdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgPwo+ICAJCQkicGx1Z2luIiA6 ICJwbHVnb3V0Iik7Cj4gQEAgLTMxNDEsOCArMzA0Myw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBk d19oZG1pX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gIAl9Cj4gIAo+ICAJaGRtaV93cml0 ZWIoaGRtaSwgaW50cl9zdGF0LCBIRE1JX0lIX1BIWV9TVEFUMCk7CgpDYW4gdGhpcyBzZXF1ZW5j ZSBjcmVhdGUgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGJyZWFrcyBob3RwbHVnIGRldGVjdGlvbj8K CklmIHRoZSBIUEQgbGluZSB0b2dnbGVzIChmb3IgZXhhbXBsZSwgZHVlIHRvIGNvbnRhY3QgYm91 bmNlKSBhZnRlcgpkd19oZG1pX3BoeV9yZWFkX2hwZCgpIGJ1dCBiZWZvcmUgdGhpcyBmaW5hbCBo ZG1pX3dyaXRlYigpLCB0aGUgaGFyZHdhcmUKY291bGQgZ2VuZXJhdGUgYSBuZXcgaW50ZXJydXB0 IGFuZCBzZXQgdGhlIHN0aWNreSBiaXQgYWdhaW4uCgpTaW5jZSB0aGUgZmluYWwgaGRtaV93cml0 ZWIoKSB3cml0ZXMgdGhlIG9yaWdpbmFsIGludHJfc3RhdCAod2hpY2ggaGFzIHRoZQpIUEQgYml0 IHNldCkgYmFjayB0byB0aGUgcmVnaXN0ZXIsIGFuZCB0aGUgcmVnaXN0ZXIgaXMgd3JpdGUtMS10 by1jbGVhciwgaXQKd2lsbCBjbGVhciB0aGlzIG5ld2x5IGdlbmVyYXRlZCBpbnRlcnJ1cHQuCgpU aGlzIGNvdWxkIGxlYXZlIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIG91dCBvZiBzeW5jLCB3aXRo IHRoZSBoYXJkd2FyZQp3YWl0aW5nIGZvciBhIHBvbGFyaXR5IHRyYW5zaXRpb24gdGhhdCBoYXMg YWxyZWFkeSBvY2N1cnJlZCwgY2F1c2luZyBhbGwKZnV0dXJlIHBsdWcvdW5wbHVnIGV2ZW50cyB0 byBiZSBpZ25vcmVkLgoKU2hvdWxkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGJlIGNsZWFyZWQgYmVm b3JlIHJlYWRpbmcgdGhlIGxpdmUgc3RhdGUgYW5kCnVwZGF0aW5nIHRoZSBwb2xhcml0eSB0byBj bG9zZSB0aGlzIHJhY2Ugd2luZG93PwoKPiAtCWhkbWlfd3JpdGViKGhkbWksIH4oSERNSV9JSF9Q SFlfU1RBVDBfSFBEIHwgSERNSV9JSF9QSFlfU1RBVDBfUlhfU0VOU0UpLAo+IC0JCSAgICBIRE1J X0lIX01VVEVfUEhZX1NUQVQwKTsKPiArCWhkbWlfd3JpdGViKGhkbWksIH5IRE1JX0lIX1BIWV9T VEFUMF9IUEQsIEhETUlfSUhfTVVURV9QSFlfU1RBVDApOwo+ICAKPiAgCXJldHVybiBJUlFfSEFO RExFRDsKPiAgfQoKLS0gClNhc2hpa28gQUkgcmV2aWV3IMK3IGh0dHBzOi8vc2FzaGlrby5kZXYv Iy9wYXRjaHNldC8yMDI2MDUxNjE4MzgzOC4yMDI0OTkxLTEtam9uYXNAa3dpYm9vLnNlP3BhcnQ9 MTkKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LWFtbG9naWMgbWFpbGluZyBsaXN0CmxpbnV4LWFtbG9naWNAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFtbG9naWMK