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 BC4A94908B6 for ; Sat, 25 Jul 2026 05:04:28 +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=1784955871; cv=none; b=Sn2iNtcqJ1owA4GnG8cP0Aj40Cp9rl+KNUx9YSt2baFLx2bIN2zQMv6/httEJ4N2EZ4tPyAW1lf2vObooGt/qF6O5bPVOSgqhYK3JKkgj7jGASedhVCCvXJprYtaDcZ9+Ew92dzWeVdLH1qQhFv46ES0Ng0fwZKpn4NfrLhBa70= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784955871; c=relaxed/simple; bh=m++C/wRcYSmuEclcZbuthCev1JJ4qRndQLku4W+ailo=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=o83ZWkPTA1czz/bXGSQdbeBfrpv7wIild/N6PZg3+9CjEecln+nZlew68x4Q9i9xgt3t5zzL5AER3u7M25C+1EOrSAxP8KOdOP56heS/3+cQViQvxknvjr9DUjyRiBTk5Ur3OAxScwuAY7MSGinL8tz5Pz9CZQEzECkGe/fdnBc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=W8iof5dT; 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="W8iof5dT" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 33AE91F000E9; Sat, 25 Jul 2026 05:04:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784955867; bh=ut+438AG3bp1406wS3uQ/QfvCDFxEWBO9W7UtMXiDew=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=W8iof5dTQBVMQ+pWzQUGbIOAbSnCoZpG7k76AX4rfnZFz1MgYiJVcUeyVmmAV7dHz GgsvJyzW+BxZSV8LAFxbGc6vUp0igMxs2ba1bCYOo9fqqg3GT7fJa5n0dwPht/i+nQ XESPVtr9431i7QlfFTJgjxx7EdAWpNCVrOvkLOHz0Ouj42fuc/64aDXvkr5bKWFwrz jyGXMoRR4QRf1zzsA6Bi7NluFN/87/r0JRDYNd6WPLPAFLRcDkK9ec0ilPrdKv7EGh 9WDoSGpwKBICUlK2x0OtodkWFv+vyCu4nXHHmR6buTanD0QlKKM5gXR2xJk1/sLGPR JxLzW79PAQnag== From: sashiko-bot@kernel.org Subject: Re: [PATCH RESEND 10/17] drm/spacemit: add Saturn DPU KMS pipeline Reply-To: sashiko-reviews@lists.linux.dev To: "Cody Kang" Cc: dri-devel@lists.freedesktop.org, linux-phy@lists.infradead.org, olteanv@gmail.com, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, robh@kernel.org, devicetree@vger.kernel.org In-Reply-To: <20260725-k3-display-v1-10-6de34d80e86c@gmail.com> References: <20260725-k3-display-v1-0-6de34d80e86c@gmail.com> <20260725-k3-display-v1-10-6de34d80e86c@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Sat, 25 Jul 2026 05:04:26 +0000 Message-Id: <20260725050427.33AE91F000E9@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 10 potential issue= (s) to consider: - [High] Sleeping functions are called from CRTC atomic enable and disable = callbacks, which execute in atomic context. - [High] TOCTOU race when updating the `clocks_on` flag and gating hardware= clocks leads to MMIO stalls. - [High] Calling `devm_drm_dev_alloc` inside a component `bind` callback le= aks the DRM device on rebinds. - [High] Enabling the DPU interrupt before hardware is initialized leads to= an unhandled IRQ storm. - [High] `spacemit_plane_reset` bypasses the custom state destructor, leaki= ng DMA coherent memory. - [High] `disable_irq()` is called before `drm_atomic_helper_shutdown()` du= ring driver unbind, causing shutdown to hang. - [High] `spacemit_plane_atomic_check()` assigns RDMA channels based on unv= alidated `zpos`, leading to channel collisions. - [High] Unconditional `spin_unlock_irq` used in atomic context improperly = re-enables interrupts. - [Medium] Leaking DRM property blob references in `spacemit_crtc_duplicate= _state` on error. - [Medium] Missing NULL check on `plane->state` in `spacemit_plane_atomic_d= uplicate_state` causes a crash if the state is missing. -- --- Patch [10]: [PATCH RESEND 10/17] drm/spacemit: add Saturn DPU KMS pipel= ine --- commit cf6665928c2c5fcf07a88c5cd2141feb18245e17 Author: Cody Kang Subject: drm/spacemit: add Saturn DPU KMS pipeline Add the atomic KMS implementation on top of the hardware backend: one CRTC and one primary plane per DPU instance. atomic_check validates the plane rectangle 1:1 against the mode and sizes the per-channel FBC line buffer. > diff --git a/drivers/gpu/drm/spacemit/spacemit_crtc.c b/drivers/gpu/drm/s= pacemit/spacemit_crtc.c > new file mode 100644 > index 0000000000000..b75ff63205011 > --- /dev/null > +++ b/drivers/gpu/drm/spacemit/spacemit_crtc.c [ ... ] > @@ -91,7 +91,7 @@ static void spacemit_crtc_atomic_enable(struct drm_crtc= *crtc, > dpu_reset_assert(a_crtc->dev, "lcd", a_crtc->lcd_reset); > dpu_reset_assert(a_crtc->dev, "esc", a_crtc->esc_reset); > dpu_reset_assert(a_crtc->dev, "mclk", a_crtc->mclk_reset); > dpu_reset_assert(a_crtc->dev, "aclk", a_crtc->aclk_reset); > dpu_reset_assert(a_crtc->dev, "dsc", a_crtc->dsc_reset); > usleep_range(10000, 20000); [Severity: High] Does this sleep in an atomic context? The spacemit_crtc_atomic_enable callback is executed during a non-blocking DRM atomic commit, which runs in an atomic context. Calling usleep_range() here might violate atomic context rules and lead to scheduling-while-atomic warnings. [ ... ] > @@ -145,13 +145,13 @@ static void spacemit_crtc_atomic_disable(struct drm= _crtc *crtc, > * must finish its status reads before dpu_pm_suspend() gates the > * clocks. > */ > if (a_crtc->irq_online > 0) > synchronize_irq(a_crtc->irq_online); [Severity: High] Can synchronize_irq() safely execute here? This callback runs in an atomic context, but synchronize_irq() blocks waiting for executing handlers. [Severity: High] Does this code leave a race window before the flags are updated? An interru= pt could fire immediately after synchronize_irq() returns but before clocks_on is toggled to false, leading the ISR to access MMIO while dpu_pm_suspend() is shutting down the clocks. > =20 > /* > * Nothing else cancels the watchdog; it would fire against freed state. > */ > timer_delete_sync(&a_crtc->cfg_rdy_timer); > =20 > /* Close the ISR's MMIO gate before the clocks actually stop. */ > a_crtc->clocks_on =3D false; > dpu_pm_suspend(a_crtc->dev); [Severity: High] Does dpu_pm_suspend() sleep in this atomic context? It calls usleep_range() which could trigger kernel warnings and deadlocks when reached via spacemit_crtc_atomic_disable(). > =20 > spin_lock_irq(&drm->event_lock); > if (crtc->state->event) { > drm_crtc_send_vblank_event(crtc, crtc->state->event); > crtc->state->event =3D NULL; > } > spin_unlock_irq(&drm->event_lock); [Severity: High] Is it safe to use unconditional spin_unlock_irq() here? Since this callback executes in an atomic context (e.g. from drm_atomic_helper_commit_tail), unconditionally re-enabling interrupts breaks the caller's atomic assumptio= ns. Should this use spin_lock_irqsave() and spin_unlock_irqrestore() instead? [ ... ] > @@ -231,6 +231,5 @@ static struct drm_crtc_state * > __drm_atomic_helper_crtc_duplicate_state(crtc, &state->base); > =20 > n_rdma =3D hwdev->rdma_nums; > state->rdmas =3D kzalloc_objs(*state->rdmas, n_rdma); > if (!state->rdmas) { > kfree(state); > return NULL; > } [Severity: Medium] Does this error path leak DRM property blob references? __drm_atomic_helper_crtc_duplicate_state() increments references on blobs like mode_blob, ctm, and gamma_lut. Returning NULL here without releasing them could leak those references. [ ... ] > @@ -418,6 +418,5 @@ static irqreturn_t spacemit_dpu_isr(int irq, void *da= ta) > /* Reading a clock-gated DPU's status registers stalls the bus. */ > if (unlikely(!a_crtc->clocks_on)) { > drm_dev_exit(idx); > return IRQ_NONE; > } [Severity: High] Does this code cause an IRQ storm? By returning IRQ_NONE without clearing the hardware interrupt status when clocks_on is false, the interrupt controller might continuously re-trigger the ISR if the bootloader left the interrupt asserted. [ ... ] > @@ -496,6 +496,5 @@ static int spacemit_drm_master_bind(struct device *de= v) > } > =20 > kms =3D devm_drm_dev_alloc(dev, &spacemit_drm_drv, > struct spacemit_kms, drm); > if (IS_ERR(kms)) [Severity: High] Will this leak the DRM device on rebind? devm_drm_dev_alloc ties the allocation lifetime to the platform device's probe/remove cycle. If the component unbinds and rebinds, new DRM devices are allocated but the old ones are never freed. [ ... ] > @@ -573,6 +573,5 @@ static int spacemit_drm_master_bind(struct device *de= v) > drm_mode_config_reset(drm); > drmm_kms_helper_poll_init(drm); > drm_helper_hpd_irq_event(drm); > =20 > enable_irq(priv->irq_online); [Severity: High] Is it safe to enable the IRQ before the hardware state is fully initialized? If the bootloader left the display hardware active, the ISR might fire immediately while a_crtc->clocks_on is still false, leading to the IRQ storm mentioned above. [ ... ] > @@ -594,6 +594,5 @@ static void spacemit_drm_master_unbind(struct device = *dev) > =20 > disable_irq(priv->irq_online); > =20 > drm_dev_unregister(drm); > drm_atomic_helper_shutdown(drm); > component_unbind_all(dev, drm); [Severity: High] Will calling drm_atomic_helper_shutdown() hang if the IRQ is already disabled? The shutdown helper flushes pending atomic commits and disables CRTCs, which requires the hardware vblank interrupt to signal completion. Without it, the commit wait could time out. > diff --git a/drivers/gpu/drm/spacemit/spacemit_planes.c b/drivers/gpu/drm= /spacemit/spacemit_planes.c > new file mode 100644 > index 0000000000000..3442013b0c37f > --- /dev/null > +++ b/drivers/gpu/drm/spacemit/spacemit_planes.c [ ... ] > @@ -98,6 +98,5 @@ static int spacemit_plane_atomic_check(struct drm_plane= *plane, > if (src_w =3D=3D 0 && src_h =3D=3D 0) > cur_rdma_id =3D RDMA_INVALID_ID; /* constant-fill layer, no RDMA */ > else if (cur_rdma_id =3D=3D RDMA_INVALID_ID) > cur_rdma_id =3D state->zpos; /* first commit: bind channel by zpos */ > cur_state->rdma_id =3D cur_rdma_id; [Severity: High] Does this code assign RDMA channels based on unvalidated zpos? Userspace could submit a configuration with duplicate zpos values across multiple planes, resulting in channel collisions where planes overwrite each other's hardware registers during spacemit_plane_atomic_update(). [ ... ] > @@ -193,7 +193,6 @@ static void spacemit_plane_reset(struct drm_plane *pl= ane) > if (plane->state) { > s =3D to_spacemit_plane_state(plane->state); > __drm_atomic_helper_plane_destroy_state(plane->state); > kfree(s); > plane->state =3D NULL; > } [Severity: High] Does freeing the state directly bypass the driver's custom destructor? Calling kfree(s) directly in spacemit_plane_reset() skips spacemit_plane_atomic_destroy_state(), which means the DMA coherent buffers for mmu_tbl.va and cl.va could be permanently leaked when a plane is reset. [ ... ] > @@ -211,6 +211,5 @@ static struct drm_plane_state * > spacemit_plane_atomic_duplicate_state(struct drm_plane *plane) > { > struct spacemit_plane_state *s; > struct spacemit_plane_state *old_state =3D > to_spacemit_plane_state(plane->state); > struct spacemit_crtc *a_crtc =3D NULL; [Severity: Medium] Will this crash if plane->state is NULL? The to_spacemit_plane_state() macro uses container_of, which will produce a negative pointer if plane->state is NULL. Dereferencing old_state->rdma_id later would trigger a fault. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260725-k3-display= -v1-0-6de34d80e86c@gmail.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 2131CC531D0 for ; Sat, 25 Jul 2026 05:04:29 +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=VcXzlBb4HPBMDCc90fB+MWlMTuF2qtt6/cWx3+tb6Qw=; b=x1zomj0nAPFz9F tgE+f9mk9R8z7NDE4/tZQ31QBCEMVaTxsNPRQ5PpfQlpTEi7XJIAcxyfGl98v22yUIWHU6NHdRGMt fWkt3oSdbPRPIT3wd8WyPTuTxQ01NNg7dTAalRlqiDZ3K9UmRvq2JchC9w+r293NbUZz/Y8pXEI31 b2PpdgHCK1wewuIkTjs7X4+73n8ax/neEjCjuteivI8o9tKEDTRZdg6XyDNxu6zeGmbPi6hf0qdAp sPW1TfhKbfa7i+DpuvoCOvRUjPwmyA0A88MJGER7Rc3OxrFMeEHiL+sfYaVT2DAVw19PTkObLZh5o VgnwHNcQzVtASvVRS12w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wnUYm-000000002rE-3cK5; Sat, 25 Jul 2026 05:04:28 +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 1wnUYm-000000002r1-01Qw for linux-phy@lists.infradead.org; Sat, 25 Jul 2026 05:04:28 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id C087843BE9; Sat, 25 Jul 2026 05:04:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 33AE91F000E9; Sat, 25 Jul 2026 05:04:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784955867; bh=ut+438AG3bp1406wS3uQ/QfvCDFxEWBO9W7UtMXiDew=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=W8iof5dTQBVMQ+pWzQUGbIOAbSnCoZpG7k76AX4rfnZFz1MgYiJVcUeyVmmAV7dHz GgsvJyzW+BxZSV8LAFxbGc6vUp0igMxs2ba1bCYOo9fqqg3GT7fJa5n0dwPht/i+nQ XESPVtr9431i7QlfFTJgjxx7EdAWpNCVrOvkLOHz0Ouj42fuc/64aDXvkr5bKWFwrz jyGXMoRR4QRf1zzsA6Bi7NluFN/87/r0JRDYNd6WPLPAFLRcDkK9ec0ilPrdKv7EGh 9WDoSGpwKBICUlK2x0OtodkWFv+vyCu4nXHHmR6buTanD0QlKKM5gXR2xJk1/sLGPR JxLzW79PAQnag== From: sashiko-bot@kernel.org Subject: Re: [PATCH RESEND 10/17] drm/spacemit: add Saturn DPU KMS pipeline To: "Cody Kang" Cc: dri-devel@lists.freedesktop.org, linux-phy@lists.infradead.org, olteanv@gmail.com, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, robh@kernel.org, devicetree@vger.kernel.org In-Reply-To: <20260725-k3-display-v1-10-6de34d80e86c@gmail.com> References: <20260725-k3-display-v1-0-6de34d80e86c@gmail.com> <20260725-k3-display-v1-10-6de34d80e86c@gmail.com> Date: Sat, 25 Jul 2026 05:04:26 +0000 Message-Id: <20260725050427.33AE91F000E9@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 MTAgcG90ZW50aWFsIGlzc3VlKHMpIHRvIGNvbnNpZGVyOgotIFtIaWdoXSBTbGVlcGluZyBmdW5j dGlvbnMgYXJlIGNhbGxlZCBmcm9tIENSVEMgYXRvbWljIGVuYWJsZSBhbmQgZGlzYWJsZSBjYWxs YmFja3MsIHdoaWNoIGV4ZWN1dGUgaW4gYXRvbWljIGNvbnRleHQuCi0gW0hpZ2hdIFRPQ1RPVSBy YWNlIHdoZW4gdXBkYXRpbmcgdGhlIGBjbG9ja3Nfb25gIGZsYWcgYW5kIGdhdGluZyBoYXJkd2Fy ZSBjbG9ja3MgbGVhZHMgdG8gTU1JTyBzdGFsbHMuCi0gW0hpZ2hdIENhbGxpbmcgYGRldm1fZHJt X2Rldl9hbGxvY2AgaW5zaWRlIGEgY29tcG9uZW50IGBiaW5kYCBjYWxsYmFjayBsZWFrcyB0aGUg RFJNIGRldmljZSBvbiByZWJpbmRzLgotIFtIaWdoXSBFbmFibGluZyB0aGUgRFBVIGludGVycnVw dCBiZWZvcmUgaGFyZHdhcmUgaXMgaW5pdGlhbGl6ZWQgbGVhZHMgdG8gYW4gdW5oYW5kbGVkIElS USBzdG9ybS4KLSBbSGlnaF0gYHNwYWNlbWl0X3BsYW5lX3Jlc2V0YCBieXBhc3NlcyB0aGUgY3Vz dG9tIHN0YXRlIGRlc3RydWN0b3IsIGxlYWtpbmcgRE1BIGNvaGVyZW50IG1lbW9yeS4KLSBbSGln aF0gYGRpc2FibGVfaXJxKClgIGlzIGNhbGxlZCBiZWZvcmUgYGRybV9hdG9taWNfaGVscGVyX3No dXRkb3duKClgIGR1cmluZyBkcml2ZXIgdW5iaW5kLCBjYXVzaW5nIHNodXRkb3duIHRvIGhhbmcu Ci0gW0hpZ2hdIGBzcGFjZW1pdF9wbGFuZV9hdG9taWNfY2hlY2soKWAgYXNzaWducyBSRE1BIGNo YW5uZWxzIGJhc2VkIG9uIHVudmFsaWRhdGVkIGB6cG9zYCwgbGVhZGluZyB0byBjaGFubmVsIGNv bGxpc2lvbnMuCi0gW0hpZ2hdIFVuY29uZGl0aW9uYWwgYHNwaW5fdW5sb2NrX2lycWAgdXNlZCBp biBhdG9taWMgY29udGV4dCBpbXByb3Blcmx5IHJlLWVuYWJsZXMgaW50ZXJydXB0cy4KLSBbTWVk aXVtXSBMZWFraW5nIERSTSBwcm9wZXJ0eSBibG9iIHJlZmVyZW5jZXMgaW4gYHNwYWNlbWl0X2Ny dGNfZHVwbGljYXRlX3N0YXRlYCBvbiBlcnJvci4KLSBbTWVkaXVtXSBNaXNzaW5nIE5VTEwgY2hl Y2sgb24gYHBsYW5lLT5zdGF0ZWAgaW4gYHNwYWNlbWl0X3BsYW5lX2F0b21pY19kdXBsaWNhdGVf c3RhdGVgIGNhdXNlcyBhIGNyYXNoIGlmIHRoZSBzdGF0ZSBpcyBtaXNzaW5nLgotLQoKLS0tIFBh dGNoIFsxMF06IFtQQVRDSCBSRVNFTkQgMTAvMTddIGRybS9zcGFjZW1pdDogYWRkIFNhdHVybiBE UFUgS01TIHBpcGVsaW5lIC0tLQpjb21taXQgY2Y2NjY1OTI4YzJjNWZjZjA3YTg4YzVjZDIxNDFm ZWIxODI0NWUxNwpBdXRob3I6IENvZHkgS2FuZyA8Y29keWthbmcuaGtAZ21haWwuY29tPgpTdWJq ZWN0OiBkcm0vc3BhY2VtaXQ6IGFkZCBTYXR1cm4gRFBVIEtNUyBwaXBlbGluZQoKQWRkIHRoZSBh dG9taWMgS01TIGltcGxlbWVudGF0aW9uIG9uIHRvcCBvZiB0aGUgaGFyZHdhcmUgYmFja2VuZDog b25lCkNSVEMgYW5kIG9uZSBwcmltYXJ5IHBsYW5lIHBlciBEUFUgaW5zdGFuY2UuIGF0b21pY19j aGVjayB2YWxpZGF0ZXMKdGhlIHBsYW5lIHJlY3RhbmdsZSAxOjEgYWdhaW5zdCB0aGUgbW9kZSBh bmQgc2l6ZXMgdGhlIHBlci1jaGFubmVsIEZCQwpsaW5lIGJ1ZmZlci4KCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9zcGFjZW1pdC9zcGFjZW1pdF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9k cm0vc3BhY2VtaXQvc3BhY2VtaXRfY3J0Yy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAwLi5iNzVmZjYzMjA1MDExCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9zcGFjZW1pdC9zcGFjZW1pdF9jcnRjLmMKClsgLi4uIF0KCj4gQEAgLTkx LDcgKzkxLDcgQEAgc3RhdGljIHZvaWQgc3BhY2VtaXRfY3J0Y19hdG9taWNfZW5hYmxlKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKPiAgCQlkcHVfcmVzZXRfYXNzZXJ0KGFfY3J0Yy0+ZGV2LCAibGNk IiwgYV9jcnRjLT5sY2RfcmVzZXQpOwo+ICAJCWRwdV9yZXNldF9hc3NlcnQoYV9jcnRjLT5kZXYs ICJlc2MiLCBhX2NydGMtPmVzY19yZXNldCk7Cj4gIAkJZHB1X3Jlc2V0X2Fzc2VydChhX2NydGMt PmRldiwgIm1jbGsiLCBhX2NydGMtPm1jbGtfcmVzZXQpOwo+ICAJCWRwdV9yZXNldF9hc3NlcnQo YV9jcnRjLT5kZXYsICJhY2xrIiwgYV9jcnRjLT5hY2xrX3Jlc2V0KTsKPiAgCQlkcHVfcmVzZXRf YXNzZXJ0KGFfY3J0Yy0+ZGV2LCAiZHNjIiwgYV9jcnRjLT5kc2NfcmVzZXQpOwo+ICAJCXVzbGVl cF9yYW5nZSgxMDAwMCwgMjAwMDApOwoKW1NldmVyaXR5OiBIaWdoXQpEb2VzIHRoaXMgc2xlZXAg aW4gYW4gYXRvbWljIGNvbnRleHQ/IFRoZSBzcGFjZW1pdF9jcnRjX2F0b21pY19lbmFibGUKY2Fs bGJhY2sgaXMgZXhlY3V0ZWQgZHVyaW5nIGEgbm9uLWJsb2NraW5nIERSTSBhdG9taWMgY29tbWl0 LCB3aGljaCBydW5zCmluIGFuIGF0b21pYyBjb250ZXh0LiBDYWxsaW5nIHVzbGVlcF9yYW5nZSgp IGhlcmUgbWlnaHQgdmlvbGF0ZSBhdG9taWMKY29udGV4dCBydWxlcyBhbmQgbGVhZCB0byBzY2hl ZHVsaW5nLXdoaWxlLWF0b21pYyB3YXJuaW5ncy4KClsgLi4uIF0KCj4gQEAgLTE0NSwxMyArMTQ1 LDEzIEBAIHN0YXRpYyB2b2lkIHNwYWNlbWl0X2NydGNfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjLAo+ICAJICogbXVzdCBmaW5pc2ggaXRzIHN0YXR1cyByZWFkcyBiZWZvcmUg ZHB1X3BtX3N1c3BlbmQoKSBnYXRlcyB0aGUKPiAgCSAqIGNsb2Nrcy4KPiAgCSAqLwo+ICAJaWYg KGFfY3J0Yy0+aXJxX29ubGluZSA+IDApCj4gIAkJc3luY2hyb25pemVfaXJxKGFfY3J0Yy0+aXJx X29ubGluZSk7CgpbU2V2ZXJpdHk6IEhpZ2hdCkNhbiBzeW5jaHJvbml6ZV9pcnEoKSBzYWZlbHkg ZXhlY3V0ZSBoZXJlPyBUaGlzIGNhbGxiYWNrIHJ1bnMgaW4gYW4gYXRvbWljCmNvbnRleHQsIGJ1 dCBzeW5jaHJvbml6ZV9pcnEoKSBibG9ja3Mgd2FpdGluZyBmb3IgZXhlY3V0aW5nIGhhbmRsZXJz LgoKW1NldmVyaXR5OiBIaWdoXQpEb2VzIHRoaXMgY29kZSBsZWF2ZSBhIHJhY2Ugd2luZG93IGJl Zm9yZSB0aGUgZmxhZ3MgYXJlIHVwZGF0ZWQ/IEFuIGludGVycnVwdApjb3VsZCBmaXJlIGltbWVk aWF0ZWx5IGFmdGVyIHN5bmNocm9uaXplX2lycSgpIHJldHVybnMgYnV0IGJlZm9yZSBjbG9ja3Nf b24KaXMgdG9nZ2xlZCB0byBmYWxzZSwgbGVhZGluZyB0aGUgSVNSIHRvIGFjY2VzcyBNTUlPIHdo aWxlIGRwdV9wbV9zdXNwZW5kKCkKaXMgc2h1dHRpbmcgZG93biB0aGUgY2xvY2tzLgoKPiAgCj4g IAkvKgo+ICAJICogTm90aGluZyBlbHNlIGNhbmNlbHMgdGhlIHdhdGNoZG9nOyBpdCB3b3VsZCBm aXJlIGFnYWluc3QgZnJlZWQgc3RhdGUuCj4gIAkgKi8KPiAgCXRpbWVyX2RlbGV0ZV9zeW5jKCZh X2NydGMtPmNmZ19yZHlfdGltZXIpOwo+ICAKPiAgCS8qIENsb3NlIHRoZSBJU1IncyBNTUlPIGdh dGUgYmVmb3JlIHRoZSBjbG9ja3MgYWN0dWFsbHkgc3RvcC4gKi8KPiAgCWFfY3J0Yy0+Y2xvY2tz X29uID0gZmFsc2U7Cj4gIAlkcHVfcG1fc3VzcGVuZChhX2NydGMtPmRldik7CgpbU2V2ZXJpdHk6 IEhpZ2hdCkRvZXMgZHB1X3BtX3N1c3BlbmQoKSBzbGVlcCBpbiB0aGlzIGF0b21pYyBjb250ZXh0 PyBJdCBjYWxscyB1c2xlZXBfcmFuZ2UoKQp3aGljaCBjb3VsZCB0cmlnZ2VyIGtlcm5lbCB3YXJu aW5ncyBhbmQgZGVhZGxvY2tzIHdoZW4gcmVhY2hlZCB2aWEKc3BhY2VtaXRfY3J0Y19hdG9taWNf ZGlzYWJsZSgpLgoKPiAgCj4gIAlzcGluX2xvY2tfaXJxKCZkcm0tPmV2ZW50X2xvY2spOwo+ICAJ aWYgKGNydGMtPnN0YXRlLT5ldmVudCkgewo+ICAJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50 KGNydGMsIGNydGMtPnN0YXRlLT5ldmVudCk7Cj4gIAkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVM TDsKPiAgCX0KPiAgCXNwaW5fdW5sb2NrX2lycSgmZHJtLT5ldmVudF9sb2NrKTsKCltTZXZlcml0 eTogSGlnaF0KSXMgaXQgc2FmZSB0byB1c2UgdW5jb25kaXRpb25hbCBzcGluX3VubG9ja19pcnEo KSBoZXJlPyBTaW5jZSB0aGlzIGNhbGxiYWNrCmV4ZWN1dGVzIGluIGFuIGF0b21pYyBjb250ZXh0 IChlLmcuIGZyb20gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3RhaWwpLAp1bmNvbmRpdGlvbmFs bHkgcmUtZW5hYmxpbmcgaW50ZXJydXB0cyBicmVha3MgdGhlIGNhbGxlcidzIGF0b21pYyBhc3N1 bXB0aW9ucy4KU2hvdWxkIHRoaXMgdXNlIHNwaW5fbG9ja19pcnFzYXZlKCkgYW5kIHNwaW5fdW5s b2NrX2lycXJlc3RvcmUoKSBpbnN0ZWFkPwoKWyAuLi4gXQoKPiBAQCAtMjMxLDYgKzIzMSw1IEBA IHN0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKgo+ICAJX19kcm1fYXRvbWljX2hlbHBlcl9j cnRjX2R1cGxpY2F0ZV9zdGF0ZShjcnRjLCAmc3RhdGUtPmJhc2UpOwo+ICAKPiAgCW5fcmRtYSA9 IGh3ZGV2LT5yZG1hX251bXM7Cj4gIAlzdGF0ZS0+cmRtYXMgPSBremFsbG9jX29ianMoKnN0YXRl LT5yZG1hcywgbl9yZG1hKTsKPiAgCWlmICghc3RhdGUtPnJkbWFzKSB7Cj4gIAkJa2ZyZWUoc3Rh dGUpOwo+ICAJCXJldHVybiBOVUxMOwo+ICAJfQoKW1NldmVyaXR5OiBNZWRpdW1dCkRvZXMgdGhp cyBlcnJvciBwYXRoIGxlYWsgRFJNIHByb3BlcnR5IGJsb2IgcmVmZXJlbmNlcz8KX19kcm1fYXRv bWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSgpIGluY3JlbWVudHMgcmVmZXJlbmNlcyBv biBibG9icwpsaWtlIG1vZGVfYmxvYiwgY3RtLCBhbmQgZ2FtbWFfbHV0LiBSZXR1cm5pbmcgTlVM TCBoZXJlIHdpdGhvdXQgcmVsZWFzaW5nCnRoZW0gY291bGQgbGVhayB0aG9zZSByZWZlcmVuY2Vz LgoKWyAuLi4gXQoKPiBAQCAtNDE4LDYgKzQxOCw1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBzcGFj ZW1pdF9kcHVfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCj4gIAkvKiBSZWFkaW5nIGEgY2xvY2st Z2F0ZWQgRFBVJ3Mgc3RhdHVzIHJlZ2lzdGVycyBzdGFsbHMgdGhlIGJ1cy4gKi8KPiAgCWlmICh1 bmxpa2VseSghYV9jcnRjLT5jbG9ja3Nfb24pKSB7Cj4gIAkJZHJtX2Rldl9leGl0KGlkeCk7Cj4g IAkJcmV0dXJuIElSUV9OT05FOwo+ICAJfQoKW1NldmVyaXR5OiBIaWdoXQpEb2VzIHRoaXMgY29k ZSBjYXVzZSBhbiBJUlEgc3Rvcm0/IEJ5IHJldHVybmluZyBJUlFfTk9ORSB3aXRob3V0IGNsZWFy aW5nCnRoZSBoYXJkd2FyZSBpbnRlcnJ1cHQgc3RhdHVzIHdoZW4gY2xvY2tzX29uIGlzIGZhbHNl LCB0aGUgaW50ZXJydXB0CmNvbnRyb2xsZXIgbWlnaHQgY29udGludW91c2x5IHJlLXRyaWdnZXIg dGhlIElTUiBpZiB0aGUgYm9vdGxvYWRlciBsZWZ0IHRoZQppbnRlcnJ1cHQgYXNzZXJ0ZWQuCgpb IC4uLiBdCgo+IEBAIC00OTYsNiArNDk2LDUgQEAgc3RhdGljIGludCBzcGFjZW1pdF9kcm1fbWFz dGVyX2JpbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICAJfQo+ICAKPiAgCWttcyA9IGRldm1fZHJt X2Rldl9hbGxvYyhkZXYsICZzcGFjZW1pdF9kcm1fZHJ2LAo+ICAJCQkJIHN0cnVjdCBzcGFjZW1p dF9rbXMsIGRybSk7Cj4gIAlpZiAoSVNfRVJSKGttcykpCgpbU2V2ZXJpdHk6IEhpZ2hdCldpbGwg dGhpcyBsZWFrIHRoZSBEUk0gZGV2aWNlIG9uIHJlYmluZD8gZGV2bV9kcm1fZGV2X2FsbG9jIHRp ZXMgdGhlCmFsbG9jYXRpb24gbGlmZXRpbWUgdG8gdGhlIHBsYXRmb3JtIGRldmljZSdzIHByb2Jl L3JlbW92ZSBjeWNsZS4gSWYgdGhlCmNvbXBvbmVudCB1bmJpbmRzIGFuZCByZWJpbmRzLCBuZXcg RFJNIGRldmljZXMgYXJlIGFsbG9jYXRlZCBidXQgdGhlIG9sZApvbmVzIGFyZSBuZXZlciBmcmVl ZC4KClsgLi4uIF0KCj4gQEAgLTU3Myw2ICs1NzMsNSBAQCBzdGF0aWMgaW50IHNwYWNlbWl0X2Ry bV9tYXN0ZXJfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIAlkcm1fbW9kZV9jb25maWdfcmVz ZXQoZHJtKTsKPiAgCWRybW1fa21zX2hlbHBlcl9wb2xsX2luaXQoZHJtKTsKPiAgCWRybV9oZWxw ZXJfaHBkX2lycV9ldmVudChkcm0pOwo+ICAKPiAgCWVuYWJsZV9pcnEocHJpdi0+aXJxX29ubGlu ZSk7CgpbU2V2ZXJpdHk6IEhpZ2hdCklzIGl0IHNhZmUgdG8gZW5hYmxlIHRoZSBJUlEgYmVmb3Jl IHRoZSBoYXJkd2FyZSBzdGF0ZSBpcyBmdWxseSBpbml0aWFsaXplZD8KSWYgdGhlIGJvb3Rsb2Fk ZXIgbGVmdCB0aGUgZGlzcGxheSBoYXJkd2FyZSBhY3RpdmUsIHRoZSBJU1IgbWlnaHQgZmlyZQpp bW1lZGlhdGVseSB3aGlsZSBhX2NydGMtPmNsb2Nrc19vbiBpcyBzdGlsbCBmYWxzZSwgbGVhZGlu ZyB0byB0aGUgSVJRIHN0b3JtCm1lbnRpb25lZCBhYm92ZS4KClsgLi4uIF0KCj4gQEAgLTU5NCw2 ICs1OTQsNSBAQCBzdGF0aWMgdm9pZCBzcGFjZW1pdF9kcm1fbWFzdGVyX3VuYmluZChzdHJ1Y3Qg ZGV2aWNlICpkZXYpCj4gIAo+ICAJZGlzYWJsZV9pcnEocHJpdi0+aXJxX29ubGluZSk7Cj4gIAo+ ICAJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7Cj4gIAlkcm1fYXRvbWljX2hlbHBlcl9zaHV0ZG93 bihkcm0pOwo+ICAJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pOwoKW1NldmVyaXR5OiBI aWdoXQpXaWxsIGNhbGxpbmcgZHJtX2F0b21pY19oZWxwZXJfc2h1dGRvd24oKSBoYW5nIGlmIHRo ZSBJUlEgaXMgYWxyZWFkeQpkaXNhYmxlZD8gVGhlIHNodXRkb3duIGhlbHBlciBmbHVzaGVzIHBl bmRpbmcgYXRvbWljIGNvbW1pdHMgYW5kIGRpc2FibGVzCkNSVENzLCB3aGljaCByZXF1aXJlcyB0 aGUgaGFyZHdhcmUgdmJsYW5rIGludGVycnVwdCB0byBzaWduYWwgY29tcGxldGlvbi4KV2l0aG91 dCBpdCwgdGhlIGNvbW1pdCB3YWl0IGNvdWxkIHRpbWUgb3V0LgoKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3NwYWNlbWl0L3NwYWNlbWl0X3BsYW5lcy5jIGIvZHJpdmVycy9ncHUvZHJt L3NwYWNlbWl0L3NwYWNlbWl0X3BsYW5lcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAwLi4zNDQyMDEzYjBjMzdmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9zcGFjZW1pdC9zcGFjZW1pdF9wbGFuZXMuYwoKWyAuLi4gXQoKPiBAQCAt OTgsNiArOTgsNSBAQCBzdGF0aWMgaW50IHNwYWNlbWl0X3BsYW5lX2F0b21pY19jaGVjayhzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCWlmIChzcmNfdyA9PSAwICYmIHNyY19oID09IDApCj4g IAkJY3VyX3JkbWFfaWQgPSBSRE1BX0lOVkFMSURfSUQ7CS8qIGNvbnN0YW50LWZpbGwgbGF5ZXIs IG5vIFJETUEgKi8KPiAgCWVsc2UgaWYgKGN1cl9yZG1hX2lkID09IFJETUFfSU5WQUxJRF9JRCkK PiAgCQljdXJfcmRtYV9pZCA9IHN0YXRlLT56cG9zOwkvKiBmaXJzdCBjb21taXQ6IGJpbmQgY2hh bm5lbCBieSB6cG9zICovCj4gIAljdXJfc3RhdGUtPnJkbWFfaWQgPSBjdXJfcmRtYV9pZDsKCltT ZXZlcml0eTogSGlnaF0KRG9lcyB0aGlzIGNvZGUgYXNzaWduIFJETUEgY2hhbm5lbHMgYmFzZWQg b24gdW52YWxpZGF0ZWQgenBvcz8gVXNlcnNwYWNlCmNvdWxkIHN1Ym1pdCBhIGNvbmZpZ3VyYXRp b24gd2l0aCBkdXBsaWNhdGUgenBvcyB2YWx1ZXMgYWNyb3NzIG11bHRpcGxlCnBsYW5lcywgcmVz dWx0aW5nIGluIGNoYW5uZWwgY29sbGlzaW9ucyB3aGVyZSBwbGFuZXMgb3ZlcndyaXRlIGVhY2gg b3RoZXIncwpoYXJkd2FyZSByZWdpc3RlcnMgZHVyaW5nIHNwYWNlbWl0X3BsYW5lX2F0b21pY191 cGRhdGUoKS4KClsgLi4uIF0KCj4gQEAgLTE5Myw3ICsxOTMsNiBAQCBzdGF0aWMgdm9pZCBzcGFj ZW1pdF9wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiAgCWlmIChwbGFuZS0+ c3RhdGUpIHsKPiAgCQlzID0gdG9fc3BhY2VtaXRfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsK PiAgCQlfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUocGxhbmUtPnN0YXRl KTsKPiAgCQlrZnJlZShzKTsKPiAgCQlwbGFuZS0+c3RhdGUgPSBOVUxMOwo+ICAJfQoKW1NldmVy aXR5OiBIaWdoXQpEb2VzIGZyZWVpbmcgdGhlIHN0YXRlIGRpcmVjdGx5IGJ5cGFzcyB0aGUgZHJp dmVyJ3MgY3VzdG9tIGRlc3RydWN0b3I/CkNhbGxpbmcga2ZyZWUocykgZGlyZWN0bHkgaW4gc3Bh Y2VtaXRfcGxhbmVfcmVzZXQoKSBza2lwcwpzcGFjZW1pdF9wbGFuZV9hdG9taWNfZGVzdHJveV9z dGF0ZSgpLCB3aGljaCBtZWFucyB0aGUgRE1BIGNvaGVyZW50IGJ1ZmZlcnMKZm9yIG1tdV90Ymwu dmEgYW5kIGNsLnZhIGNvdWxkIGJlIHBlcm1hbmVudGx5IGxlYWtlZCB3aGVuIGEgcGxhbmUgaXMg cmVzZXQuCgpbIC4uLiBdCgo+IEBAIC0yMTEsNiArMjExLDUgQEAgc3RhdGljIHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKgo+ICBzcGFjZW1pdF9wbGFuZV9hdG9taWNfZHVwbGljYXRlX3N0YXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ICB7Cj4gIAlzdHJ1Y3Qgc3BhY2VtaXRfcGxhbmVfc3Rh dGUgKnM7Cj4gIAlzdHJ1Y3Qgc3BhY2VtaXRfcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSA9Cj4gIAkJ CXRvX3NwYWNlbWl0X3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7Cj4gIAlzdHJ1Y3Qgc3BhY2Vt aXRfY3J0YyAqYV9jcnRjID0gTlVMTDsKCltTZXZlcml0eTogTWVkaXVtXQpXaWxsIHRoaXMgY3Jh c2ggaWYgcGxhbmUtPnN0YXRlIGlzIE5VTEw/IFRoZSB0b19zcGFjZW1pdF9wbGFuZV9zdGF0ZSgp Cm1hY3JvIHVzZXMgY29udGFpbmVyX29mLCB3aGljaCB3aWxsIHByb2R1Y2UgYSBuZWdhdGl2ZSBw b2ludGVyIGlmCnBsYW5lLT5zdGF0ZSBpcyBOVUxMLiBEZXJlZmVyZW5jaW5nIG9sZF9zdGF0ZS0+ cmRtYV9pZCBsYXRlciB3b3VsZCB0cmlnZ2VyCmEgZmF1bHQuCgotLSAKU2FzaGlrbyBBSSByZXZp ZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYwNzI1LWszLWRpc3BsYXkt djEtMC02ZGUzNGQ4MGU4NmNAZ21haWwuY29tP3BhcnQ9MTAKCi0tIApsaW51eC1waHkgbWFpbGlu ZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo=