From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 29/30] drm/bridge: add support for device links to bridge Date: Tue, 26 Nov 2019 15:35:34 +0100 Message-ID: <20191126143534.GW29965@phenom.ffwll.local> References: <20191126131541.47393-1-mihail.atanassov@arm.com> <20191126131541.47393-30-mihail.atanassov@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: <20191126131541.47393-30-mihail.atanassov@arm.com> Sender: linux-kernel-owner@vger.kernel.org To: Mihail Atanassov Cc: "dri-devel@lists.freedesktop.org" , nd , Maarten Lankhorst , Maxime Ripard , David Airlie , Daniel Vetter , "linux-kernel@vger.kernel.org" , Russell King List-Id: dri-devel@lists.freedesktop.org On Tue, Nov 26, 2019 at 01:16:26PM +0000, Mihail Atanassov wrote: > From: Russell King > > Bridge devices have been a potential for kernel oops as their lifetime > is independent of the DRM device that they are bound to. Hence, if a > bridge device is unbound while the parent DRM device is using them, the > parent happily continues to use the bridge device, calling the driver > and accessing its objects that have been freed. > > This can cause kernel memory corruption and kernel oops. > > To control this, use device links to ensure that the parent DRM device > is unbound when the bridge device is unbound, and when the bridge > device is re-bound, automatically rebind the parent DRM device. > > Signed-off-by: Russell King > Tested-by: Mihail Atanassov > [reworked to use drm_bridge_init() for setting bridge->device] > Signed-off-by: Mihail Atanassov So I thought the big plan was to put the device_link setup into drm_bridge_attach, so that it's done for everyone. And we could then slowly go through the existing drivers that use the component framework to get this handled correctly. So my questions: - is there a problem if we add the device_link for everyone? - is there an issue if we only add it at drm_bridge_attach time? I kinda assumed that it's not needed before that (EPROBE_DEFER should handle load dependencies as before), but it could be that some drivers ask for a bridge and then check more stuff and then drop the bridge without calling drm_bridge_attach. We probably don't have a case like this yet, but better robust than sorry. Anyway, I scrolled through the bridge patches, looked all good, huge thanks for tackling this! Once we have some agreement on the bigger questions here I'll try to go through them and review. Cheers, Daniel > --- > drivers/gpu/drm/drm_bridge.c | 49 ++++++++++++++++++++++++++---------- > include/drm/drm_bridge.h | 4 +++ > 2 files changed, 40 insertions(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c > index cbe680aa6eac..e1f8db84651a 100644 > --- a/drivers/gpu/drm/drm_bridge.c > +++ b/drivers/gpu/drm/drm_bridge.c > @@ -26,6 +26,7 @@ > #include > > #include > +#include > #include > > #include "drm_crtc_internal.h" > @@ -109,6 +110,7 @@ void drm_bridge_init(struct drm_bridge *bridge, struct device *dev, > bridge->encoder = NULL; > bridge->next = NULL; > > + bridge->device = dev; > #ifdef CONFIG_OF > bridge->of_node = dev->of_node; > #endif > @@ -492,6 +494,32 @@ void drm_atomic_bridge_enable(struct drm_bridge *bridge, > EXPORT_SYMBOL(drm_atomic_bridge_enable); > > #ifdef CONFIG_OF > +static struct drm_bridge *drm_bridge_find(struct drm_device *dev, > + struct device_node *np, bool link) > +{ > + struct drm_bridge *bridge, *found = NULL; > + struct device_link *dl; > + > + mutex_lock(&bridge_lock); > + > + list_for_each_entry(bridge, &bridge_list, list) > + if (bridge->of_node == np) { > + found = bridge; > + break; > + } > + > + if (found && link) { > + dl = device_link_add(dev->dev, found->device, > + DL_FLAG_AUTOPROBE_CONSUMER); > + if (!dl) > + found = NULL; > + } > + > + mutex_unlock(&bridge_lock); > + > + return found; > +} > + > /** > * of_drm_find_bridge - find the bridge corresponding to the device node in > * the global bridge list > @@ -503,21 +531,16 @@ EXPORT_SYMBOL(drm_atomic_bridge_enable); > */ > struct drm_bridge *of_drm_find_bridge(struct device_node *np) > { > - struct drm_bridge *bridge; > - > - mutex_lock(&bridge_lock); > - > - list_for_each_entry(bridge, &bridge_list, list) { > - if (bridge->of_node == np) { > - mutex_unlock(&bridge_lock); > - return bridge; > - } > - } > - > - mutex_unlock(&bridge_lock); > - return NULL; > + return drm_bridge_find(NULL, np, false); > } > EXPORT_SYMBOL(of_drm_find_bridge); > + > +struct drm_bridge *of_drm_find_bridge_devlink(struct drm_device *dev, > + struct device_node *np) > +{ > + return drm_bridge_find(dev, np, true); > +} > +EXPORT_SYMBOL(of_drm_find_bridge_devlink); > #endif > > MODULE_AUTHOR("Ajay Kumar "); > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > index d6d9d5301551..68b27c69cc3d 100644 > --- a/include/drm/drm_bridge.h > +++ b/include/drm/drm_bridge.h > @@ -382,6 +382,8 @@ struct drm_bridge { > struct drm_encoder *encoder; > /** @next: the next bridge in the encoder chain */ > struct drm_bridge *next; > + /** @device: Linux driver model device */ > + struct device *device; > #ifdef CONFIG_OF > /** @of_node: device node pointer to the bridge */ > struct device_node *of_node; > @@ -407,6 +409,8 @@ void drm_bridge_init(struct drm_bridge *bridge, struct device *dev, > const struct drm_bridge_timings *timings, > void *driver_private); > struct drm_bridge *of_drm_find_bridge(struct device_node *np); > +struct drm_bridge *of_drm_find_bridge_devlink(struct drm_device *dev, > + struct device_node *np); > int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, > struct drm_bridge *previous); > > -- > 2.23.0 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch 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 X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9A380C432C0 for ; Tue, 26 Nov 2019 14:35:40 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 76EFE20722 for ; Tue, 26 Nov 2019 14:35:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 76EFE20722 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D4EF16E3F2; Tue, 26 Nov 2019 14:35:39 +0000 (UTC) Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id 50C016E3F2 for ; Tue, 26 Nov 2019 14:35:38 +0000 (UTC) Received: by mail-wm1-x344.google.com with SMTP id f129so3592402wmf.2 for ; Tue, 26 Nov 2019 06:35:38 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :in-reply-to:user-agent; bh=tTh3/Ue9+Bd/S+4Qjg7rRHgrBCqsmuaM2m1qVNN+rXM=; b=rnK+sjFKi/kPJz6UbikFNZzIlIfja6HvVQsbYjp6HNy8ihf0WDQkIdkYXWLtU7Uuaq qa2JYyC5UtdPQeiMrh8KZCP2SPcabnJbCMnIDDL68nFaZ0BgMBR722vw8eR6v0wY9VWV dansNvJ//9nBpvykOoeIs07weO0qTbx0dl8DE18oUVWcMhxXii0vFhYGhNU8PievPPzF pC45Dm+Fd/D0MYgq+Y9Og5jAGciGYgrlSjjNYy0eiYFY2NybBsGe+dXuECpZ5NexWRxH thg1ou4iHS7WvpnF2Dg4L9EeSSpOlPi2U+gz6gS/yzse/Q2XNooOjicrDYH1xFwaBE4x WGrQ== X-Gm-Message-State: APjAAAVO04uIZDe9MLyMIYbSiep31nyniuVeOvUF4FkG1Hcz7FwNM35V P4faWgpAg3dbyDccOgJBa6B3Lxb80+M= X-Google-Smtp-Source: APXvYqxwwHxSf01sW4NjpO4UPUnU6bELFb8Pk+GebU1lihLOImY6wYeT9Gd2cGTOwPwKXjXKcBic7w== X-Received: by 2002:a7b:ca57:: with SMTP id m23mr4533786wml.65.1574778936879; Tue, 26 Nov 2019 06:35:36 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-96.fiber7.init7.net. [212.51.149.96]) by smtp.gmail.com with ESMTPSA id 60sm14559560wrn.86.2019.11.26.06.35.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2019 06:35:36 -0800 (PST) Date: Tue, 26 Nov 2019 15:35:34 +0100 From: Daniel Vetter To: Mihail Atanassov Subject: Re: [PATCH 29/30] drm/bridge: add support for device links to bridge Message-ID: <20191126143534.GW29965@phenom.ffwll.local> Mail-Followup-To: Mihail Atanassov , "dri-devel@lists.freedesktop.org" , nd , Maarten Lankhorst , Maxime Ripard , David Airlie , "linux-kernel@vger.kernel.org" , Russell King References: <20191126131541.47393-1-mihail.atanassov@arm.com> <20191126131541.47393-30-mihail.atanassov@arm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191126131541.47393-30-mihail.atanassov@arm.com> X-Operating-System: Linux phenom 5.3.0-2-amd64 User-Agent: Mutt/1.12.2 (2019-09-21) X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-disposition:in-reply-to:user-agent; bh=tTh3/Ue9+Bd/S+4Qjg7rRHgrBCqsmuaM2m1qVNN+rXM=; b=K8BKL5ng6W/sTJDdwwzFnVvRSSJdz0Ersv9Drs+4vB6hl6Q9O7PHxOsVzqZliHSz3F BfLABQLoNxG3behx7JOFco8vei5l8QDEWBz6+E7V7WmAvCGhMIulGybkLJkGWAVQfw4S iIefzzOJgunuhyGY+YUeexOj6m4KwlbGSk79s= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: David Airlie , "linux-kernel@vger.kernel.org" , Russell King , "dri-devel@lists.freedesktop.org" , nd Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191126143534.rUFa9g17_94ML1MYqgPKL9gzd4xWNPV5EMgiOsQUVYw@z> T24gVHVlLCBOb3YgMjYsIDIwMTkgYXQgMDE6MTY6MjZQTSArMDAwMCwgTWloYWlsIEF0YW5hc3Nv diB3cm90ZToKPiBGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVr Pgo+IAo+IEJyaWRnZSBkZXZpY2VzIGhhdmUgYmVlbiBhIHBvdGVudGlhbCBmb3Iga2VybmVsIG9v cHMgYXMgdGhlaXIgbGlmZXRpbWUKPiBpcyBpbmRlcGVuZGVudCBvZiB0aGUgRFJNIGRldmljZSB0 aGF0IHRoZXkgYXJlIGJvdW5kIHRvLiAgSGVuY2UsIGlmIGEKPiBicmlkZ2UgZGV2aWNlIGlzIHVu Ym91bmQgd2hpbGUgdGhlIHBhcmVudCBEUk0gZGV2aWNlIGlzIHVzaW5nIHRoZW0sIHRoZQo+IHBh cmVudCBoYXBwaWx5IGNvbnRpbnVlcyB0byB1c2UgdGhlIGJyaWRnZSBkZXZpY2UsIGNhbGxpbmcg dGhlIGRyaXZlcgo+IGFuZCBhY2Nlc3NpbmcgaXRzIG9iamVjdHMgdGhhdCBoYXZlIGJlZW4gZnJl ZWQuCj4gCj4gVGhpcyBjYW4gY2F1c2Uga2VybmVsIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBrZXJu ZWwgb29wcy4KPiAKPiBUbyBjb250cm9sIHRoaXMsIHVzZSBkZXZpY2UgbGlua3MgdG8gZW5zdXJl IHRoYXQgdGhlIHBhcmVudCBEUk0gZGV2aWNlCj4gaXMgdW5ib3VuZCB3aGVuIHRoZSBicmlkZ2Ug ZGV2aWNlIGlzIHVuYm91bmQsIGFuZCB3aGVuIHRoZSBicmlkZ2UKPiBkZXZpY2UgaXMgcmUtYm91 bmQsIGF1dG9tYXRpY2FsbHkgcmViaW5kIHRoZSBwYXJlbnQgRFJNIGRldmljZS4KPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgo+IFRl c3RlZC1ieTogTWloYWlsIEF0YW5hc3NvdiA8bWloYWlsLmF0YW5hc3NvdkBhcm0uY29tPgo+IFty ZXdvcmtlZCB0byB1c2UgZHJtX2JyaWRnZV9pbml0KCkgZm9yIHNldHRpbmcgYnJpZGdlLT5kZXZp Y2VdCj4gU2lnbmVkLW9mZi1ieTogTWloYWlsIEF0YW5hc3NvdiA8bWloYWlsLmF0YW5hc3NvdkBh cm0uY29tPgoKU28gSSB0aG91Z2h0IHRoZSBiaWcgcGxhbiB3YXMgdG8gcHV0IHRoZSBkZXZpY2Vf bGluayBzZXR1cCBpbnRvCmRybV9icmlkZ2VfYXR0YWNoLCBzbyB0aGF0IGl0J3MgZG9uZSBmb3Ig ZXZlcnlvbmUuIEFuZCB3ZSBjb3VsZCB0aGVuCnNsb3dseSBnbyB0aHJvdWdoIHRoZSBleGlzdGlu ZyBkcml2ZXJzIHRoYXQgdXNlIHRoZSBjb21wb25lbnQgZnJhbWV3b3JrIHRvCmdldCB0aGlzIGhh bmRsZWQgY29ycmVjdGx5LgoKU28gbXkgcXVlc3Rpb25zOgotIGlzIHRoZXJlIGEgcHJvYmxlbSBp ZiB3ZSBhZGQgdGhlIGRldmljZV9saW5rIGZvciBldmVyeW9uZT8KLSBpcyB0aGVyZSBhbiBpc3N1 ZSBpZiB3ZSBvbmx5IGFkZCBpdCBhdCBkcm1fYnJpZGdlX2F0dGFjaCB0aW1lPyBJIGtpbmRhCiAg YXNzdW1lZCB0aGF0IGl0J3Mgbm90IG5lZWRlZCBiZWZvcmUgdGhhdCAoRVBST0JFX0RFRkVSIHNo b3VsZCBoYW5kbGUKICBsb2FkIGRlcGVuZGVuY2llcyBhcyBiZWZvcmUpLCBidXQgaXQgY291bGQg YmUgdGhhdCBzb21lIGRyaXZlcnMgYXNrIGZvcgogIGEgYnJpZGdlIGFuZCB0aGVuIGNoZWNrIG1v cmUgc3R1ZmYgYW5kIHRoZW4gZHJvcCB0aGUgYnJpZGdlIHdpdGhvdXQKICBjYWxsaW5nIGRybV9i cmlkZ2VfYXR0YWNoLiBXZSBwcm9iYWJseSBkb24ndCBoYXZlIGEgY2FzZSBsaWtlIHRoaXMgeWV0 LAogIGJ1dCBiZXR0ZXIgcm9idXN0IHRoYW4gc29ycnkuCgpBbnl3YXksIEkgc2Nyb2xsZWQgdGhy b3VnaCB0aGUgYnJpZGdlIHBhdGNoZXMsIGxvb2tlZCBhbGwgZ29vZCwgaHVnZQp0aGFua3MgZm9y IHRhY2tsaW5nIHRoaXMhIE9uY2Ugd2UgaGF2ZSBzb21lIGFncmVlbWVudCBvbiB0aGUgYmlnZ2Vy CnF1ZXN0aW9ucyBoZXJlIEknbGwgdHJ5IHRvIGdvIHRocm91Z2ggdGhlbSBhbmQgcmV2aWV3LgoK Q2hlZXJzLCBEYW5pZWwKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYyB8IDQ5 ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQo+ICBpbmNsdWRlL2RybS9kcm1f YnJpZGdlLmggICAgIHwgIDQgKysrCj4gIDIgZmlsZXMgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygr KSwgMTMgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f YnJpZGdlLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jCj4gaW5kZXggY2JlNjgwYWE2 ZWFjLi5lMWY4ZGI4NDY1MWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9icmlk Z2UuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPiBAQCAtMjYsNiArMjYs NyBAQAo+ICAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPiAgCj4gICNpbmNsdWRlIDxkcm0vZHJt X2JyaWRnZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KPiAgI2luY2x1ZGUgPGRy bS9kcm1fZW5jb2Rlci5oPgo+ICAKPiAgI2luY2x1ZGUgImRybV9jcnRjX2ludGVybmFsLmgiCj4g QEAgLTEwOSw2ICsxMTAsNyBAQCB2b2lkIGRybV9icmlkZ2VfaW5pdChzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gIAlicmlkZ2UtPmVuY29kZXIgPSBOVUxM Owo+ICAJYnJpZGdlLT5uZXh0ID0gTlVMTDsKPiAgCj4gKwlicmlkZ2UtPmRldmljZSA9IGRldjsK PiAgI2lmZGVmIENPTkZJR19PRgo+ICAJYnJpZGdlLT5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOwo+ ICAjZW5kaWYKPiBAQCAtNDkyLDYgKzQ5NCwzMiBAQCB2b2lkIGRybV9hdG9taWNfYnJpZGdlX2Vu YWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICBFWFBPUlRfU1lNQk9MKGRybV9hdG9t aWNfYnJpZGdlX2VuYWJsZSk7Cj4gIAo+ICAjaWZkZWYgQ09ORklHX09GCj4gK3N0YXRpYyBzdHJ1 Y3QgZHJtX2JyaWRnZSAqZHJtX2JyaWRnZV9maW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4g KwkJCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBib29sIGxpbmspCj4gK3sKPiArCXN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UsICpmb3VuZCA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZGV2aWNlX2xp bmsgKmRsOwo+ICsKPiArCW11dGV4X2xvY2soJmJyaWRnZV9sb2NrKTsKPiArCj4gKwlsaXN0X2Zv cl9lYWNoX2VudHJ5KGJyaWRnZSwgJmJyaWRnZV9saXN0LCBsaXN0KQo+ICsJCWlmIChicmlkZ2Ut Pm9mX25vZGUgPT0gbnApIHsKPiArCQkJZm91bmQgPSBicmlkZ2U7Cj4gKwkJCWJyZWFrOwo+ICsJ CX0KPiArCj4gKwlpZiAoZm91bmQgJiYgbGluaykgewo+ICsJCWRsID0gZGV2aWNlX2xpbmtfYWRk KGRldi0+ZGV2LCBmb3VuZC0+ZGV2aWNlLAo+ICsJCQkJICAgICBETF9GTEFHX0FVVE9QUk9CRV9D T05TVU1FUik7Cj4gKwkJaWYgKCFkbCkKPiArCQkJZm91bmQgPSBOVUxMOwo+ICsJfQo+ICsKPiAr CW11dGV4X3VubG9jaygmYnJpZGdlX2xvY2spOwo+ICsKPiArCXJldHVybiBmb3VuZDsKPiArfQo+ ICsKPiAgLyoqCj4gICAqIG9mX2RybV9maW5kX2JyaWRnZSAtIGZpbmQgdGhlIGJyaWRnZSBjb3Jy ZXNwb25kaW5nIHRvIHRoZSBkZXZpY2Ugbm9kZSBpbgo+ICAgKgkJCXRoZSBnbG9iYWwgYnJpZGdl IGxpc3QKPiBAQCAtNTAzLDIxICs1MzEsMTYgQEAgRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2Jy aWRnZV9lbmFibGUpOwo+ICAgKi8KPiAgc3RydWN0IGRybV9icmlkZ2UgKm9mX2RybV9maW5kX2Jy aWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlOwo+IC0KPiAtCW11dGV4X2xvY2soJmJyaWRnZV9sb2NrKTsKPiAtCj4gLQlsaXN0X2Zv cl9lYWNoX2VudHJ5KGJyaWRnZSwgJmJyaWRnZV9saXN0LCBsaXN0KSB7Cj4gLQkJaWYgKGJyaWRn ZS0+b2Zfbm9kZSA9PSBucCkgewo+IC0JCQltdXRleF91bmxvY2soJmJyaWRnZV9sb2NrKTsKPiAt CQkJcmV0dXJuIGJyaWRnZTsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JbXV0ZXhfdW5sb2NrKCZicmlk Z2VfbG9jayk7Cj4gLQlyZXR1cm4gTlVMTDsKPiArCXJldHVybiBkcm1fYnJpZGdlX2ZpbmQoTlVM TCwgbnAsIGZhbHNlKTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKG9mX2RybV9maW5kX2JyaWRnZSk7 Cj4gKwo+ICtzdHJ1Y3QgZHJtX2JyaWRnZSAqb2ZfZHJtX2ZpbmRfYnJpZGdlX2Rldmxpbmsoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w KQo+ICt7Cj4gKwlyZXR1cm4gZHJtX2JyaWRnZV9maW5kKGRldiwgbnAsIHRydWUpOwo+ICt9Cj4g K0VYUE9SVF9TWU1CT0wob2ZfZHJtX2ZpbmRfYnJpZGdlX2RldmxpbmspOwo+ICAjZW5kaWYKPiAg Cj4gIE1PRFVMRV9BVVRIT1IoIkFqYXkgS3VtYXIgPGFqYXlrdW1hci5yc0BzYW1zdW5nLmNvbT4i KTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oIGIvaW5jbHVkZS9kcm0v ZHJtX2JyaWRnZS5oCj4gaW5kZXggZDZkOWQ1MzAxNTUxLi42OGIyN2M2OWNjM2QgMTAwNjQ0Cj4g LS0tIGEvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Jy aWRnZS5oCj4gQEAgLTM4Miw2ICszODIsOCBAQCBzdHJ1Y3QgZHJtX2JyaWRnZSB7Cj4gIAlzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4gIAkvKiogQG5leHQ6IHRoZSBuZXh0IGJyaWRnZSBp biB0aGUgZW5jb2RlciBjaGFpbiAqLwo+ICAJc3RydWN0IGRybV9icmlkZ2UgKm5leHQ7Cj4gKwkv KiogQGRldmljZTogTGludXggZHJpdmVyIG1vZGVsIGRldmljZSAqLwo+ICsJc3RydWN0IGRldmlj ZSAqZGV2aWNlOwo+ICAjaWZkZWYgQ09ORklHX09GCj4gIAkvKiogQG9mX25vZGU6IGRldmljZSBu b2RlIHBvaW50ZXIgdG8gdGhlIGJyaWRnZSAqLwo+ICAJc3RydWN0IGRldmljZV9ub2RlICpvZl9u b2RlOwo+IEBAIC00MDcsNiArNDA5LDggQEAgdm9pZCBkcm1fYnJpZGdlX2luaXQoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSwgc3RydWN0IGRldmljZSAqZGV2LAo+ICAJCSAgICAgY29uc3Qgc3Ry dWN0IGRybV9icmlkZ2VfdGltaW5ncyAqdGltaW5ncywKPiAgCQkgICAgIHZvaWQgKmRyaXZlcl9w cml2YXRlKTsKPiAgc3RydWN0IGRybV9icmlkZ2UgKm9mX2RybV9maW5kX2JyaWRnZShzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5wKTsKPiArc3RydWN0IGRybV9icmlkZ2UgKm9mX2RybV9maW5kX2JyaWRn ZV9kZXZsaW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkJICAgICAgc3RydWN0IGRl dmljZV9ub2RlICpucCk7Cj4gIGludCBkcm1fYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIsIHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gIAkJICAgICAgc3RydWN0 IGRybV9icmlkZ2UgKnByZXZpb3VzKTsKPiAgCj4gLS0gCj4gMi4yMy4wCj4gCgotLSAKRGFuaWVs IFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cu ZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs