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 8DB75466AEF for ; Fri, 14 Aug 2026 12:05:27 +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=1786709129; cv=none; b=il0IdV3SqKmBeC6FKN/pzNyAUMmBlapw4DKqBXOYrS2vCHQYpxMsetYHl8jyKbD19HRdwsVm7ZoQeuMnH/nz2UGcCTDsEZECR+3zv8MRALvZrhyTf1Frqd38bnjClAXCqXp7YsRVGuNc+JNsFs80gNW8VEBZ9l++jB4MBcu04k4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786709129; c=relaxed/simple; bh=BE9MULq+r86Jt4iDc7PXZTQnV4s9riebEvsdMM1QcsQ=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=fh9tyACOasMRA6HU8YTtlEBv2WgrG0+o/2NdW0R/mCqZpFKwB7VdghO+eOA1RHkZWjmNcVCsVXo/I2dg4WZn7DBJ4o8X9kXqw7lA93foHRN2yrQYzN38XItgzE4bUFzV8NMg8h3Cu1y8sClY/45TyihQ+bWIQ9ZzoAJQnXLdefo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NTGZ2w59; 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="NTGZ2w59" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CAA1A1F00A3A; Fri, 14 Aug 2026 12:05:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786709127; bh=ah4/xGc+OMD64RAmYLXzgpjk3qixWzswb1EU2KSAzz0=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=NTGZ2w59P7YOIPBUg5/VW2KPtIaNnnDKMW9cNlKN94wkJCOO2Fjw8Oh4miCXtp7Co 4npK23g0JF7p5/zXwIM69qzF1N89xTNEz2t/P5GqaBU3cAmbhg2auU/dxvccXeJUPq xKaTEBT+VAr3kWRdT1ZwPxGSs+8di6uVj2wTrGfFmNrsfN63voTCKT9nmH2eDI9LVp Aq9EATz0Ruiw9DOm1wc/m/9zr9onbx6FeDyHAEI7Q2G2koMgJkU8gi8Kql3/tUtVNw mrVNr/PD8JJrWlZHz2FIpWAyq5d3O8fe2suu+nRM7SXvAWQP04FeaD6kgJVk7N9wb+ ABmbrpPbTwSIw== From: sashiko-bot@kernel.org Subject: Re: [PATCH 2/3] i3c: master: amd: Add support for in-band interrupts Reply-To: sashiko-reviews@lists.linux.dev To: "Shubham Patil" Cc: robh@kernel.org, devicetree@vger.kernel.org, linux-i3c@lists.infradead.org, conor+dt@kernel.org, "Alexandre Belloni" , Frank.Li@kernel.org In-Reply-To: <20260814115155.3974988-3-shubhamsanjay.patil@amd.com> References: <20260814115155.3974988-1-shubhamsanjay.patil@amd.com> <20260814115155.3974988-3-shubhamsanjay.patil@amd.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 14 Aug 2026 12:05:26 +0000 Message-Id: <20260814120526.CAA1A1F00A3A@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: - [High] ACKed In-Band Interrupts (IBIs) are permanently discarded when the= y race with normal transfers. - [High] Eager polling of the shared RX FIFO corrupts read transfers with I= BI payload data if an IBI wins arbitration. - [High] Race condition in IBI teardown allows late IBIs to be queued after= the generic core's completion check, leading to a Use-After-Free. - [Medium] The controller-wide IBI enable refcount is decremented even if d= isabling the target on the bus fails. -- --- Patch [2]: [PATCH 2/3] i3c: master: amd: Add support for in-band interr= upts --- commit 49feb531b9ade85c295172ceec9457d5f98c1d0d Author: Shubham Patil Subject: i3c: master: amd: Add support for in-band interrupts This commit adds support for receiving and dequeueing I3C in-band interrupts (IBIs). The controller interrupt carries IBI events only, and the IBI ACK enable and its interrupt mask are controller-wide. It handles demultiplexing shared response and read FIFOs when IBIs race with normal transfers. > diff --git a/drivers/i3c/master/amd-i3c-master.c b/drivers/i3c/master/amd= -i3c-master.c > index ef5ad5abb788c..d47b04326ea46 100644 > --- a/drivers/i3c/master/amd-i3c-master.c > +++ b/drivers/i3c/master/amd-i3c-master.c [ ... ] > @@ -206,23 +269,79 @@ static inline bool xi3c_is_resp_available(struct xi= 3c_master *master) [ ... ] > +static bool xi3c_xfer_resp_available(struct xi3c_master *master) > +{ > + u32 resp; > + u16 len; > + > + if (master->xfer_resp_valid) > + return true; > + > + while (xi3c_is_resp_available(master)) { > + resp =3D ioread32(master->membase + XI3C_RESP_STATUS_FIFO_OFFSET); > + > + if (FIELD_GET(XI3C_RESP_TID_MASK, resp) !=3D XI3C_IBI_RESP_TID) { > + master->xfer_resp =3D resp; > + master->xfer_resp_valid =3D true; > + return true; > + } > + > + len =3D FIELD_GET(XI3C_RESP_BYTES_MASK, resp); > + dev_dbg_ratelimited(master->dev, > + "IBI raced with transfer, dropping %u bytes\n", > + len); > + xi3c_master_drain_ibi_fifo(master, len); > + } > + > + return false; > +} [Severity: High] Since the hardware has already ACKed the IBI on the bus, doesn't draining and discarding the IBI response here mean it is permanently lost?=20 If an IBI arrives while the driver is executing a normal transfer, the driver masks the IBI interrupt, but the hardware still ACKs the IBI on the bus. The target device won't resend the IBI once it is ACKed. Could this cause essential target events like sensor data ready or hot-join requests to be dropped entirely? [ ... ] > @@ -437,13 +575,19 @@ static int xi3c_master_read(struct xi3c_master *mas= ter, struct xi3c_cmd *cmd) [ ... ] > /* Read data from rx fifo */ > - while (cmd->rx_len > 0 && !xi3c_is_resp_available(master)) { > + while (cmd->rx_len > 0 && !xi3c_xfer_resp_available(master)) { > if (time_after(jiffies, timeout)) { > dev_err(master->dev, "XI3C read timeout\n"); > return -EIO; [Severity: High] Is it safe to eagerly poll the shared RX FIFO before validating the transfer response? If an IBI wins arbitration concurrently, its payload might enter the shared RX FIFO first. Because xi3c_master_rd_from_rx_fifo() is called within this loop before the transfer's own response word arrives, it seems the driver might mistakenly read the IBI payload bytes directly into the normal read transfer's buffer. Could this corrupt normal read transfers with IBI payload data? [ ... ] > @@ -1052,9 +1207,296 @@ static void xi3c_master_bus_cleanup(struct i3c_ma= ster_controller *m) [ ... ] > +static void xi3c_master_free_ibi(struct i3c_dev_desc *dev) > +{ > + struct xi3c_i3c_dev_data *data =3D i3c_dev_get_master_data(dev); > + struct i3c_master_controller *m =3D i3c_dev_get_master(dev); > + struct xi3c_master *master =3D to_xi3c_master(m); > + unsigned long flags; > + > + spin_lock_irqsave(&master->ibi.lock, flags); > + master->ibi.slots[data->ibi_slot] =3D NULL; > + spin_unlock_irqrestore(&master->ibi.lock, flags); > + > + i3c_generic_ibi_free_pool(data->ibi_pool); > + i3c_dev_set_master_data(dev, NULL); > + kfree(data); > +} [ ... ] > +static int xi3c_master_disable_ibi(struct i3c_dev_desc *dev) > +{ > + struct i3c_master_controller *m =3D i3c_dev_get_master(dev); > + struct xi3c_master *master =3D to_xi3c_master(m); > + int ret; > + > + ret =3D i3c_master_disec_locked(m, dev->info.dyn_addr, I3C_CCC_EVENT_SI= R); > + > + xi3c_master_ibi_disarm(master); > + > + return ret; > +} [Severity: Medium] If i3c_master_disec_locked() fails (for example, if the target NACKs the DISEC command), the device is still considered enabled by the core. Does unconditionally calling xi3c_master_ibi_disarm() here risk dropping the master->ibi.enabled_count prematurely? This could unintentionally mask the global IBI interrupt. [Severity: High] Does this teardown sequence need a synchronization barrier (like synchronize_irq()) to ensure the hard IRQ handler has finished processing events? If a late IBI fires just before the DISEC command, the IRQ might be pending on another CPU. Because xi3c_master_disable_ibi() completes without waiting for the IRQ, the core might see no pending IBIs and proceed to call xi3c_master_free_ibi(), freeing the data->ibi_pool. Could the concurrent IRQ handler then execute, copy the payload, and queue a work item that accesses the now-freed IBI pool? --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260814115155.3974= 988-1-shubhamsanjay.patil@amd.com?part=3D2 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 3A64BC5CFC1 for ; Fri, 14 Aug 2026 12:05:30 +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=6z8gQ9iqk/cVWE7EZl9ueTf0nYdE3u0MJNMVtlppcR8=; b=4b717kLVEBY6Ci lQN4DIZ3VTLvCDWdROkE7jnSCoKb7VLUJL8om3XdnXchGIyIWqXdoxs4OlLKitOYFYp9U0OsJaO/v 7CF/xEMQYs/1TfUH5x7jkWIy+I5SltlVxRjEEZcoGlZxrwkwOYNPXB5pqtPSDNLUZghRUxzmsnYmZ SI8HruwErbpfnNb95BGgGBajd4qG8c+rHgFxAmd0z2mPH2NMl+EAzuYY2v4MSbx1ufADesRBMTnZd J6y4KCJN347+qOhT+6nWJT8KpuMv52Y0Nnx6k9sxD6MybJvmUIEyFEIE7z0B9xcbhUhvazMRwUYfh 2ISs3VdPLT+18KHhuifw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wuqfB-00000002d1T-3cvI; Fri, 14 Aug 2026 12:05:29 +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 1wuqfA-00000002d15-1psp for linux-i3c@lists.infradead.org; Fri, 14 Aug 2026 12:05:28 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 8299760254; Fri, 14 Aug 2026 12:05:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CAA1A1F00A3A; Fri, 14 Aug 2026 12:05:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786709127; bh=ah4/xGc+OMD64RAmYLXzgpjk3qixWzswb1EU2KSAzz0=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=NTGZ2w59P7YOIPBUg5/VW2KPtIaNnnDKMW9cNlKN94wkJCOO2Fjw8Oh4miCXtp7Co 4npK23g0JF7p5/zXwIM69qzF1N89xTNEz2t/P5GqaBU3cAmbhg2auU/dxvccXeJUPq xKaTEBT+VAr3kWRdT1ZwPxGSs+8di6uVj2wTrGfFmNrsfN63voTCKT9nmH2eDI9LVp Aq9EATz0Ruiw9DOm1wc/m/9zr9onbx6FeDyHAEI7Q2G2koMgJkU8gi8Kql3/tUtVNw mrVNr/PD8JJrWlZHz2FIpWAyq5d3O8fe2suu+nRM7SXvAWQP04FeaD6kgJVk7N9wb+ ABmbrpPbTwSIw== From: sashiko-bot@kernel.org Subject: Re: [PATCH 2/3] i3c: master: amd: Add support for in-band interrupts To: "Shubham Patil" Cc: robh@kernel.org, devicetree@vger.kernel.org, linux-i3c@lists.infradead.org, conor+dt@kernel.org, "Alexandre Belloni" , Frank.Li@kernel.org In-Reply-To: <20260814115155.3974988-3-shubhamsanjay.patil@amd.com> References: <20260814115155.3974988-1-shubhamsanjay.patil@amd.com> <20260814115155.3974988-3-shubhamsanjay.patil@amd.com> Date: Fri, 14 Aug 2026 12:05:26 +0000 Message-Id: <20260814120526.CAA1A1F00A3A@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 NCBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIEFDS2VkIEluLUJhbmQg SW50ZXJydXB0cyAoSUJJcykgYXJlIHBlcm1hbmVudGx5IGRpc2NhcmRlZCB3aGVuIHRoZXkgcmFj ZSB3aXRoIG5vcm1hbCB0cmFuc2ZlcnMuCi0gW0hpZ2hdIEVhZ2VyIHBvbGxpbmcgb2YgdGhlIHNo YXJlZCBSWCBGSUZPIGNvcnJ1cHRzIHJlYWQgdHJhbnNmZXJzIHdpdGggSUJJIHBheWxvYWQgZGF0 YSBpZiBhbiBJQkkgd2lucyBhcmJpdHJhdGlvbi4KLSBbSGlnaF0gUmFjZSBjb25kaXRpb24gaW4g SUJJIHRlYXJkb3duIGFsbG93cyBsYXRlIElCSXMgdG8gYmUgcXVldWVkIGFmdGVyIHRoZSBnZW5l cmljIGNvcmUncyBjb21wbGV0aW9uIGNoZWNrLCBsZWFkaW5nIHRvIGEgVXNlLUFmdGVyLUZyZWUu Ci0gW01lZGl1bV0gVGhlIGNvbnRyb2xsZXItd2lkZSBJQkkgZW5hYmxlIHJlZmNvdW50IGlzIGRl Y3JlbWVudGVkIGV2ZW4gaWYgZGlzYWJsaW5nIHRoZSB0YXJnZXQgb24gdGhlIGJ1cyBmYWlscy4K LS0KCi0tLSBQYXRjaCBbMl06IFtQQVRDSCAyLzNdIGkzYzogbWFzdGVyOiBhbWQ6IEFkZCBzdXBw b3J0IGZvciBpbi1iYW5kIGludGVycnVwdHMgLS0tCmNvbW1pdCA0OWZlYjUzMWI5YWRlODVjMjk1 MTcyY2VlYzk0NTdkNWY5OGMxZDBkCkF1dGhvcjogU2h1YmhhbSBQYXRpbCA8c2h1YmhhbXNhbmph eS5wYXRpbEBhbWQuY29tPgpTdWJqZWN0OiBpM2M6IG1hc3RlcjogYW1kOiBBZGQgc3VwcG9ydCBm b3IgaW4tYmFuZCBpbnRlcnJ1cHRzCgpUaGlzIGNvbW1pdCBhZGRzIHN1cHBvcnQgZm9yIHJlY2Vp dmluZyBhbmQgZGVxdWV1ZWluZyBJM0MgaW4tYmFuZAppbnRlcnJ1cHRzIChJQklzKS4gVGhlIGNv bnRyb2xsZXIgaW50ZXJydXB0IGNhcnJpZXMgSUJJIGV2ZW50cyBvbmx5LCBhbmQKdGhlIElCSSBB Q0sgZW5hYmxlIGFuZCBpdHMgaW50ZXJydXB0IG1hc2sgYXJlIGNvbnRyb2xsZXItd2lkZS4gSXQg aGFuZGxlcwpkZW11bHRpcGxleGluZyBzaGFyZWQgcmVzcG9uc2UgYW5kIHJlYWQgRklGT3Mgd2hl biBJQklzIHJhY2Ugd2l0aCBub3JtYWwKdHJhbnNmZXJzLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pM2MvbWFzdGVyL2FtZC1pM2MtbWFzdGVyLmMgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvYW1kLWkz Yy1tYXN0ZXIuYwo+IGluZGV4IGVmNWFkNWFiYjc4OGMuLmQ0N2IwNDMyNmVhNDYgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9pM2MvbWFzdGVyL2FtZC1pM2MtbWFzdGVyLmMKPiArKysgYi9kcml2ZXJz L2kzYy9tYXN0ZXIvYW1kLWkzYy1tYXN0ZXIuYwpbIC4uLiBdCj4gQEAgLTIwNiwyMyArMjY5LDc5 IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB4aTNjX2lzX3Jlc3BfYXZhaWxhYmxlKHN0cnVjdCB4aTNj X21hc3RlciAqbWFzdGVyKQpbIC4uLiBdCj4gK3N0YXRpYyBib29sIHhpM2NfeGZlcl9yZXNwX2F2 YWlsYWJsZShzdHJ1Y3QgeGkzY19tYXN0ZXIgKm1hc3RlcikKPiArewo+ICsJdTMyIHJlc3A7Cj4g Kwl1MTYgbGVuOwo+ICsKPiArCWlmIChtYXN0ZXItPnhmZXJfcmVzcF92YWxpZCkKPiArCQlyZXR1 cm4gdHJ1ZTsKPiArCj4gKwl3aGlsZSAoeGkzY19pc19yZXNwX2F2YWlsYWJsZShtYXN0ZXIpKSB7 Cj4gKwkJcmVzcCA9IGlvcmVhZDMyKG1hc3Rlci0+bWVtYmFzZSArIFhJM0NfUkVTUF9TVEFUVVNf RklGT19PRkZTRVQpOwo+ICsKPiArCQlpZiAoRklFTERfR0VUKFhJM0NfUkVTUF9USURfTUFTSywg cmVzcCkgIT0gWEkzQ19JQklfUkVTUF9USUQpIHsKPiArCQkJbWFzdGVyLT54ZmVyX3Jlc3AgPSBy ZXNwOwo+ICsJCQltYXN0ZXItPnhmZXJfcmVzcF92YWxpZCA9IHRydWU7Cj4gKwkJCXJldHVybiB0 cnVlOwo+ICsJCX0KPiArCj4gKwkJbGVuID0gRklFTERfR0VUKFhJM0NfUkVTUF9CWVRFU19NQVNL LCByZXNwKTsKPiArCQlkZXZfZGJnX3JhdGVsaW1pdGVkKG1hc3Rlci0+ZGV2LAo+ICsJCQkJICAg ICJJQkkgcmFjZWQgd2l0aCB0cmFuc2ZlciwgZHJvcHBpbmcgJXUgYnl0ZXNcbiIsCj4gKwkJCQkg ICAgbGVuKTsKPiArCQl4aTNjX21hc3Rlcl9kcmFpbl9pYmlfZmlmbyhtYXN0ZXIsIGxlbik7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9CgpbU2V2ZXJpdHk6IEhpZ2hdClNpbmNlIHRo ZSBoYXJkd2FyZSBoYXMgYWxyZWFkeSBBQ0tlZCB0aGUgSUJJIG9uIHRoZSBidXMsIGRvZXNuJ3Qg ZHJhaW5pbmcKYW5kIGRpc2NhcmRpbmcgdGhlIElCSSByZXNwb25zZSBoZXJlIG1lYW4gaXQgaXMg cGVybWFuZW50bHkgbG9zdD8gCgpJZiBhbiBJQkkgYXJyaXZlcyB3aGlsZSB0aGUgZHJpdmVyIGlz IGV4ZWN1dGluZyBhIG5vcm1hbCB0cmFuc2ZlciwgdGhlCmRyaXZlciBtYXNrcyB0aGUgSUJJIGlu dGVycnVwdCwgYnV0IHRoZSBoYXJkd2FyZSBzdGlsbCBBQ0tzIHRoZSBJQkkgb24gdGhlCmJ1cy4g VGhlIHRhcmdldCBkZXZpY2Ugd29uJ3QgcmVzZW5kIHRoZSBJQkkgb25jZSBpdCBpcyBBQ0tlZC4g Q291bGQgdGhpcwpjYXVzZSBlc3NlbnRpYWwgdGFyZ2V0IGV2ZW50cyBsaWtlIHNlbnNvciBkYXRh IHJlYWR5IG9yIGhvdC1qb2luIHJlcXVlc3RzIHRvCmJlIGRyb3BwZWQgZW50aXJlbHk/CgpbIC4u LiBdCj4gQEAgLTQzNywxMyArNTc1LDE5IEBAIHN0YXRpYyBpbnQgeGkzY19tYXN0ZXJfcmVhZChz dHJ1Y3QgeGkzY19tYXN0ZXIgKm1hc3Rlciwgc3RydWN0IHhpM2NfY21kICpjbWQpClsgLi4uIF0K PiAgCS8qIFJlYWQgZGF0YSBmcm9tIHJ4IGZpZm8gKi8KPiAtCXdoaWxlIChjbWQtPnJ4X2xlbiA+ IDAgJiYgIXhpM2NfaXNfcmVzcF9hdmFpbGFibGUobWFzdGVyKSkgewo+ICsJd2hpbGUgKGNtZC0+ cnhfbGVuID4gMCAmJiAheGkzY194ZmVyX3Jlc3BfYXZhaWxhYmxlKG1hc3RlcikpIHsKPiAgCQlp ZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewo+ICAJCQlkZXZfZXJyKG1hc3Rlci0+ ZGV2LCAiWEkzQyByZWFkIHRpbWVvdXRcbiIpOwo+ICAJCQlyZXR1cm4gLUVJTzsKCltTZXZlcml0 eTogSGlnaF0KSXMgaXQgc2FmZSB0byBlYWdlcmx5IHBvbGwgdGhlIHNoYXJlZCBSWCBGSUZPIGJl Zm9yZSB2YWxpZGF0aW5nIHRoZQp0cmFuc2ZlciByZXNwb25zZT8KCklmIGFuIElCSSB3aW5zIGFy Yml0cmF0aW9uIGNvbmN1cnJlbnRseSwgaXRzIHBheWxvYWQgbWlnaHQgZW50ZXIgdGhlIHNoYXJl ZApSWCBGSUZPIGZpcnN0LiBCZWNhdXNlIHhpM2NfbWFzdGVyX3JkX2Zyb21fcnhfZmlmbygpIGlz IGNhbGxlZCB3aXRoaW4gdGhpcwpsb29wIGJlZm9yZSB0aGUgdHJhbnNmZXIncyBvd24gcmVzcG9u c2Ugd29yZCBhcnJpdmVzLCBpdCBzZWVtcyB0aGUgZHJpdmVyCm1pZ2h0IG1pc3Rha2VubHkgcmVh ZCB0aGUgSUJJIHBheWxvYWQgYnl0ZXMgZGlyZWN0bHkgaW50byB0aGUgbm9ybWFsIHJlYWQKdHJh bnNmZXIncyBidWZmZXIuIENvdWxkIHRoaXMgY29ycnVwdCBub3JtYWwgcmVhZCB0cmFuc2ZlcnMg d2l0aCBJQkkKcGF5bG9hZCBkYXRhPwoKWyAuLi4gXQo+IEBAIC0xMDUyLDkgKzEyMDcsMjk2IEBA IHN0YXRpYyB2b2lkIHhpM2NfbWFzdGVyX2J1c19jbGVhbnVwKHN0cnVjdCBpM2NfbWFzdGVyX2Nv bnRyb2xsZXIgKm0pClsgLi4uIF0KPiArc3RhdGljIHZvaWQgeGkzY19tYXN0ZXJfZnJlZV9pYmko c3RydWN0IGkzY19kZXZfZGVzYyAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgeGkzY19pM2NfZGV2X2Rh dGEgKmRhdGEgPSBpM2NfZGV2X2dldF9tYXN0ZXJfZGF0YShkZXYpOwo+ICsJc3RydWN0IGkzY19t YXN0ZXJfY29udHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0X21hc3RlcihkZXYpOwo+ICsJc3RydWN0 IHhpM2NfbWFzdGVyICptYXN0ZXIgPSB0b194aTNjX21hc3RlcihtKTsKPiArCXVuc2lnbmVkIGxv bmcgZmxhZ3M7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJm1hc3Rlci0+aWJpLmxvY2ssIGZs YWdzKTsKPiArCW1hc3Rlci0+aWJpLnNsb3RzW2RhdGEtPmliaV9zbG90XSA9IE5VTEw7Cj4gKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPmliaS5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJ aTNjX2dlbmVyaWNfaWJpX2ZyZWVfcG9vbChkYXRhLT5pYmlfcG9vbCk7Cj4gKwlpM2NfZGV2X3Nl dF9tYXN0ZXJfZGF0YShkZXYsIE5VTEwpOwo+ICsJa2ZyZWUoZGF0YSk7Cj4gK30KWyAuLi4gXQo+ ICtzdGF0aWMgaW50IHhpM2NfbWFzdGVyX2Rpc2FibGVfaWJpKHN0cnVjdCBpM2NfZGV2X2Rlc2Mg KmRldikKPiArewo+ICsJc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSA9IGkzY19kZXZf Z2V0X21hc3RlcihkZXYpOwo+ICsJc3RydWN0IHhpM2NfbWFzdGVyICptYXN0ZXIgPSB0b194aTNj X21hc3RlcihtKTsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gaTNjX21hc3Rlcl9kaXNlY19s b2NrZWQobSwgZGV2LT5pbmZvLmR5bl9hZGRyLCBJM0NfQ0NDX0VWRU5UX1NJUik7Cj4gKwo+ICsJ eGkzY19tYXN0ZXJfaWJpX2Rpc2FybShtYXN0ZXIpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30K CltTZXZlcml0eTogTWVkaXVtXQpJZiBpM2NfbWFzdGVyX2Rpc2VjX2xvY2tlZCgpIGZhaWxzIChm b3IgZXhhbXBsZSwgaWYgdGhlIHRhcmdldCBOQUNLcyB0aGUKRElTRUMgY29tbWFuZCksIHRoZSBk ZXZpY2UgaXMgc3RpbGwgY29uc2lkZXJlZCBlbmFibGVkIGJ5IHRoZSBjb3JlLiBEb2VzCnVuY29u ZGl0aW9uYWxseSBjYWxsaW5nIHhpM2NfbWFzdGVyX2liaV9kaXNhcm0oKSBoZXJlIHJpc2sgZHJv cHBpbmcgdGhlCm1hc3Rlci0+aWJpLmVuYWJsZWRfY291bnQgcHJlbWF0dXJlbHk/IFRoaXMgY291 bGQgdW5pbnRlbnRpb25hbGx5IG1hc2sgdGhlCmdsb2JhbCBJQkkgaW50ZXJydXB0LgoKW1NldmVy aXR5OiBIaWdoXQpEb2VzIHRoaXMgdGVhcmRvd24gc2VxdWVuY2UgbmVlZCBhIHN5bmNocm9uaXph dGlvbiBiYXJyaWVyIChsaWtlCnN5bmNocm9uaXplX2lycSgpKSB0byBlbnN1cmUgdGhlIGhhcmQg SVJRIGhhbmRsZXIgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcKZXZlbnRzPwoKSWYgYSBsYXRlIElC SSBmaXJlcyBqdXN0IGJlZm9yZSB0aGUgRElTRUMgY29tbWFuZCwgdGhlIElSUSBtaWdodCBiZSBw ZW5kaW5nCm9uIGFub3RoZXIgQ1BVLiBCZWNhdXNlIHhpM2NfbWFzdGVyX2Rpc2FibGVfaWJpKCkg Y29tcGxldGVzIHdpdGhvdXQgd2FpdGluZwpmb3IgdGhlIElSUSwgdGhlIGNvcmUgbWlnaHQgc2Vl IG5vIHBlbmRpbmcgSUJJcyBhbmQgcHJvY2VlZCB0byBjYWxsCnhpM2NfbWFzdGVyX2ZyZWVfaWJp KCksIGZyZWVpbmcgdGhlIGRhdGEtPmliaV9wb29sLgoKQ291bGQgdGhlIGNvbmN1cnJlbnQgSVJR IGhhbmRsZXIgdGhlbiBleGVjdXRlLCBjb3B5IHRoZSBwYXlsb2FkLCBhbmQgcXVldWUKYSB3b3Jr IGl0ZW0gdGhhdCBhY2Nlc3NlcyB0aGUgbm93LWZyZWVkIElCSSBwb29sPwoKLS0gClNhc2hpa28g QUkgcmV2aWV3IMK3IGh0dHBzOi8vc2FzaGlrby5kZXYvIy9wYXRjaHNldC8yMDI2MDgxNDExNTE1 NS4zOTc0OTg4LTEtc2h1YmhhbXNhbmpheS5wYXRpbEBhbWQuY29tP3BhcnQ9MgoKLS0gCmxpbnV4 LWkzYyBtYWlsaW5nIGxpc3QKbGludXgtaTNjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1pM2MK