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.5 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 D77F4C4707F for ; Thu, 27 May 2021 13:25:34 +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 7F82460200 for ; Thu, 27 May 2021 13:25:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7F82460200 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 AAD396F39F; Thu, 27 May 2021 13:25:33 +0000 (UTC) Received: from mail-oi1-x22c.google.com (mail-oi1-x22c.google.com [IPv6:2607:f8b0:4864:20::22c]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7B6566E839 for ; Thu, 27 May 2021 13:25:32 +0000 (UTC) Received: by mail-oi1-x22c.google.com with SMTP id c196so718364oib.9 for ; Thu, 27 May 2021 06:25:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=yQwLzJ+ZJHTrIF+F0wVqlsTETpecT+FF76rJ3qnoHhs=; b=DZ/sU+ZtUKGdK6FcCZGk9mgUyBQ0TzefivUOsH4ItQODItmp2LmJNUCBz49bSKkSfo q3PqUY0wnQk2GzWnmfhEcz6FOj8JGlGIvUCgmCI3ogvE+ii3rwpyj2ydcY1/MkrogbVe jaLT198sxOdablOHLPjWbrGj1TbwM0cERqAJA= 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=yQwLzJ+ZJHTrIF+F0wVqlsTETpecT+FF76rJ3qnoHhs=; b=Dl15qOAajSCWnyUKSclcAllr7g81EJvUpXawjm5KB9NpP8RRckg+sJdSszJPWVro+a h5pCmpKBbWk+lwDfYUbckxCuKRvEfSTbEXWiOrHxSKHZ+KNOnjf7m/Oi9EEhmu0MRSfe W3syotIZFzzud3kYkTeupPXBCKvMKZfkDYMqlIX4buki6+zKB00IuvSYa9KnTJ1n5LRL kFJuKjz69biQbipLCgshTyP1ZfOBxK1DFDxpHW9GxBHRehMihgyVWo46WdRCcjPzR3xH g63bykSf4zbcbJIUC02x7N7WOuF2TgE2BvENXiwP5xBgmomctpIm9qV0iH7VKEM+6Rk4 FyjA== X-Gm-Message-State: AOAM530Mpx1s0M/Rf4mtqVb+3yxX/lysu8Z12b6BaqjgM1a/VwEHNE52 /PFQ0FU167d56OudRO3DKBZcdBA5/YkuvNaKBY0Avg== X-Google-Smtp-Source: ABdhPJy1wJmc0iU2HiRwwXPt7P57oRbV2LS/8Mi4WO/FrkK7yInVrbZEDODu6K24C+0D0AKg2fMlooRGkldZx/9mHcA= X-Received: by 2002:a54:4809:: with SMTP id j9mr5372832oij.14.1622121931680; Thu, 27 May 2021 06:25:31 -0700 (PDT) MIME-Version: 1.0 References: <20210525211753.1086069-1-jason@jlekstrand.net> <20210525211753.1086069-3-jason@jlekstrand.net> <82e16239-e8ea-8b03-6a90-c7d18a5f8a91@amd.com> In-Reply-To: From: Daniel Vetter Date: Thu, 27 May 2021 15:25:20 +0200 Message-ID: Subject: Re: [PATCH 2/7] dma-buf: Rename dma_resv helpers from _rcu to _unlocked (v2) To: =?UTF-8?Q?Christian_K=C3=B6nig?= 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: Gerd Hoffmann , Jason Ekstrand , intel-gfx , Huang Rui , VMware Graphics , dri-devel , Thomas Zimmermann , Sean Paul Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Thu, May 27, 2021 at 1:59 PM Christian K=C3=B6nig wrote: > > Am 27.05.21 um 12:39 schrieb Daniel Vetter: > > On Wed, May 26, 2021 at 12:57:40PM +0200, Christian K=C3=B6nig wrote: > >> Am 25.05.21 um 23:17 schrieb Jason Ekstrand: > >>> None of these helpers actually leak any RCU details to the caller. T= hey > >>> all assume you have a genuine reference, take the RCU read lock, and > >>> retry if needed. Naming them with an _rcu is likely to cause callers > >>> more panic than needed. > >> I'm really wondering if we need this postfix in the first place. > >> > >> If we use the right rcu_dereference_check() macro then those functions= can > >> be called with both the reservation object locked and unlocked. It sho= uldn't > >> matter to them. > >> > >> But getting rid of the _rcu postfix sounds like a good idea in general= to > >> me. > > So does that count as an ack or not? If yes I think we should land this > > patch right away, since it's going to conflict real fast badly. > > I had some follow up discussion with Jason and I would rather like to > switch to using rcu_dereference_check() in all places and completely > remove the _rcu postfix. Hm, I'm not sure whether spreading _rcu tricks further is an especially bright idea. At least i915 is full of very clever _rcu tricks, and encouraging drivers to roll out their own _rcu everywhere is probably not in our best interest. Some fast-path checking is imo ok, but that's it. Especially once we get into the entire SLAB_TYPESAFE_BY_RCU business it becomes really nasty really quickly. That's why I'm slightly leaning towards _unlocked variants, except we do use those in lots of places where we hold dma_resv_lock too. So not sure what's the best plan overall here. -Daniel > But yes I see the pain of rebasing this as well. > > Christian. > > > -Daniel > > > >> Christian. > >> > >>> v2 (Jason Ekstrand): > >>> - Fix function argument indentation > >>> > >>> Signed-off-by: Jason Ekstrand > >>> Suggested-by: Daniel Vetter > >>> Cc: Christian K=C3=B6nig > >>> Cc: Maarten Lankhorst > >>> Cc: Maxime Ripard > >>> Cc: Thomas Zimmermann > >>> Cc: Lucas Stach > >>> Cc: Rob Clark > >>> Cc: Sean Paul > >>> Cc: Huang Rui > >>> Cc: Gerd Hoffmann > >>> Cc: VMware Graphics > >>> --- > >>> drivers/dma-buf/dma-buf.c | 4 +-- > >>> drivers/dma-buf/dma-resv.c | 28 +++++++++------= ---- > >>> drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 6 ++-- > >>> drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 2 +- > >>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 4 +-- > >>> drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 6 ++-- > >>> drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 4 +-- > >>> drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 4 +-- > >>> drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 6 ++-- > >>> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 14 +++++----- > >>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 6 ++-- > >>> drivers/gpu/drm/drm_gem.c | 10 +++---- > >>> drivers/gpu/drm/drm_gem_atomic_helper.c | 2 +- > >>> drivers/gpu/drm/etnaviv/etnaviv_gem.c | 7 ++--- > >>> drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 8 +++--- > >>> drivers/gpu/drm/i915/display/intel_display.c | 2 +- > >>> drivers/gpu/drm/i915/dma_resv_utils.c | 2 +- > >>> drivers/gpu/drm/i915/gem/i915_gem_busy.c | 2 +- > >>> .../gpu/drm/i915/gem/i915_gem_execbuffer.c | 2 +- > >>> drivers/gpu/drm/i915/gem/i915_gem_object.h | 2 +- > >>> drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 4 +-- > >>> drivers/gpu/drm/i915/gem/i915_gem_wait.c | 10 +++---- > >>> drivers/gpu/drm/i915/i915_request.c | 6 ++-- > >>> drivers/gpu/drm/i915/i915_sw_fence.c | 4 +-- > >>> drivers/gpu/drm/msm/msm_gem.c | 3 +- > >>> drivers/gpu/drm/nouveau/dispnv50/wndw.c | 2 +- > >>> drivers/gpu/drm/nouveau/nouveau_gem.c | 4 +-- > >>> drivers/gpu/drm/panfrost/panfrost_drv.c | 4 +-- > >>> drivers/gpu/drm/panfrost/panfrost_job.c | 2 +- > >>> drivers/gpu/drm/radeon/radeon_gem.c | 6 ++-- > >>> drivers/gpu/drm/radeon/radeon_mn.c | 4 +-- > >>> drivers/gpu/drm/ttm/ttm_bo.c | 18 ++++++------ > >>> drivers/gpu/drm/vgem/vgem_fence.c | 4 +-- > >>> drivers/gpu/drm/virtio/virtgpu_ioctl.c | 6 ++-- > >>> drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | 2 +- > >>> include/linux/dma-resv.h | 18 ++++++------ > >>> 36 files changed, 108 insertions(+), 110 deletions(-) > >>> > >>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c > >>> index f264b70c383eb..ed6451d55d663 100644 > >>> --- a/drivers/dma-buf/dma-buf.c > >>> +++ b/drivers/dma-buf/dma-buf.c > >>> @@ -1147,8 +1147,8 @@ static int __dma_buf_begin_cpu_access(struct dm= a_buf *dmabuf, > >>> long ret; > >>> /* Wait on any implicit rendering fences */ > >>> - ret =3D dma_resv_wait_timeout_rcu(resv, write, true, > >>> - MAX_SCHEDULE_TIMEOUT); > >>> + ret =3D dma_resv_wait_timeout_unlocked(resv, write, true, > >>> + MAX_SCHEDULE_TIMEOUT); > >>> if (ret < 0) > >>> return ret; > >>> diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c > >>> index 6ddbeb5dfbf65..d6f1ed4cd4d55 100644 > >>> --- a/drivers/dma-buf/dma-resv.c > >>> +++ b/drivers/dma-buf/dma-resv.c > >>> @@ -417,7 +417,7 @@ int dma_resv_copy_fences(struct dma_resv *dst, st= ruct dma_resv *src) > >>> EXPORT_SYMBOL(dma_resv_copy_fences); > >>> /** > >>> - * dma_resv_get_fences_rcu - Get an object's shared and exclusive > >>> + * dma_resv_get_fences_unlocked - Get an object's shared and exclusi= ve > >>> * fences without update side lock held > >>> * @obj: the reservation object > >>> * @pfence_excl: the returned exclusive fence (or NULL) > >>> @@ -429,10 +429,10 @@ EXPORT_SYMBOL(dma_resv_copy_fences); > >>> * exclusive fence is not specified the fence is put into the arra= y of the > >>> * shared fences as well. Returns either zero or -ENOMEM. > >>> */ > >>> -int dma_resv_get_fences_rcu(struct dma_resv *obj, > >>> - struct dma_fence **pfence_excl, > >>> - unsigned *pshared_count, > >>> - struct dma_fence ***pshared) > >>> +int dma_resv_get_fences_unlocked(struct dma_resv *obj, > >>> + struct dma_fence **pfence_excl, > >>> + unsigned *pshared_count, > >>> + struct dma_fence ***pshared) > >>> { > >>> struct dma_fence **shared =3D NULL; > >>> struct dma_fence *fence_excl; > >>> @@ -515,10 +515,10 @@ int dma_resv_get_fences_rcu(struct dma_resv *ob= j, > >>> *pshared =3D shared; > >>> return ret; > >>> } > >>> -EXPORT_SYMBOL_GPL(dma_resv_get_fences_rcu); > >>> +EXPORT_SYMBOL_GPL(dma_resv_get_fences_unlocked); > >>> /** > >>> - * dma_resv_wait_timeout_rcu - Wait on reservation's objects > >>> + * dma_resv_wait_timeout_unlocked - Wait on reservation's objects > >>> * shared and/or exclusive fences. > >>> * @obj: the reservation object > >>> * @wait_all: if true, wait on all fences, else wait on just exclu= sive fence > >>> @@ -529,9 +529,9 @@ EXPORT_SYMBOL_GPL(dma_resv_get_fences_rcu); > >>> * Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, o= r > >>> * greater than zer on success. > >>> */ > >>> -long dma_resv_wait_timeout_rcu(struct dma_resv *obj, > >>> - bool wait_all, bool intr, > >>> - unsigned long timeout) > >>> +long dma_resv_wait_timeout_unlocked(struct dma_resv *obj, > >>> + bool wait_all, bool intr, > >>> + unsigned long timeout) > >>> { > >>> struct dma_fence *fence; > >>> unsigned seq, shared_count; > >>> @@ -602,7 +602,7 @@ long dma_resv_wait_timeout_rcu(struct dma_resv *o= bj, > >>> rcu_read_unlock(); > >>> goto retry; > >>> } > >>> -EXPORT_SYMBOL_GPL(dma_resv_wait_timeout_rcu); > >>> +EXPORT_SYMBOL_GPL(dma_resv_wait_timeout_unlocked); > >>> static inline int dma_resv_test_signaled_single(struct dma_fence *= passed_fence) > >>> @@ -622,7 +622,7 @@ static inline int dma_resv_test_signaled_single(s= truct dma_fence *passed_fence) > >>> } > >>> /** > >>> - * dma_resv_test_signaled_rcu - Test if a reservation object's > >>> + * dma_resv_test_signaled_unlocked - Test if a reservation object's > >>> * fences have been signaled. > >>> * @obj: the reservation object > >>> * @test_all: if true, test all fences, otherwise only test the ex= clusive > >>> @@ -631,7 +631,7 @@ static inline int dma_resv_test_signaled_single(s= truct dma_fence *passed_fence) > >>> * RETURNS > >>> * true if all fences signaled, else false > >>> */ > >>> -bool dma_resv_test_signaled_rcu(struct dma_resv *obj, bool test_all) > >>> +bool dma_resv_test_signaled_unlocked(struct dma_resv *obj, bool test= _all) > >>> { > >>> unsigned seq, shared_count; > >>> int ret; > >>> @@ -680,4 +680,4 @@ bool dma_resv_test_signaled_rcu(struct dma_resv *= obj, bool test_all) > >>> rcu_read_unlock(); > >>> return ret; > >>> } > >>> -EXPORT_SYMBOL_GPL(dma_resv_test_signaled_rcu); > >>> +EXPORT_SYMBOL_GPL(dma_resv_test_signaled_unlocked); > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gp= u/drm/amd/amdgpu/amdgpu_display.c > >>> index 8a1fb8b6606e5..b8e24f199be9a 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c > >>> @@ -203,9 +203,9 @@ int amdgpu_display_crtc_page_flip_target(struct d= rm_crtc *crtc, > >>> goto unpin; > >>> } > >>> - r =3D dma_resv_get_fences_rcu(new_abo->tbo.base.resv, &work->excl= , > >>> - &work->shared_count, > >>> - &work->shared); > >>> + r =3D dma_resv_get_fences_unlocked(new_abo->tbo.base.resv, &work-= >excl, > >>> + &work->shared_count, > >>> + &work->shared); > >>> if (unlikely(r !=3D 0)) { > >>> DRM_ERROR("failed to get fences for buffer\n"); > >>> goto unpin; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gp= u/drm/amd/amdgpu/amdgpu_dma_buf.c > >>> index baa980a477d94..0d0319bc51577 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > >>> @@ -98,7 +98,7 @@ __dma_resv_make_exclusive(struct dma_resv *obj) > >>> if (!dma_resv_get_list(obj)) /* no shared fences to convert */ > >>> return 0; > >>> - r =3D dma_resv_get_fences_rcu(obj, NULL, &count, &fences); > >>> + r =3D dma_resv_get_fences_unlocked(obj, NULL, &count, &fences); > >>> if (r) > >>> return r; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/dr= m/amd/amdgpu/amdgpu_gem.c > >>> index 18974bd081f00..8e2996d6ba3ad 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > >>> @@ -471,8 +471,8 @@ int amdgpu_gem_wait_idle_ioctl(struct drm_device = *dev, void *data, > >>> return -ENOENT; > >>> } > >>> robj =3D gem_to_amdgpu_bo(gobj); > >>> - ret =3D dma_resv_wait_timeout_rcu(robj->tbo.base.resv, true, true= , > >>> - timeout); > >>> + ret =3D dma_resv_wait_timeout_unlocked(robj->tbo.base.resv, true,= true, > >>> + timeout); > >>> /* ret =3D=3D 0 means not signaled, > >>> * ret > 0 means signaled > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c b/drivers/gpu/dr= m/amd/amdgpu/amdgpu_ids.c > >>> index b4971e90b98cf..38e1b32dd2cef 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c > >>> @@ -112,7 +112,7 @@ void amdgpu_pasid_free_delayed(struct dma_resv *r= esv, > >>> unsigned count; > >>> int r; > >>> - r =3D dma_resv_get_fences_rcu(resv, NULL, &count, &fences); > >>> + r =3D dma_resv_get_fences_unlocked(resv, NULL, &count, &fences); > >>> if (r) > >>> goto fallback; > >>> @@ -156,8 +156,8 @@ void amdgpu_pasid_free_delayed(struct dma_resv *r= esv, > >>> /* Not enough memory for the delayed delete, as last resort > >>> * block for all the fences to complete. > >>> */ > >>> - dma_resv_wait_timeout_rcu(resv, true, false, > >>> - MAX_SCHEDULE_TIMEOUT); > >>> + dma_resv_wait_timeout_unlocked(resv, true, false, > >>> + MAX_SCHEDULE_TIMEOUT); > >>> amdgpu_pasid_free(pasid); > >>> } > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c b/drivers/gpu/drm= /amd/amdgpu/amdgpu_mn.c > >>> index 828b5167ff128..0319c8b547c48 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c > >>> @@ -75,8 +75,8 @@ static bool amdgpu_mn_invalidate_gfx(struct mmu_int= erval_notifier *mni, > >>> mmu_interval_set_seq(mni, cur_seq); > >>> - r =3D dma_resv_wait_timeout_rcu(bo->tbo.base.resv, true, false, > >>> - MAX_SCHEDULE_TIMEOUT); > >>> + r =3D dma_resv_wait_timeout_unlocked(bo->tbo.base.resv, true, fal= se, > >>> + MAX_SCHEDULE_TIMEOUT); > >>> mutex_unlock(&adev->notifier_lock); > >>> if (r <=3D 0) > >>> DRM_ERROR("(%ld) failed to wait for user bo\n", r); > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu= /drm/amd/amdgpu/amdgpu_object.c > >>> index 0adffcace3263..de1c7c5501683 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > >>> @@ -791,8 +791,8 @@ int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **p= tr) > >>> return 0; > >>> } > >>> - r =3D dma_resv_wait_timeout_rcu(bo->tbo.base.resv, false, false, > >>> - MAX_SCHEDULE_TIMEOUT); > >>> + r =3D dma_resv_wait_timeout_unlocked(bo->tbo.base.resv, false, fa= lse, > >>> + MAX_SCHEDULE_TIMEOUT); > >>> if (r < 0) > >>> return r; > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/dr= m/amd/amdgpu/amdgpu_uvd.c > >>> index c6dbc08016045..4a2196404fb69 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c > >>> @@ -1115,9 +1115,9 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ri= ng *ring, struct amdgpu_bo *bo, > >>> ib->length_dw =3D 16; > >>> if (direct) { > >>> - r =3D dma_resv_wait_timeout_rcu(bo->tbo.base.resv, > >>> - true, false, > >>> - msecs_to_jiffies(= 10)); > >>> + r =3D dma_resv_wait_timeout_unlocked(bo->tbo.base.resv, > >>> + true, false, > >>> + msecs_to_jiffies(10)); > >>> if (r =3D=3D 0) > >>> r =3D -ETIMEDOUT; > >>> if (r < 0) > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm= /amd/amdgpu/amdgpu_vm.c > >>> index 4a3e3f72e1277..7ba1c537d6584 100644 > >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > >>> @@ -2007,14 +2007,14 @@ static void amdgpu_vm_prt_fini(struct amdgpu_= device *adev, struct amdgpu_vm *vm) > >>> unsigned i, shared_count; > >>> int r; > >>> - r =3D dma_resv_get_fences_rcu(resv, &excl, > >>> - &shared_count, &shared); > >>> + r =3D dma_resv_get_fences_unlocked(resv, &excl, > >>> + &shared_count, &shared); > >>> if (r) { > >>> /* Not enough memory to grab the fence list, as last reso= rt > >>> * block for all the fences to complete. > >>> */ > >>> - dma_resv_wait_timeout_rcu(resv, true, false, > >>> - MAX_SCHEDULE_TIMEOUT)= ; > >>> + dma_resv_wait_timeout_unlocked(resv, true, false, > >>> + MAX_SCHEDULE_TIMEOUT); > >>> return; > >>> } > >>> @@ -2625,7 +2625,7 @@ bool amdgpu_vm_evictable(struct amdgpu_bo *bo) > >>> return true; > >>> /* Don't evict VM page tables while they are busy */ > >>> - if (!dma_resv_test_signaled_rcu(bo->tbo.base.resv, true)) > >>> + if (!dma_resv_test_signaled_unlocked(bo->tbo.base.resv, true)) > >>> return false; > >>> /* Try to block ongoing updates */ > >>> @@ -2805,8 +2805,8 @@ void amdgpu_vm_adjust_size(struct amdgpu_device= *adev, uint32_t min_vm_size, > >>> */ > >>> long amdgpu_vm_wait_idle(struct amdgpu_vm *vm, long timeout) > >>> { > >>> - timeout =3D dma_resv_wait_timeout_rcu(vm->root.base.bo->tbo.base.= resv, > >>> - true, true, timeout); > >>> + timeout =3D dma_resv_wait_timeout_unlocked(vm->root.base.bo->tbo.= base.resv, > >>> + true, true, timeout); > >>> if (timeout <=3D 0) > >>> return timeout; > >>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/driv= ers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > >>> index 9ca517b658546..0121d2817fa26 100644 > >>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > >>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > >>> @@ -8276,9 +8276,9 @@ static void amdgpu_dm_commit_planes(struct drm_= atomic_state *state, > >>> * deadlock during GPU reset when this fence will not sig= nal > >>> * but we hold reservation lock for the BO. > >>> */ > >>> - r =3D dma_resv_wait_timeout_rcu(abo->tbo.base.resv, true, > >>> - false, > >>> - msecs_to_jiffies(= 5000)); > >>> + r =3D dma_resv_wait_timeout_unlocked(abo->tbo.base.resv, = true, > >>> + false, > >>> + msecs_to_jiffies(5000)= ); > >>> if (unlikely(r <=3D 0)) > >>> DRM_ERROR("Waiting for fences timed out!"); > >>> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c > >>> index 9989425e9875a..1241a421b9e81 100644 > >>> --- a/drivers/gpu/drm/drm_gem.c > >>> +++ b/drivers/gpu/drm/drm_gem.c > >>> @@ -770,8 +770,8 @@ long drm_gem_dma_resv_wait(struct drm_file *filep= , u32 handle, > >>> return -EINVAL; > >>> } > >>> - ret =3D dma_resv_wait_timeout_rcu(obj->resv, wait_all, > >>> - true, timeout); > >>> + ret =3D dma_resv_wait_timeout_unlocked(obj->resv, wait_all, > >>> + true, timeout); > >>> if (ret =3D=3D 0) > >>> ret =3D -ETIME; > >>> else if (ret > 0) > >>> @@ -1375,13 +1375,13 @@ int drm_gem_fence_array_add_implicit(struct x= array *fence_array, > >>> if (!write) { > >>> struct dma_fence *fence =3D > >>> - dma_resv_get_excl_rcu(obj->resv); > >>> + dma_resv_get_excl_unlocked(obj->resv); > >>> return drm_gem_fence_array_add(fence_array, fence); > >>> } > >>> - ret =3D dma_resv_get_fences_rcu(obj->resv, NULL, > >>> - &fence_count, &fences); > >>> + ret =3D dma_resv_get_fences_unlocked(obj->resv, NULL, > >>> + &fence_count, &fences); > >>> if (ret || !fence_count) > >>> return ret; > >>> diff --git a/drivers/gpu/drm/drm_gem_atomic_helper.c b/drivers/gpu/dr= m/drm_gem_atomic_helper.c > >>> index a005c5a0ba46a..a27135084ae5c 100644 > >>> --- a/drivers/gpu/drm/drm_gem_atomic_helper.c > >>> +++ b/drivers/gpu/drm/drm_gem_atomic_helper.c > >>> @@ -147,7 +147,7 @@ int drm_gem_plane_helper_prepare_fb(struct drm_pl= ane *plane, struct drm_plane_st > >>> return 0; > >>> obj =3D drm_gem_fb_get_obj(state->fb, 0); > >>> - fence =3D dma_resv_get_excl_rcu(obj->resv); > >>> + fence =3D dma_resv_get_excl_unlocked(obj->resv); > >>> drm_atomic_set_fence_for_plane(state, fence); > >>> return 0; > >>> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/= etnaviv/etnaviv_gem.c > >>> index db69f19ab5bca..4e6f5346e84e4 100644 > >>> --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c > >>> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c > >>> @@ -390,14 +390,13 @@ int etnaviv_gem_cpu_prep(struct drm_gem_object = *obj, u32 op, > >>> } > >>> if (op & ETNA_PREP_NOSYNC) { > >>> - if (!dma_resv_test_signaled_rcu(obj->resv, > >>> - write)) > >>> + if (!dma_resv_test_signaled_unlocked(obj->resv, write)) > >>> return -EBUSY; > >>> } else { > >>> unsigned long remain =3D etnaviv_timeout_to_jiffies(timeo= ut); > >>> - ret =3D dma_resv_wait_timeout_rcu(obj->resv, > >>> - write, true, re= main); > >>> + ret =3D dma_resv_wait_timeout_unlocked(obj->resv, > >>> + write, true, remain)= ; > >>> if (ret <=3D 0) > >>> return ret =3D=3D 0 ? -ETIMEDOUT : ret; > >>> } > >>> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/g= pu/drm/etnaviv/etnaviv_gem_submit.c > >>> index d05c359945799..6617fada4595d 100644 > >>> --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c > >>> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c > >>> @@ -189,13 +189,13 @@ static int submit_fence_sync(struct etnaviv_gem= _submit *submit) > >>> continue; > >>> if (bo->flags & ETNA_SUBMIT_BO_WRITE) { > >>> - ret =3D dma_resv_get_fences_rcu(robj, &bo->excl, > >>> - &bo->nr_s= hared, > >>> - &bo->shar= ed); > >>> + ret =3D dma_resv_get_fences_unlocked(robj, &bo->e= xcl, > >>> + &bo->nr_shared= , > >>> + &bo->shared); > >>> if (ret) > >>> return ret; > >>> } else { > >>> - bo->excl =3D dma_resv_get_excl_rcu(robj); > >>> + bo->excl =3D dma_resv_get_excl_unlocked(robj); > >>> } > >>> } > >>> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/g= pu/drm/i915/display/intel_display.c > >>> index 422b59ebf6dce..5f0b85a102159 100644 > >>> --- a/drivers/gpu/drm/i915/display/intel_display.c > >>> +++ b/drivers/gpu/drm/i915/display/intel_display.c > >>> @@ -11040,7 +11040,7 @@ intel_prepare_plane_fb(struct drm_plane *_pla= ne, > >>> if (ret < 0) > >>> goto unpin_fb; > >>> - fence =3D dma_resv_get_excl_rcu(obj->base.resv); > >>> + fence =3D dma_resv_get_excl_unlocked(obj->base.resv); > >>> if (fence) { > >>> add_rps_boost_after_vblank(new_plane_state->hw.cr= tc, > >>> fence); > >>> diff --git a/drivers/gpu/drm/i915/dma_resv_utils.c b/drivers/gpu/drm/= i915/dma_resv_utils.c > >>> index 9e508e7d4629f..bdfc6bf16a4e9 100644 > >>> --- a/drivers/gpu/drm/i915/dma_resv_utils.c > >>> +++ b/drivers/gpu/drm/i915/dma_resv_utils.c > >>> @@ -10,7 +10,7 @@ > >>> void dma_resv_prune(struct dma_resv *resv) > >>> { > >>> if (dma_resv_trylock(resv)) { > >>> - if (dma_resv_test_signaled_rcu(resv, true)) > >>> + if (dma_resv_test_signaled_unlocked(resv, true)) > >>> dma_resv_add_excl_fence(resv, NULL); > >>> dma_resv_unlock(resv); > >>> } > >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_busy.c b/drivers/gpu/d= rm/i915/gem/i915_gem_busy.c > >>> index 25235ef630c10..754ad6d1bace9 100644 > >>> --- a/drivers/gpu/drm/i915/gem/i915_gem_busy.c > >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_busy.c > >>> @@ -105,7 +105,7 @@ i915_gem_busy_ioctl(struct drm_device *dev, void = *data, > >>> * Alternatively, we can trade that extra information on read/wri= te > >>> * activity with > >>> * args->busy =3D > >>> - * !dma_resv_test_signaled_rcu(obj->resv, true); > >>> + * !dma_resv_test_signaled_unlocked(obj->resv, true)= ; > >>> * to report the overall busyness. This is what the wait-ioctl do= es. > >>> * > >>> */ > >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers= /gpu/drm/i915/gem/i915_gem_execbuffer.c > >>> index 297143511f99b..e8f323564e57b 100644 > >>> --- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c > >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c > >>> @@ -1481,7 +1481,7 @@ static inline bool use_reloc_gpu(struct i915_vm= a *vma) > >>> if (DBG_FORCE_RELOC) > >>> return false; > >>> - return !dma_resv_test_signaled_rcu(vma->resv, true); > >>> + return !dma_resv_test_signaled_unlocked(vma->resv, true); > >>> } > >>> static unsigned long vma_phys_addr(struct i915_vma *vma, u32 offse= t) > >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu= /drm/i915/gem/i915_gem_object.h > >>> index 2ebd79537aea9..7c0eb425cb3b3 100644 > >>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h > >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h > >>> @@ -500,7 +500,7 @@ i915_gem_object_last_write_engine(struct drm_i915= _gem_object *obj) > >>> struct dma_fence *fence; > >>> rcu_read_lock(); > >>> - fence =3D dma_resv_get_excl_rcu(obj->base.resv); > >>> + fence =3D dma_resv_get_excl_unlocked(obj->base.resv); > >>> rcu_read_unlock(); > >>> if (fence && dma_fence_is_i915(fence) && !dma_fence_is_signaled(f= ence)) > >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gp= u/drm/i915/gem/i915_gem_userptr.c > >>> index a657b99ec7606..44df18dc9669f 100644 > >>> --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c > >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c > >>> @@ -85,8 +85,8 @@ static bool i915_gem_userptr_invalidate(struct mmu_= interval_notifier *mni, > >>> return true; > >>> /* we will unbind on next submission, still have userptr pins */ > >>> - r =3D dma_resv_wait_timeout_rcu(obj->base.resv, true, false, > >>> - MAX_SCHEDULE_TIMEOUT); > >>> + r =3D dma_resv_wait_timeout_unlocked(obj->base.resv, true, false, > >>> + MAX_SCHEDULE_TIMEOUT); > >>> if (r <=3D 0) > >>> drm_err(&i915->drm, "(%ld) failed to wait for idle\n", r)= ; > >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_wait.c b/drivers/gpu/d= rm/i915/gem/i915_gem_wait.c > >>> index 4b9856d5ba14f..5b6c52659ad4d 100644 > >>> --- a/drivers/gpu/drm/i915/gem/i915_gem_wait.c > >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_wait.c > >>> @@ -45,7 +45,7 @@ i915_gem_object_wait_reservation(struct dma_resv *r= esv, > >>> unsigned int count, i; > >>> int ret; > >>> - ret =3D dma_resv_get_fences_rcu(resv, &excl, &count, &sha= red); > >>> + ret =3D dma_resv_get_fences_unlocked(resv, &excl, &count,= &shared); > >>> if (ret) > >>> return ret; > >>> @@ -73,7 +73,7 @@ i915_gem_object_wait_reservation(struct dma_resv *r= esv, > >>> */ > >>> prune_fences =3D count && timeout >=3D 0; > >>> } else { > >>> - excl =3D dma_resv_get_excl_rcu(resv); > >>> + excl =3D dma_resv_get_excl_unlocked(resv); > >>> } > >>> if (excl && timeout >=3D 0) > >>> @@ -158,8 +158,8 @@ i915_gem_object_wait_priority(struct drm_i915_gem= _object *obj, > >>> unsigned int count, i; > >>> int ret; > >>> - ret =3D dma_resv_get_fences_rcu(obj->base.resv, > >>> - &excl, &count, &shared); > >>> + ret =3D dma_resv_get_fences_unlocked(obj->base.resv, > >>> + &excl, &count, &shared= ); > >>> if (ret) > >>> return ret; > >>> @@ -170,7 +170,7 @@ i915_gem_object_wait_priority(struct drm_i915_gem= _object *obj, > >>> kfree(shared); > >>> } else { > >>> - excl =3D dma_resv_get_excl_rcu(obj->base.resv); > >>> + excl =3D dma_resv_get_excl_unlocked(obj->base.resv); > >>> } > >>> if (excl) { > >>> diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i9= 15/i915_request.c > >>> index 970d8f4986bbe..f1ed03ced7dd1 100644 > >>> --- a/drivers/gpu/drm/i915/i915_request.c > >>> +++ b/drivers/gpu/drm/i915/i915_request.c > >>> @@ -1594,8 +1594,8 @@ i915_request_await_object(struct i915_request *= to, > >>> struct dma_fence **shared; > >>> unsigned int count, i; > >>> - ret =3D dma_resv_get_fences_rcu(obj->base.resv, > >>> - &excl, &count, &s= hared); > >>> + ret =3D dma_resv_get_fences_unlocked(obj->base.resv, > >>> + &excl, &count, &shared= ); > >>> if (ret) > >>> return ret; > >>> @@ -1611,7 +1611,7 @@ i915_request_await_object(struct i915_request *= to, > >>> dma_fence_put(shared[i]); > >>> kfree(shared); > >>> } else { > >>> - excl =3D dma_resv_get_excl_rcu(obj->base.resv); > >>> + excl =3D dma_resv_get_excl_unlocked(obj->base.resv); > >>> } > >>> if (excl) { > >>> diff --git a/drivers/gpu/drm/i915/i915_sw_fence.c b/drivers/gpu/drm/i= 915/i915_sw_fence.c > >>> index 2744558f30507..0bcb7ea44201e 100644 > >>> --- a/drivers/gpu/drm/i915/i915_sw_fence.c > >>> +++ b/drivers/gpu/drm/i915/i915_sw_fence.c > >>> @@ -582,7 +582,7 @@ int i915_sw_fence_await_reservation(struct i915_s= w_fence *fence, > >>> struct dma_fence **shared; > >>> unsigned int count, i; > >>> - ret =3D dma_resv_get_fences_rcu(resv, &excl, &count, &sha= red); > >>> + ret =3D dma_resv_get_fences_unlocked(resv, &excl, &count,= &shared); > >>> if (ret) > >>> return ret; > >>> @@ -606,7 +606,7 @@ int i915_sw_fence_await_reservation(struct i915_s= w_fence *fence, > >>> dma_fence_put(shared[i]); > >>> kfree(shared); > >>> } else { > >>> - excl =3D dma_resv_get_excl_rcu(resv); > >>> + excl =3D dma_resv_get_excl_unlocked(resv); > >>> } > >>> if (ret >=3D 0 && excl && excl->ops !=3D exclude) { > >>> diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_= gem.c > >>> index 56df86e5f7400..1aca60507bb14 100644 > >>> --- a/drivers/gpu/drm/msm/msm_gem.c > >>> +++ b/drivers/gpu/drm/msm/msm_gem.c > >>> @@ -915,8 +915,7 @@ int msm_gem_cpu_prep(struct drm_gem_object *obj, = uint32_t op, ktime_t *timeout) > >>> op & MSM_PREP_NOSYNC ? 0 : timeout_to_jiffies(timeout); > >>> long ret; > >>> - ret =3D dma_resv_wait_timeout_rcu(obj->resv, write, > >>> - true, remain); > >>> + ret =3D dma_resv_wait_timeout_unlocked(obj->resv, write, true, re= main); > >>> if (ret =3D=3D 0) > >>> return remain =3D=3D 0 ? -EBUSY : -ETIMEDOUT; > >>> else if (ret < 0) > >>> diff --git a/drivers/gpu/drm/nouveau/dispnv50/wndw.c b/drivers/gpu/dr= m/nouveau/dispnv50/wndw.c > >>> index 0cb1f9d848d3e..8d048bacd6f02 100644 > >>> --- a/drivers/gpu/drm/nouveau/dispnv50/wndw.c > >>> +++ b/drivers/gpu/drm/nouveau/dispnv50/wndw.c > >>> @@ -561,7 +561,7 @@ nv50_wndw_prepare_fb(struct drm_plane *plane, str= uct drm_plane_state *state) > >>> asyw->image.handle[0] =3D ctxdma->object.handle; > >>> } > >>> - asyw->state.fence =3D dma_resv_get_excl_rcu(nvbo->bo.base.resv); > >>> + asyw->state.fence =3D dma_resv_get_excl_unlocked(nvbo->bo.base.re= sv); > >>> asyw->image.offset[0] =3D nvbo->offset; > >>> if (wndw->func->prepare) { > >>> diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/= nouveau/nouveau_gem.c > >>> index a70e82413fa75..bc6b09ee9b552 100644 > >>> --- a/drivers/gpu/drm/nouveau/nouveau_gem.c > >>> +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c > >>> @@ -928,8 +928,8 @@ nouveau_gem_ioctl_cpu_prep(struct drm_device *dev= , void *data, > >>> return -ENOENT; > >>> nvbo =3D nouveau_gem_object(gem); > >>> - lret =3D dma_resv_wait_timeout_rcu(nvbo->bo.base.resv, write, tru= e, > >>> - no_wait ? 0 : 30 * HZ)= ; > >>> + lret =3D dma_resv_wait_timeout_unlocked(nvbo->bo.base.resv, write= , true, > >>> + no_wait ? 0 : 30 * HZ); > >>> if (!lret) > >>> ret =3D -EBUSY; > >>> else if (lret > 0) > >>> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/dr= m/panfrost/panfrost_drv.c > >>> index ca07098a61419..eef5b632ee0ce 100644 > >>> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c > >>> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c > >>> @@ -311,8 +311,8 @@ panfrost_ioctl_wait_bo(struct drm_device *dev, vo= id *data, > >>> if (!gem_obj) > >>> return -ENOENT; > >>> - ret =3D dma_resv_wait_timeout_rcu(gem_obj->resv, true, > >>> - true, timeout); > >>> + ret =3D dma_resv_wait_timeout_unlocked(gem_obj->resv, true, > >>> + true, timeout); > >>> if (!ret) > >>> ret =3D timeout ? -ETIMEDOUT : -EBUSY; > >>> diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/dr= m/panfrost/panfrost_job.c > >>> index 6003cfeb13221..2df3e999a38d0 100644 > >>> --- a/drivers/gpu/drm/panfrost/panfrost_job.c > >>> +++ b/drivers/gpu/drm/panfrost/panfrost_job.c > >>> @@ -203,7 +203,7 @@ static void panfrost_acquire_object_fences(struct= drm_gem_object **bos, > >>> int i; > >>> for (i =3D 0; i < bo_count; i++) > >>> - implicit_fences[i] =3D dma_resv_get_excl_rcu(bos[i]->resv= ); > >>> + implicit_fences[i] =3D dma_resv_get_excl_unlocked(bos[i]-= >resv); > >>> } > >>> static void panfrost_attach_object_fences(struct drm_gem_object **= bos, > >>> diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/ra= deon/radeon_gem.c > >>> index 05ea2f39f6261..1a38b0bf36d11 100644 > >>> --- a/drivers/gpu/drm/radeon/radeon_gem.c > >>> +++ b/drivers/gpu/drm/radeon/radeon_gem.c > >>> @@ -125,7 +125,7 @@ static int radeon_gem_set_domain(struct drm_gem_o= bject *gobj, > >>> } > >>> if (domain =3D=3D RADEON_GEM_DOMAIN_CPU) { > >>> /* Asking for cpu access wait for object idle */ > >>> - r =3D dma_resv_wait_timeout_rcu(robj->tbo.base.resv, true= , true, 30 * HZ); > >>> + r =3D dma_resv_wait_timeout_unlocked(robj->tbo.base.resv,= true, true, 30 * HZ); > >>> if (!r) > >>> r =3D -EBUSY; > >>> @@ -474,7 +474,7 @@ int radeon_gem_busy_ioctl(struct drm_device *dev,= void *data, > >>> } > >>> robj =3D gem_to_radeon_bo(gobj); > >>> - r =3D dma_resv_test_signaled_rcu(robj->tbo.base.resv, true); > >>> + r =3D dma_resv_test_signaled_unlocked(robj->tbo.base.resv, true); > >>> if (r =3D=3D 0) > >>> r =3D -EBUSY; > >>> else > >>> @@ -503,7 +503,7 @@ int radeon_gem_wait_idle_ioctl(struct drm_device = *dev, void *data, > >>> } > >>> robj =3D gem_to_radeon_bo(gobj); > >>> - ret =3D dma_resv_wait_timeout_rcu(robj->tbo.base.resv, true, true= , 30 * HZ); > >>> + ret =3D dma_resv_wait_timeout_unlocked(robj->tbo.base.resv, true,= true, 30 * HZ); > >>> if (ret =3D=3D 0) > >>> r =3D -EBUSY; > >>> else if (ret < 0) > >>> diff --git a/drivers/gpu/drm/radeon/radeon_mn.c b/drivers/gpu/drm/rad= eon/radeon_mn.c > >>> index e37c9a57a7c36..a19be3f8a218c 100644 > >>> --- a/drivers/gpu/drm/radeon/radeon_mn.c > >>> +++ b/drivers/gpu/drm/radeon/radeon_mn.c > >>> @@ -66,8 +66,8 @@ static bool radeon_mn_invalidate(struct mmu_interva= l_notifier *mn, > >>> return true; > >>> } > >>> - r =3D dma_resv_wait_timeout_rcu(bo->tbo.base.resv, true, false, > >>> - MAX_SCHEDULE_TIMEOUT); > >>> + r =3D dma_resv_wait_timeout_unlocked(bo->tbo.base.resv, true, fal= se, > >>> + MAX_SCHEDULE_TIMEOUT); > >>> if (r <=3D 0) > >>> DRM_ERROR("(%ld) failed to wait for user bo\n", r); > >>> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_b= o.c > >>> index ca1b098b6a561..215cad3149621 100644 > >>> --- a/drivers/gpu/drm/ttm/ttm_bo.c > >>> +++ b/drivers/gpu/drm/ttm/ttm_bo.c > >>> @@ -294,7 +294,7 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_= object *bo, > >>> struct dma_resv *resv =3D &bo->base._resv; > >>> int ret; > >>> - if (dma_resv_test_signaled_rcu(resv, true)) > >>> + if (dma_resv_test_signaled_unlocked(resv, true)) > >>> ret =3D 0; > >>> else > >>> ret =3D -EBUSY; > >>> @@ -306,8 +306,8 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_= object *bo, > >>> dma_resv_unlock(bo->base.resv); > >>> spin_unlock(&bo->bdev->lru_lock); > >>> - lret =3D dma_resv_wait_timeout_rcu(resv, true, interrupti= ble, > >>> - 30 * HZ); > >>> + lret =3D dma_resv_wait_timeout_unlocked(resv, true, inter= ruptible, > >>> + 30 * HZ); > >>> if (lret < 0) > >>> return lret; > >>> @@ -409,8 +409,8 @@ static void ttm_bo_release(struct kref *kref) > >>> /* Last resort, if we fail to allocate memory for= the > >>> * fences block for the BO to become idle > >>> */ > >>> - dma_resv_wait_timeout_rcu(bo->base.resv, true, fa= lse, > >>> - 30 * HZ); > >>> + dma_resv_wait_timeout_unlocked(bo->base.resv, tru= e, false, > >>> + 30 * HZ); > >>> } > >>> if (bo->bdev->funcs->release_notify) > >>> @@ -420,7 +420,7 @@ static void ttm_bo_release(struct kref *kref) > >>> ttm_mem_io_free(bdev, &bo->mem); > >>> } > >>> - if (!dma_resv_test_signaled_rcu(bo->base.resv, true) || > >>> + if (!dma_resv_test_signaled_unlocked(bo->base.resv, true) || > >>> !dma_resv_trylock(bo->base.resv)) { > >>> /* The BO is not idle, resurrect it for delayed destroy *= / > >>> ttm_bo_flush_all_fences(bo); > >>> @@ -1116,14 +1116,14 @@ int ttm_bo_wait(struct ttm_buffer_object *bo, > >>> long timeout =3D 15 * HZ; > >>> if (no_wait) { > >>> - if (dma_resv_test_signaled_rcu(bo->base.resv, true)) > >>> + if (dma_resv_test_signaled_unlocked(bo->base.resv, true)) > >>> return 0; > >>> else > >>> return -EBUSY; > >>> } > >>> - timeout =3D dma_resv_wait_timeout_rcu(bo->base.resv, true, > >>> - interruptible, time= out); > >>> + timeout =3D dma_resv_wait_timeout_unlocked(bo->base.resv, true, > >>> + interruptible, timeout); > >>> if (timeout < 0) > >>> return timeout; > >>> diff --git a/drivers/gpu/drm/vgem/vgem_fence.c b/drivers/gpu/drm/vgem= /vgem_fence.c > >>> index 2902dc6e64faf..010a82405e374 100644 > >>> --- a/drivers/gpu/drm/vgem/vgem_fence.c > >>> +++ b/drivers/gpu/drm/vgem/vgem_fence.c > >>> @@ -151,8 +151,8 @@ int vgem_fence_attach_ioctl(struct drm_device *de= v, > >>> /* Check for a conflicting fence */ > >>> resv =3D obj->resv; > >>> - if (!dma_resv_test_signaled_rcu(resv, > >>> - arg->flags & VGEM_FENCE= _WRITE)) { > >>> + if (!dma_resv_test_signaled_unlocked(resv, > >>> + arg->flags & VGEM_FENCE_WRIT= E)) { > >>> ret =3D -EBUSY; > >>> goto err_fence; > >>> } > >>> diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm= /virtio/virtgpu_ioctl.c > >>> index 669f2ee395154..ab010c8e32816 100644 > >>> --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c > >>> +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c > >>> @@ -451,10 +451,10 @@ static int virtio_gpu_wait_ioctl(struct drm_dev= ice *dev, void *data, > >>> return -ENOENT; > >>> if (args->flags & VIRTGPU_WAIT_NOWAIT) { > >>> - ret =3D dma_resv_test_signaled_rcu(obj->resv, true); > >>> + ret =3D dma_resv_test_signaled_unlocked(obj->resv, true); > >>> } else { > >>> - ret =3D dma_resv_wait_timeout_rcu(obj->resv, true, true, > >>> - timeout); > >>> + ret =3D dma_resv_wait_timeout_unlocked(obj->resv, true, t= rue, > >>> + timeout); > >>> } > >>> if (ret =3D=3D 0) > >>> ret =3D -EBUSY; > >>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c b/drivers/gpu/drm/vmw= gfx/vmwgfx_bo.c > >>> index 04dd49c4c2572..19e1ce23842a9 100644 > >>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c > >>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c > >>> @@ -743,7 +743,7 @@ static int vmw_user_bo_synccpu_grab(struct vmw_us= er_buffer_object *user_bo, > >>> if (flags & drm_vmw_synccpu_allow_cs) { > >>> long lret; > >>> - lret =3D dma_resv_wait_timeout_rcu > >>> + lret =3D dma_resv_wait_timeout_unlocked > >>> (bo->base.resv, true, true, > >>> nonblock ? 0 : MAX_SCHEDULE_TIMEOUT); > >>> if (!lret) > >>> diff --git a/include/linux/dma-resv.h b/include/linux/dma-resv.h > >>> index d44a77e8a7e34..99cfb7af966b8 100644 > >>> --- a/include/linux/dma-resv.h > >>> +++ b/include/linux/dma-resv.h > >>> @@ -246,7 +246,7 @@ dma_resv_get_excl(struct dma_resv *obj) > >>> } > >>> /** > >>> - * dma_resv_get_excl_rcu - get the reservation object's > >>> + * dma_resv_get_excl_unlocked - get the reservation object's > >>> * exclusive fence, without lock held. > >>> * @obj: the reservation object > >>> * > >>> @@ -257,7 +257,7 @@ dma_resv_get_excl(struct dma_resv *obj) > >>> * The exclusive fence or NULL if none > >>> */ > >>> static inline struct dma_fence * > >>> -dma_resv_get_excl_rcu(struct dma_resv *obj) > >>> +dma_resv_get_excl_unlocked(struct dma_resv *obj) > >>> { > >>> struct dma_fence *fence; > >>> @@ -278,16 +278,16 @@ void dma_resv_add_shared_fence(struct dma_resv = *obj, struct dma_fence *fence); > >>> void dma_resv_add_excl_fence(struct dma_resv *obj, struct dma_fenc= e *fence); > >>> -int dma_resv_get_fences_rcu(struct dma_resv *obj, > >>> - struct dma_fence **pfence_excl, > >>> - unsigned *pshared_count, > >>> - struct dma_fence ***pshared); > >>> +int dma_resv_get_fences_unlocked(struct dma_resv *obj, > >>> + struct dma_fence **pfence_excl, > >>> + unsigned *pshared_count, > >>> + struct dma_fence ***pshared); > >>> int dma_resv_copy_fences(struct dma_resv *dst, struct dma_resv *sr= c); > >>> -long dma_resv_wait_timeout_rcu(struct dma_resv *obj, bool wait_all, = bool intr, > >>> - unsigned long timeout); > >>> +long dma_resv_wait_timeout_unlocked(struct dma_resv *obj, bool wait_= all, bool intr, > >>> + unsigned long timeout); > >>> -bool dma_resv_test_signaled_rcu(struct dma_resv *obj, bool test_all)= ; > >>> +bool dma_resv_test_signaled_unlocked(struct dma_resv *obj, bool test= _all); > >>> #endif /* _LINUX_RESERVATION_H */ > --=20 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=-13.5 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 04B0CC47089 for ; Thu, 27 May 2021 13:25:34 +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 BB66F613ED for ; Thu, 27 May 2021 13:25:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BB66F613ED Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch 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 60E446F39E; Thu, 27 May 2021 13:25:33 +0000 (UTC) Received: from mail-oi1-x233.google.com (mail-oi1-x233.google.com [IPv6:2607:f8b0:4864:20::233]) by gabe.freedesktop.org (Postfix) with ESMTPS id A96B26F39C for ; Thu, 27 May 2021 13:25:32 +0000 (UTC) Received: by mail-oi1-x233.google.com with SMTP id x15so700062oic.13 for ; Thu, 27 May 2021 06:25:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=yQwLzJ+ZJHTrIF+F0wVqlsTETpecT+FF76rJ3qnoHhs=; b=DZ/sU+ZtUKGdK6FcCZGk9mgUyBQ0TzefivUOsH4ItQODItmp2LmJNUCBz49bSKkSfo q3PqUY0wnQk2GzWnmfhEcz6FOj8JGlGIvUCgmCI3ogvE+ii3rwpyj2ydcY1/MkrogbVe jaLT198sxOdablOHLPjWbrGj1TbwM0cERqAJA= 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=yQwLzJ+ZJHTrIF+F0wVqlsTETpecT+FF76rJ3qnoHhs=; b=DsQe7bfyPZsHkoG1u/3j6BZAPw74f3wIjwuuRrIZ5poNtjxfDa69dfqsR3/Muhc7j0 lKLrDSJnHOTRFvtaaL6JAApRMIa3VnAHz4lAryz6CYFuAe6aYM6I6uVYXs/7vVnAcMtk OEXgmXwHwASu+F86U4eGQN6CdNV9ryTD50wWwbrQw+NfI2JqPKp8XNM7rh8eQMklO+WR 4OpEbV+JVHc9MAZnYSqJa4PiE4Mf1US6X6WJTjWcfb9nd/iMW6Vnh0Ars9oSMkxVfPmp jv+fX7qC8sXI+0Qz+abp5mHb3o5UjmIqiI625t4wR+g44GAY1Atq3D3m2HqmWVvJGaMS nduQ== X-Gm-Message-State: AOAM533lSGhIukCYdlfkpSns5ADKAg8r8cdFUqW9yWTvYxUBFyEcGqgW La7cyrvPc7O/wzBTVzvyJrkUdQg5JrGeKZ87G9aQrw== X-Google-Smtp-Source: ABdhPJy1wJmc0iU2HiRwwXPt7P57oRbV2LS/8Mi4WO/FrkK7yInVrbZEDODu6K24C+0D0AKg2fMlooRGkldZx/9mHcA= X-Received: by 2002:a54:4809:: with SMTP id j9mr5372832oij.14.1622121931680; Thu, 27 May 2021 06:25:31 -0700 (PDT) MIME-Version: 1.0 References: <20210525211753.1086069-1-jason@jlekstrand.net> <20210525211753.1086069-3-jason@jlekstrand.net> <82e16239-e8ea-8b03-6a90-c7d18a5f8a91@amd.com> In-Reply-To: From: Daniel Vetter Date: Thu, 27 May 2021 15:25:20 +0200 Message-ID: To: =?UTF-8?Q?Christian_K=C3=B6nig?= Subject: Re: [Intel-gfx] [PATCH 2/7] dma-buf: Rename dma_resv helpers from _rcu to _unlocked (v2) 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: Gerd Hoffmann , intel-gfx , Maxime Ripard , Huang Rui , VMware Graphics , dri-devel , Thomas Zimmermann , Lucas Stach Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gVGh1LCBNYXkgMjcsIDIwMjEgYXQgMTo1OSBQTSBDaHJpc3RpYW4gS8O2bmlnCjxjaHJpc3Rp YW4ua29lbmlnQGFtZC5jb20+IHdyb3RlOgo+Cj4gQW0gMjcuMDUuMjEgdW0gMTI6Mzkgc2Nocmll YiBEYW5pZWwgVmV0dGVyOgo+ID4gT24gV2VkLCBNYXkgMjYsIDIwMjEgYXQgMTI6NTc6NDBQTSAr MDIwMCwgQ2hyaXN0aWFuIEvDtm5pZyB3cm90ZToKPiA+PiBBbSAyNS4wNS4yMSB1bSAyMzoxNyBz Y2hyaWViIEphc29uIEVrc3RyYW5kOgo+ID4+PiBOb25lIG9mIHRoZXNlIGhlbHBlcnMgYWN0dWFs bHkgbGVhayBhbnkgUkNVIGRldGFpbHMgdG8gdGhlIGNhbGxlci4gIFRoZXkKPiA+Pj4gYWxsIGFz c3VtZSB5b3UgaGF2ZSBhIGdlbnVpbmUgcmVmZXJlbmNlLCB0YWtlIHRoZSBSQ1UgcmVhZCBsb2Nr LCBhbmQKPiA+Pj4gcmV0cnkgaWYgbmVlZGVkLiAgTmFtaW5nIHRoZW0gd2l0aCBhbiBfcmN1IGlz IGxpa2VseSB0byBjYXVzZSBjYWxsZXJzCj4gPj4+IG1vcmUgcGFuaWMgdGhhbiBuZWVkZWQuCj4g Pj4gSSdtIHJlYWxseSB3b25kZXJpbmcgaWYgd2UgbmVlZCB0aGlzIHBvc3RmaXggaW4gdGhlIGZp cnN0IHBsYWNlLgo+ID4+Cj4gPj4gSWYgd2UgdXNlIHRoZSByaWdodCByY3VfZGVyZWZlcmVuY2Vf Y2hlY2soKSBtYWNybyB0aGVuIHRob3NlIGZ1bmN0aW9ucyBjYW4KPiA+PiBiZSBjYWxsZWQgd2l0 aCBib3RoIHRoZSByZXNlcnZhdGlvbiBvYmplY3QgbG9ja2VkIGFuZCB1bmxvY2tlZC4gSXQgc2hv dWxkbid0Cj4gPj4gbWF0dGVyIHRvIHRoZW0uCj4gPj4KPiA+PiBCdXQgZ2V0dGluZyByaWQgb2Yg dGhlIF9yY3UgcG9zdGZpeCBzb3VuZHMgbGlrZSBhIGdvb2QgaWRlYSBpbiBnZW5lcmFsIHRvCj4g Pj4gbWUuCj4gPiBTbyBkb2VzIHRoYXQgY291bnQgYXMgYW4gYWNrIG9yIG5vdD8gSWYgeWVzIEkg dGhpbmsgd2Ugc2hvdWxkIGxhbmQgdGhpcwo+ID4gcGF0Y2ggcmlnaHQgYXdheSwgc2luY2UgaXQn cyBnb2luZyB0byBjb25mbGljdCByZWFsIGZhc3QgYmFkbHkuCj4KPiBJIGhhZCBzb21lIGZvbGxv dyB1cCBkaXNjdXNzaW9uIHdpdGggSmFzb24gYW5kIEkgd291bGQgcmF0aGVyIGxpa2UgdG8KPiBz d2l0Y2ggdG8gdXNpbmcgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgaW4gYWxsIHBsYWNlcyBhbmQg Y29tcGxldGVseQo+IHJlbW92ZSB0aGUgX3JjdSBwb3N0Zml4LgoKSG0sIEknbSBub3Qgc3VyZSB3 aGV0aGVyIHNwcmVhZGluZyBfcmN1IHRyaWNrcyBmdXJ0aGVyIGlzIGFuCmVzcGVjaWFsbHkgYnJp Z2h0IGlkZWEuIEF0IGxlYXN0IGk5MTUgaXMgZnVsbCBvZiB2ZXJ5IGNsZXZlciBfcmN1CnRyaWNr cywgYW5kIGVuY291cmFnaW5nIGRyaXZlcnMgdG8gcm9sbCBvdXQgdGhlaXIgb3duIF9yY3UgZXZl cnl3aGVyZQppcyBwcm9iYWJseSBub3QgaW4gb3VyIGJlc3QgaW50ZXJlc3QuIFNvbWUgZmFzdC1w YXRoIGNoZWNraW5nIGlzIGltbwpvaywgYnV0IHRoYXQncyBpdC4gRXNwZWNpYWxseSBvbmNlIHdl IGdldCBpbnRvIHRoZSBlbnRpcmUKU0xBQl9UWVBFU0FGRV9CWV9SQ1UgYnVzaW5lc3MgaXQgYmVj b21lcyByZWFsbHkgbmFzdHkgcmVhbGx5IHF1aWNrbHkuCgpUaGF0J3Mgd2h5IEknbSBzbGlnaHRs eSBsZWFuaW5nIHRvd2FyZHMgX3VubG9ja2VkIHZhcmlhbnRzLCBleGNlcHQgd2UKZG8gdXNlIHRo b3NlIGluIGxvdHMgb2YgcGxhY2VzIHdoZXJlIHdlIGhvbGQgZG1hX3Jlc3ZfbG9jayB0b28uIFNv IG5vdApzdXJlIHdoYXQncyB0aGUgYmVzdCBwbGFuIG92ZXJhbGwgaGVyZS4KLURhbmllbAoKPiBC dXQgeWVzIEkgc2VlIHRoZSBwYWluIG9mIHJlYmFzaW5nIHRoaXMgYXMgd2VsbC4KPgo+IENocmlz dGlhbi4KPgo+ID4gLURhbmllbAo+ID4KPiA+PiBDaHJpc3RpYW4uCj4gPj4KPiA+Pj4gdjIgKEph c29uIEVrc3RyYW5kKToKPiA+Pj4gICAgLSBGaXggZnVuY3Rpb24gYXJndW1lbnQgaW5kZW50YXRp b24KPiA+Pj4KPiA+Pj4gU2lnbmVkLW9mZi1ieTogSmFzb24gRWtzdHJhbmQgPGphc29uQGpsZWtz dHJhbmQubmV0Pgo+ID4+PiBTdWdnZXN0ZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0 ZXJAZmZ3bGwuY2g+Cj4gPj4+IENjOiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmln QGFtZC5jb20+Cj4gPj4+IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RA bGludXguaW50ZWwuY29tPgo+ID4+PiBDYzogTWF4aW1lIFJpcGFyZCA8bXJpcGFyZEBrZXJuZWwu b3JnPgo+ID4+PiBDYzogVGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+Cj4g Pj4+IENjOiBMdWNhcyBTdGFjaCA8bC5zdGFjaEBwZW5ndXRyb25peC5kZT4KPiA+Pj4gQ2M6IFJv YiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KPiA+Pj4gQ2M6IFNlYW4gUGF1bCA8c2VhbkBw b29ybHkucnVuPgo+ID4+PiBDYzogSHVhbmcgUnVpIDxyYXkuaHVhbmdAYW1kLmNvbT4KPiA+Pj4g Q2M6IEdlcmQgSG9mZm1hbm4gPGtyYXhlbEByZWRoYXQuY29tPgo+ID4+PiBDYzogVk13YXJlIEdy YXBoaWNzIDxsaW51eC1ncmFwaGljcy1tYWludGFpbmVyQHZtd2FyZS5jb20+Cj4gPj4+IC0tLQo+ ID4+PiAgICBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jICAgICAgICAgICAgICAgICAgICAgfCAg NCArLS0KPiA+Pj4gICAgZHJpdmVycy9kbWEtYnVmL2RtYS1yZXN2LmMgICAgICAgICAgICAgICAg ICAgIHwgMjggKysrKysrKysrLS0tLS0tLS0tLQo+ID4+PiAgICBkcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfZGlzcGxheS5jICAgfCAgNiArKy0tCj4gPj4+ICAgIGRyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMgICB8ICAyICstCj4gPj4+ICAgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyAgICAgICB8ICA0ICstLQo+ID4+PiAg ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWRzLmMgICAgICAgfCAgNiArKy0t Cj4gPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jICAgICAgICB8 ICA0ICstLQo+ID4+PiAgICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0 LmMgICAgfCAgNCArLS0KPiA+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X3V2ZC5jICAgICAgIHwgIDYgKystLQo+ID4+PiAgICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfdm0uYyAgICAgICAgfCAxNCArKysrKy0tLS0tCj4gPj4+ICAgIC4uLi9ncHUvZHJt L2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYyB8ICA2ICsrLS0KPiA+Pj4gICAgZHJp dmVycy9ncHUvZHJtL2RybV9nZW0uYyAgICAgICAgICAgICAgICAgICAgIHwgMTAgKysrLS0tLQo+ ID4+PiAgICBkcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9hdG9taWNfaGVscGVyLmMgICAgICAgfCAg MiArLQo+ID4+PiAgICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jICAgICAg ICAgfCAgNyArKy0tLQo+ID4+PiAgICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dl bV9zdWJtaXQuYyAgfCAgOCArKystLS0KPiA+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5LmMgIHwgIDIgKy0KPiA+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZG1hX3Jlc3ZfdXRpbHMuYyAgICAgICAgIHwgIDIgKy0KPiA+Pj4gICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2J1c3kuYyAgICAgIHwgIDIgKy0KPiA+Pj4gICAgLi4uL2dw dS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhlY2J1ZmZlci5jICAgIHwgIDIgKy0KPiA+Pj4gICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oICAgIHwgIDIgKy0KPiA+ Pj4gICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYyAgIHwgIDQg Ky0tCj4gPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV93YWl0LmMgICAg ICB8IDEwICsrKy0tLS0KPiA+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0 LmMgICAgICAgICAgIHwgIDYgKystLQo+ID4+PiAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3N3X2ZlbmNlLmMgICAgICAgICAgfCAgNCArLS0KPiA+Pj4gICAgZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZ2VtLmMgICAgICAgICAgICAgICAgIHwgIDMgKy0KPiA+Pj4gICAgZHJpdmVycy9ncHUv ZHJtL25vdXZlYXUvZGlzcG52NTAvd25kdy5jICAgICAgIHwgIDIgKy0KPiA+Pj4gICAgZHJpdmVy cy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYyAgICAgICAgIHwgIDQgKy0tCj4gPj4+ICAg IGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYyAgICAgICB8ICA0ICstLQo+ ID4+PiAgICBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rfam9iLmMgICAgICAgfCAg MiArLQo+ID4+PiAgICBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYyAgICAgICAg ICAgfCAgNiArKy0tCj4gPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21uLmMg ICAgICAgICAgICB8ICA0ICstLQo+ID4+PiAgICBkcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5j ICAgICAgICAgICAgICAgICAgfCAxOCArKysrKystLS0tLS0KPiA+Pj4gICAgZHJpdmVycy9ncHUv ZHJtL3ZnZW0vdmdlbV9mZW5jZS5jICAgICAgICAgICAgIHwgIDQgKy0tCj4gPj4+ICAgIGRyaXZl cnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9pb2N0bC5jICAgICAgICB8ICA2ICsrLS0KPiA+Pj4g ICAgZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYm8uYyAgICAgICAgICAgIHwgIDIgKy0K PiA+Pj4gICAgaW5jbHVkZS9saW51eC9kbWEtcmVzdi5oICAgICAgICAgICAgICAgICAgICAgIHwg MTggKysrKysrLS0tLS0tCj4gPj4+ICAgIDM2IGZpbGVzIGNoYW5nZWQsIDEwOCBpbnNlcnRpb25z KCspLCAxMTAgZGVsZXRpb25zKC0pCj4gPj4+Cj4gPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Rt YS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwo+ID4+PiBpbmRleCBm MjY0YjcwYzM4M2ViLi5lZDY0NTFkNTVkNjYzIDEwMDY0NAo+ID4+PiAtLS0gYS9kcml2ZXJzL2Rt YS1idWYvZG1hLWJ1Zi5jCj4gPj4+ICsrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPiA+ Pj4gQEAgLTExNDcsOCArMTE0Nyw4IEBAIHN0YXRpYyBpbnQgX19kbWFfYnVmX2JlZ2luX2NwdV9h Y2Nlc3Moc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiA+Pj4gICAgIGxvbmcgcmV0Owo+ID4+PiAg ICAgLyogV2FpdCBvbiBhbnkgaW1wbGljaXQgcmVuZGVyaW5nIGZlbmNlcyAqLwo+ID4+PiAtICAg cmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShyZXN2LCB3cml0ZSwgdHJ1ZSwKPiA+Pj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9TQ0hFRFVM RV9USU1FT1VUKTsKPiA+Pj4gKyAgIHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tl ZChyZXN2LCB3cml0ZSwgdHJ1ZSwKPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4gPj4+ICAgICBpZiAocmV0IDwgMCkK PiA+Pj4gICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv ZG1hLWJ1Zi9kbWEtcmVzdi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1yZXN2LmMKPiA+Pj4gaW5k ZXggNmRkYmViNWRmYmY2NS4uZDZmMWVkNGNkNGQ1NSAxMDA2NDQKPiA+Pj4gLS0tIGEvZHJpdmVy cy9kbWEtYnVmL2RtYS1yZXN2LmMKPiA+Pj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1yZXN2 LmMKPiA+Pj4gQEAgLTQxNyw3ICs0MTcsNyBAQCBpbnQgZG1hX3Jlc3ZfY29weV9mZW5jZXMoc3Ry dWN0IGRtYV9yZXN2ICpkc3QsIHN0cnVjdCBkbWFfcmVzdiAqc3JjKQo+ID4+PiAgICBFWFBPUlRf U1lNQk9MKGRtYV9yZXN2X2NvcHlfZmVuY2VzKTsKPiA+Pj4gICAgLyoqCj4gPj4+IC0gKiBkbWFf cmVzdl9nZXRfZmVuY2VzX3JjdSAtIEdldCBhbiBvYmplY3QncyBzaGFyZWQgYW5kIGV4Y2x1c2l2 ZQo+ID4+PiArICogZG1hX3Jlc3ZfZ2V0X2ZlbmNlc191bmxvY2tlZCAtIEdldCBhbiBvYmplY3Qn cyBzaGFyZWQgYW5kIGV4Y2x1c2l2ZQo+ID4+PiAgICAgKiBmZW5jZXMgd2l0aG91dCB1cGRhdGUg c2lkZSBsb2NrIGhlbGQKPiA+Pj4gICAgICogQG9iajogdGhlIHJlc2VydmF0aW9uIG9iamVjdAo+ ID4+PiAgICAgKiBAcGZlbmNlX2V4Y2w6IHRoZSByZXR1cm5lZCBleGNsdXNpdmUgZmVuY2UgKG9y IE5VTEwpCj4gPj4+IEBAIC00MjksMTAgKzQyOSwxMCBAQCBFWFBPUlRfU1lNQk9MKGRtYV9yZXN2 X2NvcHlfZmVuY2VzKTsKPiA+Pj4gICAgICogZXhjbHVzaXZlIGZlbmNlIGlzIG5vdCBzcGVjaWZp ZWQgdGhlIGZlbmNlIGlzIHB1dCBpbnRvIHRoZSBhcnJheSBvZiB0aGUKPiA+Pj4gICAgICogc2hh cmVkIGZlbmNlcyBhcyB3ZWxsLiBSZXR1cm5zIGVpdGhlciB6ZXJvIG9yIC1FTk9NRU0uCj4gPj4+ ICAgICAqLwo+ID4+PiAtaW50IGRtYV9yZXN2X2dldF9mZW5jZXNfcmN1KHN0cnVjdCBkbWFfcmVz diAqb2JqLAo+ID4+PiAtICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICoq cGZlbmNlX2V4Y2wsCj4gPj4+IC0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpwc2hh cmVkX2NvdW50LAo+ID4+PiAtICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNl ICoqKnBzaGFyZWQpCj4gPj4+ICtpbnQgZG1hX3Jlc3ZfZ2V0X2ZlbmNlc191bmxvY2tlZChzdHJ1 Y3QgZG1hX3Jlc3YgKm9iaiwKPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZG1hX2ZlbmNlICoqcGZlbmNlX2V4Y2wsCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgKnBzaGFyZWRfY291bnQsCj4gPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqKipwc2hhcmVkKQo+ID4+PiAgICB7Cj4gPj4+ICAg ICBzdHJ1Y3QgZG1hX2ZlbmNlICoqc2hhcmVkID0gTlVMTDsKPiA+Pj4gICAgIHN0cnVjdCBkbWFf ZmVuY2UgKmZlbmNlX2V4Y2w7Cj4gPj4+IEBAIC01MTUsMTAgKzUxNSwxMCBAQCBpbnQgZG1hX3Jl c3ZfZ2V0X2ZlbmNlc19yY3Uoc3RydWN0IGRtYV9yZXN2ICpvYmosCj4gPj4+ICAgICAqcHNoYXJl ZCA9IHNoYXJlZDsKPiA+Pj4gICAgIHJldHVybiByZXQ7Cj4gPj4+ICAgIH0KPiA+Pj4gLUVYUE9S VF9TWU1CT0xfR1BMKGRtYV9yZXN2X2dldF9mZW5jZXNfcmN1KTsKPiA+Pj4gK0VYUE9SVF9TWU1C T0xfR1BMKGRtYV9yZXN2X2dldF9mZW5jZXNfdW5sb2NrZWQpOwo+ID4+PiAgICAvKioKPiA+Pj4g LSAqIGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3UgLSBXYWl0IG9uIHJlc2VydmF0aW9uJ3Mgb2Jq ZWN0cwo+ID4+PiArICogZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkIC0gV2FpdCBvbiBy ZXNlcnZhdGlvbidzIG9iamVjdHMKPiA+Pj4gICAgICogc2hhcmVkIGFuZC9vciBleGNsdXNpdmUg ZmVuY2VzLgo+ID4+PiAgICAgKiBAb2JqOiB0aGUgcmVzZXJ2YXRpb24gb2JqZWN0Cj4gPj4+ICAg ICAqIEB3YWl0X2FsbDogaWYgdHJ1ZSwgd2FpdCBvbiBhbGwgZmVuY2VzLCBlbHNlIHdhaXQgb24g anVzdCBleGNsdXNpdmUgZmVuY2UKPiA+Pj4gQEAgLTUyOSw5ICs1MjksOSBAQCBFWFBPUlRfU1lN Qk9MX0dQTChkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdSk7Cj4gPj4+ICAgICAqIFJldHVybnMgLUVS RVNUQVJUU1lTIGlmIGludGVycnVwdGVkLCAwIGlmIHRoZSB3YWl0IHRpbWVkIG91dCwgb3IKPiA+ Pj4gICAgICogZ3JlYXRlciB0aGFuIHplciBvbiBzdWNjZXNzLgo+ID4+PiAgICAgKi8KPiA+Pj4g LWxvbmcgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShzdHJ1Y3QgZG1hX3Jlc3YgKm9iaiwKPiA+ Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3YWl0X2FsbCwgYm9vbCBpbnRyLAo+ ID4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCj4g Pj4+ICtsb25nIGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZChzdHJ1Y3QgZG1hX3Jlc3Yg Km9iaiwKPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdhaXRfYWxs LCBib29sIGludHIsCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyB0aW1lb3V0KQo+ID4+PiAgICB7Cj4gPj4+ICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpm ZW5jZTsKPiA+Pj4gICAgIHVuc2lnbmVkIHNlcSwgc2hhcmVkX2NvdW50Owo+ID4+PiBAQCAtNjAy LDcgKzYwMiw3IEBAIGxvbmcgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShzdHJ1Y3QgZG1hX3Jl c3YgKm9iaiwKPiA+Pj4gICAgIHJjdV9yZWFkX3VubG9jaygpOwo+ID4+PiAgICAgZ290byByZXRy eTsKPiA+Pj4gICAgfQo+ID4+PiAtRVhQT1JUX1NZTUJPTF9HUEwoZG1hX3Jlc3Zfd2FpdF90aW1l b3V0X3JjdSk7Cj4gPj4+ICtFWFBPUlRfU1lNQk9MX0dQTChkbWFfcmVzdl93YWl0X3RpbWVvdXRf dW5sb2NrZWQpOwo+ID4+PiAgICBzdGF0aWMgaW5saW5lIGludCBkbWFfcmVzdl90ZXN0X3NpZ25h bGVkX3NpbmdsZShzdHJ1Y3QgZG1hX2ZlbmNlICpwYXNzZWRfZmVuY2UpCj4gPj4+IEBAIC02MjIs NyArNjIyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9zaW5n bGUoc3RydWN0IGRtYV9mZW5jZSAqcGFzc2VkX2ZlbmNlKQo+ID4+PiAgICB9Cj4gPj4+ICAgIC8q Kgo+ID4+PiAtICogZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3UgLSBUZXN0IGlmIGEgcmVzZXJ2 YXRpb24gb2JqZWN0J3MKPiA+Pj4gKyAqIGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfdW5sb2NrZWQg LSBUZXN0IGlmIGEgcmVzZXJ2YXRpb24gb2JqZWN0J3MKPiA+Pj4gICAgICogZmVuY2VzIGhhdmUg YmVlbiBzaWduYWxlZC4KPiA+Pj4gICAgICogQG9iajogdGhlIHJlc2VydmF0aW9uIG9iamVjdAo+ ID4+PiAgICAgKiBAdGVzdF9hbGw6IGlmIHRydWUsIHRlc3QgYWxsIGZlbmNlcywgb3RoZXJ3aXNl IG9ubHkgdGVzdCB0aGUgZXhjbHVzaXZlCj4gPj4+IEBAIC02MzEsNyArNjMxLDcgQEAgc3RhdGlj IGlubGluZSBpbnQgZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9zaW5nbGUoc3RydWN0IGRtYV9mZW5j ZSAqcGFzc2VkX2ZlbmNlKQo+ID4+PiAgICAgKiBSRVRVUk5TCj4gPj4+ICAgICAqIHRydWUgaWYg YWxsIGZlbmNlcyBzaWduYWxlZCwgZWxzZSBmYWxzZQo+ID4+PiAgICAgKi8KPiA+Pj4gLWJvb2wg ZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3Uoc3RydWN0IGRtYV9yZXN2ICpvYmosIGJvb2wgdGVz dF9hbGwpCj4gPj4+ICtib29sIGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfdW5sb2NrZWQoc3RydWN0 IGRtYV9yZXN2ICpvYmosIGJvb2wgdGVzdF9hbGwpCj4gPj4+ICAgIHsKPiA+Pj4gICAgIHVuc2ln bmVkIHNlcSwgc2hhcmVkX2NvdW50Owo+ID4+PiAgICAgaW50IHJldDsKPiA+Pj4gQEAgLTY4MCw0 ICs2ODAsNCBAQCBib29sIGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfcmN1KHN0cnVjdCBkbWFfcmVz diAqb2JqLCBib29sIHRlc3RfYWxsKQo+ID4+PiAgICAgcmN1X3JlYWRfdW5sb2NrKCk7Cj4gPj4+ ICAgICByZXR1cm4gcmV0Owo+ID4+PiAgICB9Cj4gPj4+IC1FWFBPUlRfU1lNQk9MX0dQTChkbWFf cmVzdl90ZXN0X3NpZ25hbGVkX3JjdSk7Cj4gPj4+ICtFWFBPUlRfU1lNQk9MX0dQTChkbWFfcmVz dl90ZXN0X3NpZ25hbGVkX3VubG9ja2VkKTsKPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfZGlzcGxheS5jCj4gPj4+IGluZGV4IDhhMWZiOGI2NjA2ZTUuLmI4ZTI0ZjE5 OWJlOWEgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9kaXNwbGF5LmMKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X2Rpc3BsYXkuYwo+ID4+PiBAQCAtMjAzLDkgKzIwMyw5IEBAIGludCBhbWRncHVfZGlzcGxheV9j cnRjX3BhZ2VfZmxpcF90YXJnZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4+PiAgICAgICAg ICAgICBnb3RvIHVucGluOwo+ID4+PiAgICAgfQo+ID4+PiAtICAgciA9IGRtYV9yZXN2X2dldF9m ZW5jZXNfcmN1KG5ld19hYm8tPnRiby5iYXNlLnJlc3YsICZ3b3JrLT5leGNsLAo+ID4+PiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd29yay0+c2hhcmVkX2NvdW50 LAo+ID4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd29yay0+ c2hhcmVkKTsKPiA+Pj4gKyAgIHIgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3VubG9ja2VkKG5ld19h Ym8tPnRiby5iYXNlLnJlc3YsICZ3b3JrLT5leGNsLAo+ID4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJndvcmstPnNoYXJlZF9jb3VudCwKPiA+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZ3b3JrLT5zaGFyZWQpOwo+ID4+PiAgICAgaWYgKHVu bGlrZWx5KHIgIT0gMCkpIHsKPiA+Pj4gICAgICAgICAgICAgRFJNX0VSUk9SKCJmYWlsZWQgdG8g Z2V0IGZlbmNlcyBmb3IgYnVmZmVyXG4iKTsKPiA+Pj4gICAgICAgICAgICAgZ290byB1bnBpbjsK PiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFf YnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jCj4gPj4+ IGluZGV4IGJhYTk4MGE0NzdkOTQuLjBkMDMxOWJjNTE1NzcgMTAwNjQ0Cj4gPj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMKPiA+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuYwo+ID4+PiBAQCAtOTgsNyAr OTgsNyBAQCBfX2RtYV9yZXN2X21ha2VfZXhjbHVzaXZlKHN0cnVjdCBkbWFfcmVzdiAqb2JqKQo+ ID4+PiAgICAgaWYgKCFkbWFfcmVzdl9nZXRfbGlzdChvYmopKSAvKiBubyBzaGFyZWQgZmVuY2Vz IHRvIGNvbnZlcnQgKi8KPiA+Pj4gICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPj4+IC0gICByID0g ZG1hX3Jlc3ZfZ2V0X2ZlbmNlc19yY3Uob2JqLCBOVUxMLCAmY291bnQsICZmZW5jZXMpOwo+ID4+ PiArICAgciA9IGRtYV9yZXN2X2dldF9mZW5jZXNfdW5sb2NrZWQob2JqLCBOVUxMLCAmY291bnQs ICZmZW5jZXMpOwo+ID4+PiAgICAgaWYgKHIpCj4gPj4+ICAgICAgICAgICAgIHJldHVybiByOwo+ ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5j IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jCj4gPj4+IGluZGV4IDE4 OTc0YmQwODFmMDAuLjhlMjk5NmQ2YmEzYWQgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYwo+ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKPiA+Pj4gQEAgLTQ3MSw4ICs0NzEsOCBAQCBpbnQgYW1k Z3B1X2dlbV93YWl0X2lkbGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKPiA+Pj4gICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Cj4gPj4+ICAgICB9Cj4gPj4+ICAg ICByb2JqID0gZ2VtX3RvX2FtZGdwdV9ibyhnb2JqKTsKPiA+Pj4gLSAgIHJldCA9IGRtYV9yZXN2 X3dhaXRfdGltZW91dF9yY3Uocm9iai0+dGJvLmJhc2UucmVzdiwgdHJ1ZSwgdHJ1ZSwKPiA+Pj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpOwo+ ID4+PiArICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKHJvYmotPnRiby5i YXNlLnJlc3YsIHRydWUsIHRydWUsCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGltZW91dCk7Cj4gPj4+ICAgICAvKiByZXQgPT0gMCBtZWFucyBub3Qgc2ln bmFsZWQsCj4gPj4+ICAgICAgKiByZXQgPiAwIG1lYW5zIHNpZ25hbGVkCj4gPj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWRzLmMgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWRzLmMKPiA+Pj4gaW5kZXggYjQ5NzFlOTBiOThjZi4u MzhlMWIzMmRkMmNlZiAxMDA2NDQKPiA+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2lkcy5jCj4gPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9pZHMuYwo+ID4+PiBAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgYW1kZ3B1X3Bhc2lkX2Zy ZWVfZGVsYXllZChzdHJ1Y3QgZG1hX3Jlc3YgKnJlc3YsCj4gPj4+ICAgICB1bnNpZ25lZCBjb3Vu dDsKPiA+Pj4gICAgIGludCByOwo+ID4+PiAtICAgciA9IGRtYV9yZXN2X2dldF9mZW5jZXNfcmN1 KHJlc3YsIE5VTEwsICZjb3VudCwgJmZlbmNlcyk7Cj4gPj4+ICsgICByID0gZG1hX3Jlc3ZfZ2V0 X2ZlbmNlc191bmxvY2tlZChyZXN2LCBOVUxMLCAmY291bnQsICZmZW5jZXMpOwo+ID4+PiAgICAg aWYgKHIpCj4gPj4+ICAgICAgICAgICAgIGdvdG8gZmFsbGJhY2s7Cj4gPj4+IEBAIC0xNTYsOCAr MTU2LDggQEAgdm9pZCBhbWRncHVfcGFzaWRfZnJlZV9kZWxheWVkKHN0cnVjdCBkbWFfcmVzdiAq cmVzdiwKPiA+Pj4gICAgIC8qIE5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aGUgZGVsYXllZCBkZWxl dGUsIGFzIGxhc3QgcmVzb3J0Cj4gPj4+ICAgICAgKiBibG9jayBmb3IgYWxsIHRoZSBmZW5jZXMg dG8gY29tcGxldGUuCj4gPj4+ICAgICAgKi8KPiA+Pj4gLSAgIGRtYV9yZXN2X3dhaXRfdGltZW91 dF9yY3UocmVzdiwgdHJ1ZSwgZmFsc2UsCj4gPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4gPj4+ICsgICBkbWFfcmVzdl93 YWl0X3RpbWVvdXRfdW5sb2NrZWQocmVzdiwgdHJ1ZSwgZmFsc2UsCj4gPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+ID4+PiAgICAg YW1kZ3B1X3Bhc2lkX2ZyZWUocGFzaWQpOwo+ID4+PiAgICB9Cj4gPj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9tbi5jCj4gPj4+IGluZGV4IDgyOGI1MTY3ZmYxMjguLjAzMTljOGI1 NDdjNDggMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9tbi5jCj4gPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5j Cj4gPj4+IEBAIC03NSw4ICs3NSw4IEBAIHN0YXRpYyBib29sIGFtZGdwdV9tbl9pbnZhbGlkYXRl X2dmeChzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICptbmksCj4gPj4+ICAgICBtbXVfaW50 ZXJ2YWxfc2V0X3NlcShtbmksIGN1cl9zZXEpOwo+ID4+PiAtICAgciA9IGRtYV9yZXN2X3dhaXRf dGltZW91dF9yY3UoYm8tPnRiby5iYXNlLnJlc3YsIHRydWUsIGZhbHNlLAo+ID4+PiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+ID4+PiAr ICAgciA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZChiby0+dGJvLmJhc2UucmVzdiwg dHJ1ZSwgZmFsc2UsCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKPiA+Pj4gICAgIG11dGV4X3VubG9jaygmYWRldi0+bm90 aWZpZXJfbG9jayk7Cj4gPj4+ICAgICBpZiAociA8PSAwKQo+ID4+PiAgICAgICAgICAgICBEUk1f RVJST1IoIiglbGQpIGZhaWxlZCB0byB3YWl0IGZvciB1c2VyIGJvXG4iLCByKTsKPiA+Pj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuYyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuYwo+ID4+PiBpbmRleCAwYWRm ZmNhY2UzMjYzLi5kZTFjN2M1NTAxNjgzIDEwMDY0NAo+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jCj4gPj4+IEBAIC03OTEsOCArNzkxLDggQEAgaW50 IGFtZGdwdV9ib19rbWFwKHN0cnVjdCBhbWRncHVfYm8gKmJvLCB2b2lkICoqcHRyKQo+ID4+PiAg ICAgICAgICAgICByZXR1cm4gMDsKPiA+Pj4gICAgIH0KPiA+Pj4gLSAgIHIgPSBkbWFfcmVzdl93 YWl0X3RpbWVvdXRfcmN1KGJvLT50Ym8uYmFzZS5yZXN2LCBmYWxzZSwgZmFsc2UsCj4gPj4+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1NDSEVEVUxFX1RJ TUVPVVQpOwo+ID4+PiArICAgciA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZChiby0+ dGJvLmJhc2UucmVzdiwgZmFsc2UsIGZhbHNlLAo+ID4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4gPj4+ICAgICBpZiAociA8 IDApCj4gPj4+ICAgICAgICAgICAgIHJldHVybiByOwo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3V2ZC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X3V2ZC5jCj4gPj4+IGluZGV4IGM2ZGJjMDgwMTYwNDUuLjRhMjE5NjQwNGZi NjkgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91 dmQuYwo+ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdXZkLmMK PiA+Pj4gQEAgLTExMTUsOSArMTExNSw5IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3V2ZF9zZW5kX21z ZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHN0cnVjdCBhbWRncHVfYm8gKmJvLAo+ID4+PiAg ICAgaWItPmxlbmd0aF9kdyA9IDE2Owo+ID4+PiAgICAgaWYgKGRpcmVjdCkgewo+ID4+PiAtICAg ICAgICAgICByID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShiby0+dGJvLmJhc2UucmVzdiwK PiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRydWUsIGZhbHNlLAo+ID4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbXNlY3NfdG9famlmZmllcygxMCkpOwo+ID4+PiArICAgICAgICAgICBy ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKGJvLT50Ym8uYmFzZS5yZXN2LAo+ID4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGZh bHNlLAo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKPiA+Pj4gICAgICAgICAgICAgaWYgKHIgPT0gMCkKPiA+ Pj4gICAgICAgICAgICAgICAgICAgICByID0gLUVUSU1FRE9VVDsKPiA+Pj4gICAgICAgICAgICAg aWYgKHIgPCAwKQo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwo+ID4+ PiBpbmRleCA0YTNlM2Y3MmUxMjc3Li43YmExYzUzN2Q2NTg0IDEwMDY0NAo+ID4+PiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwo+ID4+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwo+ID4+PiBAQCAtMjAwNywxNCArMjAwNywx NCBAQCBzdGF0aWMgdm9pZCBhbWRncHVfdm1fcHJ0X2Zpbmkoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsIHN0cnVjdCBhbWRncHVfdm0gKnZtKQo+ID4+PiAgICAgdW5zaWduZWQgaSwgc2hhcmVk X2NvdW50Owo+ID4+PiAgICAgaW50IHI7Cj4gPj4+IC0gICByID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNl c19yY3UocmVzdiwgJmV4Y2wsCj4gPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZzaGFyZWRfY291bnQsICZzaGFyZWQpOwo+ID4+PiArICAgciA9IGRtYV9yZXN2 X2dldF9mZW5jZXNfdW5sb2NrZWQocmVzdiwgJmV4Y2wsCj4gPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmc2hhcmVkX2NvdW50LCAmc2hhcmVkKTsKPiA+Pj4gICAgIGlm IChyKSB7Cj4gPj4+ICAgICAgICAgICAgIC8qIE5vdCBlbm91Z2ggbWVtb3J5IHRvIGdyYWIgdGhl IGZlbmNlIGxpc3QsIGFzIGxhc3QgcmVzb3J0Cj4gPj4+ICAgICAgICAgICAgICAqIGJsb2NrIGZv ciBhbGwgdGhlIGZlbmNlcyB0byBjb21wbGV0ZS4KPiA+Pj4gICAgICAgICAgICAgICovCj4gPj4+ IC0gICAgICAgICAgIGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3UocmVzdiwgdHJ1ZSwgZmFsc2Us Cj4gPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1B WF9TQ0hFRFVMRV9USU1FT1VUKTsKPiA+Pj4gKyAgICAgICAgICAgZG1hX3Jlc3Zfd2FpdF90aW1l b3V0X3VubG9ja2VkKHJlc3YsIHRydWUsIGZhbHNlLAo+ID4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+ID4+PiAgICAg ICAgICAgICByZXR1cm47Cj4gPj4+ICAgICB9Cj4gPj4+IEBAIC0yNjI1LDcgKzI2MjUsNyBAQCBi b29sIGFtZGdwdV92bV9ldmljdGFibGUoc3RydWN0IGFtZGdwdV9ibyAqYm8pCj4gPj4+ICAgICAg ICAgICAgIHJldHVybiB0cnVlOwo+ID4+PiAgICAgLyogRG9uJ3QgZXZpY3QgVk0gcGFnZSB0YWJs ZXMgd2hpbGUgdGhleSBhcmUgYnVzeSAqLwo+ID4+PiAtICAgaWYgKCFkbWFfcmVzdl90ZXN0X3Np Z25hbGVkX3JjdShiby0+dGJvLmJhc2UucmVzdiwgdHJ1ZSkpCj4gPj4+ICsgICBpZiAoIWRtYV9y ZXN2X3Rlc3Rfc2lnbmFsZWRfdW5sb2NrZWQoYm8tPnRiby5iYXNlLnJlc3YsIHRydWUpKQo+ID4+ PiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gPj4+ICAgICAvKiBUcnkgdG8gYmxvY2sgb25n b2luZyB1cGRhdGVzICovCj4gPj4+IEBAIC0yODA1LDggKzI4MDUsOCBAQCB2b2lkIGFtZGdwdV92 bV9hZGp1c3Rfc2l6ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdWludDMyX3QgbWluX3Zt X3NpemUsCj4gPj4+ICAgICAqLwo+ID4+PiAgICBsb25nIGFtZGdwdV92bV93YWl0X2lkbGUoc3Ry dWN0IGFtZGdwdV92bSAqdm0sIGxvbmcgdGltZW91dCkKPiA+Pj4gICAgewo+ID4+PiAtICAgdGlt ZW91dCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3Uodm0tPnJvb3QuYmFzZS5iby0+dGJvLmJh c2UucmVzdiwKPiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy dWUsIHRydWUsIHRpbWVvdXQpOwo+ID4+PiArICAgdGltZW91dCA9IGRtYV9yZXN2X3dhaXRfdGlt ZW91dF91bmxvY2tlZCh2bS0+cm9vdC5iYXNlLmJvLT50Ym8uYmFzZS5yZXN2LAo+ID4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0cnVlLCB0aW1l b3V0KTsKPiA+Pj4gICAgIGlmICh0aW1lb3V0IDw9IDApCj4gPj4+ICAgICAgICAgICAgIHJldHVy biB0aW1lb3V0Owo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5 L2FtZGdwdV9kbS9hbWRncHVfZG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRn cHVfZG0vYW1kZ3B1X2RtLmMKPiA+Pj4gaW5kZXggOWNhNTE3YjY1ODU0Ni4uMDEyMWQyODE3ZmEy NiAxMDA2NDQKPiA+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9k bS9hbWRncHVfZG0uYwo+ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1k Z3B1X2RtL2FtZGdwdV9kbS5jCj4gPj4+IEBAIC04Mjc2LDkgKzgyNzYsOSBAQCBzdGF0aWMgdm9p ZCBhbWRncHVfZG1fY29tbWl0X3BsYW5lcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs Cj4gPj4+ICAgICAgICAgICAgICAqIGRlYWRsb2NrIGR1cmluZyBHUFUgcmVzZXQgd2hlbiB0aGlz IGZlbmNlIHdpbGwgbm90IHNpZ25hbAo+ID4+PiAgICAgICAgICAgICAgKiBidXQgd2UgaG9sZCBy ZXNlcnZhdGlvbiBsb2NrIGZvciB0aGUgQk8uCj4gPj4+ICAgICAgICAgICAgICAqLwo+ID4+PiAt ICAgICAgICAgICByID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShhYm8tPnRiby5iYXNlLnJl c3YsIHRydWUsCj4gPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmYWxzZSwKPiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoNTAwMCkpOwo+ID4+PiArICAgICAg ICAgICByID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKGFiby0+dGJvLmJhc2UucmVz diwgdHJ1ZSwKPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmYWxzZSwKPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtc2Vjc190b19qaWZmaWVzKDUwMDApKTsKPiA+Pj4gICAgICAgICAgICAgaWYgKHVu bGlrZWx5KHIgPD0gMCkpCj4gPj4+ICAgICAgICAgICAgICAgICAgICAgRFJNX0VSUk9SKCJXYWl0 aW5nIGZvciBmZW5jZXMgdGltZWQgb3V0ISIpOwo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKPiA+Pj4gaW5kZXgg OTk4OTQyNWU5ODc1YS4uMTI0MWE0MjFiOWU4MSAxMDA2NDQKPiA+Pj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2RybV9nZW0uYwo+ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCj4g Pj4+IEBAIC03NzAsOCArNzcwLDggQEAgbG9uZyBkcm1fZ2VtX2RtYV9yZXN2X3dhaXQoc3RydWN0 IGRybV9maWxlICpmaWxlcCwgdTMyIGhhbmRsZSwKPiA+Pj4gICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7Cj4gPj4+ICAgICB9Cj4gPj4+IC0gICByZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRf cmN1KG9iai0+cmVzdiwgd2FpdF9hbGwsCj4gPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0cnVlLCB0aW1lb3V0KTsKPiA+Pj4gKyAgIHJldCA9IGRtYV9y ZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZChvYmotPnJlc3YsIHdhaXRfYWxsLAo+ID4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHRpbWVvdXQpOwo+ID4+ PiAgICAgaWYgKHJldCA9PSAwKQo+ID4+PiAgICAgICAgICAgICByZXQgPSAtRVRJTUU7Cj4gPj4+ ICAgICBlbHNlIGlmIChyZXQgPiAwKQo+ID4+PiBAQCAtMTM3NSwxMyArMTM3NSwxMyBAQCBpbnQg ZHJtX2dlbV9mZW5jZV9hcnJheV9hZGRfaW1wbGljaXQoc3RydWN0IHhhcnJheSAqZmVuY2VfYXJy YXksCj4gPj4+ICAgICBpZiAoIXdyaXRlKSB7Cj4gPj4+ICAgICAgICAgICAgIHN0cnVjdCBkbWFf ZmVuY2UgKmZlbmNlID0KPiA+Pj4gLSAgICAgICAgICAgICAgICAgICBkbWFfcmVzdl9nZXRfZXhj bF9yY3Uob2JqLT5yZXN2KTsKPiA+Pj4gKyAgICAgICAgICAgICAgICAgICBkbWFfcmVzdl9nZXRf ZXhjbF91bmxvY2tlZChvYmotPnJlc3YpOwo+ID4+PiAgICAgICAgICAgICByZXR1cm4gZHJtX2dl bV9mZW5jZV9hcnJheV9hZGQoZmVuY2VfYXJyYXksIGZlbmNlKTsKPiA+Pj4gICAgIH0KPiA+Pj4g LSAgIHJldCA9IGRtYV9yZXN2X2dldF9mZW5jZXNfcmN1KG9iai0+cmVzdiwgTlVMTCwKPiA+Pj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmVuY2VfY291bnQs ICZmZW5jZXMpOwo+ID4+PiArICAgcmV0ID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNlc191bmxvY2tlZChv YmotPnJlc3YsIE5VTEwsCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZmZW5jZV9jb3VudCwgJmZlbmNlcyk7Cj4gPj4+ICAgICBpZiAocmV0IHx8ICFmZW5jZV9j b3VudCkKPiA+Pj4gICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+Pj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2F0b21pY19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fZ2VtX2F0b21pY19oZWxwZXIuYwo+ID4+PiBpbmRleCBhMDA1YzVhMGJhNDZhLi5hMjcxMzUw ODRhZTVjIDEwMDY0NAo+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9hdG9taWNf aGVscGVyLmMKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fYXRvbWljX2hlbHBl ci5jCj4gPj4+IEBAIC0xNDcsNyArMTQ3LDcgQEAgaW50IGRybV9nZW1fcGxhbmVfaGVscGVyX3By ZXBhcmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBkcm1fcGxhbmVfc3QKPiA+ Pj4gICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPj4+ICAgICBvYmogPSBkcm1fZ2VtX2ZiX2dldF9v Ymooc3RhdGUtPmZiLCAwKTsKPiA+Pj4gLSAgIGZlbmNlID0gZG1hX3Jlc3ZfZ2V0X2V4Y2xfcmN1 KG9iai0+cmVzdik7Cj4gPj4+ICsgICBmZW5jZSA9IGRtYV9yZXN2X2dldF9leGNsX3VubG9ja2Vk KG9iai0+cmVzdik7Cj4gPj4+ICAgICBkcm1fYXRvbWljX3NldF9mZW5jZV9mb3JfcGxhbmUoc3Rh dGUsIGZlbmNlKTsKPiA+Pj4gICAgIHJldHVybiAwOwo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2 L2V0bmF2aXZfZ2VtLmMKPiA+Pj4gaW5kZXggZGI2OWYxOWFiNWJjYS4uNGU2ZjUzNDZlODRlNCAx MDA2NDQKPiA+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYwo+ ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jCj4gPj4+IEBA IC0zOTAsMTQgKzM5MCwxMyBAQCBpbnQgZXRuYXZpdl9nZW1fY3B1X3ByZXAoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosIHUzMiBvcCwKPiA+Pj4gICAgIH0KPiA+Pj4gICAgIGlmIChvcCAmIEVU TkFfUFJFUF9OT1NZTkMpIHsKPiA+Pj4gLSAgICAgICAgICAgaWYgKCFkbWFfcmVzdl90ZXN0X3Np Z25hbGVkX3JjdShvYmotPnJlc3YsCj4gPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKSkKPiA+Pj4gKyAgICAgICAgICAgaWYgKCFk bWFfcmVzdl90ZXN0X3NpZ25hbGVkX3VubG9ja2VkKG9iai0+cmVzdiwgd3JpdGUpKQo+ID4+PiAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Cj4gPj4+ICAgICB9IGVsc2Ugewo+ID4+ PiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHJlbWFpbiA9IGV0bmF2aXZfdGltZW91dF90b19q aWZmaWVzKHRpbWVvdXQpOwo+ID4+PiAtICAgICAgICAgICByZXQgPSBkbWFfcmVzdl93YWl0X3Rp bWVvdXRfcmN1KG9iai0+cmVzdiwKPiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUsIHRydWUsIHJlbWFpbik7Cj4gPj4+ICsgICAg ICAgICAgIHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZChvYmotPnJlc3YsCj4g Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0 ZSwgdHJ1ZSwgcmVtYWluKTsKPiA+Pj4gICAgICAgICAgICAgaWYgKHJldCA8PSAwKQo+ID4+PiAg ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT0gMCA/IC1FVElNRURPVVQgOiByZXQ7Cj4g Pj4+ICAgICB9Cj4gPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5h dml2X2dlbV9zdWJtaXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3N1 Ym1pdC5jCj4gPj4+IGluZGV4IGQwNWMzNTk5NDU3OTkuLjY2MTdmYWRhNDU5NWQgMTAwNjQ0Cj4g Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3N1Ym1pdC5jCj4g Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3N1Ym1pdC5jCj4g Pj4+IEBAIC0xODksMTMgKzE4OSwxMyBAQCBzdGF0aWMgaW50IHN1Ym1pdF9mZW5jZV9zeW5jKHN0 cnVjdCBldG5hdml2X2dlbV9zdWJtaXQgKnN1Ym1pdCkKPiA+Pj4gICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKPiA+Pj4gICAgICAgICAgICAgaWYgKGJvLT5mbGFncyAmIEVUTkFfU1VCTUlU X0JPX1dSSVRFKSB7Cj4gPj4+IC0gICAgICAgICAgICAgICAgICAgcmV0ID0gZG1hX3Jlc3ZfZ2V0 X2ZlbmNlc19yY3Uocm9iaiwgJmJvLT5leGNsLAo+ID4+PiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm8tPm5yX3NoYXJlZCwKPiA+ Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmJvLT5zaGFyZWQpOwo+ID4+PiArICAgICAgICAgICAgICAgICAgIHJldCA9IGRtYV9y ZXN2X2dldF9mZW5jZXNfdW5sb2NrZWQocm9iaiwgJmJvLT5leGNsLAo+ID4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvLT5ucl9zaGFy ZWQsCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmYm8tPnNoYXJlZCk7Cj4gPj4+ICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkK PiA+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPj4+ICAgICAg ICAgICAgIH0gZWxzZSB7Cj4gPj4+IC0gICAgICAgICAgICAgICAgICAgYm8tPmV4Y2wgPSBkbWFf cmVzdl9nZXRfZXhjbF9yY3Uocm9iaik7Cj4gPj4+ICsgICAgICAgICAgICAgICAgICAgYm8tPmV4 Y2wgPSBkbWFfcmVzdl9nZXRfZXhjbF91bmxvY2tlZChyb2JqKTsKPiA+Pj4gICAgICAgICAgICAg fQo+ID4+PiAgICAgfQo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2Rpc3BsYXkuYwo+ID4+PiBpbmRleCA0MjJiNTllYmY2ZGNlLi41ZjBiODVhMTAyMTU5IDEwMDY0 NAo+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku Ywo+ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku Ywo+ID4+PiBAQCAtMTEwNDAsNyArMTEwNDAsNyBAQCBpbnRlbF9wcmVwYXJlX3BsYW5lX2ZiKHN0 cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKPiA+Pj4gICAgICAgICAgICAgaWYgKHJldCA8IDApCj4g Pj4+ICAgICAgICAgICAgICAgICAgICAgZ290byB1bnBpbl9mYjsKPiA+Pj4gLSAgICAgICAgICAg ZmVuY2UgPSBkbWFfcmVzdl9nZXRfZXhjbF9yY3Uob2JqLT5iYXNlLnJlc3YpOwo+ID4+PiArICAg ICAgICAgICBmZW5jZSA9IGRtYV9yZXN2X2dldF9leGNsX3VubG9ja2VkKG9iai0+YmFzZS5yZXN2 KTsKPiA+Pj4gICAgICAgICAgICAgaWYgKGZlbmNlKSB7Cj4gPj4+ICAgICAgICAgICAgICAgICAg ICAgYWRkX3Jwc19ib29zdF9hZnRlcl92YmxhbmsobmV3X3BsYW5lX3N0YXRlLT5ody5jcnRjLAo+ ID4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlbmNl KTsKPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2RtYV9yZXN2X3V0aWxz LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kbWFfcmVzdl91dGlscy5jCj4gPj4+IGluZGV4IDll NTA4ZTdkNDYyOWYuLmJkZmM2YmYxNmE0ZTkgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2RtYV9yZXN2X3V0aWxzLmMKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZG1hX3Jlc3ZfdXRpbHMuYwo+ID4+PiBAQCAtMTAsNyArMTAsNyBAQAo+ID4+PiAgICB2b2lk IGRtYV9yZXN2X3BydW5lKHN0cnVjdCBkbWFfcmVzdiAqcmVzdikKPiA+Pj4gICAgewo+ID4+PiAg ICAgaWYgKGRtYV9yZXN2X3RyeWxvY2socmVzdikpIHsKPiA+Pj4gLSAgICAgICAgICAgaWYgKGRt YV9yZXN2X3Rlc3Rfc2lnbmFsZWRfcmN1KHJlc3YsIHRydWUpKQo+ID4+PiArICAgICAgICAgICBp ZiAoZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF91bmxvY2tlZChyZXN2LCB0cnVlKSkKPiA+Pj4gICAg ICAgICAgICAgICAgICAgICBkbWFfcmVzdl9hZGRfZXhjbF9mZW5jZShyZXN2LCBOVUxMKTsKPiA+ Pj4gICAgICAgICAgICAgZG1hX3Jlc3ZfdW5sb2NrKHJlc3YpOwo+ID4+PiAgICAgfQo+ID4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2J1c3kuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9idXN5LmMKPiA+Pj4gaW5kZXggMjUyMzVl ZjYzMGMxMC4uNzU0YWQ2ZDFiYWNlOSAxMDA2NDQKPiA+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX2J1c3kuYwo+ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fYnVzeS5jCj4gPj4+IEBAIC0xMDUsNyArMTA1LDcgQEAgaTkxNV9nZW1f YnVzeV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ID4+PiAgICAg ICogQWx0ZXJuYXRpdmVseSwgd2UgY2FuIHRyYWRlIHRoYXQgZXh0cmEgaW5mb3JtYXRpb24gb24g cmVhZC93cml0ZQo+ID4+PiAgICAgICogYWN0aXZpdHkgd2l0aAo+ID4+PiAgICAgICogICAgICBh cmdzLT5idXN5ID0KPiA+Pj4gLSAgICAqICAgICAgICAgICAgICAhZG1hX3Jlc3ZfdGVzdF9zaWdu YWxlZF9yY3Uob2JqLT5yZXN2LCB0cnVlKTsKPiA+Pj4gKyAgICAqICAgICAgICAgICAgICAhZG1h X3Jlc3ZfdGVzdF9zaWduYWxlZF91bmxvY2tlZChvYmotPnJlc3YsIHRydWUpOwo+ID4+PiAgICAg ICogdG8gcmVwb3J0IHRoZSBvdmVyYWxsIGJ1c3luZXNzLiBUaGlzIGlzIHdoYXQgdGhlIHdhaXQt aW9jdGwgZG9lcy4KPiA+Pj4gICAgICAqCj4gPj4+ICAgICAgKi8KPiA+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gPj4+IGluZGV4IDI5NzE0 MzUxMWY5OWIuLmU4ZjMyMzU2NGU1N2IgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ID4+PiBAQCAtMTQ4MSw3ICsxNDgx LDcgQEAgc3RhdGljIGlubGluZSBib29sIHVzZV9yZWxvY19ncHUoc3RydWN0IGk5MTVfdm1hICp2 bWEpCj4gPj4+ICAgICBpZiAoREJHX0ZPUkNFX1JFTE9DKQo+ID4+PiAgICAgICAgICAgICByZXR1 cm4gZmFsc2U7Cj4gPj4+IC0gICByZXR1cm4gIWRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfcmN1KHZt YS0+cmVzdiwgdHJ1ZSk7Cj4gPj4+ICsgICByZXR1cm4gIWRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRf dW5sb2NrZWQodm1hLT5yZXN2LCB0cnVlKTsKPiA+Pj4gICAgfQo+ID4+PiAgICBzdGF0aWMgdW5z aWduZWQgbG9uZyB2bWFfcGh5c19hZGRyKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCB1MzIgb2Zmc2V0 KQo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29i amVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCj4gPj4+ IGluZGV4IDJlYmQ3OTUzN2FlYTkuLjdjMGViNDI1Y2IzYjMgMTAwNjQ0Cj4gPj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaAo+ID4+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKPiA+Pj4gQEAgLTUwMCw3ICs1 MDAsNyBAQCBpOTE1X2dlbV9vYmplY3RfbGFzdF93cml0ZV9lbmdpbmUoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaikKPiA+Pj4gICAgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwo+ID4+ PiAgICAgcmN1X3JlYWRfbG9jaygpOwo+ID4+PiAtICAgZmVuY2UgPSBkbWFfcmVzdl9nZXRfZXhj bF9yY3Uob2JqLT5iYXNlLnJlc3YpOwo+ID4+PiArICAgZmVuY2UgPSBkbWFfcmVzdl9nZXRfZXhj bF91bmxvY2tlZChvYmotPmJhc2UucmVzdik7Cj4gPj4+ICAgICByY3VfcmVhZF91bmxvY2soKTsK PiA+Pj4gICAgIGlmIChmZW5jZSAmJiBkbWFfZmVuY2VfaXNfaTkxNShmZW5jZSkgJiYgIWRtYV9m ZW5jZV9pc19zaWduYWxlZChmZW5jZSkpCj4gPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX3VzZXJwdHIuYwo+ID4+PiBpbmRleCBhNjU3Yjk5ZWM3NjA2Li40NGRmMThkYzk2 NjlmIDEwMDY0NAo+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f dXNlcnB0ci5jCj4gPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91 c2VycHRyLmMKPiA+Pj4gQEAgLTg1LDggKzg1LDggQEAgc3RhdGljIGJvb2wgaTkxNV9nZW1fdXNl cnB0cl9pbnZhbGlkYXRlKHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKm1uaSwKPiA+Pj4g ICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4gPj4+ICAgICAvKiB3ZSB3aWxsIHVuYmluZCBvbiBu ZXh0IHN1Ym1pc3Npb24sIHN0aWxsIGhhdmUgdXNlcnB0ciBwaW5zICovCj4gPj4+IC0gICByID0g ZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShvYmotPmJhc2UucmVzdiwgdHJ1ZSwgZmFsc2UsCj4g Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfU0NIRURVTEVfVElNRU9V VCk7Cj4gPj4+ICsgICByID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKG9iai0+YmFz ZS5yZXN2LCB0cnVlLCBmYWxzZSwKPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+ID4+PiAgICAgaWYgKHIgPD0gMCkKPiA+ Pj4gICAgICAgICAgICAgZHJtX2VycigmaTkxNS0+ZHJtLCAiKCVsZCkgZmFpbGVkIHRvIHdhaXQg Zm9yIGlkbGVcbiIsIHIpOwo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX3dhaXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV93 YWl0LmMKPiA+Pj4gaW5kZXggNGI5ODU2ZDViYTE0Zi4uNWI2YzUyNjU5YWQ0ZCAxMDA2NDQKPiA+ Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3dhaXQuYwo+ID4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fd2FpdC5jCj4gPj4+IEBAIC00 NSw3ICs0NSw3IEBAIGk5MTVfZ2VtX29iamVjdF93YWl0X3Jlc2VydmF0aW9uKHN0cnVjdCBkbWFf cmVzdiAqcmVzdiwKPiA+Pj4gICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50LCBpOwo+ID4+ PiAgICAgICAgICAgICBpbnQgcmV0Owo+ID4+PiAtICAgICAgICAgICByZXQgPSBkbWFfcmVzdl9n ZXRfZmVuY2VzX3JjdShyZXN2LCAmZXhjbCwgJmNvdW50LCAmc2hhcmVkKTsKPiA+Pj4gKyAgICAg ICAgICAgcmV0ID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNlc191bmxvY2tlZChyZXN2LCAmZXhjbCwgJmNv dW50LCAmc2hhcmVkKTsKPiA+Pj4gICAgICAgICAgICAgaWYgKHJldCkKPiA+Pj4gICAgICAgICAg ICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4+PiBAQCAtNzMsNyArNzMsNyBAQCBpOTE1X2dlbV9v YmplY3Rfd2FpdF9yZXNlcnZhdGlvbihzdHJ1Y3QgZG1hX3Jlc3YgKnJlc3YsCj4gPj4+ICAgICAg ICAgICAgICAqLwo+ID4+PiAgICAgICAgICAgICBwcnVuZV9mZW5jZXMgPSBjb3VudCAmJiB0aW1l b3V0ID49IDA7Cj4gPj4+ICAgICB9IGVsc2Ugewo+ID4+PiAtICAgICAgICAgICBleGNsID0gZG1h X3Jlc3ZfZ2V0X2V4Y2xfcmN1KHJlc3YpOwo+ID4+PiArICAgICAgICAgICBleGNsID0gZG1hX3Jl c3ZfZ2V0X2V4Y2xfdW5sb2NrZWQocmVzdik7Cj4gPj4+ICAgICB9Cj4gPj4+ICAgICBpZiAoZXhj bCAmJiB0aW1lb3V0ID49IDApCj4gPj4+IEBAIC0xNTgsOCArMTU4LDggQEAgaTkxNV9nZW1fb2Jq ZWN0X3dhaXRfcHJpb3JpdHkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiA+Pj4g ICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50LCBpOwo+ID4+PiAgICAgICAgICAgICBpbnQg cmV0Owo+ID4+PiAtICAgICAgICAgICByZXQgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShvYmot PmJhc2UucmVzdiwKPiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmV4Y2wsICZjb3VudCwgJnNoYXJlZCk7Cj4gPj4+ICsgICAgICAgICAgIHJldCA9IGRtYV9y ZXN2X2dldF9mZW5jZXNfdW5sb2NrZWQob2JqLT5iYXNlLnJlc3YsCj4gPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4Y2wsICZjb3VudCwgJnNoYXJl ZCk7Cj4gPj4+ICAgICAgICAgICAgIGlmIChyZXQpCj4gPj4+ICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHJldDsKPiA+Pj4gQEAgLTE3MCw3ICsxNzAsNyBAQCBpOTE1X2dlbV9vYmplY3Rfd2Fp dF9wcmlvcml0eShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ID4+PiAgICAgICAg ICAgICBrZnJlZShzaGFyZWQpOwo+ID4+PiAgICAgfSBlbHNlIHsKPiA+Pj4gLSAgICAgICAgICAg ZXhjbCA9IGRtYV9yZXN2X2dldF9leGNsX3JjdShvYmotPmJhc2UucmVzdik7Cj4gPj4+ICsgICAg ICAgICAgIGV4Y2wgPSBkbWFfcmVzdl9nZXRfZXhjbF91bmxvY2tlZChvYmotPmJhc2UucmVzdik7 Cj4gPj4+ICAgICB9Cj4gPj4+ICAgICBpZiAoZXhjbCkgewo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlcXVlc3QuYwo+ID4+PiBpbmRleCA5NzBkOGY0OTg2YmJlLi5mMWVkMDNjZWQ3ZGQxIDEw MDY0NAo+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+ID4+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+ID4+PiBAQCAtMTU5 NCw4ICsxNTk0LDggQEAgaTkxNV9yZXF1ZXN0X2F3YWl0X29iamVjdChzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICp0bywKPiA+Pj4gICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqKnNoYXJlZDsKPiA+ Pj4gICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50LCBpOwo+ID4+PiAtICAgICAgICAgICBy ZXQgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShvYmotPmJhc2UucmVzdiwKPiA+Pj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleGNsLCAmY291 bnQsICZzaGFyZWQpOwo+ID4+PiArICAgICAgICAgICByZXQgPSBkbWFfcmVzdl9nZXRfZmVuY2Vz X3VubG9ja2VkKG9iai0+YmFzZS5yZXN2LAo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZleGNsLCAmY291bnQsICZzaGFyZWQpOwo+ID4+PiAgICAg ICAgICAgICBpZiAocmV0KQo+ID4+PiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4g Pj4+IEBAIC0xNjExLDcgKzE2MTEsNyBAQCBpOTE1X3JlcXVlc3RfYXdhaXRfb2JqZWN0KHN0cnVj dCBpOTE1X3JlcXVlc3QgKnRvLAo+ID4+PiAgICAgICAgICAgICAgICAgICAgIGRtYV9mZW5jZV9w dXQoc2hhcmVkW2ldKTsKPiA+Pj4gICAgICAgICAgICAga2ZyZWUoc2hhcmVkKTsKPiA+Pj4gICAg IH0gZWxzZSB7Cj4gPj4+IC0gICAgICAgICAgIGV4Y2wgPSBkbWFfcmVzdl9nZXRfZXhjbF9yY3Uo b2JqLT5iYXNlLnJlc3YpOwo+ID4+PiArICAgICAgICAgICBleGNsID0gZG1hX3Jlc3ZfZ2V0X2V4 Y2xfdW5sb2NrZWQob2JqLT5iYXNlLnJlc3YpOwo+ID4+PiAgICAgfQo+ID4+PiAgICAgaWYgKGV4 Y2wpIHsKPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3dfZmVu Y2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3dfZmVuY2UuYwo+ID4+PiBpbmRleCAy NzQ0NTU4ZjMwNTA3Li4wYmNiN2VhNDQyMDFlIDEwMDY0NAo+ID4+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3N3X2ZlbmNlLmMKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9zd19mZW5jZS5jCj4gPj4+IEBAIC01ODIsNyArNTgyLDcgQEAgaW50IGk5MTVfc3df ZmVuY2VfYXdhaXRfcmVzZXJ2YXRpb24oc3RydWN0IGk5MTVfc3dfZmVuY2UgKmZlbmNlLAo+ID4+ PiAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICoqc2hhcmVkOwo+ID4+PiAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgY291bnQsIGk7Cj4gPj4+IC0gICAgICAgICAgIHJldCA9IGRtYV9yZXN2 X2dldF9mZW5jZXNfcmN1KHJlc3YsICZleGNsLCAmY291bnQsICZzaGFyZWQpOwo+ID4+PiArICAg ICAgICAgICByZXQgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3VubG9ja2VkKHJlc3YsICZleGNsLCAm Y291bnQsICZzaGFyZWQpOwo+ID4+PiAgICAgICAgICAgICBpZiAocmV0KQo+ID4+PiAgICAgICAg ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPj4+IEBAIC02MDYsNyArNjA2LDcgQEAgaW50IGk5 MTVfc3dfZmVuY2VfYXdhaXRfcmVzZXJ2YXRpb24oc3RydWN0IGk5MTVfc3dfZmVuY2UgKmZlbmNl LAo+ID4+PiAgICAgICAgICAgICAgICAgICAgIGRtYV9mZW5jZV9wdXQoc2hhcmVkW2ldKTsKPiA+ Pj4gICAgICAgICAgICAga2ZyZWUoc2hhcmVkKTsKPiA+Pj4gICAgIH0gZWxzZSB7Cj4gPj4+IC0g ICAgICAgICAgIGV4Y2wgPSBkbWFfcmVzdl9nZXRfZXhjbF9yY3UocmVzdik7Cj4gPj4+ICsgICAg ICAgICAgIGV4Y2wgPSBkbWFfcmVzdl9nZXRfZXhjbF91bmxvY2tlZChyZXN2KTsKPiA+Pj4gICAg IH0KPiA+Pj4gICAgIGlmIChyZXQgPj0gMCAmJiBleGNsICYmIGV4Y2wtPm9wcyAhPSBleGNsdWRl KSB7Cj4gPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCj4gPj4+IGluZGV4IDU2ZGY4NmU1Zjc0MDAuLjFh Y2E2MDUwN2JiMTQgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dl bS5jCj4gPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCj4gPj4+IEBAIC05 MTUsOCArOTE1LDcgQEAgaW50IG1zbV9nZW1fY3B1X3ByZXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmosIHVpbnQzMl90IG9wLCBrdGltZV90ICp0aW1lb3V0KQo+ID4+PiAgICAgICAgICAgICBv cCAmIE1TTV9QUkVQX05PU1lOQyA/IDAgOiB0aW1lb3V0X3RvX2ppZmZpZXModGltZW91dCk7Cj4g Pj4+ICAgICBsb25nIHJldDsKPiA+Pj4gLSAgIHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF9y Y3Uob2JqLT5yZXN2LCB3cml0ZSwKPiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRydWUsICByZW1haW4pOwo+ID4+PiArICAgcmV0ID0gZG1hX3Jlc3Zf d2FpdF90aW1lb3V0X3VubG9ja2VkKG9iai0+cmVzdiwgd3JpdGUsIHRydWUsIHJlbWFpbik7Cj4g Pj4+ICAgICBpZiAocmV0ID09IDApCj4gPj4+ICAgICAgICAgICAgIHJldHVybiByZW1haW4gPT0g MCA/IC1FQlVTWSA6IC1FVElNRURPVVQ7Cj4gPj4+ICAgICBlbHNlIGlmIChyZXQgPCAwKQo+ID4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvd25kdy5jIGIv ZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvd25kdy5jCj4gPj4+IGluZGV4IDBjYjFm OWQ4NDhkM2UuLjhkMDQ4YmFjZDZmMDIgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9ub3V2ZWF1L2Rpc3BudjUwL3duZHcuYwo+ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91 dmVhdS9kaXNwbnY1MC93bmR3LmMKPiA+Pj4gQEAgLTU2MSw3ICs1NjEsNyBAQCBudjUwX3duZHdf cHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqc3RhdGUpCj4gPj4+ICAgICAgICAgICAgICAgICAgICAgYXN5dy0+aW1hZ2UuaGFuZGxlWzBd ID0gY3R4ZG1hLT5vYmplY3QuaGFuZGxlOwo+ID4+PiAgICAgfQo+ID4+PiAtICAgYXN5dy0+c3Rh dGUuZmVuY2UgPSBkbWFfcmVzdl9nZXRfZXhjbF9yY3UobnZiby0+Ym8uYmFzZS5yZXN2KTsKPiA+ Pj4gKyAgIGFzeXctPnN0YXRlLmZlbmNlID0gZG1hX3Jlc3ZfZ2V0X2V4Y2xfdW5sb2NrZWQobnZi by0+Ym8uYmFzZS5yZXN2KTsKPiA+Pj4gICAgIGFzeXctPmltYWdlLm9mZnNldFswXSA9IG52Ym8t Pm9mZnNldDsKPiA+Pj4gICAgIGlmICh3bmR3LT5mdW5jLT5wcmVwYXJlKSB7Cj4gPj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9n cHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYwo+ID4+PiBpbmRleCBhNzBlODI0MTNmYTc1Li5i YzZiMDllZTliNTUyIDEwMDY0NAo+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9u b3V2ZWF1X2dlbS5jCj4gPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVf Z2VtLmMKPiA+Pj4gQEAgLTkyOCw4ICs5MjgsOCBAQCBub3V2ZWF1X2dlbV9pb2N0bF9jcHVfcHJl cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ID4+PiAgICAgICAgICAgICBy ZXR1cm4gLUVOT0VOVDsKPiA+Pj4gICAgIG52Ym8gPSBub3V2ZWF1X2dlbV9vYmplY3QoZ2VtKTsK PiA+Pj4gLSAgIGxyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KG52Ym8tPmJvLmJhc2Uu cmVzdiwgd3JpdGUsIHRydWUsCj4gPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbm9fd2FpdCA/IDAgOiAzMCAqIEhaKTsKPiA+Pj4gKyAgIGxyZXQgPSBk bWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQobnZiby0+Ym8uYmFzZS5yZXN2LCB3cml0ZSwg dHJ1ZSwKPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9f d2FpdCA/IDAgOiAzMCAqIEhaKTsKPiA+Pj4gICAgIGlmICghbHJldCkKPiA+Pj4gICAgICAgICAg ICAgcmV0ID0gLUVCVVNZOwo+ID4+PiAgICAgZWxzZSBpZiAobHJldCA+IDApCj4gPj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMgYi9kcml2ZXJz L2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2LmMKPiA+Pj4gaW5kZXggY2EwNzA5OGE2MTQx OS4uZWVmNWI2MzJlZTBjZSAxMDA2NDQKPiA+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmZy b3N0L3BhbmZyb3N0X2Rydi5jCj4gPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9w YW5mcm9zdF9kcnYuYwo+ID4+PiBAQCAtMzExLDggKzMxMSw4IEBAIHBhbmZyb3N0X2lvY3RsX3dh aXRfYm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiA+Pj4gICAgIGlmICgh Z2VtX29iaikKPiA+Pj4gICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Cj4gPj4+IC0gICByZXQg PSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KGdlbV9vYmotPnJlc3YsIHRydWUsCj4gPj4+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0aW1lb3V0 KTsKPiA+Pj4gKyAgIHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZChnZW1fb2Jq LT5yZXN2LCB0cnVlLAo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRydWUsIHRpbWVvdXQpOwo+ID4+PiAgICAgaWYgKCFyZXQpCj4gPj4+ICAgICAgICAgICAg IHJldCA9IHRpbWVvdXQgPyAtRVRJTUVET1VUIDogLUVCVVNZOwo+ID4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5jIGIvZHJpdmVycy9ncHUvZHJt L3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5jCj4gPj4+IGluZGV4IDYwMDNjZmViMTMyMjEuLjJkZjNl OTk5YTM4ZDAgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5m cm9zdF9qb2IuYwo+ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rf am9iLmMKPiA+Pj4gQEAgLTIwMyw3ICsyMDMsNyBAQCBzdGF0aWMgdm9pZCBwYW5mcm9zdF9hY3F1 aXJlX29iamVjdF9mZW5jZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqYm9zLAo+ID4+PiAgICAg aW50IGk7Cj4gPj4+ICAgICBmb3IgKGkgPSAwOyBpIDwgYm9fY291bnQ7IGkrKykKPiA+Pj4gLSAg ICAgICAgICAgaW1wbGljaXRfZmVuY2VzW2ldID0gZG1hX3Jlc3ZfZ2V0X2V4Y2xfcmN1KGJvc1tp XS0+cmVzdik7Cj4gPj4+ICsgICAgICAgICAgIGltcGxpY2l0X2ZlbmNlc1tpXSA9IGRtYV9yZXN2 X2dldF9leGNsX3VubG9ja2VkKGJvc1tpXS0+cmVzdik7Cj4gPj4+ICAgIH0KPiA+Pj4gICAgc3Rh dGljIHZvaWQgcGFuZnJvc3RfYXR0YWNoX29iamVjdF9mZW5jZXMoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICoqYm9zLAo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRl b25fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwo+ID4+PiBpbmRl eCAwNWVhMmYzOWY2MjYxLi4xYTM4YjBiZjM2ZDExIDEwMDY0NAo+ID4+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwo+ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v cmFkZW9uL3JhZGVvbl9nZW0uYwo+ID4+PiBAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyBpbnQg cmFkZW9uX2dlbV9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iaiwKPiA+Pj4g ICAgIH0KPiA+Pj4gICAgIGlmIChkb21haW4gPT0gUkFERU9OX0dFTV9ET01BSU5fQ1BVKSB7Cj4g Pj4+ICAgICAgICAgICAgIC8qIEFza2luZyBmb3IgY3B1IGFjY2VzcyB3YWl0IGZvciBvYmplY3Qg aWRsZSAqLwo+ID4+PiAtICAgICAgICAgICByID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShy b2JqLT50Ym8uYmFzZS5yZXN2LCB0cnVlLCB0cnVlLCAzMCAqIEhaKTsKPiA+Pj4gKyAgICAgICAg ICAgciA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZChyb2JqLT50Ym8uYmFzZS5yZXN2 LCB0cnVlLCB0cnVlLCAzMCAqIEhaKTsKPiA+Pj4gICAgICAgICAgICAgaWYgKCFyKQo+ID4+PiAg ICAgICAgICAgICAgICAgICAgIHIgPSAtRUJVU1k7Cj4gPj4+IEBAIC00NzQsNyArNDc0LDcgQEAg aW50IHJhZGVvbl9nZW1fYnVzeV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAo+ID4+PiAgICAgfQo+ID4+PiAgICAgcm9iaiA9IGdlbV90b19yYWRlb25fYm8oZ29iaik7 Cj4gPj4+IC0gICByID0gZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3Uocm9iai0+dGJvLmJhc2Uu cmVzdiwgdHJ1ZSk7Cj4gPj4+ICsgICByID0gZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF91bmxvY2tl ZChyb2JqLT50Ym8uYmFzZS5yZXN2LCB0cnVlKTsKPiA+Pj4gICAgIGlmIChyID09IDApCj4gPj4+ ICAgICAgICAgICAgIHIgPSAtRUJVU1k7Cj4gPj4+ICAgICBlbHNlCj4gPj4+IEBAIC01MDMsNyAr NTAzLDcgQEAgaW50IHJhZGVvbl9nZW1fd2FpdF9pZGxlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCj4gPj4+ICAgICB9Cj4gPj4+ICAgICByb2JqID0gZ2VtX3RvX3Jh ZGVvbl9ibyhnb2JqKTsKPiA+Pj4gLSAgIHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3Uo cm9iai0+dGJvLmJhc2UucmVzdiwgdHJ1ZSwgdHJ1ZSwgMzAgKiBIWik7Cj4gPj4+ICsgICByZXQg PSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQocm9iai0+dGJvLmJhc2UucmVzdiwgdHJ1 ZSwgdHJ1ZSwgMzAgKiBIWik7Cj4gPj4+ICAgICBpZiAocmV0ID09IDApCj4gPj4+ICAgICAgICAg ICAgIHIgPSAtRUJVU1k7Cj4gPj4+ICAgICBlbHNlIGlmIChyZXQgPCAwKQo+ID4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW4uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX21uLmMKPiA+Pj4gaW5kZXggZTM3YzlhNTdhN2MzNi4uYTE5YmUzZjhh MjE4YyAxMDA2NDQKPiA+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW4u Ywo+ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tbi5jCj4gPj4+IEBA IC02Niw4ICs2Niw4IEBAIHN0YXRpYyBib29sIHJhZGVvbl9tbl9pbnZhbGlkYXRlKHN0cnVjdCBt bXVfaW50ZXJ2YWxfbm90aWZpZXIgKm1uLAo+ID4+PiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK PiA+Pj4gICAgIH0KPiA+Pj4gLSAgIHIgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KGJvLT50 Ym8uYmFzZS5yZXN2LCB0cnVlLCBmYWxzZSwKPiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKPiA+Pj4gKyAgIHIgPSBkbWFfcmVzdl93 YWl0X3RpbWVvdXRfdW5sb2NrZWQoYm8tPnRiby5iYXNlLnJlc3YsIHRydWUsIGZhbHNlLAo+ID4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfU0NIRURVTEVfVElN RU9VVCk7Cj4gPj4+ICAgICBpZiAociA8PSAwKQo+ID4+PiAgICAgICAgICAgICBEUk1fRVJST1Io IiglbGQpIGZhaWxlZCB0byB3YWl0IGZvciB1c2VyIGJvXG4iLCByKTsKPiA+Pj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0 bV9iby5jCj4gPj4+IGluZGV4IGNhMWIwOThiNmE1NjEuLjIxNWNhZDMxNDk2MjEgMTAwNjQ0Cj4g Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKPiA+Pj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL3R0bS90dG1fYm8uYwo+ID4+PiBAQCAtMjk0LDcgKzI5NCw3IEBAIHN0YXRpYyBp bnQgdHRtX2JvX2NsZWFudXBfcmVmcyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAo+ID4+ PiAgICAgc3RydWN0IGRtYV9yZXN2ICpyZXN2ID0gJmJvLT5iYXNlLl9yZXN2Owo+ID4+PiAgICAg aW50IHJldDsKPiA+Pj4gLSAgIGlmIChkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3JjdShyZXN2LCB0 cnVlKSkKPiA+Pj4gKyAgIGlmIChkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3VubG9ja2VkKHJlc3Ys IHRydWUpKQo+ID4+PiAgICAgICAgICAgICByZXQgPSAwOwo+ID4+PiAgICAgZWxzZQo+ID4+PiAg ICAgICAgICAgICByZXQgPSAtRUJVU1k7Cj4gPj4+IEBAIC0zMDYsOCArMzA2LDggQEAgc3RhdGlj IGludCB0dG1fYm9fY2xlYW51cF9yZWZzKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCj4g Pj4+ICAgICAgICAgICAgICAgICAgICAgZG1hX3Jlc3ZfdW5sb2NrKGJvLT5iYXNlLnJlc3YpOwo+ ID4+PiAgICAgICAgICAgICBzcGluX3VubG9jaygmYm8tPmJkZXYtPmxydV9sb2NrKTsKPiA+Pj4g LSAgICAgICAgICAgbHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3UocmVzdiwgdHJ1ZSwg aW50ZXJydXB0aWJsZSwKPiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMzAgKiBIWik7Cj4gPj4+ICsgICAgICAgICAgIGxyZXQgPSBkbWFfcmVzdl93YWl0 X3RpbWVvdXRfdW5sb2NrZWQocmVzdiwgdHJ1ZSwgaW50ZXJydXB0aWJsZSwKPiA+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMCAqIEhaKTsKPiA+ Pj4gICAgICAgICAgICAgaWYgKGxyZXQgPCAwKQo+ID4+PiAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBscmV0Owo+ID4+PiBAQCAtNDA5LDggKzQwOSw4IEBAIHN0YXRpYyB2b2lkIHR0bV9ib19y ZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQo+ID4+PiAgICAgICAgICAgICAgICAgICAgIC8qIExh c3QgcmVzb3J0LCBpZiB3ZSBmYWlsIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlCj4gPj4+ICAg ICAgICAgICAgICAgICAgICAgICogZmVuY2VzIGJsb2NrIGZvciB0aGUgQk8gdG8gYmVjb21lIGlk bGUKPiA+Pj4gICAgICAgICAgICAgICAgICAgICAgKi8KPiA+Pj4gLSAgICAgICAgICAgICAgICAg ICBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KGJvLT5iYXNlLnJlc3YsIHRydWUsIGZhbHNlLAo+ ID4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAgKiBI Wik7Cj4gPj4+ICsgICAgICAgICAgICAgICAgICAgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9j a2VkKGJvLT5iYXNlLnJlc3YsIHRydWUsIGZhbHNlLAo+ID4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMCAqIEhaKTsKPiA+Pj4gICAgICAgICAg ICAgfQo+ID4+PiAgICAgICAgICAgICBpZiAoYm8tPmJkZXYtPmZ1bmNzLT5yZWxlYXNlX25vdGlm eSkKPiA+Pj4gQEAgLTQyMCw3ICs0MjAsNyBAQCBzdGF0aWMgdm9pZCB0dG1fYm9fcmVsZWFzZShz dHJ1Y3Qga3JlZiAqa3JlZikKPiA+Pj4gICAgICAgICAgICAgdHRtX21lbV9pb19mcmVlKGJkZXYs ICZiby0+bWVtKTsKPiA+Pj4gICAgIH0KPiA+Pj4gLSAgIGlmICghZG1hX3Jlc3ZfdGVzdF9zaWdu YWxlZF9yY3UoYm8tPmJhc2UucmVzdiwgdHJ1ZSkgfHwKPiA+Pj4gKyAgIGlmICghZG1hX3Jlc3Zf dGVzdF9zaWduYWxlZF91bmxvY2tlZChiby0+YmFzZS5yZXN2LCB0cnVlKSB8fAo+ID4+PiAgICAg ICAgICFkbWFfcmVzdl90cnlsb2NrKGJvLT5iYXNlLnJlc3YpKSB7Cj4gPj4+ICAgICAgICAgICAg IC8qIFRoZSBCTyBpcyBub3QgaWRsZSwgcmVzdXJyZWN0IGl0IGZvciBkZWxheWVkIGRlc3Ryb3kg Ki8KPiA+Pj4gICAgICAgICAgICAgdHRtX2JvX2ZsdXNoX2FsbF9mZW5jZXMoYm8pOwo+ID4+PiBA QCAtMTExNiwxNCArMTExNiwxNCBAQCBpbnQgdHRtX2JvX3dhaXQoc3RydWN0IHR0bV9idWZmZXJf b2JqZWN0ICpibywKPiA+Pj4gICAgIGxvbmcgdGltZW91dCA9IDE1ICogSFo7Cj4gPj4+ICAgICBp ZiAobm9fd2FpdCkgewo+ID4+PiAtICAgICAgICAgICBpZiAoZG1hX3Jlc3ZfdGVzdF9zaWduYWxl ZF9yY3UoYm8tPmJhc2UucmVzdiwgdHJ1ZSkpCj4gPj4+ICsgICAgICAgICAgIGlmIChkbWFfcmVz dl90ZXN0X3NpZ25hbGVkX3VubG9ja2VkKGJvLT5iYXNlLnJlc3YsIHRydWUpKQo+ID4+PiAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAwOwo+ID4+PiAgICAgICAgICAgICBlbHNlCj4gPj4+ICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKPiA+Pj4gICAgIH0KPiA+Pj4gLSAgIHRp bWVvdXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KGJvLT5iYXNlLnJlc3YsIHRydWUsCj4g Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 ZXJydXB0aWJsZSwgdGltZW91dCk7Cj4gPj4+ICsgICB0aW1lb3V0ID0gZG1hX3Jlc3Zfd2FpdF90 aW1lb3V0X3VubG9ja2VkKGJvLT5iYXNlLnJlc3YsIHRydWUsCj4gPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdGlibGUsIHRpbWVvdXQpOwo+ ID4+PiAgICAgaWYgKHRpbWVvdXQgPCAwKQo+ID4+PiAgICAgICAgICAgICByZXR1cm4gdGltZW91 dDsKPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZmVuY2UuYyBi L2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZmVuY2UuYwo+ID4+PiBpbmRleCAyOTAyZGM2ZTY0 ZmFmLi4wMTBhODI0MDVlMzc0IDEwMDY0NAo+ID4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmdl bS92Z2VtX2ZlbmNlLmMKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9mZW5j ZS5jCj4gPj4+IEBAIC0xNTEsOCArMTUxLDggQEAgaW50IHZnZW1fZmVuY2VfYXR0YWNoX2lvY3Rs KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPj4+ICAgICAvKiBDaGVjayBmb3IgYSBjb25mbGlj dGluZyBmZW5jZSAqLwo+ID4+PiAgICAgcmVzdiA9IG9iai0+cmVzdjsKPiA+Pj4gLSAgIGlmICgh ZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3UocmVzdiwKPiA+Pj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+ZmxhZ3MgJiBWR0VNX0ZFTkNFX1dSSVRF KSkgewo+ID4+PiArICAgaWYgKCFkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3VubG9ja2VkKHJlc3Ys Cj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLT5mbGFn cyAmIFZHRU1fRkVOQ0VfV1JJVEUpKSB7Cj4gPj4+ICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsK PiA+Pj4gICAgICAgICAgICAgZ290byBlcnJfZmVuY2U7Cj4gPj4+ICAgICB9Cj4gPj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfaW9jdGwuYyBiL2RyaXZlcnMv Z3B1L2RybS92aXJ0aW8vdmlydGdwdV9pb2N0bC5jCj4gPj4+IGluZGV4IDY2OWYyZWUzOTUxNTQu LmFiMDEwYzhlMzI4MTYgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8v dmlydGdwdV9pb2N0bC5jCj4gPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdw dV9pb2N0bC5jCj4gPj4+IEBAIC00NTEsMTAgKzQ1MSwxMCBAQCBzdGF0aWMgaW50IHZpcnRpb19n cHVfd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ID4+PiAg ICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKPiA+Pj4gICAgIGlmIChhcmdzLT5mbGFncyAmIFZJ UlRHUFVfV0FJVF9OT1dBSVQpIHsKPiA+Pj4gLSAgICAgICAgICAgcmV0ID0gZG1hX3Jlc3ZfdGVz dF9zaWduYWxlZF9yY3Uob2JqLT5yZXN2LCB0cnVlKTsKPiA+Pj4gKyAgICAgICAgICAgcmV0ID0g ZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF91bmxvY2tlZChvYmotPnJlc3YsIHRydWUpOwo+ID4+PiAg ICAgfSBlbHNlIHsKPiA+Pj4gLSAgICAgICAgICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0 X3JjdShvYmotPnJlc3YsIHRydWUsIHRydWUsCj4gPj4+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGltZW91dCk7Cj4gPj4+ICsgICAgICAgICAgIHJldCA9IGRt YV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZChvYmotPnJlc3YsIHRydWUsIHRydWUsCj4gPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0 KTsKPiA+Pj4gICAgIH0KPiA+Pj4gICAgIGlmIChyZXQgPT0gMCkKPiA+Pj4gICAgICAgICAgICAg cmV0ID0gLUVCVVNZOwo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfYm8uYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JvLmMKPiA+Pj4gaW5k ZXggMDRkZDQ5YzRjMjU3Mi4uMTllMWNlMjM4NDJhOSAxMDA2NDQKPiA+Pj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYm8uYwo+ID4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9iby5jCj4gPj4+IEBAIC03NDMsNyArNzQzLDcgQEAgc3RhdGljIGludCB2 bXdfdXNlcl9ib19zeW5jY3B1X2dyYWIoc3RydWN0IHZtd191c2VyX2J1ZmZlcl9vYmplY3QgKnVz ZXJfYm8sCj4gPj4+ICAgICBpZiAoZmxhZ3MgJiBkcm1fdm13X3N5bmNjcHVfYWxsb3dfY3MpIHsK PiA+Pj4gICAgICAgICAgICAgbG9uZyBscmV0Owo+ID4+PiAtICAgICAgICAgICBscmV0ID0gZG1h X3Jlc3Zfd2FpdF90aW1lb3V0X3JjdQo+ID4+PiArICAgICAgICAgICBscmV0ID0gZG1hX3Jlc3Zf d2FpdF90aW1lb3V0X3VubG9ja2VkCj4gPj4+ICAgICAgICAgICAgICAgICAgICAgKGJvLT5iYXNl LnJlc3YsIHRydWUsIHRydWUsCj4gPj4+ICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NrID8g MCA6IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKPiA+Pj4gICAgICAgICAgICAgaWYgKCFscmV0KQo+ ID4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtcmVzdi5oIGIvaW5jbHVkZS9saW51 eC9kbWEtcmVzdi5oCj4gPj4+IGluZGV4IGQ0NGE3N2U4YTdlMzQuLjk5Y2ZiN2FmOTY2YjggMTAw NjQ0Cj4gPj4+IC0tLSBhL2luY2x1ZGUvbGludXgvZG1hLXJlc3YuaAo+ID4+PiArKysgYi9pbmNs dWRlL2xpbnV4L2RtYS1yZXN2LmgKPiA+Pj4gQEAgLTI0Niw3ICsyNDYsNyBAQCBkbWFfcmVzdl9n ZXRfZXhjbChzdHJ1Y3QgZG1hX3Jlc3YgKm9iaikKPiA+Pj4gICAgfQo+ID4+PiAgICAvKioKPiA+ Pj4gLSAqIGRtYV9yZXN2X2dldF9leGNsX3JjdSAtIGdldCB0aGUgcmVzZXJ2YXRpb24gb2JqZWN0 J3MKPiA+Pj4gKyAqIGRtYV9yZXN2X2dldF9leGNsX3VubG9ja2VkIC0gZ2V0IHRoZSByZXNlcnZh dGlvbiBvYmplY3Qncwo+ID4+PiAgICAgKiBleGNsdXNpdmUgZmVuY2UsIHdpdGhvdXQgbG9jayBo ZWxkLgo+ID4+PiAgICAgKiBAb2JqOiB0aGUgcmVzZXJ2YXRpb24gb2JqZWN0Cj4gPj4+ICAgICAq Cj4gPj4+IEBAIC0yNTcsNyArMjU3LDcgQEAgZG1hX3Jlc3ZfZ2V0X2V4Y2woc3RydWN0IGRtYV9y ZXN2ICpvYmopCj4gPj4+ICAgICAqIFRoZSBleGNsdXNpdmUgZmVuY2Ugb3IgTlVMTCBpZiBub25l Cj4gPj4+ICAgICAqLwo+ID4+PiAgICBzdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfZmVuY2UgKgo+ ID4+PiAtZG1hX3Jlc3ZfZ2V0X2V4Y2xfcmN1KHN0cnVjdCBkbWFfcmVzdiAqb2JqKQo+ID4+PiAr ZG1hX3Jlc3ZfZ2V0X2V4Y2xfdW5sb2NrZWQoc3RydWN0IGRtYV9yZXN2ICpvYmopCj4gPj4+ICAg IHsKPiA+Pj4gICAgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwo+ID4+PiBAQCAtMjc4LDE2ICsy NzgsMTYgQEAgdm9pZCBkbWFfcmVzdl9hZGRfc2hhcmVkX2ZlbmNlKHN0cnVjdCBkbWFfcmVzdiAq b2JqLCBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSk7Cj4gPj4+ICAgIHZvaWQgZG1hX3Jlc3ZfYWRk X2V4Y2xfZmVuY2Uoc3RydWN0IGRtYV9yZXN2ICpvYmosIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNl KTsKPiA+Pj4gLWludCBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShzdHJ1Y3QgZG1hX3Jlc3YgKm9i aiwKPiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqKnBmZW5j ZV9leGNsLAo+ID4+PiAtICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqcHNoYXJlZF9j b3VudCwKPiA+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqKipw c2hhcmVkKTsKPiA+Pj4gK2ludCBkbWFfcmVzdl9nZXRfZmVuY2VzX3VubG9ja2VkKHN0cnVjdCBk bWFfcmVzdiAqb2JqLAo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk bWFfZmVuY2UgKipwZmVuY2VfZXhjbCwKPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCAqcHNoYXJlZF9jb3VudCwKPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICoqKnBzaGFyZWQpOwo+ID4+PiAgICBpbnQgZG1hX3Jlc3Zf Y29weV9mZW5jZXMoc3RydWN0IGRtYV9yZXN2ICpkc3QsIHN0cnVjdCBkbWFfcmVzdiAqc3JjKTsK PiA+Pj4gLWxvbmcgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShzdHJ1Y3QgZG1hX3Jlc3YgKm9i aiwgYm9vbCB3YWl0X2FsbCwgYm9vbCBpbnRyLAo+ID4+PiAtICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwo+ID4+PiArbG9uZyBkbWFfcmVzdl93YWl0X3Rp bWVvdXRfdW5sb2NrZWQoc3RydWN0IGRtYV9yZXN2ICpvYmosIGJvb2wgd2FpdF9hbGwsIGJvb2wg aW50ciwKPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n IHRpbWVvdXQpOwo+ID4+PiAtYm9vbCBkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3JjdShzdHJ1Y3Qg ZG1hX3Jlc3YgKm9iaiwgYm9vbCB0ZXN0X2FsbCk7Cj4gPj4+ICtib29sIGRtYV9yZXN2X3Rlc3Rf c2lnbmFsZWRfdW5sb2NrZWQoc3RydWN0IGRtYV9yZXN2ICpvYmosIGJvb2wgdGVzdF9hbGwpOwo+ ID4+PiAgICAjZW5kaWYgLyogX0xJTlVYX1JFU0VSVkFUSU9OX0ggKi8KPgoKCi0tIApEYW5pZWwg VmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5m ZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK