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 AA074C001DC for ; Thu, 20 Jul 2023 18:11:32 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2A35810E601; Thu, 20 Jul 2023 18:11:32 +0000 (UTC) Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by gabe.freedesktop.org (Postfix) with ESMTPS id D9C0110E5FD; Thu, 20 Jul 2023 18:10:42 +0000 (UTC) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 4314B61BBE; Thu, 20 Jul 2023 18:10:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 185A3C433C7; Thu, 20 Jul 2023 18:10:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1689876641; bh=y050oIX6wBu+WFNH5CBqXwyBAASCpg0hTN9b/opyVco=; h=Subject:To:Cc:From:Date:From; b=oW/2VAFK2E8k/1Bdjmxz/y+36JbIuM/Y5M/fUwSjbAyAKWlEtiJSPLwe7L3wZvvOo DPYzN/YRaWpGCT7bagxvyRvaE+fQkc79O9atDcpDI4tUX5TNCXyOy52Jxq65HHa4DR u0jTzNKZYnAqrx1750wKKfwAxIZFuaQh4nWK2Lv0= Subject: Patch "drm/client: Send hotplug event after registering a client" has been added to the 6.4-stable tree To: MoritzDuge@kolahilft.de, Xinhui.Pan@amd.com, airlied@gmail.com, alexander.deucher@amd.com, amd-gfx@lists.freedesktop.org, christian.koenig@amd.com, daniel.vetter@ffwll.ch, dmitry.baryshkov@linaro.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, gregkh@linuxfoundation.org, inki.dae@samsung.com, javierm@redhat.com, krah.tm@gmail.com, krzysztof.kozlowski@linaro.org, kyungmin.park@samsung.com, linux-arm-kernel@lists.infradead.org, linux@armlinux.org.uk, maarten.lankhorst@linux.intel.com, mario.limonciello@amd.com, mperttunen@nvidia.com, mripard@kernel.org, noralf@tronnes.org, patrik.r.jakobsson@gmail.com, pschyska@gmail.com, quic_abhinavk@quicinc.com, robdclark@gmail.com, sw0312.kim@samsung.com, thierry.reding@gmail.com, tomi.valkeinen@ideasonboard.com, tzimmermann@suse.de From: Date: Thu, 20 Jul 2023 20:10:24 +0200 Message-ID: <2023072024-sister-reviving-ee5a@gregkh> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-stable: commit X-Patchwork-Hint: ignore X-Mailman-Approved-At: Thu, 20 Jul 2023 18:11:30 +0000 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: stable-commits@vger.kernel.org Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" This is a note to let you know that I've just added the patch titled drm/client: Send hotplug event after registering a client to the 6.4-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: drm-client-send-hotplug-event-after-registering-a-client.patch and it can be found in the queue-6.4 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let know about it. >From 27655b9bb9f0d9c32b8de8bec649b676898c52d5 Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Mon, 10 Jul 2023 11:10:17 +0200 Subject: drm/client: Send hotplug event after registering a client MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Thomas Zimmermann commit 27655b9bb9f0d9c32b8de8bec649b676898c52d5 upstream. Generate a hotplug event after registering a client to allow the client to configure its display. Remove the hotplug calls from the existing clients for fbdev emulation. This change fixes a concurrency bug between registering a client and receiving events from the DRM core. The bug is present in the fbdev emulation of all drivers. The fbdev emulation currently generates a hotplug event before registering the client to the device. For each new output, the DRM core sends an additional hotplug event to each registered client. If the DRM core detects first output between sending the artificial hotplug and registering the device, the output's hotplug event gets lost. If this is the first output, the fbdev console display remains dark. This has been observed with amdgpu and fbdev-generic. Fix this by adding hotplug generation directly to the client's register helper drm_client_register(). Registering the client and receiving events are serialized by struct drm_device.clientlist_mutex. So an output is either configured by the initial hotplug event, or the client has already been registered. The bug was originally added in commit 6e3f17ee73f7 ("drm/fb-helper: generic: Call drm_client_add() after setup is done"), in which adding a client and receiving a hotplug event switched order. It was hidden, as most hardware and drivers have at least on static output configured. Other drivers didn't use the internal DRM client or still had struct drm_mode_config_funcs.output_poll_changed set. That callback handled hotplug events as well. After not setting the callback in amdgpu in commit 0e3172bac3f4 ("drm/amdgpu: Don't set struct drm_driver.output_poll_changed"), amdgpu did not show a framebuffer console if output events got lost. The bug got copy-pasted from fbdev-generic into the other fbdev emulation. Reported-by: Moritz Duge Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2649 Fixes: 6e3f17ee73f7 ("drm/fb-helper: generic: Call drm_client_add() after setup is done") Fixes: 8ab59da26bc0 ("drm/fb-helper: Move generic fbdev emulation into separate source file") Fixes: b79fe9abd58b ("drm/fbdev-dma: Implement fbdev emulation for GEM DMA helpers") Fixes: 63c381552f69 ("drm/armada: Implement fbdev emulation as in-kernel client") Fixes: 49953b70e7d3 ("drm/exynos: Implement fbdev emulation as in-kernel client") Fixes: 8f1aaccb04b7 ("drm/gma500: Implement client-based fbdev emulation") Fixes: 940b869c2f2f ("drm/msm: Implement fbdev emulation as in-kernel client") Fixes: 9e69bcd88e45 ("drm/omapdrm: Implement fbdev emulation as in-kernel client") Fixes: e317a69fe891 ("drm/radeon: Implement client-based fbdev emulation") Fixes: 71ec16f45ef8 ("drm/tegra: Implement fbdev emulation as in-kernel client") Fixes: 0e3172bac3f4 ("drm/amdgpu: Don't set struct drm_driver.output_poll_changed") Signed-off-by: Thomas Zimmermann Tested-by: Moritz Duge Tested-by: Torsten Krah Tested-by: Paul Schyska Cc: Daniel Vetter Cc: David Airlie Cc: Noralf Trønnes Cc: Maarten Lankhorst Cc: Maxime Ripard Cc: Javier Martinez Canillas Cc: Russell King Cc: Inki Dae Cc: Seung-Woo Kim Cc: Kyungmin Park Cc: Krzysztof Kozlowski Cc: Patrik Jakobsson Cc: Rob Clark Cc: Abhinav Kumar Cc: Dmitry Baryshkov Cc: Tomi Valkeinen Cc: Alex Deucher Cc: "Christian König" Cc: "Pan, Xinhui" Cc: Thierry Reding Cc: Mikko Perttunen Cc: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-samsung-soc@vger.kernel.org Cc: linux-arm-msm@vger.kernel.org Cc: freedreno@lists.freedesktop.org Cc: amd-gfx@lists.freedesktop.org Cc: linux-tegra@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: # v5.2+ Reviewed-by: Javier Martinez Canillas Reviewed-by: Dmitry Baryshkov # msm Link: https://patchwork.freedesktop.org/patch/msgid/20230710091029.27503-1-tzimmermann@suse.de [ Dropped changes to drivers/gpu/drm/armada/armada_fbdev.c as 174c3c38e3a2 drm/armada: Initialize fbdev DRM client was introduced in 6.5-rc1 ] Signed-off-by: Mario Limonciello Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/drm_client.c | 21 +++++++++++++++++++++ drivers/gpu/drm/drm_fbdev_dma.c | 4 ---- drivers/gpu/drm/drm_fbdev_generic.c | 4 ---- drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 4 ---- drivers/gpu/drm/gma500/fbdev.c | 4 ---- drivers/gpu/drm/msm/msm_fbdev.c | 4 ---- drivers/gpu/drm/omapdrm/omap_fbdev.c | 4 ---- drivers/gpu/drm/radeon/radeon_fbdev.c | 4 ---- drivers/gpu/drm/tegra/fbdev.c | 4 ---- 9 files changed, 21 insertions(+), 32 deletions(-) --- a/drivers/gpu/drm/drm_client.c +++ b/drivers/gpu/drm/drm_client.c @@ -122,13 +122,34 @@ EXPORT_SYMBOL(drm_client_init); * drm_client_register() it is no longer permissible to call drm_client_release() * directly (outside the unregister callback), instead cleanup will happen * automatically on driver unload. + * + * Registering a client generates a hotplug event that allows the client + * to set up its display from pre-existing outputs. The client must have + * initialized its state to able to handle the hotplug event successfully. */ void drm_client_register(struct drm_client_dev *client) { struct drm_device *dev = client->dev; + int ret; mutex_lock(&dev->clientlist_mutex); list_add(&client->list, &dev->clientlist); + + if (client->funcs && client->funcs->hotplug) { + /* + * Perform an initial hotplug event to pick up the + * display configuration for the client. This step + * has to be performed *after* registering the client + * in the list of clients, or a concurrent hotplug + * event might be lost; leaving the display off. + * + * Hold the clientlist_mutex as for a regular hotplug + * event. + */ + ret = client->funcs->hotplug(client); + if (ret) + drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); + } mutex_unlock(&dev->clientlist_mutex); } EXPORT_SYMBOL(drm_client_register); --- a/drivers/gpu/drm/drm_fbdev_dma.c +++ b/drivers/gpu/drm/drm_fbdev_dma.c @@ -253,10 +253,6 @@ void drm_fbdev_dma_setup(struct drm_devi goto err_drm_client_init; } - ret = drm_fbdev_dma_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/drm_fbdev_generic.c +++ b/drivers/gpu/drm/drm_fbdev_generic.c @@ -340,10 +340,6 @@ void drm_fbdev_generic_setup(struct drm_ goto err_drm_client_init; } - ret = drm_fbdev_generic_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c @@ -216,10 +216,6 @@ void exynos_drm_fbdev_setup(struct drm_d if (ret) goto err_drm_client_init; - ret = exynos_drm_fbdev_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/gma500/fbdev.c +++ b/drivers/gpu/drm/gma500/fbdev.c @@ -330,10 +330,6 @@ void psb_fbdev_setup(struct drm_psb_priv goto err_drm_fb_helper_unprepare; } - ret = psb_fbdev_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/msm/msm_fbdev.c +++ b/drivers/gpu/drm/msm/msm_fbdev.c @@ -227,10 +227,6 @@ void msm_fbdev_setup(struct drm_device * goto err_drm_fb_helper_unprepare; } - ret = msm_fbdev_client_hotplug(&helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&helper->client); return; --- a/drivers/gpu/drm/omapdrm/omap_fbdev.c +++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c @@ -323,10 +323,6 @@ void omap_fbdev_setup(struct drm_device INIT_WORK(&fbdev->work, pan_worker); - ret = omap_fbdev_client_hotplug(&helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&helper->client); return; --- a/drivers/gpu/drm/radeon/radeon_fbdev.c +++ b/drivers/gpu/drm/radeon/radeon_fbdev.c @@ -386,10 +386,6 @@ void radeon_fbdev_setup(struct radeon_de goto err_drm_client_init; } - ret = radeon_fbdev_client_hotplug(&fb_helper->client); - if (ret) - drm_dbg_kms(rdev->ddev, "client hotplug ret=%d\n", ret); - drm_client_register(&fb_helper->client); return; --- a/drivers/gpu/drm/tegra/fbdev.c +++ b/drivers/gpu/drm/tegra/fbdev.c @@ -227,10 +227,6 @@ void tegra_fbdev_setup(struct drm_device if (ret) goto err_drm_client_init; - ret = tegra_fbdev_client_hotplug(&helper->client); - if (ret) - drm_dbg_kms(dev, "client hotplug ret=%d\n", ret); - drm_client_register(&helper->client); return; Patches currently in stable-queue which might be from tzimmermann@suse.de are queue-6.4/drm-fbdev-dma-fix-documented-default-preferred_bpp-v.patch queue-6.4/drm-client-send-hotplug-event-after-registering-a-client.patch 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 BC1F5EB64DA for ; Thu, 20 Jul 2023 18:11:06 +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:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:From:Cc:To :Subject:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=HEeuXNQ+kiOvaknhZKH04azuxwGzcmjErWTKqhxg8lE=; b=1X+dIuZ06003Ei vkDTM43y2ttE4aH8p95BouNRPHHEBL9PksqVwehqirGZCs5zowGm0wPeddO9fc+ZBvfEKT0xMI09h /YCBI1bdYiHgI96O/wmWRcTAnuYWdhZUZo3nDgjIospoyHIRYS2AsfReuJNuZpPm9dHN7puopYQSP 8DaM9J4cVf5DIU/45dGs9Zs0wcgax6Bw+lfmppJg9zA1w32tWSoVj/tw7KbJfMVrQ1gi5M42TcMHV +DOMCXSo1ayJUeBhFdBXtA3wTshYWY3J2p/3rmgTQ6oCfrpbaP0JV5DmEBwTlj+Xm+o3zVgJ2PA56 Tl9g0M0w9YOJsFzrFu7w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qMY6w-00Bs8V-0T; Thu, 20 Jul 2023 18:10:46 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qMY6s-00Bs7g-39 for linux-arm-kernel@lists.infradead.org; Thu, 20 Jul 2023 18:10:45 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 4314B61BBE; Thu, 20 Jul 2023 18:10:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 185A3C433C7; Thu, 20 Jul 2023 18:10:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1689876641; bh=y050oIX6wBu+WFNH5CBqXwyBAASCpg0hTN9b/opyVco=; h=Subject:To:Cc:From:Date:From; b=oW/2VAFK2E8k/1Bdjmxz/y+36JbIuM/Y5M/fUwSjbAyAKWlEtiJSPLwe7L3wZvvOo DPYzN/YRaWpGCT7bagxvyRvaE+fQkc79O9atDcpDI4tUX5TNCXyOy52Jxq65HHa4DR u0jTzNKZYnAqrx1750wKKfwAxIZFuaQh4nWK2Lv0= Subject: Patch "drm/client: Send hotplug event after registering a client" has been added to the 6.4-stable tree To: MoritzDuge@kolahilft.de,Xinhui.Pan@amd.com,airlied@gmail.com,alexander.deucher@amd.com,amd-gfx@lists.freedesktop.org,christian.koenig@amd.com,daniel.vetter@ffwll.ch,dmitry.baryshkov@linaro.org,dri-devel@lists.freedesktop.org,freedreno@lists.freedesktop.org,gregkh@linuxfoundation.org,inki.dae@samsung.com,javierm@redhat.com,krah.tm@gmail.com,krzysztof.kozlowski@linaro.org,kyungmin.park@samsung.com,linux-arm-kernel@lists.infradead.org,linux@armlinux.org.uk,maarten.lankhorst@linux.intel.com,mario.limonciello@amd.com,mperttunen@nvidia.com,mripard@kernel.org,noralf@tronnes.org,patrik.r.jakobsson@gmail.com,pschyska@gmail.com,quic_abhinavk@quicinc.com,robdclark@gmail.com,sw0312.kim@samsung.com,thierry.reding@gmail.com,tomi.valkeinen@ideasonboard.com,tzimmermann@suse.de Cc: From: Date: Thu, 20 Jul 2023 20:10:24 +0200 Message-ID: <2023072024-sister-reviving-ee5a@gregkh> MIME-Version: 1.0 X-stable: commit X-Patchwork-Hint: ignore X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230720_111043_106388_D6646887 X-CRM114-Status: GOOD ( 29.06 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org ClRoaXMgaXMgYSBub3RlIHRvIGxldCB5b3Uga25vdyB0aGF0IEkndmUganVzdCBhZGRlZCB0aGUg cGF0Y2ggdGl0bGVkCgogICAgZHJtL2NsaWVudDogU2VuZCBob3RwbHVnIGV2ZW50IGFmdGVyIHJl Z2lzdGVyaW5nIGEgY2xpZW50Cgp0byB0aGUgNi40LXN0YWJsZSB0cmVlIHdoaWNoIGNhbiBiZSBm b3VuZCBhdDoKICAgIGh0dHA6Ly93d3cua2VybmVsLm9yZy9naXQvP3A9bGludXgva2VybmVsL2dp dC9zdGFibGUvc3RhYmxlLXF1ZXVlLmdpdDthPXN1bW1hcnkKClRoZSBmaWxlbmFtZSBvZiB0aGUg cGF0Y2ggaXM6CiAgICAgZHJtLWNsaWVudC1zZW5kLWhvdHBsdWctZXZlbnQtYWZ0ZXItcmVnaXN0 ZXJpbmctYS1jbGllbnQucGF0Y2gKYW5kIGl0IGNhbiBiZSBmb3VuZCBpbiB0aGUgcXVldWUtNi40 IHN1YmRpcmVjdG9yeS4KCklmIHlvdSwgb3IgYW55b25lIGVsc2UsIGZlZWxzIGl0IHNob3VsZCBu b3QgYmUgYWRkZWQgdG8gdGhlIHN0YWJsZSB0cmVlLApwbGVhc2UgbGV0IDxzdGFibGVAdmdlci5r ZXJuZWwub3JnPiBrbm93IGFib3V0IGl0LgoKCkZyb20gMjc2NTViOWJiOWYwZDljMzJiOGRlOGJl YzY0OWI2NzY4OThjNTJkNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogVGhvbWFzIFpp bW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+CkRhdGU6IE1vbiwgMTAgSnVsIDIwMjMgMTE6 MTA6MTcgKzAyMDAKU3ViamVjdDogZHJtL2NsaWVudDogU2VuZCBob3RwbHVnIGV2ZW50IGFmdGVy IHJlZ2lzdGVyaW5nIGEgY2xpZW50Ck1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4 dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpG cm9tOiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KCmNvbW1pdCAyNzY1 NWI5YmI5ZjBkOWMzMmI4ZGU4YmVjNjQ5YjY3Njg5OGM1MmQ1IHVwc3RyZWFtLgoKR2VuZXJhdGUg YSBob3RwbHVnIGV2ZW50IGFmdGVyIHJlZ2lzdGVyaW5nIGEgY2xpZW50IHRvIGFsbG93IHRoZQpj bGllbnQgdG8gY29uZmlndXJlIGl0cyBkaXNwbGF5LiBSZW1vdmUgdGhlIGhvdHBsdWcgY2FsbHMg ZnJvbSB0aGUKZXhpc3RpbmcgY2xpZW50cyBmb3IgZmJkZXYgZW11bGF0aW9uLiBUaGlzIGNoYW5n ZSBmaXhlcyBhIGNvbmN1cnJlbmN5CmJ1ZyBiZXR3ZWVuIHJlZ2lzdGVyaW5nIGEgY2xpZW50IGFu ZCByZWNlaXZpbmcgZXZlbnRzIGZyb20gdGhlIERSTQpjb3JlLiBUaGUgYnVnIGlzIHByZXNlbnQg aW4gdGhlIGZiZGV2IGVtdWxhdGlvbiBvZiBhbGwgZHJpdmVycy4KClRoZSBmYmRldiBlbXVsYXRp b24gY3VycmVudGx5IGdlbmVyYXRlcyBhIGhvdHBsdWcgZXZlbnQgYmVmb3JlCnJlZ2lzdGVyaW5n IHRoZSBjbGllbnQgdG8gdGhlIGRldmljZS4gRm9yIGVhY2ggbmV3IG91dHB1dCwgdGhlIERSTQpj b3JlIHNlbmRzIGFuIGFkZGl0aW9uYWwgaG90cGx1ZyBldmVudCB0byBlYWNoIHJlZ2lzdGVyZWQg Y2xpZW50LgoKSWYgdGhlIERSTSBjb3JlIGRldGVjdHMgZmlyc3Qgb3V0cHV0IGJldHdlZW4gc2Vu ZGluZyB0aGUgYXJ0aWZpY2lhbApob3RwbHVnIGFuZCByZWdpc3RlcmluZyB0aGUgZGV2aWNlLCB0 aGUgb3V0cHV0J3MgaG90cGx1ZyBldmVudCBnZXRzCmxvc3QuIElmIHRoaXMgaXMgdGhlIGZpcnN0 IG91dHB1dCwgdGhlIGZiZGV2IGNvbnNvbGUgZGlzcGxheSByZW1haW5zCmRhcmsuIFRoaXMgaGFz IGJlZW4gb2JzZXJ2ZWQgd2l0aCBhbWRncHUgYW5kIGZiZGV2LWdlbmVyaWMuCgpGaXggdGhpcyBi eSBhZGRpbmcgaG90cGx1ZyBnZW5lcmF0aW9uIGRpcmVjdGx5IHRvIHRoZSBjbGllbnQncwpyZWdp c3RlciBoZWxwZXIgZHJtX2NsaWVudF9yZWdpc3RlcigpLiBSZWdpc3RlcmluZyB0aGUgY2xpZW50 IGFuZApyZWNlaXZpbmcgZXZlbnRzIGFyZSBzZXJpYWxpemVkIGJ5IHN0cnVjdCBkcm1fZGV2aWNl LmNsaWVudGxpc3RfbXV0ZXguClNvIGFuIG91dHB1dCBpcyBlaXRoZXIgY29uZmlndXJlZCBieSB0 aGUgaW5pdGlhbCBob3RwbHVnIGV2ZW50LCBvcgp0aGUgY2xpZW50IGhhcyBhbHJlYWR5IGJlZW4g cmVnaXN0ZXJlZC4KClRoZSBidWcgd2FzIG9yaWdpbmFsbHkgYWRkZWQgaW4gY29tbWl0IDZlM2Yx N2VlNzNmNyAoImRybS9mYi1oZWxwZXI6CmdlbmVyaWM6IENhbGwgZHJtX2NsaWVudF9hZGQoKSBh ZnRlciBzZXR1cCBpcyBkb25lIiksIGluIHdoaWNoIGFkZGluZwphIGNsaWVudCBhbmQgcmVjZWl2 aW5nIGEgaG90cGx1ZyBldmVudCBzd2l0Y2hlZCBvcmRlci4gSXQgd2FzIGhpZGRlbiwKYXMgbW9z dCBoYXJkd2FyZSBhbmQgZHJpdmVycyBoYXZlIGF0IGxlYXN0IG9uIHN0YXRpYyBvdXRwdXQgY29u ZmlndXJlZC4KT3RoZXIgZHJpdmVycyBkaWRuJ3QgdXNlIHRoZSBpbnRlcm5hbCBEUk0gY2xpZW50 IG9yIHN0aWxsIGhhZCBzdHJ1Y3QKZHJtX21vZGVfY29uZmlnX2Z1bmNzLm91dHB1dF9wb2xsX2No YW5nZWQgc2V0LiBUaGF0IGNhbGxiYWNrIGhhbmRsZWQKaG90cGx1ZyBldmVudHMgYXMgd2VsbC4g QWZ0ZXIgbm90IHNldHRpbmcgdGhlIGNhbGxiYWNrIGluIGFtZGdwdSBpbgpjb21taXQgMGUzMTcy YmFjM2Y0ICgiZHJtL2FtZGdwdTogRG9uJ3Qgc2V0IHN0cnVjdApkcm1fZHJpdmVyLm91dHB1dF9w b2xsX2NoYW5nZWQiKSwgYW1kZ3B1IGRpZCBub3Qgc2hvdyBhIGZyYW1lYnVmZmVyCmNvbnNvbGUg aWYgb3V0cHV0IGV2ZW50cyBnb3QgbG9zdC4gVGhlIGJ1ZyBnb3QgY29weS1wYXN0ZWQgZnJvbQpm YmRldi1nZW5lcmljIGludG8gdGhlIG90aGVyIGZiZGV2IGVtdWxhdGlvbi4KClJlcG9ydGVkLWJ5 OiBNb3JpdHogRHVnZSA8TW9yaXR6RHVnZUBrb2xhaGlsZnQuZGU+CkNsb3NlczogaHR0cHM6Ly9n aXRsYWIuZnJlZWRlc2t0b3Aub3JnL2RybS9hbWQvLS9pc3N1ZXMvMjY0OQpGaXhlczogNmUzZjE3 ZWU3M2Y3ICgiZHJtL2ZiLWhlbHBlcjogZ2VuZXJpYzogQ2FsbCBkcm1fY2xpZW50X2FkZCgpIGFm dGVyIHNldHVwIGlzIGRvbmUiKQpGaXhlczogOGFiNTlkYTI2YmMwICgiZHJtL2ZiLWhlbHBlcjog TW92ZSBnZW5lcmljIGZiZGV2IGVtdWxhdGlvbiBpbnRvIHNlcGFyYXRlIHNvdXJjZSBmaWxlIikK Rml4ZXM6IGI3OWZlOWFiZDU4YiAoImRybS9mYmRldi1kbWE6IEltcGxlbWVudCBmYmRldiBlbXVs YXRpb24gZm9yIEdFTSBETUEgaGVscGVycyIpCkZpeGVzOiA2M2MzODE1NTJmNjkgKCJkcm0vYXJt YWRhOiBJbXBsZW1lbnQgZmJkZXYgZW11bGF0aW9uIGFzIGluLWtlcm5lbCBjbGllbnQiKQpGaXhl czogNDk5NTNiNzBlN2QzICgiZHJtL2V4eW5vczogSW1wbGVtZW50IGZiZGV2IGVtdWxhdGlvbiBh cyBpbi1rZXJuZWwgY2xpZW50IikKRml4ZXM6IDhmMWFhY2NiMDRiNyAoImRybS9nbWE1MDA6IElt cGxlbWVudCBjbGllbnQtYmFzZWQgZmJkZXYgZW11bGF0aW9uIikKRml4ZXM6IDk0MGI4NjljMmYy ZiAoImRybS9tc206IEltcGxlbWVudCBmYmRldiBlbXVsYXRpb24gYXMgaW4ta2VybmVsIGNsaWVu dCIpCkZpeGVzOiA5ZTY5YmNkODhlNDUgKCJkcm0vb21hcGRybTogSW1wbGVtZW50IGZiZGV2IGVt dWxhdGlvbiBhcyBpbi1rZXJuZWwgY2xpZW50IikKRml4ZXM6IGUzMTdhNjlmZTg5MSAoImRybS9y YWRlb246IEltcGxlbWVudCBjbGllbnQtYmFzZWQgZmJkZXYgZW11bGF0aW9uIikKRml4ZXM6IDcx ZWMxNmY0NWVmOCAoImRybS90ZWdyYTogSW1wbGVtZW50IGZiZGV2IGVtdWxhdGlvbiBhcyBpbi1r ZXJuZWwgY2xpZW50IikKRml4ZXM6IDBlMzE3MmJhYzNmNCAoImRybS9hbWRncHU6IERvbid0IHNl dCBzdHJ1Y3QgZHJtX2RyaXZlci5vdXRwdXRfcG9sbF9jaGFuZ2VkIikKU2lnbmVkLW9mZi1ieTog VGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+ClRlc3RlZC1ieTogTW9yaXR6 IER1Z2UgPE1vcml0ekR1Z2VAa29sYWhpbGZ0LmRlPgpUZXN0ZWQtYnk6IFRvcnN0ZW4gS3JhaCA8 a3JhaC50bUBnbWFpbC5jb20+ClRlc3RlZC1ieTogUGF1bCBTY2h5c2thIDxwc2NoeXNrYUBnbWFp bC5jb20+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgpDYzogRGF2 aWQgQWlybGllIDxhaXJsaWVkQGdtYWlsLmNvbT4KQ2M6IE5vcmFsZiBUcsO4bm5lcyA8bm9yYWxm QHRyb25uZXMub3JnPgpDYzogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxp bnV4LmludGVsLmNvbT4KQ2M6IE1heGltZSBSaXBhcmQgPG1yaXBhcmRAa2VybmVsLm9yZz4KQ2M6 IEphdmllciBNYXJ0aW5leiBDYW5pbGxhcyA8amF2aWVybUByZWRoYXQuY29tPgpDYzogUnVzc2Vs bCBLaW5nIDxsaW51eEBhcm1saW51eC5vcmcudWs+CkNjOiBJbmtpIERhZSA8aW5raS5kYWVAc2Ft c3VuZy5jb20+CkNjOiBTZXVuZy1Xb28gS2ltIDxzdzAzMTIua2ltQHNhbXN1bmcuY29tPgpDYzog S3l1bmdtaW4gUGFyayA8a3l1bmdtaW4ucGFya0BzYW1zdW5nLmNvbT4KQ2M6IEtyenlzenRvZiBL b3psb3dza2kgPGtyenlzenRvZi5rb3psb3dza2lAbGluYXJvLm9yZz4KQ2M6IFBhdHJpayBKYWtv YnNzb24gPHBhdHJpay5yLmpha29ic3NvbkBnbWFpbC5jb20+CkNjOiBSb2IgQ2xhcmsgPHJvYmRj bGFya0BnbWFpbC5jb20+CkNjOiBBYmhpbmF2IEt1bWFyIDxxdWljX2FiaGluYXZrQHF1aWNpbmMu Y29tPgpDYzogRG1pdHJ5IEJhcnlzaGtvdiA8ZG1pdHJ5LmJhcnlzaGtvdkBsaW5hcm8ub3JnPgpD YzogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQGlkZWFzb25ib2FyZC5jb20+CkNjOiBB bGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+CkNjOiAiQ2hyaXN0aWFuIEvD tm5pZyIgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KQ2M6ICJQYW4sIFhpbmh1aSIgPFhpbmh1 aS5QYW5AYW1kLmNvbT4KQ2M6IFRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BnbWFpbC5j b20+CkNjOiBNaWtrbyBQZXJ0dHVuZW4gPG1wZXJ0dHVuZW5AbnZpZGlhLmNvbT4KQ2M6IGRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5v cmcKQ2M6IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpDYzogbGludXgtc2Ft c3VuZy1zb2NAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1hcm0tbXNtQHZnZXIua2VybmVsLm9y ZwpDYzogZnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpDYzogYW1kLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKQ2M6IGxpbnV4LXRlZ3JhQHZnZXIua2VybmVsLm9yZwpDYzogZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpDYzogPHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmc+ICMg djUuMisKUmV2aWV3ZWQtYnk6IEphdmllciBNYXJ0aW5leiBDYW5pbGxhcyA8amF2aWVybUByZWRo YXQuY29tPgpSZXZpZXdlZC1ieTogRG1pdHJ5IEJhcnlzaGtvdiA8ZG1pdHJ5LmJhcnlzaGtvdkBs aW5hcm8ub3JnPiAjIG1zbQpMaW5rOiBodHRwczovL3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcv cGF0Y2gvbXNnaWQvMjAyMzA3MTAwOTEwMjkuMjc1MDMtMS10emltbWVybWFubkBzdXNlLmRlClsg RHJvcHBlZCBjaGFuZ2VzIHRvIGRyaXZlcnMvZ3B1L2RybS9hcm1hZGEvYXJtYWRhX2ZiZGV2LmMg YXMKICAxNzRjM2MzOGUzYTIgZHJtL2FybWFkYTogSW5pdGlhbGl6ZSBmYmRldiBEUk0gY2xpZW50 CiAgd2FzIGludHJvZHVjZWQgaW4gNi41LXJjMSBdClNpZ25lZC1vZmYtYnk6IE1hcmlvIExpbW9u Y2llbGxvIDxtYXJpby5saW1vbmNpZWxsb0BhbWQuY29tPgpTaWduZWQtb2ZmLWJ5OiBHcmVnIEty b2FoLUhhcnRtYW4gPGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnPgotLS0KIGRyaXZlcnMvZ3B1 L2RybS9kcm1fY2xpZW50LmMgICAgICAgICAgICAgIHwgICAyMSArKysrKysrKysrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJkZXZfZG1hLmMgICAgICAgICAgIHwgICAgNCAtLS0t CiBkcml2ZXJzL2dwdS9kcm0vZHJtX2ZiZGV2X2dlbmVyaWMuYyAgICAgICB8ICAgIDQgLS0tLQog ZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2ZiZGV2LmMgfCAgICA0IC0tLS0KIGRy aXZlcnMvZ3B1L2RybS9nbWE1MDAvZmJkZXYuYyAgICAgICAgICAgIHwgICAgNCAtLS0tCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL21zbV9mYmRldi5jICAgICAgICAgICB8ICAgIDQgLS0tLQogZHJpdmVy cy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jICAgICAgfCAgICA0IC0tLS0KIGRyaXZlcnMv Z3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiZGV2LmMgICAgIHwgICAgNCAtLS0tCiBkcml2ZXJzL2dw dS9kcm0vdGVncmEvZmJkZXYuYyAgICAgICAgICAgICB8ICAgIDQgLS0tLQogOSBmaWxlcyBjaGFu Z2VkLCAyMSBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKCi0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9kcm1fY2xpZW50LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnQuYwpAQCAt MTIyLDEzICsxMjIsMzQgQEAgRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2luaXQpOwogICogZHJt X2NsaWVudF9yZWdpc3RlcigpIGl0IGlzIG5vIGxvbmdlciBwZXJtaXNzaWJsZSB0byBjYWxsIGRy bV9jbGllbnRfcmVsZWFzZSgpCiAgKiBkaXJlY3RseSAob3V0c2lkZSB0aGUgdW5yZWdpc3RlciBj YWxsYmFjayksIGluc3RlYWQgY2xlYW51cCB3aWxsIGhhcHBlbgogICogYXV0b21hdGljYWxseSBv biBkcml2ZXIgdW5sb2FkLgorICoKKyAqIFJlZ2lzdGVyaW5nIGEgY2xpZW50IGdlbmVyYXRlcyBh IGhvdHBsdWcgZXZlbnQgdGhhdCBhbGxvd3MgdGhlIGNsaWVudAorICogdG8gc2V0IHVwIGl0cyBk aXNwbGF5IGZyb20gcHJlLWV4aXN0aW5nIG91dHB1dHMuIFRoZSBjbGllbnQgbXVzdCBoYXZlCisg KiBpbml0aWFsaXplZCBpdHMgc3RhdGUgdG8gYWJsZSB0byBoYW5kbGUgdGhlIGhvdHBsdWcgZXZl bnQgc3VjY2Vzc2Z1bGx5LgogICovCiB2b2lkIGRybV9jbGllbnRfcmVnaXN0ZXIoc3RydWN0IGRy bV9jbGllbnRfZGV2ICpjbGllbnQpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNsaWVu dC0+ZGV2OworCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZkZXYtPmNsaWVudGxpc3RfbXV0ZXgp OwogCWxpc3RfYWRkKCZjbGllbnQtPmxpc3QsICZkZXYtPmNsaWVudGxpc3QpOworCisJaWYgKGNs aWVudC0+ZnVuY3MgJiYgY2xpZW50LT5mdW5jcy0+aG90cGx1ZykgeworCQkvKgorCQkgKiBQZXJm b3JtIGFuIGluaXRpYWwgaG90cGx1ZyBldmVudCB0byBwaWNrIHVwIHRoZQorCQkgKiBkaXNwbGF5 IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjbGllbnQuIFRoaXMgc3RlcAorCQkgKiBoYXMgdG8gYmUg cGVyZm9ybWVkICphZnRlciogcmVnaXN0ZXJpbmcgdGhlIGNsaWVudAorCQkgKiBpbiB0aGUgbGlz dCBvZiBjbGllbnRzLCBvciBhIGNvbmN1cnJlbnQgaG90cGx1ZworCQkgKiBldmVudCBtaWdodCBi ZSBsb3N0OyBsZWF2aW5nIHRoZSBkaXNwbGF5IG9mZi4KKwkJICoKKwkJICogSG9sZCB0aGUgY2xp ZW50bGlzdF9tdXRleCBhcyBmb3IgYSByZWd1bGFyIGhvdHBsdWcKKwkJICogZXZlbnQuCisJCSAq LworCQlyZXQgPSBjbGllbnQtPmZ1bmNzLT5ob3RwbHVnKGNsaWVudCk7CisJCWlmIChyZXQpCisJ CQlkcm1fZGJnX2ttcyhkZXYsICJjbGllbnQgaG90cGx1ZyByZXQ9JWRcbiIsIHJldCk7CisJfQog CW11dGV4X3VubG9jaygmZGV2LT5jbGllbnRsaXN0X211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0wo ZHJtX2NsaWVudF9yZWdpc3Rlcik7Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJkZXZfZG1h LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYmRldl9kbWEuYwpAQCAtMjUzLDEwICsyNTMs NiBAQCB2b2lkIGRybV9mYmRldl9kbWFfc2V0dXAoc3RydWN0IGRybV9kZXZpCiAJCWdvdG8gZXJy X2RybV9jbGllbnRfaW5pdDsKIAl9CiAKLQlyZXQgPSBkcm1fZmJkZXZfZG1hX2NsaWVudF9ob3Rw bHVnKCZmYl9oZWxwZXItPmNsaWVudCk7Ci0JaWYgKHJldCkKLQkJZHJtX2RiZ19rbXMoZGV2LCAi Y2xpZW50IGhvdHBsdWcgcmV0PSVkXG4iLCByZXQpOwotCiAJZHJtX2NsaWVudF9yZWdpc3Rlcigm ZmJfaGVscGVyLT5jbGllbnQpOwogCiAJcmV0dXJuOwotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJt X2ZiZGV2X2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiZGV2X2dlbmVyaWMu YwpAQCAtMzQwLDEwICszNDAsNiBAQCB2b2lkIGRybV9mYmRldl9nZW5lcmljX3NldHVwKHN0cnVj dCBkcm1fCiAJCWdvdG8gZXJyX2RybV9jbGllbnRfaW5pdDsKIAl9CiAKLQlyZXQgPSBkcm1fZmJk ZXZfZ2VuZXJpY19jbGllbnRfaG90cGx1ZygmZmJfaGVscGVyLT5jbGllbnQpOwotCWlmIChyZXQp Ci0JCWRybV9kYmdfa21zKGRldiwgImNsaWVudCBob3RwbHVnIHJldD0lZFxuIiwgcmV0KTsKLQog CWRybV9jbGllbnRfcmVnaXN0ZXIoJmZiX2hlbHBlci0+Y2xpZW50KTsKIAogCXJldHVybjsKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2ZiZGV2LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2ZiZGV2LmMKQEAgLTIxNiwxMCArMjE2LDYgQEAg dm9pZCBleHlub3NfZHJtX2ZiZGV2X3NldHVwKHN0cnVjdCBkcm1fZAogCWlmIChyZXQpCiAJCWdv dG8gZXJyX2RybV9jbGllbnRfaW5pdDsKIAotCXJldCA9IGV4eW5vc19kcm1fZmJkZXZfY2xpZW50 X2hvdHBsdWcoJmZiX2hlbHBlci0+Y2xpZW50KTsKLQlpZiAocmV0KQotCQlkcm1fZGJnX2ttcyhk ZXYsICJjbGllbnQgaG90cGx1ZyByZXQ9JWRcbiIsIHJldCk7Ci0KIAlkcm1fY2xpZW50X3JlZ2lz dGVyKCZmYl9oZWxwZXItPmNsaWVudCk7CiAKIAlyZXR1cm47Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9nbWE1MDAvZmJkZXYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL2ZiZGV2LmMKQEAg LTMzMCwxMCArMzMwLDYgQEAgdm9pZCBwc2JfZmJkZXZfc2V0dXAoc3RydWN0IGRybV9wc2JfcHJp dgogCQlnb3RvIGVycl9kcm1fZmJfaGVscGVyX3VucHJlcGFyZTsKIAl9CiAKLQlyZXQgPSBwc2Jf ZmJkZXZfY2xpZW50X2hvdHBsdWcoJmZiX2hlbHBlci0+Y2xpZW50KTsKLQlpZiAocmV0KQotCQlk cm1fZGJnX2ttcyhkZXYsICJjbGllbnQgaG90cGx1ZyByZXQ9JWRcbiIsIHJldCk7Ci0KIAlkcm1f Y2xpZW50X3JlZ2lzdGVyKCZmYl9oZWxwZXItPmNsaWVudCk7CiAKIAlyZXR1cm47Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vbXNtX2ZiZGV2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZmJkZXYuYwpAQCAtMjI3LDEwICsyMjcsNiBAQCB2b2lkIG1zbV9mYmRldl9zZXR1cChzdHJ1 Y3QgZHJtX2RldmljZSAqCiAJCWdvdG8gZXJyX2RybV9mYl9oZWxwZXJfdW5wcmVwYXJlOwogCX0K IAotCXJldCA9IG1zbV9mYmRldl9jbGllbnRfaG90cGx1ZygmaGVscGVyLT5jbGllbnQpOwotCWlm IChyZXQpCi0JCWRybV9kYmdfa21zKGRldiwgImNsaWVudCBob3RwbHVnIHJldD0lZFxuIiwgcmV0 KTsKLQogCWRybV9jbGllbnRfcmVnaXN0ZXIoJmhlbHBlci0+Y2xpZW50KTsKIAogCXJldHVybjsK LS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuYwpAQCAtMzIzLDEwICszMjMsNiBAQCB2b2lkIG9t YXBfZmJkZXZfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UKIAogCUlOSVRfV09SSygmZmJkZXYtPndv cmssIHBhbl93b3JrZXIpOwogCi0JcmV0ID0gb21hcF9mYmRldl9jbGllbnRfaG90cGx1ZygmaGVs cGVyLT5jbGllbnQpOwotCWlmIChyZXQpCi0JCWRybV9kYmdfa21zKGRldiwgImNsaWVudCBob3Rw bHVnIHJldD0lZFxuIiwgcmV0KTsKLQogCWRybV9jbGllbnRfcmVnaXN0ZXIoJmhlbHBlci0+Y2xp ZW50KTsKIAogCXJldHVybjsKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmJk ZXYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYmRldi5jCkBAIC0zODYs MTAgKzM4Niw2IEBAIHZvaWQgcmFkZW9uX2ZiZGV2X3NldHVwKHN0cnVjdCByYWRlb25fZGUKIAkJ Z290byBlcnJfZHJtX2NsaWVudF9pbml0OwogCX0KIAotCXJldCA9IHJhZGVvbl9mYmRldl9jbGll bnRfaG90cGx1ZygmZmJfaGVscGVyLT5jbGllbnQpOwotCWlmIChyZXQpCi0JCWRybV9kYmdfa21z KHJkZXYtPmRkZXYsICJjbGllbnQgaG90cGx1ZyByZXQ9JWRcbiIsIHJldCk7Ci0KIAlkcm1fY2xp ZW50X3JlZ2lzdGVyKCZmYl9oZWxwZXItPmNsaWVudCk7CiAKIAlyZXR1cm47Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS90ZWdyYS9mYmRldi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9mYmRl di5jCkBAIC0yMjcsMTAgKzIyNyw2IEBAIHZvaWQgdGVncmFfZmJkZXZfc2V0dXAoc3RydWN0IGRy bV9kZXZpY2UKIAlpZiAocmV0KQogCQlnb3RvIGVycl9kcm1fY2xpZW50X2luaXQ7CiAKLQlyZXQg PSB0ZWdyYV9mYmRldl9jbGllbnRfaG90cGx1ZygmaGVscGVyLT5jbGllbnQpOwotCWlmIChyZXQp Ci0JCWRybV9kYmdfa21zKGRldiwgImNsaWVudCBob3RwbHVnIHJldD0lZFxuIiwgcmV0KTsKLQog CWRybV9jbGllbnRfcmVnaXN0ZXIoJmhlbHBlci0+Y2xpZW50KTsKIAogCXJldHVybjsKCgpQYXRj aGVzIGN1cnJlbnRseSBpbiBzdGFibGUtcXVldWUgd2hpY2ggbWlnaHQgYmUgZnJvbSB0emltbWVy bWFubkBzdXNlLmRlIGFyZQoKcXVldWUtNi40L2RybS1mYmRldi1kbWEtZml4LWRvY3VtZW50ZWQt ZGVmYXVsdC1wcmVmZXJyZWRfYnBwLXYucGF0Y2gKcXVldWUtNi40L2RybS1jbGllbnQtc2VuZC1o b3RwbHVnLWV2ZW50LWFmdGVyLXJlZ2lzdGVyaW5nLWEtY2xpZW50LnBhdGNoCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1h aWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==