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 F3112C61DD3 for ; Fri, 28 Aug 2026 14:19:26 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 503F910F3E0; Fri, 28 Aug 2026 14:19:26 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="OAxWSrun"; 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 1C3E110F3E2 for ; Fri, 28 Aug 2026 14:19:25 +0000 (UTC) Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 53189601FD; Fri, 28 Aug 2026 14:19:24 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8E5F81F00A3A; Fri, 28 Aug 2026 14:19:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1787926764; bh=ZrfJoAqnzToUnaZRmCo0rBGl4IzoiTcV7PLOMTYOgig=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=OAxWSrunmc9YH9CS19mL2dlDtNblWdy+/OUSFt+Tf6mcml4rcEY7PCfWJAWREwdUk UjtGAjlQN4/fQS8GtGIg004qdv2sN7ZnezcvXyKTa+K/yEcllHTcqUl0wIE0sg5Ssd t257IGyVUJnFakIBCQPQOPROrsknzf95bb0uRjlSPiAC9JHMW+6m0Cy6TIBgCtQKeZ 5yohLJqBFVxK4BLgRftyOiRIc94Sbzod9sjjyFknSnYR4iWXr33EHR1I8UBtnfVgm/ PyMYtsSup0xKt7fp+73lRiyJkt0X2IaazKd8cDXc2fJ1heOlfY8PvDl79Cr5dYP04u AHYwXLoU5Qx3g== From: sashiko-bot@kernel.org Subject: Re: [PATCH RFC/DO NOT MERGE 10/12] drm/msm/hdmi_phy_eliza: Add support for Synopsys-based HDMI phy on Eliza To: "Krzysztof Kozlowski" Cc: dri-devel@lists.freedesktop.org, neil.armstrong@linaro.org, robh@kernel.org, devicetree@vger.kernel.org, linux-phy@lists.infradead.org, olteanv@gmail.com, vkoul@kernel.org, conor+dt@kernel.org In-Reply-To: <20260828-drm-msm-hdmi-eliza-v1-10-67843277de17@oss.qualcomm.com> References: <20260828-drm-msm-hdmi-eliza-v1-0-67843277de17@oss.qualcomm.com> <20260828-drm-msm-hdmi-eliza-v1-10-67843277de17@oss.qualcomm.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 28 Aug 2026 14:19:23 +0000 Message-Id: <20260828141923.8E5F81F00A3A@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 10 potential issue= (s) to consider: - [High] Silent truncation of 64-bit integers passed to `gcd()` on 32-bit a= rchitectures leads to incorrect clock calculations. - [High] 32-bit integer overflow during PHY bit rate calculation causes inc= orrect hardware configuration for high-bandwidth displays. - [High] Deterministic division by zero during CCF clock registration due t= o uninitialized configuration. - [High] Severe CPU soft lockup risk due to excessive 3-second busy-wait lo= op using `readl_poll_timeout_atomic`. - [High] Premature integer division causes precision loss yielding incorrec= t hardware PLL parameters. - [Medium] Data race on PLL configuration state by bypassing Common Clock F= ramework (CCF) synchronization. - [Low] 64-bit division using '/' and standard division macros causes build= failure on 32-bit platforms. - [Low] Unsupported floating-point literals used in integer calculations. - [Low] Use of `mdelay(8)` wastes CPU resources in a sleepable context. - [Low] Fragile design conflates the presence of PHY regulators with the na= me format of device tree memory resources. -- commit 9c53defce3c459b1740fbff4f2434baad5c70aee Author: Krzysztof Kozlowski Subject: drm/msm/hdmi_phy_eliza: Add support for Synopsys-based HDMI phy on= Eliza Add driver for HDMI phy block from Synopsys used on Eliza SoC. Adjust core parts for handling HDMI phy initialization sequence. > diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_phy.c b/drivers/gpu/drm/msm/hd= mi/hdmi_phy.c > --- a/drivers/gpu/drm/msm/hdmi/hdmi_phy.c > +++ b/drivers/gpu/drm/msm/hdmi/hdmi_phy.c > @@ -168,13 +171,17 @@ static int msm_hdmi_phy_probe(struct platform_devic= e *pdev) > if (!phy->cfg) > return -ENODEV; > =20 > - phy->mmio =3D msm_ioremap(pdev, "hdmi_phy"); > + if (phy->cfg->num_regs) > + phy->mmio =3D msm_ioremap(pdev, "hdmi_phy"); > + else > + phy->mmio =3D msm_ioremap(pdev, NULL); [Severity: Low] Does this use a fragile heuristic? This logic overloads the presence of power regulators (num_regs) to guess the format of device tree memory resources. These two hardware properties are orthogonal, which could break if future device tree bindings diverge. > diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_phy_eliza.c b/drivers/gpu/drm/= msm/hdmi/hdmi_phy_eliza.c > --- /dev/null > +++ b/drivers/gpu/drm/msm/hdmi/hdmi_phy_eliza.c [ ... ] > +static int hdmi_eliza_pll_calculator(struct hdmi_pll_eliza *pll, > + unsigned long rate, > + unsigned long parent_rate, > + struct hdmi_eliza_phy_pll_reg_cfg *cfg) > +{ [ ... ] > + s64 precision3 =3D 1e3; > + s64 precision6 =3D 1e6; [Severity: Low] Are these floating-point literals supported? Scientific notation defaults to double literals, which relies on compiler implicit conversion to integer= s. The kernel strictly prohibits floating-point types. [ ... ] > + /* expon =3D floor(log2(4.999999e9/base_rate)) */ > + utemp =3D 4.999999e9; [Severity: Low] Are these floating-point literals supported? This is another instance where scientific notation will evaluate as a double literal. > + > + expon =3D fls64(utemp / base_rate) - 1; [Severity: Low] Can this cause a build failure on 32-bit platforms? The direct 64-bit division operator triggers a dependency on __udivdi3, which is unresolved on 32-bit architectures. do_div or div64_u64 should be used instead. [ ... ] > + /* multiplier =3D 2*(floor(bit_rate) * 2**expon / ref_clk_int) -16) */ > + multiplier =3D DIV_ROUND_UP(vco_freq, ref_clk_int); [Severity: Low] Could this also trigger a 32-bit build failure? DIV_ROUND_UP performs a native division, and since vco_freq is a 64-bit value, this requires a 64-b= it division routine that is unavailable on 32-bit builds. [ ... ] > + if (aux2 =3D=3D 0) { > + cfg->remainder =3D 0; > + cfg->denominator =3D 1; > + } else { > + cfg->remainder =3D DIV_ROUND_UP(aux2, gcd(aux1, aux2)); > + cfg->denominator =3D DIV_ROUND_UP(aux1, gcd(aux1, aux2)); [Severity: High] Does this truncate 64-bit values on 32-bit architectures? The gcd function takes unsigned long parameters, which are 32-bit on 32-bit kernels. Since aux1 and aux2 can hold values requiring up to 36 bits, they will be silently truncated when passed into gcd, feeding incorrect fractions into the PLL configuration. [ ... ] > + /* stemp =3D (REF_CLK_MHZ/2**ref_ana_mpll_div) */ > + stemp =3D (REF_CLK_HZ / 1000000) * precision3; [Severity: High] Does this premature division cause a loss of precision? REF_CLK_HZ is divided by 1,000,000 first, which drops the remainder before scaling. With REF_CLK_HZ at 38,400,000, the result truncates to 38 instead of preserving the 0.4 MHz. The error is then squared later, propagating significant drift into the PLL analog parameters. [ ... ] > + cfg->cp_int_holder =3D DIV_ROUND_CLOSEST(stemp3, precision6); [Severity: Low] Can this result in a build failure on 32-bit architectures?=20 DIV_ROUND_CLOSEST triggers native division on s64 variables, which will fail to link without __divdi3. [ ... ] > +static int hdmi_eliza_pll_prepare(struct clk_hw *hw) > +{ [ ... ] > + /* > + * This Synopsys PLL does not have a PLL lock-like register, thus there > + * is no way to tell when the PLL actually locked. > + * Returning now, would lead to stuck pclk or iface RCG clocks at off > + * (disp_cc_mdss_hdmi_pclk_clk status stuck at 'off'), > + * thus obviously the professional solution is to delay. > + * 8 ms was figured out during tests, not based on any datasheet. > + */ > + mdelay(8); > + > + return 0; > +} [Severity: Low] Is mdelay strictly necessary here? Busy-waiting the CPU for 8 milliseconds wastes resources in a context where sleeping is fully permitted. The prepare callback can safely yield the CPU using msleep or usleep_range. [ ... ] > +static u64 hdmi_eliza_pll_vco_freq(u64 ref_clk_hz, u32 multiplier, u32 f= rac_quot, > + u32 frac_rem, u32 frac_den) > +{ > + u64 num; > + u64 den; > + > + num =3D 32ULL * 65536ULL * frac_den + > + (u64)multiplier * 65536ULL * frac_den + > + 2ULL * ((u64)frac_quot * frac_den + frac_rem); > + > + den =3D 2ULL * 65536ULL * frac_den; > + > + return mul_u64_u64_div_u64(ref_clk_hz, num, den); > +} > + > +static unsigned long hdmi_eliza_pll_recalc_rate(struct clk_hw *hw, > + unsigned long parent_rate) > +{ > + struct hdmi_pll_eliza *pll =3D hw_clk_to_pll(hw); > + u64 rate; > + > + rate =3D hdmi_eliza_pll_vco_freq(REF_CLK_HZ, pll->cfg.multiplier, > + pll->cfg.quotient, pll->cfg.remainder, > + pll->cfg.denominator); [ ... ] > +int msm_hdmi_pll_eliza_init(struct platform_device *pdev) > +{ [ ... ] > + pll =3D devm_kzalloc(dev, sizeof(*pll), GFP_KERNEL); [ ... ] > + ret =3D devm_clk_hw_register(dev, &pll->clk_hw); [Severity: High] Can this lead to a division by zero during probe?=20 When devm_clk_hw_register is called, the Common Clock Framework immediately invokes recalc_rate. Because the pll structure is zero-allocated, pll->cfg.denominator is zero. This zero is passed into hdmi_eliza_pll_vco_freq, which results in den evaluating to 0 and triggering a kernel panic in mul_u64_u64_div_u64. [ ... ] > +static void hdmi_eliza_phy_tx_lane_config(struct hdmi_phy *phy, > + unsigned long pixclock) > +{ > + const unsigned int bpp =3D 24; [ ... ] > + if (pixclock * bpp >=3D HDMI_PHY_MAX_BIT_RATE) > + hdmi_phy_update_bits(phy, REG_HDMI_ELIZA_PHY_TX_COMMON_CONTROL_0, BIT(= 2), 0); > + else [Severity: High] Will this calculation overflow 32-bit bounds before the comparison?=20 The pixclock parameter is typed as unsigned long, which is 32-bit on 32-bit kernels. For high bandwidth displays, multiplying a high pixclock by 24 will exceed the 32-bit integer maximum of 4.29 billion. This overflow will result in a smaller wrapped value, breaking the conditional check and incorrectly programming the PHY for high-resolution displays. [ ... ] > +static int hdmi_eliza_phy_ready_poll(struct hdmi_phy *phy, u32 reg, u32 = mask, u32 val) > +{ > + u32 state; > + const u32 sleep_us =3D 2000; > + const u32 timeout_us =3D 3000000; > + > + if (readl_poll_timeout_atomic((phy->mmio + reg), state, > + ((state & mask) =3D=3D val), > + sleep_us, timeout_us)) { [Severity: High] Does this present a severe CPU soft lockup risk?=20 The readl_poll_timeout_atomic macro disables preemption and spins using a udelay. Looping a 2000 microsecond delay for up to 3,000,000 microseconds (3 seconds) violates scheduling rules and is very likely to trigger watchdog lockups if the hardware fails to respond. [ ... ] > +static void hdmi_eliza_phy_init(struct hdmi_phy *phy, > + unsigned long pixclock) > +{ [ ... ] > + hdmi_eliza_pll_configure_pll(phy->pll, 396000000, 19200000); [Severity: Medium] Does this bypass the Common Clock Framework synchronization?=20 Directly invoking hdmi_eliza_pll_configure_pll here forcefully mutates the shared pll->cfg state locklessly. CCF invariants generally mandate that=20 clock state modifications are protected by prepare_lock. Concurrently reading the clock state from sysfs or debugfs could hit a data race. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260828-drm-msm-hd= mi-eliza-v1-0-67843277de17@oss.qualcomm.com?part=3D10 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 2E986C61DCB for ; Fri, 28 Aug 2026 14:19:26 +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=GS6k4WdakXfqesPFn1TNqLkxnt/5VQsr5WnLP2fVGuU=; b=Cd4081k7vHeFEM 4B+pBBJJzx1lNLvrJdFxtWUP7pOctxwTDZc/uHnXsnB+HGtHlC3aLHb3JhbA8IhpLFhebePFuOynU 6Eu4e4PDCWdUDovhxp+7PIUTg2VTMhr2rPINI1/iad1zbRSNwuzbZ5qz7A+xA3UWUclEy3FCSMCjX dW8ZAFKoPTiioBuiF4Shkrp3PZ7F3rmaxcEemlMB9Zq4SxaLviGClBYxKp/+2S5Gh/6KTJGcj1HEv rMec/NgwYj7xymqk9nj8uSGjAynr3rgVQilZw24qJfvG4A1hzicO9XNwcxw7nkkKP4CehA5M1atqs 3LR2lez6DlOV2byE+Lgg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wzxQT-00000005xnf-3jIi; Fri, 28 Aug 2026 14:19:25 +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 1wzxQT-00000005xnY-1H2v for linux-phy@lists.infradead.org; Fri, 28 Aug 2026 14:19:25 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 53189601FD; Fri, 28 Aug 2026 14:19:24 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8E5F81F00A3A; Fri, 28 Aug 2026 14:19:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1787926764; bh=ZrfJoAqnzToUnaZRmCo0rBGl4IzoiTcV7PLOMTYOgig=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=OAxWSrunmc9YH9CS19mL2dlDtNblWdy+/OUSFt+Tf6mcml4rcEY7PCfWJAWREwdUk UjtGAjlQN4/fQS8GtGIg004qdv2sN7ZnezcvXyKTa+K/yEcllHTcqUl0wIE0sg5Ssd t257IGyVUJnFakIBCQPQOPROrsknzf95bb0uRjlSPiAC9JHMW+6m0Cy6TIBgCtQKeZ 5yohLJqBFVxK4BLgRftyOiRIc94Sbzod9sjjyFknSnYR4iWXr33EHR1I8UBtnfVgm/ PyMYtsSup0xKt7fp+73lRiyJkt0X2IaazKd8cDXc2fJ1heOlfY8PvDl79Cr5dYP04u AHYwXLoU5Qx3g== From: sashiko-bot@kernel.org Subject: Re: [PATCH RFC/DO NOT MERGE 10/12] drm/msm/hdmi_phy_eliza: Add support for Synopsys-based HDMI phy on Eliza To: "Krzysztof Kozlowski" Cc: dri-devel@lists.freedesktop.org, neil.armstrong@linaro.org, robh@kernel.org, devicetree@vger.kernel.org, linux-phy@lists.infradead.org, olteanv@gmail.com, vkoul@kernel.org, conor+dt@kernel.org In-Reply-To: <20260828-drm-msm-hdmi-eliza-v1-10-67843277de17@oss.qualcomm.com> References: <20260828-drm-msm-hdmi-eliza-v1-0-67843277de17@oss.qualcomm.com> <20260828-drm-msm-hdmi-eliza-v1-10-67843277de17@oss.qualcomm.com> Date: Fri, 28 Aug 2026 14:19:23 +0000 Message-Id: <20260828141923.8E5F81F00A3A@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 MTAgcG90ZW50aWFsIGlzc3VlKHMpIHRvIGNvbnNpZGVyOgotIFtIaWdoXSBTaWxlbnQgdHJ1bmNh dGlvbiBvZiA2NC1iaXQgaW50ZWdlcnMgcGFzc2VkIHRvIGBnY2QoKWAgb24gMzItYml0IGFyY2hp dGVjdHVyZXMgbGVhZHMgdG8gaW5jb3JyZWN0IGNsb2NrIGNhbGN1bGF0aW9ucy4KLSBbSGlnaF0g MzItYml0IGludGVnZXIgb3ZlcmZsb3cgZHVyaW5nIFBIWSBiaXQgcmF0ZSBjYWxjdWxhdGlvbiBj YXVzZXMgaW5jb3JyZWN0IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gZm9yIGhpZ2gtYmFuZHdpZHRo IGRpc3BsYXlzLgotIFtIaWdoXSBEZXRlcm1pbmlzdGljIGRpdmlzaW9uIGJ5IHplcm8gZHVyaW5n IENDRiBjbG9jayByZWdpc3RyYXRpb24gZHVlIHRvIHVuaW5pdGlhbGl6ZWQgY29uZmlndXJhdGlv bi4KLSBbSGlnaF0gU2V2ZXJlIENQVSBzb2Z0IGxvY2t1cCByaXNrIGR1ZSB0byBleGNlc3NpdmUg My1zZWNvbmQgYnVzeS13YWl0IGxvb3AgdXNpbmcgYHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWNg LgotIFtIaWdoXSBQcmVtYXR1cmUgaW50ZWdlciBkaXZpc2lvbiBjYXVzZXMgcHJlY2lzaW9uIGxv c3MgeWllbGRpbmcgaW5jb3JyZWN0IGhhcmR3YXJlIFBMTCBwYXJhbWV0ZXJzLgotIFtNZWRpdW1d IERhdGEgcmFjZSBvbiBQTEwgY29uZmlndXJhdGlvbiBzdGF0ZSBieSBieXBhc3NpbmcgQ29tbW9u IENsb2NrIEZyYW1ld29yayAoQ0NGKSBzeW5jaHJvbml6YXRpb24uCi0gW0xvd10gNjQtYml0IGRp dmlzaW9uIHVzaW5nICcvJyBhbmQgc3RhbmRhcmQgZGl2aXNpb24gbWFjcm9zIGNhdXNlcyBidWls ZCBmYWlsdXJlIG9uIDMyLWJpdCBwbGF0Zm9ybXMuCi0gW0xvd10gVW5zdXBwb3J0ZWQgZmxvYXRp bmctcG9pbnQgbGl0ZXJhbHMgdXNlZCBpbiBpbnRlZ2VyIGNhbGN1bGF0aW9ucy4KLSBbTG93XSBV c2Ugb2YgYG1kZWxheSg4KWAgd2FzdGVzIENQVSByZXNvdXJjZXMgaW4gYSBzbGVlcGFibGUgY29u dGV4dC4KLSBbTG93XSBGcmFnaWxlIGRlc2lnbiBjb25mbGF0ZXMgdGhlIHByZXNlbmNlIG9mIFBI WSByZWd1bGF0b3JzIHdpdGggdGhlIG5hbWUgZm9ybWF0IG9mIGRldmljZSB0cmVlIG1lbW9yeSBy ZXNvdXJjZXMuCi0tCgpjb21taXQgOWM1M2RlZmNlM2M0NTliMTc0MGZiZmY0ZjI0MzRiYWFkNWM3 MGFlZQpBdXRob3I6IEtyenlzenRvZiBLb3psb3dza2kgPGtyenlzenRvZi5rb3psb3dza2lAb3Nz LnF1YWxjb21tLmNvbT4KU3ViamVjdDogZHJtL21zbS9oZG1pX3BoeV9lbGl6YTogQWRkIHN1cHBv cnQgZm9yIFN5bm9wc3lzLWJhc2VkIEhETUkgcGh5IG9uIEVsaXphCgpBZGQgZHJpdmVyIGZvciBI RE1JIHBoeSBibG9jayBmcm9tIFN5bm9wc3lzIHVzZWQgb24gRWxpemEgU29DLiBBZGp1c3QgY29y ZQpwYXJ0cyBmb3IgaGFuZGxpbmcgSERNSSBwaHkgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuCgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9waHkuYyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vaGRtaS9oZG1pX3BoeS5jCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9oZG1pL2hkbWlfcGh5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9w aHkuYwo+IEBAIC0xNjgsMTMgKzE3MSwxNyBAQCBzdGF0aWMgaW50IG1zbV9oZG1pX3BoeV9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJaWYgKCFwaHktPmNmZykKPiAgCQly ZXR1cm4gLUVOT0RFVjsKPiAgCj4gLQlwaHktPm1taW8gPSBtc21faW9yZW1hcChwZGV2LCAiaGRt aV9waHkiKTsKPiArCWlmIChwaHktPmNmZy0+bnVtX3JlZ3MpCj4gKwkJcGh5LT5tbWlvID0gbXNt X2lvcmVtYXAocGRldiwgImhkbWlfcGh5Iik7Cj4gKwllbHNlCj4gKwkJcGh5LT5tbWlvID0gbXNt X2lvcmVtYXAocGRldiwgTlVMTCk7CgpbU2V2ZXJpdHk6IExvd10KRG9lcyB0aGlzIHVzZSBhIGZy YWdpbGUgaGV1cmlzdGljPyBUaGlzIGxvZ2ljIG92ZXJsb2FkcyB0aGUgcHJlc2VuY2Ugb2YKcG93 ZXIgcmVndWxhdG9ycyAobnVtX3JlZ3MpIHRvIGd1ZXNzIHRoZSBmb3JtYXQgb2YgZGV2aWNlIHRy ZWUgbWVtb3J5CnJlc291cmNlcy4gVGhlc2UgdHdvIGhhcmR3YXJlIHByb3BlcnRpZXMgYXJlIG9y dGhvZ29uYWwsIHdoaWNoIGNvdWxkIGJyZWFrCmlmIGZ1dHVyZSBkZXZpY2UgdHJlZSBiaW5kaW5n cyBkaXZlcmdlLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9oZG1pL2hkbWlf cGh5X2VsaXphLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9waHlfZWxpemEuYwo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2hkbWkvaGRtaV9waHlf ZWxpemEuYwpbIC4uLiBdCj4gK3N0YXRpYyBpbnQgaGRtaV9lbGl6YV9wbGxfY2FsY3VsYXRvcihz dHJ1Y3QgaGRtaV9wbGxfZWxpemEgKnBsbCwKPiArCQkJCSAgICAgdW5zaWduZWQgbG9uZyByYXRl LAo+ICsJCQkJICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlLAo+ICsJCQkJICAgICBzdHJ1 Y3QgaGRtaV9lbGl6YV9waHlfcGxsX3JlZ19jZmcgKmNmZykKPiArewpbIC4uLiBdCj4gKwlzNjQg cHJlY2lzaW9uMyA9IDFlMzsKPiArCXM2NCBwcmVjaXNpb242ID0gMWU2OwoKW1NldmVyaXR5OiBM b3ddCkFyZSB0aGVzZSBmbG9hdGluZy1wb2ludCBsaXRlcmFscyBzdXBwb3J0ZWQ/IFNjaWVudGlm aWMgbm90YXRpb24gZGVmYXVsdHMKdG8gZG91YmxlIGxpdGVyYWxzLCB3aGljaCByZWxpZXMgb24g Y29tcGlsZXIgaW1wbGljaXQgY29udmVyc2lvbiB0byBpbnRlZ2Vycy4KVGhlIGtlcm5lbCBzdHJp Y3RseSBwcm9oaWJpdHMgZmxvYXRpbmctcG9pbnQgdHlwZXMuCgpbIC4uLiBdCj4gKwkvKiBleHBv biA9IGZsb29yKGxvZzIoNC45OTk5OTllOS9iYXNlX3JhdGUpKSAqLwo+ICsJdXRlbXAgPSA0Ljk5 OTk5OWU5OwoKW1NldmVyaXR5OiBMb3ddCkFyZSB0aGVzZSBmbG9hdGluZy1wb2ludCBsaXRlcmFs cyBzdXBwb3J0ZWQ/IFRoaXMgaXMgYW5vdGhlciBpbnN0YW5jZSB3aGVyZQpzY2llbnRpZmljIG5v dGF0aW9uIHdpbGwgZXZhbHVhdGUgYXMgYSBkb3VibGUgbGl0ZXJhbC4KCj4gKwo+ICsJZXhwb24g PSBmbHM2NCh1dGVtcCAvIGJhc2VfcmF0ZSkgLSAxOwoKW1NldmVyaXR5OiBMb3ddCkNhbiB0aGlz IGNhdXNlIGEgYnVpbGQgZmFpbHVyZSBvbiAzMi1iaXQgcGxhdGZvcm1zPyBUaGUgZGlyZWN0IDY0 LWJpdApkaXZpc2lvbiBvcGVyYXRvciB0cmlnZ2VycyBhIGRlcGVuZGVuY3kgb24gX191ZGl2ZGkz LCB3aGljaCBpcyB1bnJlc29sdmVkCm9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLiBkb19kaXYgb3Ig ZGl2NjRfdTY0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCgpbIC4uLiBdCj4gKwkvKiBtdWx0aXBs aWVyID0gMiooZmxvb3IoYml0X3JhdGUpICogMioqZXhwb24gLyByZWZfY2xrX2ludCkgLTE2KSAq Lwo+ICsJbXVsdGlwbGllciA9IERJVl9ST1VORF9VUCh2Y29fZnJlcSwgcmVmX2Nsa19pbnQpOwoK W1NldmVyaXR5OiBMb3ddCkNvdWxkIHRoaXMgYWxzbyB0cmlnZ2VyIGEgMzItYml0IGJ1aWxkIGZh aWx1cmU/IERJVl9ST1VORF9VUCBwZXJmb3JtcyBhCm5hdGl2ZSBkaXZpc2lvbiwgYW5kIHNpbmNl IHZjb19mcmVxIGlzIGEgNjQtYml0IHZhbHVlLCB0aGlzIHJlcXVpcmVzIGEgNjQtYml0CmRpdmlz aW9uIHJvdXRpbmUgdGhhdCBpcyB1bmF2YWlsYWJsZSBvbiAzMi1iaXQgYnVpbGRzLgoKWyAuLi4g XQo+ICsJaWYgKGF1eDIgPT0gMCkgewo+ICsJCWNmZy0+cmVtYWluZGVyID0gMDsKPiArCQljZmct PmRlbm9taW5hdG9yID0gMTsKPiArCX0gZWxzZSB7Cj4gKwkJY2ZnLT5yZW1haW5kZXIgPSBESVZf Uk9VTkRfVVAoYXV4MiwgZ2NkKGF1eDEsIGF1eDIpKTsKPiArCQljZmctPmRlbm9taW5hdG9yID0g RElWX1JPVU5EX1VQKGF1eDEsIGdjZChhdXgxLCBhdXgyKSk7CgpbU2V2ZXJpdHk6IEhpZ2hdCkRv ZXMgdGhpcyB0cnVuY2F0ZSA2NC1iaXQgdmFsdWVzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzPyBU aGUgZ2NkIGZ1bmN0aW9uCnRha2VzIHVuc2lnbmVkIGxvbmcgcGFyYW1ldGVycywgd2hpY2ggYXJl IDMyLWJpdCBvbiAzMi1iaXQga2VybmVscy4gU2luY2UKYXV4MSBhbmQgYXV4MiBjYW4gaG9sZCB2 YWx1ZXMgcmVxdWlyaW5nIHVwIHRvIDM2IGJpdHMsIHRoZXkgd2lsbCBiZSBzaWxlbnRseQp0cnVu Y2F0ZWQgd2hlbiBwYXNzZWQgaW50byBnY2QsIGZlZWRpbmcgaW5jb3JyZWN0IGZyYWN0aW9ucyBp bnRvIHRoZSBQTEwKY29uZmlndXJhdGlvbi4KClsgLi4uIF0KPiArCS8qIHN0ZW1wID0gKFJFRl9D TEtfTUhaLzIqKnJlZl9hbmFfbXBsbF9kaXYpICovCj4gKwlzdGVtcCA9IChSRUZfQ0xLX0haIC8g MTAwMDAwMCkgKiBwcmVjaXNpb24zOwoKW1NldmVyaXR5OiBIaWdoXQpEb2VzIHRoaXMgcHJlbWF0 dXJlIGRpdmlzaW9uIGNhdXNlIGEgbG9zcyBvZiBwcmVjaXNpb24/IFJFRl9DTEtfSFogaXMKZGl2 aWRlZCBieSAxLDAwMCwwMDAgZmlyc3QsIHdoaWNoIGRyb3BzIHRoZSByZW1haW5kZXIgYmVmb3Jl IHNjYWxpbmcuIFdpdGgKUkVGX0NMS19IWiBhdCAzOCw0MDAsMDAwLCB0aGUgcmVzdWx0IHRydW5j YXRlcyB0byAzOCBpbnN0ZWFkIG9mIHByZXNlcnZpbmcKdGhlIDAuNCBNSHouIFRoZSBlcnJvciBp cyB0aGVuIHNxdWFyZWQgbGF0ZXIsIHByb3BhZ2F0aW5nIHNpZ25pZmljYW50IGRyaWZ0CmludG8g dGhlIFBMTCBhbmFsb2cgcGFyYW1ldGVycy4KClsgLi4uIF0KPiArCWNmZy0+Y3BfaW50X2hvbGRl ciA9IERJVl9ST1VORF9DTE9TRVNUKHN0ZW1wMywgcHJlY2lzaW9uNik7CgpbU2V2ZXJpdHk6IExv d10KQ2FuIHRoaXMgcmVzdWx0IGluIGEgYnVpbGQgZmFpbHVyZSBvbiAzMi1iaXQgYXJjaGl0ZWN0 dXJlcz8gCkRJVl9ST1VORF9DTE9TRVNUIHRyaWdnZXJzIG5hdGl2ZSBkaXZpc2lvbiBvbiBzNjQg dmFyaWFibGVzLCB3aGljaCB3aWxsIGZhaWwKdG8gbGluayB3aXRob3V0IF9fZGl2ZGkzLgoKWyAu Li4gXQo+ICtzdGF0aWMgaW50IGhkbWlfZWxpemFfcGxsX3ByZXBhcmUoc3RydWN0IGNsa19odyAq aHcpCj4gK3sKWyAuLi4gXQo+ICsJLyoKPiArCSAqIFRoaXMgU3lub3BzeXMgUExMIGRvZXMgbm90 IGhhdmUgYSBQTEwgbG9jay1saWtlIHJlZ2lzdGVyLCB0aHVzIHRoZXJlCj4gKwkgKiBpcyBubyB3 YXkgdG8gdGVsbCB3aGVuIHRoZSBQTEwgYWN0dWFsbHkgbG9ja2VkLgo+ICsJICogUmV0dXJuaW5n IG5vdywgd291bGQgbGVhZCB0byBzdHVjayBwY2xrIG9yIGlmYWNlIFJDRyBjbG9ja3MgYXQgb2Zm Cj4gKwkgKiAoZGlzcF9jY19tZHNzX2hkbWlfcGNsa19jbGsgc3RhdHVzIHN0dWNrIGF0ICdvZmYn KSwKPiArCSAqIHRodXMgb2J2aW91c2x5IHRoZSBwcm9mZXNzaW9uYWwgc29sdXRpb24gaXMgdG8g ZGVsYXkuCj4gKwkgKiA4IG1zIHdhcyBmaWd1cmVkIG91dCBkdXJpbmcgdGVzdHMsIG5vdCBiYXNl ZCBvbiBhbnkgZGF0YXNoZWV0Lgo+ICsJICovCj4gKwltZGVsYXkoOCk7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KCltTZXZlcml0eTogTG93XQpJcyBtZGVsYXkgc3RyaWN0bHkgbmVjZXNzYXJ5IGhl cmU/IEJ1c3ktd2FpdGluZyB0aGUgQ1BVIGZvciA4IG1pbGxpc2Vjb25kcwp3YXN0ZXMgcmVzb3Vy Y2VzIGluIGEgY29udGV4dCB3aGVyZSBzbGVlcGluZyBpcyBmdWxseSBwZXJtaXR0ZWQuIFRoZSBw cmVwYXJlCmNhbGxiYWNrIGNhbiBzYWZlbHkgeWllbGQgdGhlIENQVSB1c2luZyBtc2xlZXAgb3Ig dXNsZWVwX3JhbmdlLgoKWyAuLi4gXQo+ICtzdGF0aWMgdTY0IGhkbWlfZWxpemFfcGxsX3Zjb19m cmVxKHU2NCByZWZfY2xrX2h6LCB1MzIgbXVsdGlwbGllciwgdTMyIGZyYWNfcXVvdCwKPiArCQkJ CSAgIHUzMiBmcmFjX3JlbSwgdTMyIGZyYWNfZGVuKQo+ICt7Cj4gKwl1NjQgbnVtOwo+ICsJdTY0 IGRlbjsKPiArCj4gKwludW0gPSAzMlVMTCAqIDY1NTM2VUxMICogZnJhY19kZW4gKwo+ICsJCSh1 NjQpbXVsdGlwbGllciAqIDY1NTM2VUxMICogZnJhY19kZW4gKwo+ICsJCTJVTEwgKiAoKHU2NClm cmFjX3F1b3QgKiBmcmFjX2RlbiArIGZyYWNfcmVtKTsKPiArCj4gKwlkZW4gPSAyVUxMICogNjU1 MzZVTEwgKiBmcmFjX2RlbjsKPiArCj4gKwlyZXR1cm4gbXVsX3U2NF91NjRfZGl2X3U2NChyZWZf Y2xrX2h6LCBudW0sIGRlbik7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhkbWlf ZWxpemFfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAo+ICsJCQkJCSAgICAgICB1 bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaGRtaV9wbGxfZWxpemEg KnBsbCA9IGh3X2Nsa190b19wbGwoaHcpOwo+ICsJdTY0IHJhdGU7Cj4gKwo+ICsJcmF0ZSA9IGhk bWlfZWxpemFfcGxsX3Zjb19mcmVxKFJFRl9DTEtfSFosIHBsbC0+Y2ZnLm11bHRpcGxpZXIsCj4g KwkJCQkgICAgICAgcGxsLT5jZmcucXVvdGllbnQsIHBsbC0+Y2ZnLnJlbWFpbmRlciwKPiArCQkJ CSAgICAgICBwbGwtPmNmZy5kZW5vbWluYXRvcik7ClsgLi4uIF0KPiAraW50IG1zbV9oZG1pX3Bs bF9lbGl6YV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKWyAuLi4gXQo+ ICsJcGxsID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwbGwpLCBHRlBfS0VSTkVMKTsKWyAu Li4gXQo+ICsJcmV0ID0gZGV2bV9jbGtfaHdfcmVnaXN0ZXIoZGV2LCAmcGxsLT5jbGtfaHcpOwoK W1NldmVyaXR5OiBIaWdoXQpDYW4gdGhpcyBsZWFkIHRvIGEgZGl2aXNpb24gYnkgemVybyBkdXJp bmcgcHJvYmU/IAoKV2hlbiBkZXZtX2Nsa19od19yZWdpc3RlciBpcyBjYWxsZWQsIHRoZSBDb21t b24gQ2xvY2sgRnJhbWV3b3JrIGltbWVkaWF0ZWx5Cmludm9rZXMgcmVjYWxjX3JhdGUuIEJlY2F1 c2UgdGhlIHBsbCBzdHJ1Y3R1cmUgaXMgemVyby1hbGxvY2F0ZWQsCnBsbC0+Y2ZnLmRlbm9taW5h dG9yIGlzIHplcm8uIFRoaXMgemVybyBpcyBwYXNzZWQgaW50bwpoZG1pX2VsaXphX3BsbF92Y29f ZnJlcSwgd2hpY2ggcmVzdWx0cyBpbiBkZW4gZXZhbHVhdGluZyB0byAwIGFuZAp0cmlnZ2VyaW5n IGEga2VybmVsIHBhbmljIGluIG11bF91NjRfdTY0X2Rpdl91NjQuCgpbIC4uLiBdCj4gK3N0YXRp YyB2b2lkIGhkbWlfZWxpemFfcGh5X3R4X2xhbmVfY29uZmlnKHN0cnVjdCBoZG1pX3BoeSAqcGh5 LAo+ICsJCQkJCSAgdW5zaWduZWQgbG9uZyBwaXhjbG9jaykKPiArewo+ICsJY29uc3QgdW5zaWdu ZWQgaW50IGJwcCA9IDI0OwpbIC4uLiBdCj4gKwlpZiAocGl4Y2xvY2sgKiBicHAgPj0gSERNSV9Q SFlfTUFYX0JJVF9SQVRFKQo+ICsJCWhkbWlfcGh5X3VwZGF0ZV9iaXRzKHBoeSwgUkVHX0hETUlf RUxJWkFfUEhZX1RYX0NPTU1PTl9DT05UUk9MXzAsIEJJVCgyKSwgMCk7Cj4gKwllbHNlCgpbU2V2 ZXJpdHk6IEhpZ2hdCldpbGwgdGhpcyBjYWxjdWxhdGlvbiBvdmVyZmxvdyAzMi1iaXQgYm91bmRz IGJlZm9yZSB0aGUgY29tcGFyaXNvbj8gCgpUaGUgcGl4Y2xvY2sgcGFyYW1ldGVyIGlzIHR5cGVk IGFzIHVuc2lnbmVkIGxvbmcsIHdoaWNoIGlzIDMyLWJpdCBvbiAzMi1iaXQKa2VybmVscy4gRm9y IGhpZ2ggYmFuZHdpZHRoIGRpc3BsYXlzLCBtdWx0aXBseWluZyBhIGhpZ2ggcGl4Y2xvY2sgYnkg MjQgd2lsbApleGNlZWQgdGhlIDMyLWJpdCBpbnRlZ2VyIG1heGltdW0gb2YgNC4yOSBiaWxsaW9u LiBUaGlzIG92ZXJmbG93IHdpbGwgcmVzdWx0CmluIGEgc21hbGxlciB3cmFwcGVkIHZhbHVlLCBi cmVha2luZyB0aGUgY29uZGl0aW9uYWwgY2hlY2sgYW5kIGluY29ycmVjdGx5CnByb2dyYW1taW5n IHRoZSBQSFkgZm9yIGhpZ2gtcmVzb2x1dGlvbiBkaXNwbGF5cy4KClsgLi4uIF0KPiArc3RhdGlj IGludCBoZG1pX2VsaXphX3BoeV9yZWFkeV9wb2xsKHN0cnVjdCBoZG1pX3BoeSAqcGh5LCB1MzIg cmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKPiArewo+ICsJdTMyIHN0YXRlOwo+ICsJY29uc3QgdTMy IHNsZWVwX3VzID0gMjAwMDsKPiArCWNvbnN0IHUzMiB0aW1lb3V0X3VzID0gMzAwMDAwMDsKPiAr Cj4gKwlpZiAocmVhZGxfcG9sbF90aW1lb3V0X2F0b21pYygocGh5LT5tbWlvICsgcmVnKSwgc3Rh dGUsCj4gKwkJCQkgICAgICAoKHN0YXRlICYgbWFzaykgPT0gdmFsKSwKPiArCQkJCSAgICAgIHNs ZWVwX3VzLCB0aW1lb3V0X3VzKSkgewoKW1NldmVyaXR5OiBIaWdoXQpEb2VzIHRoaXMgcHJlc2Vu dCBhIHNldmVyZSBDUFUgc29mdCBsb2NrdXAgcmlzaz8gCgpUaGUgcmVhZGxfcG9sbF90aW1lb3V0 X2F0b21pYyBtYWNybyBkaXNhYmxlcyBwcmVlbXB0aW9uIGFuZCBzcGlucyB1c2luZyBhCnVkZWxh eS4gTG9vcGluZyBhIDIwMDAgbWljcm9zZWNvbmQgZGVsYXkgZm9yIHVwIHRvIDMsMDAwLDAwMCBt aWNyb3NlY29uZHMKKDMgc2Vjb25kcykgdmlvbGF0ZXMgc2NoZWR1bGluZyBydWxlcyBhbmQgaXMg dmVyeSBsaWtlbHkgdG8gdHJpZ2dlciB3YXRjaGRvZwpsb2NrdXBzIGlmIHRoZSBoYXJkd2FyZSBm YWlscyB0byByZXNwb25kLgoKWyAuLi4gXQo+ICtzdGF0aWMgdm9pZCBoZG1pX2VsaXphX3BoeV9p bml0KHN0cnVjdCBoZG1pX3BoeSAqcGh5LAo+ICsJCQkJICAgdW5zaWduZWQgbG9uZyBwaXhjbG9j aykKPiArewpbIC4uLiBdCj4gKwloZG1pX2VsaXphX3BsbF9jb25maWd1cmVfcGxsKHBoeS0+cGxs LCAzOTYwMDAwMDAsIDE5MjAwMDAwKTsKCltTZXZlcml0eTogTWVkaXVtXQpEb2VzIHRoaXMgYnlw YXNzIHRoZSBDb21tb24gQ2xvY2sgRnJhbWV3b3JrIHN5bmNocm9uaXphdGlvbj8gCgpEaXJlY3Rs eSBpbnZva2luZyBoZG1pX2VsaXphX3BsbF9jb25maWd1cmVfcGxsIGhlcmUgZm9yY2VmdWxseSBt dXRhdGVzIHRoZQpzaGFyZWQgcGxsLT5jZmcgc3RhdGUgbG9ja2xlc3NseS4gQ0NGIGludmFyaWFu dHMgZ2VuZXJhbGx5IG1hbmRhdGUgdGhhdCAKY2xvY2sgc3RhdGUgbW9kaWZpY2F0aW9ucyBhcmUg cHJvdGVjdGVkIGJ5IHByZXBhcmVfbG9jay4gQ29uY3VycmVudGx5CnJlYWRpbmcgdGhlIGNsb2Nr IHN0YXRlIGZyb20gc3lzZnMgb3IgZGVidWdmcyBjb3VsZCBoaXQgYSBkYXRhIHJhY2UuCgotLSAK U2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYw ODI4LWRybS1tc20taGRtaS1lbGl6YS12MS0wLTY3ODQzMjc3ZGUxN0Bvc3MucXVhbGNvbW0uY29t P3BhcnQ9MTAKCi0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LXBoeQo=