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=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 AA988C63793 for ; Thu, 22 Jul 2021 13:29:49 +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 65C2460FED for ; Thu, 22 Jul 2021 13:29:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 65C2460FED Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=jlekstrand.net 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 B948D6ED08; Thu, 22 Jul 2021 13:29:48 +0000 (UTC) Received: from mail-yb1-xb34.google.com (mail-yb1-xb34.google.com [IPv6:2607:f8b0:4864:20::b34]) by gabe.freedesktop.org (Postfix) with ESMTPS id A77EC6ECCE for ; Thu, 22 Jul 2021 13:29:47 +0000 (UTC) Received: by mail-yb1-xb34.google.com with SMTP id v189so4478107ybg.3 for ; Thu, 22 Jul 2021 06:29:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jlekstrand-net.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=wPmGoJD3OKEF5f5PV+c0Yp9ObsD+ox5Eu96+RMsI5Ms=; b=06+K04zoBlg9iMnGBqxJdModZpC3WY75IHTQG2Fvabvkis5gPwhhklLP5Cwi62+GHK lLZ2qI/58hyaRsz7DsoxXShoSm/48rZ7TbxB6wpmceXFcN9q49TlzKGzOouBuaUUVE0d JyRM/ZuxnWBYjHSdc2oCoLeSAo6mNxKoO7o8Q9drcoFOUknieREFXnZuYojnlr0+ixpL trRTOS5WrvjmrNdVpp5o30CBGLSrzgmrxE8TMvc/qmbWls6TckEL1v1YRcJcO1F+Hhdq QybAAtjW2cbGW5hju6lGZpuI6P3MN2okPZGs/gH1LrIWzVhP88Vyw5+zs5ZxPyJ0ee5/ S9cQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=wPmGoJD3OKEF5f5PV+c0Yp9ObsD+ox5Eu96+RMsI5Ms=; b=j/BZM0m6h8c0R5nwjeC5gkk3YR+80JJoOOIMNwsOgPsRiNpQcsDf0mktqNJz+EQaf6 EwTjG21+dHGE9w0WKUFfLZSRObNf7qLvfFeIfZJZjmO1FDe6r3IlNo25xrutkZ44PuRJ UO8d80FY2dJDiPy2QOQbsMQnhZWWAaurgFlsQW77FBbwyNdZ8jUqkUGHji8BXx9Qhr8c +RaouLLdWIG276jhUxRkp9Yy9iS4YQKf5WRcnuP13c0FR6R4OjHTugftj2RkH97jzZ1b BJ/RrzBSAoI702riT6UWPDWy0Tw34Nw9xs91YcYpMFplzPtlGk3RpQBVIPmdBefqgkDb t+1w== X-Gm-Message-State: AOAM533hkD594tqCHSf040WkUnVgyfW52k2d7PINQgMd1O7A0FEIkaGM /EGUTXitwG/nJ87ncPzaKFrwB23/sTNQ1wcCTgNpoA== X-Google-Smtp-Source: ABdhPJyXsyg4e4OWdvAz8Y27/RGs0CfGup64r/qzMSrBkagap8fr/D2LufYQiwmq6cpv1Poi0vKVeBOZ/NX336a0Eug= X-Received: by 2002:a25:2f89:: with SMTP id v131mr53394597ybv.469.1626960586717; Thu, 22 Jul 2021 06:29:46 -0700 (PDT) MIME-Version: 1.0 References: <20210715101536.2606307-1-matthew.auld@intel.com> <20210715101536.2606307-4-matthew.auld@intel.com> In-Reply-To: From: Jason Ekstrand Date: Thu, 22 Jul 2021 08:29:35 -0500 Message-ID: Subject: Re: [Intel-gfx] [PATCH 3/4] drm/i915/userptr: Probe existence of backing struct pages upon creation To: Matthew Auld Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?Q?Thomas_Hellstr=C3=B6m?= , Daniel Vetter , Intel GFX , Maling list - DRI developers , Chris Wilson , Kenneth Graunke , Matthew Auld Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Thu, Jul 22, 2021 at 3:44 AM Matthew Auld wrote: > > On Wed, 21 Jul 2021 at 21:28, Jason Ekstrand wrote= : > > > > On Thu, Jul 15, 2021 at 5:16 AM Matthew Auld w= rote: > > > > > > From: Chris Wilson > > > > > > Jason Ekstrand requested a more efficient method than userptr+set-dom= ain > > > to determine if the userptr object was backed by a complete set of pa= ges > > > upon creation. To be more efficient than simply populating the userpt= r > > > using get_user_pages() (as done by the call to set-domain or execbuf)= , > > > we can walk the tree of vm_area_struct and check for gaps or vma not > > > backed by struct page (VM_PFNMAP). The question is how to handle > > > VM_MIXEDMAP which may be either struct page or pfn backed... > > > > > > With discrete are going to drop support for set_domain(), so offering= a > > > way to probe the pages, without having to resort to dummy batches has > > > been requested. > > > > > > v2: > > > - add new query param for the PROPBE flag, so userspace can easily > > > check if the kernel supports it(Jason). > > > - use mmap_read_{lock, unlock}. > > > - add some kernel-doc. > > > > > > Testcase: igt/gem_userptr_blits/probe > > > Signed-off-by: Chris Wilson > > > Signed-off-by: Matthew Auld > > > Cc: Thomas Hellstr=C3=B6m > > > Cc: Maarten Lankhorst > > > Cc: Tvrtko Ursulin > > > Cc: Jordan Justen > > > Cc: Kenneth Graunke > > > Cc: Jason Ekstrand > > > Cc: Daniel Vetter > > > Cc: Ramalingam C > > > --- > > > drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 40 +++++++++++++++++++= +- > > > drivers/gpu/drm/i915/i915_getparam.c | 3 ++ > > > include/uapi/drm/i915_drm.h | 18 ++++++++++ > > > 3 files changed, 60 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gp= u/drm/i915/gem/i915_gem_userptr.c > > > index 56edfeff8c02..fd6880328596 100644 > > > --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c > > > +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c > > > @@ -422,6 +422,33 @@ static const struct drm_i915_gem_object_ops i915= _gem_userptr_ops =3D { > > > > > > #endif > > > > > > +static int > > > +probe_range(struct mm_struct *mm, unsigned long addr, unsigned long = len) > > > +{ > > > + const unsigned long end =3D addr + len; > > > + struct vm_area_struct *vma; > > > + int ret =3D -EFAULT; > > > + > > > + mmap_read_lock(mm); > > > + for (vma =3D find_vma(mm, addr); vma; vma =3D vma->vm_next) { > > > + if (vma->vm_start > addr) > > > > Why isn't this > end? Are we somehow guaranteed that one vma covers > > the entire range? > > AFAIK we are just making sure we don't have a hole(note that we also > update addr below), for example the user might have done a partial > munmap. There could be multiple vma's if the kernel was unable to > merge them. If we reach the vm_end >=3D end, then we know we have a > "valid" range. Ok. That wasn't obvious to me but I see the addr update now. Makes sense. Might be worth a one-line comment for the next guy. Either way, Reviewed-by: Jason Ekstrand Thanks for wiring this up! --Jason > > > > > + break; > > > + > > > + if (vma->vm_flags & (VM_PFNMAP | VM_MIXEDMAP)) > > > + break; > > > + > > > + if (vma->vm_end >=3D end) { > > > + ret =3D 0; > > > + break; > > > + } > > > + > > > + addr =3D vma->vm_end; > > > + } > > > + mmap_read_unlock(mm); > > > + > > > + return ret; > > > +} > > > + > > > /* > > > * Creates a new mm object that wraps some normal memory from the pr= ocess > > > * context - user memory. > > > @@ -477,7 +504,8 @@ i915_gem_userptr_ioctl(struct drm_device *dev, > > > } > > > > > > if (args->flags & ~(I915_USERPTR_READ_ONLY | > > > - I915_USERPTR_UNSYNCHRONIZED)) > > > + I915_USERPTR_UNSYNCHRONIZED | > > > + I915_USERPTR_PROBE)) > > > return -EINVAL; > > > > > > if (i915_gem_object_size_2big(args->user_size)) > > > @@ -504,6 +532,16 @@ i915_gem_userptr_ioctl(struct drm_device *dev, > > > return -ENODEV; > > > } > > > > > > + if (args->flags & I915_USERPTR_PROBE) { > > > + /* > > > + * Check that the range pointed to represents real st= ruct > > > + * pages and not iomappings (at this moment in time!) > > > + */ > > > + ret =3D probe_range(current->mm, args->user_ptr, args= ->user_size); > > > + if (ret) > > > + return ret; > > > + } > > > + > > > #ifdef CONFIG_MMU_NOTIFIER > > > obj =3D i915_gem_object_alloc(); > > > if (obj =3D=3D NULL) > > > diff --git a/drivers/gpu/drm/i915/i915_getparam.c b/drivers/gpu/drm/i= 915/i915_getparam.c > > > index 24e18219eb50..d6d2e1a10d14 100644 > > > --- a/drivers/gpu/drm/i915/i915_getparam.c > > > +++ b/drivers/gpu/drm/i915/i915_getparam.c > > > @@ -163,6 +163,9 @@ int i915_getparam_ioctl(struct drm_device *dev, v= oid *data, > > > case I915_PARAM_PERF_REVISION: > > > value =3D i915_perf_ioctl_version(); > > > break; > > > + case I915_PARAM_HAS_USERPTR_PROBE: > > > + value =3D true; > > > + break; > > > default: > > > DRM_DEBUG("Unknown parameter %d\n", param->param); > > > return -EINVAL; > > > diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.= h > > > index e20eeeca7a1c..2e4112bf4d38 100644 > > > --- a/include/uapi/drm/i915_drm.h > > > +++ b/include/uapi/drm/i915_drm.h > > > @@ -674,6 +674,9 @@ typedef struct drm_i915_irq_wait { > > > */ > > > #define I915_PARAM_HAS_EXEC_TIMELINE_FENCES 55 > > > > > > +/* Query if the kernel supports the I915_USERPTR_PROBE flag. */ > > > +#define I915_PARAM_HAS_USERPTR_PROBE 56 > > > + > > > /* Must be kept compact -- no holes and well documented */ > > > > > > typedef struct drm_i915_getparam { > > > @@ -2178,12 +2181,27 @@ struct drm_i915_gem_userptr { > > > * through the GTT. If the HW can't support readonly access, = an error is > > > * returned. > > > * > > > + * I915_USERPTR_PROBE: > > > + * > > > + * Probe the provided @user_ptr range and validate that the @= user_ptr is > > > + * indeed pointing to normal memory and that the range is als= o valid. > > > + * For example if some garbage address is given to the kernel= , then this > > > + * should complain. > > > + * > > > + * Returns -EFAULT if the probe failed. > > > + * > > > + * Note that this doesn't populate the backing pages. > > > + * > > > + * The kernel supports this feature if I915_PARAM_HAS_USERPTR= _PROBE > > > + * returns a non-zero value. > > > + * > > > * I915_USERPTR_UNSYNCHRONIZED: > > > * > > > * NOT USED. Setting this flag will result in an error. > > > */ > > > __u32 flags; > > > #define I915_USERPTR_READ_ONLY 0x1 > > > +#define I915_USERPTR_PROBE 0x2 > > > #define I915_USERPTR_UNSYNCHRONIZED 0x80000000 > > > /** > > > * @handle: Returned handle for the object. > > > -- > > > 2.26.3 > > > > > _______________________________________________ > > Intel-gfx mailing list > > Intel-gfx@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx 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=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 E46B7C63797 for ; Thu, 22 Jul 2021 13:29:48 +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 8AD4B60FED for ; Thu, 22 Jul 2021 13:29:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8AD4B60FED Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=jlekstrand.net Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 427086ECCE; Thu, 22 Jul 2021 13:29:48 +0000 (UTC) Received: from mail-yb1-xb2e.google.com (mail-yb1-xb2e.google.com [IPv6:2607:f8b0:4864:20::b2e]) by gabe.freedesktop.org (Postfix) with ESMTPS id ADA446ED08 for ; Thu, 22 Jul 2021 13:29:47 +0000 (UTC) Received: by mail-yb1-xb2e.google.com with SMTP id c204so4612786ybb.4 for ; Thu, 22 Jul 2021 06:29:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jlekstrand-net.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=wPmGoJD3OKEF5f5PV+c0Yp9ObsD+ox5Eu96+RMsI5Ms=; b=06+K04zoBlg9iMnGBqxJdModZpC3WY75IHTQG2Fvabvkis5gPwhhklLP5Cwi62+GHK lLZ2qI/58hyaRsz7DsoxXShoSm/48rZ7TbxB6wpmceXFcN9q49TlzKGzOouBuaUUVE0d JyRM/ZuxnWBYjHSdc2oCoLeSAo6mNxKoO7o8Q9drcoFOUknieREFXnZuYojnlr0+ixpL trRTOS5WrvjmrNdVpp5o30CBGLSrzgmrxE8TMvc/qmbWls6TckEL1v1YRcJcO1F+Hhdq QybAAtjW2cbGW5hju6lGZpuI6P3MN2okPZGs/gH1LrIWzVhP88Vyw5+zs5ZxPyJ0ee5/ S9cQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=wPmGoJD3OKEF5f5PV+c0Yp9ObsD+ox5Eu96+RMsI5Ms=; b=C26TVlejKknhWTZERwoWLAodh/1LgqPTfM48xwmb+PxJ7r3RNO4taDFL1uNiNFHsxV L2Xo72EQxgMGwLNyttVYrHT64PPXk3fN17ij+qjNmT63x2Gs8JChNcClUSpwkO6aeiaZ iiOD1gi82UkGSBehkb7nLEURhzWHkAxO3K2fl93Mh9mHoFdLq9EjqS4zOqOo2sm6mC3E yARwAbYe+aIli41hng/pqt8RrWMuNQSXGuzJMo3bECsBKfBEzW8103qNf2gKrt17uxMP qYmicnPvdzrEoileYKXUMZxy5Zx4gEzcbF5Z5vrIQaGJ6elnZq+Yi0QFZaTutWjWJDGZ BaVw== X-Gm-Message-State: AOAM533DYk1LdGwU+SfyqRRbh9lR2Sp0uubFddh4KCD1AMaG4V1fbrxI cDpPGIUrCGH5xamuJuymdJ6XtYIRSTnsVE8JcWszew== X-Google-Smtp-Source: ABdhPJyXsyg4e4OWdvAz8Y27/RGs0CfGup64r/qzMSrBkagap8fr/D2LufYQiwmq6cpv1Poi0vKVeBOZ/NX336a0Eug= X-Received: by 2002:a25:2f89:: with SMTP id v131mr53394597ybv.469.1626960586717; Thu, 22 Jul 2021 06:29:46 -0700 (PDT) MIME-Version: 1.0 References: <20210715101536.2606307-1-matthew.auld@intel.com> <20210715101536.2606307-4-matthew.auld@intel.com> In-Reply-To: From: Jason Ekstrand Date: Thu, 22 Jul 2021 08:29:35 -0500 Message-ID: To: Matthew Auld Subject: Re: [Intel-gfx] [PATCH 3/4] drm/i915/userptr: Probe existence of backing struct pages upon creation X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?Q?Thomas_Hellstr=C3=B6m?= , Daniel Vetter , Intel GFX , Maling list - DRI developers , Chris Wilson , Kenneth Graunke , Matthew Auld Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gVGh1LCBKdWwgMjIsIDIwMjEgYXQgMzo0NCBBTSBNYXR0aGV3IEF1bGQKPG1hdHRoZXcud2ls bGlhbS5hdWxkQGdtYWlsLmNvbT4gd3JvdGU6Cj4KPiBPbiBXZWQsIDIxIEp1bCAyMDIxIGF0IDIx OjI4LCBKYXNvbiBFa3N0cmFuZCA8amFzb25Aamxla3N0cmFuZC5uZXQ+IHdyb3RlOgo+ID4KPiA+ IE9uIFRodSwgSnVsIDE1LCAyMDIxIGF0IDU6MTYgQU0gTWF0dGhldyBBdWxkIDxtYXR0aGV3LmF1 bGRAaW50ZWwuY29tPiB3cm90ZToKPiA+ID4KPiA+ID4gRnJvbTogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+Cj4gPiA+Cj4gPiA+IEphc29uIEVrc3RyYW5kIHJlcXVlc3Rl ZCBhIG1vcmUgZWZmaWNpZW50IG1ldGhvZCB0aGFuIHVzZXJwdHIrc2V0LWRvbWFpbgo+ID4gPiB0 byBkZXRlcm1pbmUgaWYgdGhlIHVzZXJwdHIgb2JqZWN0IHdhcyBiYWNrZWQgYnkgYSBjb21wbGV0 ZSBzZXQgb2YgcGFnZXMKPiA+ID4gdXBvbiBjcmVhdGlvbi4gVG8gYmUgbW9yZSBlZmZpY2llbnQg dGhhbiBzaW1wbHkgcG9wdWxhdGluZyB0aGUgdXNlcnB0cgo+ID4gPiB1c2luZyBnZXRfdXNlcl9w YWdlcygpIChhcyBkb25lIGJ5IHRoZSBjYWxsIHRvIHNldC1kb21haW4gb3IgZXhlY2J1ZiksCj4g PiA+IHdlIGNhbiB3YWxrIHRoZSB0cmVlIG9mIHZtX2FyZWFfc3RydWN0IGFuZCBjaGVjayBmb3Ig Z2FwcyBvciB2bWEgbm90Cj4gPiA+IGJhY2tlZCBieSBzdHJ1Y3QgcGFnZSAoVk1fUEZOTUFQKS4g VGhlIHF1ZXN0aW9uIGlzIGhvdyB0byBoYW5kbGUKPiA+ID4gVk1fTUlYRURNQVAgd2hpY2ggbWF5 IGJlIGVpdGhlciBzdHJ1Y3QgcGFnZSBvciBwZm4gYmFja2VkLi4uCj4gPiA+Cj4gPiA+IFdpdGgg ZGlzY3JldGUgYXJlIGdvaW5nIHRvIGRyb3Agc3VwcG9ydCBmb3Igc2V0X2RvbWFpbigpLCBzbyBv ZmZlcmluZyBhCj4gPiA+IHdheSB0byBwcm9iZSB0aGUgcGFnZXMsIHdpdGhvdXQgaGF2aW5nIHRv IHJlc29ydCB0byBkdW1teSBiYXRjaGVzIGhhcwo+ID4gPiBiZWVuIHJlcXVlc3RlZC4KPiA+ID4K PiA+ID4gdjI6Cj4gPiA+IC0gYWRkIG5ldyBxdWVyeSBwYXJhbSBmb3IgdGhlIFBST1BCRSBmbGFn LCBzbyB1c2Vyc3BhY2UgY2FuIGVhc2lseQo+ID4gPiAgIGNoZWNrIGlmIHRoZSBrZXJuZWwgc3Vw cG9ydHMgaXQoSmFzb24pLgo+ID4gPiAtIHVzZSBtbWFwX3JlYWRfe2xvY2ssIHVubG9ja30uCj4g PiA+IC0gYWRkIHNvbWUga2VybmVsLWRvYy4KPiA+ID4KPiA+ID4gVGVzdGNhc2U6IGlndC9nZW1f dXNlcnB0cl9ibGl0cy9wcm9iZQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNo cmlzQGNocmlzLXdpbHNvbi5jby51az4KPiA+ID4gU2lnbmVkLW9mZi1ieTogTWF0dGhldyBBdWxk IDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgo+ID4gPiBDYzogVGhvbWFzIEhlbGxzdHLDtm0gPHRo b21hcy5oZWxsc3Ryb21AbGludXguaW50ZWwuY29tPgo+ID4gPiBDYzogTWFhcnRlbiBMYW5raG9y c3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPiA+ID4gQ2M6IFR2cnRrbyBV cnN1bGluIDx0dnJ0a28udXJzdWxpbkBsaW51eC5pbnRlbC5jb20+Cj4gPiA+IENjOiBKb3JkYW4g SnVzdGVuIDxqb3JkYW4ubC5qdXN0ZW5AaW50ZWwuY29tPgo+ID4gPiBDYzogS2VubmV0aCBHcmF1 bmtlIDxrZW5uZXRoQHdoaXRlY2FwZS5vcmc+Cj4gPiA+IENjOiBKYXNvbiBFa3N0cmFuZCA8amFz b25Aamxla3N0cmFuZC5uZXQ+Cj4gPiA+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVy QGZmd2xsLmNoPgo+ID4gPiBDYzogUmFtYWxpbmdhbSBDIDxyYW1hbGluZ2FtLmNAaW50ZWwuY29t Pgo+ID4gPiAtLS0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2Vy cHRyLmMgfCA0MCArKysrKysrKysrKysrKysrKysrKy0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2V0cGFyYW0uYyAgICAgICAgfCAgMyArKwo+ID4gPiAgaW5jbHVkZS91YXBpL2Ry bS9pOTE1X2RybS5oICAgICAgICAgICAgICAgICB8IDE4ICsrKysrKysrKysKPiA+ID4gIDMgZmls ZXMgY2hhbmdlZCwgNjAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ID4gPgo+ID4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMKPiA+ID4gaW5kZXgg NTZlZGZlZmY4YzAyLi5mZDY4ODAzMjg1OTYgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwo+ID4gPiBAQCAtNDIyLDYgKzQyMiwzMyBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5MTVfZ2VtX3Vz ZXJwdHJfb3BzID0gewo+ID4gPgo+ID4gPiAgI2VuZGlmCj4gPiA+Cj4gPiA+ICtzdGF0aWMgaW50 Cj4gPiA+ICtwcm9iZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBh ZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKPiA+ID4gK3sKPiA+ID4gKyAgICAgICBjb25zdCB1bnNp Z25lZCBsb25nIGVuZCA9IGFkZHIgKyBsZW47Cj4gPiA+ICsgICAgICAgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWE7Cj4gPiA+ICsgICAgICAgaW50IHJldCA9IC1FRkFVTFQ7Cj4gPiA+ICsKPiA+ ID4gKyAgICAgICBtbWFwX3JlYWRfbG9jayhtbSk7Cj4gPiA+ICsgICAgICAgZm9yICh2bWEgPSBm aW5kX3ZtYShtbSwgYWRkcik7IHZtYTsgdm1hID0gdm1hLT52bV9uZXh0KSB7Cj4gPiA+ICsgICAg ICAgICAgICAgICBpZiAodm1hLT52bV9zdGFydCA+IGFkZHIpCj4gPgo+ID4gV2h5IGlzbid0IHRo aXMgPiBlbmQ/ICBBcmUgd2Ugc29tZWhvdyBndWFyYW50ZWVkIHRoYXQgb25lIHZtYSBjb3ZlcnMK PiA+IHRoZSBlbnRpcmUgcmFuZ2U/Cj4KPiBBRkFJSyB3ZSBhcmUganVzdCBtYWtpbmcgc3VyZSB3 ZSBkb24ndCBoYXZlIGEgaG9sZShub3RlIHRoYXQgd2UgYWxzbwo+IHVwZGF0ZSBhZGRyIGJlbG93 KSwgZm9yIGV4YW1wbGUgdGhlIHVzZXIgbWlnaHQgaGF2ZSBkb25lIGEgcGFydGlhbAo+IG11bm1h cC4gVGhlcmUgY291bGQgYmUgbXVsdGlwbGUgdm1hJ3MgaWYgdGhlIGtlcm5lbCB3YXMgdW5hYmxl IHRvCj4gbWVyZ2UgdGhlbS4gSWYgd2UgcmVhY2ggdGhlIHZtX2VuZCA+PSBlbmQsIHRoZW4gd2Ug a25vdyB3ZSBoYXZlIGEKPiAidmFsaWQiIHJhbmdlLgoKT2suICBUaGF0IHdhc24ndCBvYnZpb3Vz IHRvIG1lIGJ1dCBJIHNlZSB0aGUgYWRkciB1cGRhdGUgbm93LiAgTWFrZXMKc2Vuc2UuICBNaWdo dCBiZSB3b3J0aCBhIG9uZS1saW5lIGNvbW1lbnQgZm9yIHRoZSBuZXh0IGd1eS4gIEVpdGhlcgp3 YXksCgpSZXZpZXdlZC1ieTogSmFzb24gRWtzdHJhbmQgPGphc29uQGpsZWtzdHJhbmQubmV0PgoK VGhhbmtzIGZvciB3aXJpbmcgdGhpcyB1cCEKCi0tSmFzb24KCj4gPgo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKPiA+ID4gKwo+ID4gPiArICAgICAgICAgICAgICAgaWYgKHZt YS0+dm1fZmxhZ3MgJiAoVk1fUEZOTUFQIHwgVk1fTUlYRURNQVApKQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKPiA+ID4gKwo+ID4gPiArICAgICAgICAgICAgICAgaWYgKHZt YS0+dm1fZW5kID49IGVuZCkgewo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAw Owo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ID4gKyAgICAgICAgICAg ICAgIH0KPiA+ID4gKwo+ID4gPiArICAgICAgICAgICAgICAgYWRkciA9IHZtYS0+dm1fZW5kOwo+ ID4gPiArICAgICAgIH0KPiA+ID4gKyAgICAgICBtbWFwX3JlYWRfdW5sb2NrKG1tKTsKPiA+ID4g Kwo+ID4gPiArICAgICAgIHJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gIC8qCj4g PiA+ICAgKiBDcmVhdGVzIGEgbmV3IG1tIG9iamVjdCB0aGF0IHdyYXBzIHNvbWUgbm9ybWFsIG1l bW9yeSBmcm9tIHRoZSBwcm9jZXNzCj4gPiA+ICAgKiBjb250ZXh0IC0gdXNlciBtZW1vcnkuCj4g PiA+IEBAIC00NzcsNyArNTA0LDggQEAgaTkxNV9nZW1fdXNlcnB0cl9pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ID4gPiAgICAgICAgIH0KPiA+ID4KPiA+ID4gICAgICAgICBpZiAoYXJn cy0+ZmxhZ3MgJiB+KEk5MTVfVVNFUlBUUl9SRUFEX09OTFkgfAo+ID4gPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgSTkxNV9VU0VSUFRSX1VOU1lOQ0hST05JWkVEKSkKPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIEk5MTVfVVNFUlBUUl9VTlNZTkNIUk9OSVpFRCB8Cj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBJOTE1X1VTRVJQVFJfUFJPQkUpKQo+ID4gPiAg ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+Cj4gPiA+ICAgICAgICAgaWYgKGk5 MTVfZ2VtX29iamVjdF9zaXplXzJiaWcoYXJncy0+dXNlcl9zaXplKSkKPiA+ID4gQEAgLTUwNCw2 ICs1MzIsMTYgQEAgaTkxNV9nZW1fdXNlcnB0cl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKPiA+ID4gICAg ICAgICB9Cj4gPiA+Cj4gPiA+ICsgICAgICAgaWYgKGFyZ3MtPmZsYWdzICYgSTkxNV9VU0VSUFRS X1BST0JFKSB7Cj4gPiA+ICsgICAgICAgICAgICAgICAvKgo+ID4gPiArICAgICAgICAgICAgICAg ICogQ2hlY2sgdGhhdCB0aGUgcmFuZ2UgcG9pbnRlZCB0byByZXByZXNlbnRzIHJlYWwgc3RydWN0 Cj4gPiA+ICsgICAgICAgICAgICAgICAgKiBwYWdlcyBhbmQgbm90IGlvbWFwcGluZ3MgKGF0IHRo aXMgbW9tZW50IGluIHRpbWUhKQo+ID4gPiArICAgICAgICAgICAgICAgICovCj4gPiA+ICsgICAg ICAgICAgICAgICByZXQgPSBwcm9iZV9yYW5nZShjdXJyZW50LT5tbSwgYXJncy0+dXNlcl9wdHIs IGFyZ3MtPnVzZXJfc2l6ZSk7Cj4gPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0KQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gPiArICAgICAgIH0KPiA+ID4g Kwo+ID4gPiAgI2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVIKPiA+ID4gICAgICAgICBvYmogPSBp OTE1X2dlbV9vYmplY3RfYWxsb2MoKTsKPiA+ID4gICAgICAgICBpZiAob2JqID09IE5VTEwpCj4g PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dldHBhcmFtLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dldHBhcmFtLmMKPiA+ID4gaW5kZXggMjRlMTgyMTll YjUwLi5kNmQyZTFhMTBkMTQgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2V0cGFyYW0uYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl dHBhcmFtLmMKPiA+ID4gQEAgLTE2Myw2ICsxNjMsOSBAQCBpbnQgaTkxNV9nZXRwYXJhbV9pb2N0 bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ID4gPiAgICAgICAgIGNhc2Ug STkxNV9QQVJBTV9QRVJGX1JFVklTSU9OOgo+ID4gPiAgICAgICAgICAgICAgICAgdmFsdWUgPSBp OTE1X3BlcmZfaW9jdGxfdmVyc2lvbigpOwo+ID4gPiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4g PiA+ICsgICAgICAgY2FzZSBJOTE1X1BBUkFNX0hBU19VU0VSUFRSX1BST0JFOgo+ID4gPiArICAg ICAgICAgICAgICAgdmFsdWUgPSB0cnVlOwo+ID4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4g PiA+ICAgICAgICAgZGVmYXVsdDoKPiA+ID4gICAgICAgICAgICAgICAgIERSTV9ERUJVRygiVW5r bm93biBwYXJhbWV0ZXIgJWRcbiIsIHBhcmFtLT5wYXJhbSk7Cj4gPiA+ICAgICAgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsKPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkx NV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+ID4gPiBpbmRleCBlMjBlZWVj YTdhMWMuLjJlNDExMmJmNGQzOCAxMDA2NDQKPiA+ID4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9p OTE1X2RybS5oCj4gPiA+ICsrKyBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+ID4gPiBA QCAtNjc0LDYgKzY3NCw5IEBAIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2lycV93YWl0IHsKPiA+ ID4gICAqLwo+ID4gPiAgI2RlZmluZSBJOTE1X1BBUkFNX0hBU19FWEVDX1RJTUVMSU5FX0ZFTkNF UyA1NQo+ID4gPgo+ID4gPiArLyogUXVlcnkgaWYgdGhlIGtlcm5lbCBzdXBwb3J0cyB0aGUgSTkx NV9VU0VSUFRSX1BST0JFIGZsYWcuICovCj4gPiA+ICsjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1VT RVJQVFJfUFJPQkUgNTYKPiA+ID4gKwo+ID4gPiAgLyogTXVzdCBiZSBrZXB0IGNvbXBhY3QgLS0g bm8gaG9sZXMgYW5kIHdlbGwgZG9jdW1lbnRlZCAqLwo+ID4gPgo+ID4gPiAgdHlwZWRlZiBzdHJ1 Y3QgZHJtX2k5MTVfZ2V0cGFyYW0gewo+ID4gPiBAQCAtMjE3OCwxMiArMjE4MSwyNyBAQCBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3VzZXJwdHIgewo+ID4gPiAgICAgICAgICAqIHRocm91Z2ggdGhlIEdU VC4gSWYgdGhlIEhXIGNhbid0IHN1cHBvcnQgcmVhZG9ubHkgYWNjZXNzLCBhbiBlcnJvciBpcwo+ ID4gPiAgICAgICAgICAqIHJldHVybmVkLgo+ID4gPiAgICAgICAgICAqCj4gPiA+ICsgICAgICAg ICogSTkxNV9VU0VSUFRSX1BST0JFOgo+ID4gPiArICAgICAgICAqCj4gPiA+ICsgICAgICAgICog UHJvYmUgdGhlIHByb3ZpZGVkIEB1c2VyX3B0ciByYW5nZSBhbmQgdmFsaWRhdGUgdGhhdCB0aGUg QHVzZXJfcHRyIGlzCj4gPiA+ICsgICAgICAgICogaW5kZWVkIHBvaW50aW5nIHRvIG5vcm1hbCBt ZW1vcnkgYW5kIHRoYXQgdGhlIHJhbmdlIGlzIGFsc28gdmFsaWQuCj4gPiA+ICsgICAgICAgICog Rm9yIGV4YW1wbGUgaWYgc29tZSBnYXJiYWdlIGFkZHJlc3MgaXMgZ2l2ZW4gdG8gdGhlIGtlcm5l bCwgdGhlbiB0aGlzCj4gPiA+ICsgICAgICAgICogc2hvdWxkIGNvbXBsYWluLgo+ID4gPiArICAg ICAgICAqCj4gPiA+ICsgICAgICAgICogUmV0dXJucyAtRUZBVUxUIGlmIHRoZSBwcm9iZSBmYWls ZWQuCj4gPiA+ICsgICAgICAgICoKPiA+ID4gKyAgICAgICAgKiBOb3RlIHRoYXQgdGhpcyBkb2Vz bid0IHBvcHVsYXRlIHRoZSBiYWNraW5nIHBhZ2VzLgo+ID4gPiArICAgICAgICAqCj4gPiA+ICsg ICAgICAgICogVGhlIGtlcm5lbCBzdXBwb3J0cyB0aGlzIGZlYXR1cmUgaWYgSTkxNV9QQVJBTV9I QVNfVVNFUlBUUl9QUk9CRQo+ID4gPiArICAgICAgICAqIHJldHVybnMgYSBub24temVybyB2YWx1 ZS4KPiA+ID4gKyAgICAgICAgKgo+ID4gPiAgICAgICAgICAqIEk5MTVfVVNFUlBUUl9VTlNZTkNI Uk9OSVpFRDoKPiA+ID4gICAgICAgICAgKgo+ID4gPiAgICAgICAgICAqIE5PVCBVU0VELiBTZXR0 aW5nIHRoaXMgZmxhZyB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvci4KPiA+ID4gICAgICAgICAgKi8K PiA+ID4gICAgICAgICBfX3UzMiBmbGFnczsKPiA+ID4gICNkZWZpbmUgSTkxNV9VU0VSUFRSX1JF QURfT05MWSAweDEKPiA+ID4gKyNkZWZpbmUgSTkxNV9VU0VSUFRSX1BST0JFIDB4Mgo+ID4gPiAg I2RlZmluZSBJOTE1X1VTRVJQVFJfVU5TWU5DSFJPTklaRUQgMHg4MDAwMDAwMAo+ID4gPiAgICAg ICAgIC8qKgo+ID4gPiAgICAgICAgICAqIEBoYW5kbGU6IFJldHVybmVkIGhhbmRsZSBmb3IgdGhl IG9iamVjdC4KPiA+ID4gLS0KPiA+ID4gMi4yNi4zCj4gPiA+Cj4gPiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dAo+ID4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==