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 EAAF53AEB39 for ; Wed, 1 Jul 2026 07:21: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=1782890463; cv=none; b=mD2ZJvpUexY6AHNRd5c1d6hFGR57hf/dWn9lgihRrWytCL8f3+g5zc5IEAb3N53GOITsWw83UJIAD104+NLaZfIGOI8K9Hgg4Gyq6/tZVpgivcSoH26q0AHdK9hN7DkgY5BOGUVUNmkcriDiTGiAqFgrjbZpBlaSG65+W8qUtrU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782890463; c=relaxed/simple; bh=s0EkBbA6OLlDQRL42MhXXCS4P7TXPXgscBUslUIA6sg=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=iaY34JhPK7iJVbLyDzMbCNIdCkRihiNzlkHUjARADxQ7hkFuQoVU9+MYW1EMyKhq2bviPI1QvJX7e/uE3O7TcGxx1k6hqH8caD1j24vBMEuiqXZHy75fG/+PfX4cWrFWatvgnODIqAYi67oH5LuNdIeNrcMmNmSqk1xtYVxj69k= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JR8m1NWG; 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="JR8m1NWG" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 17E8F1F000E9; Wed, 1 Jul 2026 07:21:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782890461; bh=vrL8eLRIrADDfs/+GySvUFanexKcJxih8mWF+/iKggg=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=JR8m1NWG2Re/aUmY+RwfGKnzHE7TGusC43ePw7zJiHCD/1dW5i8Q7EJUaJoSp6qUw nIYxGZNCUT1T5gWm0S9SJ1reBRff8VK0zNFhycGvCACH+Dovxg5c1rMA6cgShiFerP prQW20gia7Kh4zp2tggPeMjVb+CtRDguBH0hFcf/bztPYRh2769YkSyhIqrLZYmOFt JEc3r5q/nQ+LNU+QKR7m2Oavij013N3wte2hXhGglCeACjbu15Bkg4xF8pjPdMYz/d qDqZjNullDBMGQYJ2Rpu5iMQ14In/N3G6BY2RsBlUm+A4m+pavPsyEbm7ZgNFLDMc2 /xuFImDL/60YA== From: sashiko-bot@kernel.org Subject: Re: [PATCH v13 7/7] i3c: hub: p3h2x4x: Add SMBus slave mode support Reply-To: sashiko-reviews@lists.linux.dev To: "Lakshay Piplani" Cc: devicetree@vger.kernel.org, Frank.Li@kernel.org, conor+dt@kernel.org, "Alexandre Belloni" , linux-i3c@lists.infradead.org, robh@kernel.org In-Reply-To: <20260701065755.2067793-8-lakshay.piplani@nxp.com> References: <20260701065755.2067793-1-lakshay.piplani@nxp.com> <20260701065755.2067793-8-lakshay.piplani@nxp.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Wed, 01 Jul 2026 07:21:00 +0000 Message-Id: <20260701072101.17E8F1F000E9@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 3 potential issue(= s) to consider: - [High] Early error paths in `p3h2x4x_read_smbus_agent_rx_buf` fail to cle= ar the hardware buffer receive flag, resulting in an infinite In-Band Inter= rupt (IBI) storm. - [High] Hardware IBI configuration is unconditionally overwritten after ex= posing I2C adapters, potentially silently disabling slave interrupts. - [Medium] The `P3H2X4X_TARGET_BUF_CA_TF` case in the IBI handler is unreac= hable because its value is masked out by the switch expression. -- commit f1791953bf7e067a7ec560f25d66e9566565ed9b Author: Lakshay Piplani i3c: hub: p3h2x4x: Add SMBus slave mode support =20 This commit adds SMBus slave mode support for the P3H2x4x hub target ports. It allows the hub SMBus slave agent to receive downstream payloads and report receive events through In-Band Interrupts (IBI). The payloads are then forwarded to the registered I2C slave client. > diff --git a/drivers/i3c/hub/p3h2840_i3c_hub_smbus.c b/drivers/i3c/hub/p3= h2840_i3c_hub_smbus.c > index fd000ff635077..f752cbe35c482 100644 > --- a/drivers/i3c/hub/p3h2840_i3c_hub_smbus.c > +++ b/drivers/i3c/hub/p3h2840_i3c_hub_smbus.c > @@ -15,6 +15,157 @@ enum p3h2x4x_smbus_desc_idx { [ ... ] > +static void p3h2x4x_read_smbus_agent_rx_buf(struct i3c_device *i3cdev, e= num p3h2x4x_rcv_buf rfbuf, > + enum p3h2x4x_tp tp, bool is_of) > +{ > + struct p3h2x4x_i3c_hub_dev *p3h2x4x_i3c_hub =3D i3cdev_get_drvdata(i3cd= ev); > + u8 slave_rx_buffer[P3H2X4X_SMBUS_TARGET_PAYLOAD_SIZE] =3D { 0 }; > + u8 target_buffer_page, flag_clear =3D 0, temp =3D 0, i, addr; > + u32 packet_len, slave_address, ret; > + struct i2c_client *client; [ ... ] > + /* read buffer length */ > + ret =3D regmap_read(p3h2x4x_i3c_hub->regmap, P3H2X4X_TARGET_BUFF_LENGTH= , &packet_len); > + if (ret) > + goto ibi_err; > + > + if (packet_len) > + packet_len =3D packet_len - 1; > + > + if (packet_len > P3H2X4X_SMBUS_TARGET_PAYLOAD_SIZE) { > + dev_err(&i3cdev->dev, "Received message too big for p3h2x4x buffer\n"); > + goto ibi_err; [Severity: High] Since flag_clear is initialized to 0, if an error path like this one jumps to the ibi_err label early, will it skip setting flag_clear entirely? If flag_clear remains 0, the cleanup code below won't write to the P3H2X4X_TP0_SMBUS_AGNT_STS register to clear the hardware interrupt buffer receive flag. Could this cause the unserviced buffer status to remain active in the hardware and result in an continuous IBI interrupt storm? > + } [ ... ] > +ibi_err: > + regmap_write(p3h2x4x_i3c_hub->regmap, P3H2X4X_PAGE_PTR, 0x00); > + > + if (flag_clear) > + regmap_write(p3h2x4x_i3c_hub->regmap, P3H2X4X_TP0_SMBUS_AGNT_STS + tp,= flag_clear); > +} [ ... ] > +void p3h2x4x_ibi_handler(struct i3c_device *i3cdev, > + const struct i3c_ibi_payload *payload) > +{ [ ... ] > + ret =3D regmap_read(p3h2x4x_i3c_hub->regmap, P3H2X4X_TP0_SMBUS_AGNT_ST= S + i, > + &target_port_status); > + if (ret) { > + dev_err(&i3cdev->dev, "target port read status failed %d\n", ret); > + continue; > + } > + > + /* process data receive buffer */ > + switch (target_port_status & BUF_RECEIVED_FLAG_MASK) { > + case P3H2X4X_TARGET_BUF_CA_TF: [Severity: Medium] Is this case reachable? If BUF_RECEIVED_FLAG_MASK is defined as 0xE (GENMASK(3, 1)) and P3H2X4X_TARGET_BUF_CA_TF is defined as 0x1 (BIT(0)), a bitwise AND with 0xE will always clear bit 0. Will the switch expression ever evaluate to 0x1, or does this unintentional= ly fall through to the default case which clears all bits by writing BUF_RECEIVED_FLAG_TF_MASK? > + break; > + case P3H2X4X_TARGET_BUF_0_RECEIVE: [ ... ] > +static int p3h2x4x_tp_i2c_reg_slave(struct i2c_client *slave) > +{ > + struct tp_bus *bus =3D i2c_get_adapdata(slave->adapter); > + struct p3h2x4x_i3c_hub_dev *hub =3D bus->p3h2x4x_i3c_hub; > + int ret; > + > + guard(mutex)(&hub->etx_mutex); > + > + if (!hub->i3cdev || !hub->ibi_ready) > + return -EOPNOTSUPP; > + > + if (bus->tp_smbus_client) > + return -EBUSY; > + > + ret =3D regmap_set_bits(hub->regmap, > + P3H2X4X_TP_SMBUS_AGNT_IBI_CONFIG, > + bus->tp_mask); > + if (ret) > + return ret; > + > + bus->tp_smbus_client =3D slave; > + hub->hub_config.tp_config[bus->tp_port].ibi_en =3D true; > + > + return 0; > +} [Severity: High] When p3h2x4x_tp_smbus_algo() loops over target ports and exposes I2C adapte= rs via i2c_add_adapter(), this can trigger synchronous driver binding. A slave driver probing could call i2c_slave_register(), which calls this function to enable its IBI by setting a bit in P3H2X4X_TP_SMBUS_AGNT_IBI_CONFIG. However, if p3h2x4x_tp_smbus_algo() unconditionally writes P3H2X4X_IBI_DISABLED (0) to P3H2X4X_TP_SMBUS_AGNT_IBI_CONFIG after the adap= ter registration loop finishes, will this silently overwrite and clear the interrupt configurations just set by any concurrently probing slave drivers? --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260701065755.2067= 793-1-lakshay.piplani@nxp.com?part=3D7 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 24DBCC43327 for ; Wed, 1 Jul 2026 07:21:04 +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=HjnRYQbM00066tQG2FeBqKUdU3gDI15BFOPIbNFOyVw=; b=Izzs3eyyqmb5PA Eold5eAM7KGjw+Zit8GsYeseP9wXsJYIpQPY6hsXJ1mVEzMooWrHvj6ZLRMbbF7KJG+LDIj4od2oL scPYbwda6CUQUyfAVoqC5xt6VCH5Pmhk17hy2Z6WbZH+mwScV9/6NoJFaNLGR4EysVysClOJWehF0 q/K8e/Muz36tqnh8q4YvGNhZf2/aJj1Jov+mLuVuQMG99Qa2J3GZduiZ1+4xQlZZSWbmAttWVhZqL JeRzruE/38cUJYfNRS0YdmbHxsilY++qNk1dRdZuKDlAmb8pcYFGoN06gOgqWsvghJFqgXDGr6FYy QbzGSvkjhD3XDCDjQChg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wepFn-00000000t1l-2Tnc; Wed, 01 Jul 2026 07:21:03 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wepFm-00000000t1a-1L3l for linux-i3c@lists.infradead.org; Wed, 01 Jul 2026 07:21:02 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id ECB2743FC1; Wed, 1 Jul 2026 07:21:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 17E8F1F000E9; Wed, 1 Jul 2026 07:21:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782890461; bh=vrL8eLRIrADDfs/+GySvUFanexKcJxih8mWF+/iKggg=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=JR8m1NWG2Re/aUmY+RwfGKnzHE7TGusC43ePw7zJiHCD/1dW5i8Q7EJUaJoSp6qUw nIYxGZNCUT1T5gWm0S9SJ1reBRff8VK0zNFhycGvCACH+Dovxg5c1rMA6cgShiFerP prQW20gia7Kh4zp2tggPeMjVb+CtRDguBH0hFcf/bztPYRh2769YkSyhIqrLZYmOFt JEc3r5q/nQ+LNU+QKR7m2Oavij013N3wte2hXhGglCeACjbu15Bkg4xF8pjPdMYz/d qDqZjNullDBMGQYJ2Rpu5iMQ14In/N3G6BY2RsBlUm+A4m+pavPsyEbm7ZgNFLDMc2 /xuFImDL/60YA== From: sashiko-bot@kernel.org Subject: Re: [PATCH v13 7/7] i3c: hub: p3h2x4x: Add SMBus slave mode support To: "Lakshay Piplani" Cc: devicetree@vger.kernel.org, Frank.Li@kernel.org, conor+dt@kernel.org, "Alexandre Belloni" , linux-i3c@lists.infradead.org, robh@kernel.org In-Reply-To: <20260701065755.2067793-8-lakshay.piplani@nxp.com> References: <20260701065755.2067793-1-lakshay.piplani@nxp.com> <20260701065755.2067793-8-lakshay.piplani@nxp.com> Date: Wed, 01 Jul 2026 07:21:00 +0000 Message-Id: <20260701072101.17E8F1F000E9@smtp.kernel.org> X-BeenThere: linux-i3c@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-i3c" Errors-To: linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIEVhcmx5IGVycm9yIHBh dGhzIGluIGBwM2gyeDR4X3JlYWRfc21idXNfYWdlbnRfcnhfYnVmYCBmYWlsIHRvIGNsZWFyIHRo ZSBoYXJkd2FyZSBidWZmZXIgcmVjZWl2ZSBmbGFnLCByZXN1bHRpbmcgaW4gYW4gaW5maW5pdGUg SW4tQmFuZCBJbnRlcnJ1cHQgKElCSSkgc3Rvcm0uCi0gW0hpZ2hdIEhhcmR3YXJlIElCSSBjb25m aWd1cmF0aW9uIGlzIHVuY29uZGl0aW9uYWxseSBvdmVyd3JpdHRlbiBhZnRlciBleHBvc2luZyBJ MkMgYWRhcHRlcnMsIHBvdGVudGlhbGx5IHNpbGVudGx5IGRpc2FibGluZyBzbGF2ZSBpbnRlcnJ1 cHRzLgotIFtNZWRpdW1dIFRoZSBgUDNIMlg0WF9UQVJHRVRfQlVGX0NBX1RGYCBjYXNlIGluIHRo ZSBJQkkgaGFuZGxlciBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIGl0cyB2YWx1ZSBpcyBtYXNrZWQg b3V0IGJ5IHRoZSBzd2l0Y2ggZXhwcmVzc2lvbi4KLS0KCmNvbW1pdCBmMTc5MTk1M2JmN2UwNjdh N2VjNTYwZjI1ZDY2ZTk1NjY1NjVlZDliCkF1dGhvcjogTGFrc2hheSBQaXBsYW5pIDxsYWtzaGF5 LnBpcGxhbmlAbnhwLmNvbT4KCmkzYzogaHViOiBwM2gyeDR4OiBBZGQgU01CdXMgc2xhdmUgbW9k ZSBzdXBwb3J0CiAgICAKVGhpcyBjb21taXQgYWRkcyBTTUJ1cyBzbGF2ZSBtb2RlIHN1cHBvcnQg Zm9yIHRoZSBQM0gyeDR4IGh1YiB0YXJnZXQgcG9ydHMuCkl0IGFsbG93cyB0aGUgaHViIFNNQnVz IHNsYXZlIGFnZW50IHRvIHJlY2VpdmUgZG93bnN0cmVhbSBwYXlsb2FkcyBhbmQKcmVwb3J0IHJl Y2VpdmUgZXZlbnRzIHRocm91Z2ggSW4tQmFuZCBJbnRlcnJ1cHRzIChJQkkpLiBUaGUgcGF5bG9h ZHMgYXJlCnRoZW4gZm9yd2FyZGVkIHRvIHRoZSByZWdpc3RlcmVkIEkyQyBzbGF2ZSBjbGllbnQu Cgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9odWIvcDNoMjg0MF9pM2NfaHViX3NtYnVzLmMg Yi9kcml2ZXJzL2kzYy9odWIvcDNoMjg0MF9pM2NfaHViX3NtYnVzLmMKPiBpbmRleCBmZDAwMGZm NjM1MDc3Li5mNzUyY2JlMzVjNDgyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaTNjL2h1Yi9wM2gy ODQwX2kzY19odWJfc21idXMuYwo+ICsrKyBiL2RyaXZlcnMvaTNjL2h1Yi9wM2gyODQwX2kzY19o dWJfc21idXMuYwo+IEBAIC0xNSw2ICsxNSwxNTcgQEAgZW51bSBwM2gyeDR4X3NtYnVzX2Rlc2Nf aWR4IHsKWyAuLi4gXQo+ICtzdGF0aWMgdm9pZCBwM2gyeDR4X3JlYWRfc21idXNfYWdlbnRfcnhf YnVmKHN0cnVjdCBpM2NfZGV2aWNlICppM2NkZXYsIGVudW0gcDNoMng0eF9yY3ZfYnVmIHJmYnVm LAo+ICsJCQkJCSAgICBlbnVtIHAzaDJ4NHhfdHAgdHAsIGJvb2wgaXNfb2YpCj4gK3sKPiArCXN0 cnVjdCBwM2gyeDR4X2kzY19odWJfZGV2ICpwM2gyeDR4X2kzY19odWIgPSBpM2NkZXZfZ2V0X2Ry dmRhdGEoaTNjZGV2KTsKPiArCXU4IHNsYXZlX3J4X2J1ZmZlcltQM0gyWDRYX1NNQlVTX1RBUkdF VF9QQVlMT0FEX1NJWkVdID0geyAwIH07Cj4gKwl1OCB0YXJnZXRfYnVmZmVyX3BhZ2UsIGZsYWdf Y2xlYXIgPSAwLCB0ZW1wID0gMCwgaSwgYWRkcjsKPiArCXUzMiBwYWNrZXRfbGVuLCBzbGF2ZV9h ZGRyZXNzLCByZXQ7Cj4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwpbIC4uLiBdCj4gKwkv KiByZWFkIGJ1ZmZlciBsZW5ndGggKi8KPiArCXJldCA9IHJlZ21hcF9yZWFkKHAzaDJ4NHhfaTNj X2h1Yi0+cmVnbWFwLCBQM0gyWDRYX1RBUkdFVF9CVUZGX0xFTkdUSCwgJnBhY2tldF9sZW4pOwo+ ICsJaWYgKHJldCkKPiArCQlnb3RvIGliaV9lcnI7Cj4gKwo+ICsJaWYgKHBhY2tldF9sZW4pCj4g KwkJcGFja2V0X2xlbiA9IHBhY2tldF9sZW4gLSAxOwo+ICsKPiArCWlmIChwYWNrZXRfbGVuID4g UDNIMlg0WF9TTUJVU19UQVJHRVRfUEFZTE9BRF9TSVpFKSB7Cj4gKwkJZGV2X2VycigmaTNjZGV2 LT5kZXYsICJSZWNlaXZlZCBtZXNzYWdlIHRvbyBiaWcgZm9yIHAzaDJ4NHggYnVmZmVyXG4iKTsK PiArCQlnb3RvIGliaV9lcnI7CgpbU2V2ZXJpdHk6IEhpZ2hdClNpbmNlIGZsYWdfY2xlYXIgaXMg aW5pdGlhbGl6ZWQgdG8gMCwgaWYgYW4gZXJyb3IgcGF0aCBsaWtlIHRoaXMgb25lIGp1bXBzCnRv IHRoZSBpYmlfZXJyIGxhYmVsIGVhcmx5LCB3aWxsIGl0IHNraXAgc2V0dGluZyBmbGFnX2NsZWFy IGVudGlyZWx5PwoKSWYgZmxhZ19jbGVhciByZW1haW5zIDAsIHRoZSBjbGVhbnVwIGNvZGUgYmVs b3cgd29uJ3Qgd3JpdGUgdG8gdGhlClAzSDJYNFhfVFAwX1NNQlVTX0FHTlRfU1RTIHJlZ2lzdGVy IHRvIGNsZWFyIHRoZSBoYXJkd2FyZSBpbnRlcnJ1cHQgYnVmZmVyCnJlY2VpdmUgZmxhZy4gQ291 bGQgdGhpcyBjYXVzZSB0aGUgdW5zZXJ2aWNlZCBidWZmZXIgc3RhdHVzIHRvIHJlbWFpbiBhY3Rp dmUKaW4gdGhlIGhhcmR3YXJlIGFuZCByZXN1bHQgaW4gYW4gY29udGludW91cyBJQkkgaW50ZXJy dXB0IHN0b3JtPwoKPiArCX0KWyAuLi4gXQo+ICtpYmlfZXJyOgo+ICsJcmVnbWFwX3dyaXRlKHAz aDJ4NHhfaTNjX2h1Yi0+cmVnbWFwLCBQM0gyWDRYX1BBR0VfUFRSLCAweDAwKTsKPiArCj4gKwlp ZiAoZmxhZ19jbGVhcikKPiArCQlyZWdtYXBfd3JpdGUocDNoMng0eF9pM2NfaHViLT5yZWdtYXAs IFAzSDJYNFhfVFAwX1NNQlVTX0FHTlRfU1RTICsgdHAsIGZsYWdfY2xlYXIpOwo+ICt9ClsgLi4u IF0KPiArdm9pZCBwM2gyeDR4X2liaV9oYW5kbGVyKHN0cnVjdCBpM2NfZGV2aWNlICppM2NkZXYs Cj4gKwkJCSBjb25zdCBzdHJ1Y3QgaTNjX2liaV9wYXlsb2FkICpwYXlsb2FkKQo+ICt7ClsgLi4u IF0KPiArCQlyZXQgPSByZWdtYXBfcmVhZChwM2gyeDR4X2kzY19odWItPnJlZ21hcCwgUDNIMlg0 WF9UUDBfU01CVVNfQUdOVF9TVFMgKyBpLAo+ICsJCQkJICAmdGFyZ2V0X3BvcnRfc3RhdHVzKTsK PiArCQlpZiAocmV0KSB7Cj4gKwkJCWRldl9lcnIoJmkzY2Rldi0+ZGV2LCAidGFyZ2V0IHBvcnQg cmVhZCBzdGF0dXMgZmFpbGVkICVkXG4iLCByZXQpOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4g Kwo+ICsJCS8qIHByb2Nlc3MgZGF0YSByZWNlaXZlIGJ1ZmZlciAqLwo+ICsJCXN3aXRjaCAodGFy Z2V0X3BvcnRfc3RhdHVzICYgQlVGX1JFQ0VJVkVEX0ZMQUdfTUFTSykgewo+ICsJCWNhc2UgUDNI Mlg0WF9UQVJHRVRfQlVGX0NBX1RGOgoKW1NldmVyaXR5OiBNZWRpdW1dCklzIHRoaXMgY2FzZSBy ZWFjaGFibGU/CgpJZiBCVUZfUkVDRUlWRURfRkxBR19NQVNLIGlzIGRlZmluZWQgYXMgMHhFIChH RU5NQVNLKDMsIDEpKSBhbmQKUDNIMlg0WF9UQVJHRVRfQlVGX0NBX1RGIGlzIGRlZmluZWQgYXMg MHgxIChCSVQoMCkpLCBhIGJpdHdpc2UgQU5EIHdpdGggMHhFCndpbGwgYWx3YXlzIGNsZWFyIGJp dCAwLgoKV2lsbCB0aGUgc3dpdGNoIGV4cHJlc3Npb24gZXZlciBldmFsdWF0ZSB0byAweDEsIG9y IGRvZXMgdGhpcyB1bmludGVudGlvbmFsbHkKZmFsbCB0aHJvdWdoIHRvIHRoZSBkZWZhdWx0IGNh c2Ugd2hpY2ggY2xlYXJzIGFsbCBiaXRzIGJ5IHdyaXRpbmcKQlVGX1JFQ0VJVkVEX0ZMQUdfVEZf TUFTSz8KCj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgUDNIMlg0WF9UQVJHRVRfQlVGXzBfUkVDRUlW RToKWyAuLi4gXQo+ICtzdGF0aWMgaW50IHAzaDJ4NHhfdHBfaTJjX3JlZ19zbGF2ZShzdHJ1Y3Qg aTJjX2NsaWVudCAqc2xhdmUpCj4gK3sKPiArCXN0cnVjdCB0cF9idXMgKmJ1cyA9IGkyY19nZXRf YWRhcGRhdGEoc2xhdmUtPmFkYXB0ZXIpOwo+ICsJc3RydWN0IHAzaDJ4NHhfaTNjX2h1Yl9kZXYg Kmh1YiA9IGJ1cy0+cDNoMng0eF9pM2NfaHViOwo+ICsJaW50IHJldDsKPiArCj4gKwlndWFyZCht dXRleCkoJmh1Yi0+ZXR4X211dGV4KTsKPiArCj4gKwlpZiAoIWh1Yi0+aTNjZGV2IHx8ICFodWIt PmliaV9yZWFkeSkKPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwo+ICsJaWYgKGJ1cy0+dHBf c21idXNfY2xpZW50KQo+ICsJCXJldHVybiAtRUJVU1k7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3Nl dF9iaXRzKGh1Yi0+cmVnbWFwLAo+ICsJCQkgICAgICBQM0gyWDRYX1RQX1NNQlVTX0FHTlRfSUJJ X0NPTkZJRywKPiArCQkJICAgICAgYnVzLT50cF9tYXNrKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0 dXJuIHJldDsKPiArCj4gKwlidXMtPnRwX3NtYnVzX2NsaWVudCA9IHNsYXZlOwo+ICsJaHViLT5o dWJfY29uZmlnLnRwX2NvbmZpZ1tidXMtPnRwX3BvcnRdLmliaV9lbiA9IHRydWU7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KCltTZXZlcml0eTogSGlnaF0KV2hlbiBwM2gyeDR4X3RwX3NtYnVzX2Fs Z28oKSBsb29wcyBvdmVyIHRhcmdldCBwb3J0cyBhbmQgZXhwb3NlcyBJMkMgYWRhcHRlcnMKdmlh IGkyY19hZGRfYWRhcHRlcigpLCB0aGlzIGNhbiB0cmlnZ2VyIHN5bmNocm9ub3VzIGRyaXZlciBi aW5kaW5nLiBBIHNsYXZlCmRyaXZlciBwcm9iaW5nIGNvdWxkIGNhbGwgaTJjX3NsYXZlX3JlZ2lz dGVyKCksIHdoaWNoIGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8KZW5hYmxlIGl0cyBJQkkgYnkgc2V0 dGluZyBhIGJpdCBpbiBQM0gyWDRYX1RQX1NNQlVTX0FHTlRfSUJJX0NPTkZJRy4KCkhvd2V2ZXIs IGlmIHAzaDJ4NHhfdHBfc21idXNfYWxnbygpIHVuY29uZGl0aW9uYWxseSB3cml0ZXMKUDNIMlg0 WF9JQklfRElTQUJMRUQgKDApIHRvIFAzSDJYNFhfVFBfU01CVVNfQUdOVF9JQklfQ09ORklHIGFm dGVyIHRoZSBhZGFwdGVyCnJlZ2lzdHJhdGlvbiBsb29wIGZpbmlzaGVzLCB3aWxsIHRoaXMgc2ls ZW50bHkgb3ZlcndyaXRlIGFuZCBjbGVhciB0aGUKaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zIGp1 c3Qgc2V0IGJ5IGFueSBjb25jdXJyZW50bHkgcHJvYmluZyBzbGF2ZSBkcml2ZXJzPwoKLS0gClNh c2hpa28gQUkgcmV2aWV3IMK3IGh0dHBzOi8vc2FzaGlrby5kZXYvIy9wYXRjaHNldC8yMDI2MDcw MTA2NTc1NS4yMDY3NzkzLTEtbGFrc2hheS5waXBsYW5pQG54cC5jb20/cGFydD03CgotLSAKbGlu dXgtaTNjIG1haWxpbmcgbGlzdApsaW51eC1pM2NAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWkzYwo=