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=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 60BA6C47082 for ; Thu, 3 Jun 2021 11:17:35 +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 1F0A7613E6 for ; Thu, 3 Jun 2021 11:17:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1F0A7613E6 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com 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 127DE6E506; Thu, 3 Jun 2021 11:17:33 +0000 (UTC) Received: from mail-qk1-x72e.google.com (mail-qk1-x72e.google.com [IPv6:2607:f8b0:4864:20::72e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 47A966E150; Thu, 3 Jun 2021 11:17:29 +0000 (UTC) Received: by mail-qk1-x72e.google.com with SMTP id 76so5442287qkn.13; Thu, 03 Jun 2021 04:17:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=2ypkkOaIQMmr4XUSylFBzyegctBbWzMZkJwaTgYYlQ8=; b=HKDam01Rzb1JQ4ePBsb/8ZacasxSR6hdeV43czHsWfDuMlBr8veQBEh5/Ryeg03Ou/ PCOr+JNHsOVLwFuHlyHjw0OKNsvIhS873HjHUeHRWSEmFwRjPKz2vLqpkLKCq4Rv6CEX Y8KnehnAcGppck/FJt7JL5Z/iWP20Va/D61X17JDmozoN7AQGdIm71zc9ieS1DwLnzfp OrnnWj9JRH+uMoce0sLneRjx1HDJao7TSKaA1ErDK70k6yhS6ZUN2nXYv/qkWJDJqm3u trbvK0c3V4W0OsnckUxgBLAvJbA80mnTafx+rCWjcO+9JEFD3+vWIRcZE90Y52do3se4 5ASg== 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=2ypkkOaIQMmr4XUSylFBzyegctBbWzMZkJwaTgYYlQ8=; b=Py7PbZyMNskmvP68TESzo0q7WwJUSEXHFjd7+6UrgN8pzTRVt3QIPPK3Kz/LT2TiWz CeFfzJyLW6tfGu7GjGg5GMBxAXaObdrPj4/PNZARNylq9i6E3f3KlgQFCEDNolViFaag KRM4KwRTp2GrsAMqs/YxECPCIgYofLsdIFal38F5ynx/t2wPICDncgQWdQ8lyUM9jmO8 pnhkQp1wLvLeGFoyC5mqygio8v3osQsIU4ZU4waU3szpW57CCIu7SrrRTw4Tjiqe/oVL 4dwUUbsNfRWqFozouyaczKsOwi90fcD/hdF1u9Nym6Kx9LUKtaV8LHWWIbLuC4fwbmje QvTg== X-Gm-Message-State: AOAM531KXa76mzG32yrJg0s/z3VpiQkRYdaBvutat5CR7SPBIorEpqmO GbI47NEC1814HnsjHS7pU5DAxwnhofYAsPKPWKMuatcYbt0= X-Google-Smtp-Source: ABdhPJy7XTq2EkJwFsxqy03SOcvKyf2eERrK3JX/l8n5dvorbEX4jx/FGcdZweX0OPsTJcvZXGuELZFiBN6gTQukZTE= X-Received: by 2002:a37:9a0b:: with SMTP id c11mr11831885qke.327.1622719048601; Thu, 03 Jun 2021 04:17:28 -0700 (PDT) MIME-Version: 1.0 References: <20210602170716.280491-1-thomas.hellstrom@linux.intel.com> <20210602170716.280491-2-thomas.hellstrom@linux.intel.com> In-Reply-To: <20210602170716.280491-2-thomas.hellstrom@linux.intel.com> From: Matthew Auld Date: Thu, 3 Jun 2021 12:17:01 +0100 Message-ID: Subject: Re: [Intel-gfx] [PATCH 1/5] drm/i915: Update object placement flags to be mutable To: =?UTF-8?Q?Thomas_Hellstr=C3=B6m?= 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: Intel Graphics Development , ML dri-devel Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Wed, 2 Jun 2021 at 18:08, Thomas Hellstr=C3=B6m wrote: > > The object ops i915_GEM_OBJECT_HAS_IOMEM and the object > I915_BO_ALLOC_STRUCT_PAGE flags are considered immutable by > much of our code. Introduce a new mem_flags member to hold these > and make sure checks for these flags being set are either done > under the object lock or with pages properly pinned. The flags > will change during migration under the object lock. What are the rules for the gem_object_ops flags? Like is_shrinkable? Can't we just move these there(IOMEM vs PAGE)? > > Signed-off-by: Thomas Hellstr=C3=B6m > --- > drivers/gpu/drm/i915/gem/i915_gem_internal.c | 4 +- > drivers/gpu/drm/i915/gem/i915_gem_mman.c | 7 +++- > drivers/gpu/drm/i915/gem/i915_gem_object.c | 38 +++++++++++++++++++ > drivers/gpu/drm/i915/gem/i915_gem_object.h | 14 ++----- > .../gpu/drm/i915/gem/i915_gem_object_types.h | 20 +++++----- > drivers/gpu/drm/i915/gem/i915_gem_pages.c | 2 +- > drivers/gpu/drm/i915/gem/i915_gem_phys.c | 2 +- > drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 10 +++-- > drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 2 +- > drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 4 +- > .../drm/i915/gem/selftests/huge_gem_object.c | 4 +- > .../gpu/drm/i915/gem/selftests/huge_pages.c | 5 +-- > .../drm/i915/gem/selftests/i915_gem_mman.c | 4 +- > .../drm/i915/gem/selftests/i915_gem_phys.c | 3 +- > 14 files changed, 78 insertions(+), 41 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_internal.c b/drivers/gpu/d= rm/i915/gem/i915_gem_internal.c > index ce6b664b10aa..13b217f75055 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_internal.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_internal.c > @@ -177,8 +177,8 @@ i915_gem_object_create_internal(struct drm_i915_priva= te *i915, > return ERR_PTR(-ENOMEM); > > drm_gem_private_object_init(&i915->drm, &obj->base, size); > - i915_gem_object_init(obj, &i915_gem_object_internal_ops, &lock_cl= ass, > - I915_BO_ALLOC_STRUCT_PAGE); > + i915_gem_object_init(obj, &i915_gem_object_internal_ops, &lock_cl= ass, 0); > + obj->mem_flags |=3D I915_BO_FLAG_STRUCT_PAGE; > > /* > * Mark the object as volatile, such that the pages are marked as > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i= 915/gem/i915_gem_mman.c > index d1de97e4adfd..171a21ca930c 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c > @@ -683,7 +683,7 @@ __assign_mmap_offset(struct drm_i915_gem_object *obj, > > if (mmap_type !=3D I915_MMAP_TYPE_GTT && > !i915_gem_object_has_struct_page(obj) && > - !i915_gem_object_type_has(obj, I915_GEM_OBJECT_HAS_IOMEM)) > + !i915_gem_object_has_iomem(obj)) > return -ENODEV; > > mmo =3D mmap_offset_attach(obj, mmap_type, file); > @@ -707,7 +707,12 @@ __assign_mmap_offset_handle(struct drm_file *file, > if (!obj) > return -ENOENT; > > + err =3D i915_gem_object_lock_interruptible(obj, NULL); > + if (err) > + goto out_put; > err =3D __assign_mmap_offset(obj, mmap_type, offset, file); > + i915_gem_object_unlock(obj); > +out_put: > i915_gem_object_put(obj); > return err; > } > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm= /i915/gem/i915_gem_object.c > index cf18c430d51f..07e8ff9a8aae 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c > @@ -475,6 +475,44 @@ bool i915_gem_object_migratable(struct drm_i915_gem_= object *obj) > return obj->mm.n_placements > 1; > } > > +/** > + * i915_gem_object_has_struct_page - Whether the object is page-backed > + * @obj: The object to query. > + * > + * This function should only be called while the object is locked or pin= ned, > + * otherwise the page backing may change under the caller. > + * > + * Return: True if page-backed, false otherwise. > + */ > +bool i915_gem_object_has_struct_page(const struct drm_i915_gem_object *o= bj) > +{ > +#ifdef CONFIG_LOCKDEP > + if (IS_DGFX(to_i915(obj->base.dev)) && > + i915_gem_object_evictable((void __force *)obj)) > + assert_object_held_shared(obj); > +#endif > + return obj->mem_flags & I915_BO_FLAG_STRUCT_PAGE; > +} > + > +/** > + * i915_gem_object_has_iomem - Whether the object is iomem-backed > + * @obj: The object to query. > + * > + * This function should only be called while the object is locked or pin= ned, > + * otherwise the iomem backing may change under the caller. > + * > + * Return: True if iomem-backed, false otherwise. > + */ > +bool i915_gem_object_has_iomem(const struct drm_i915_gem_object *obj) > +{ > +#ifdef CONFIG_LOCKDEP > + if (IS_DGFX(to_i915(obj->base.dev)) && > + i915_gem_object_evictable((void __force *)obj)) > + assert_object_held_shared(obj); > +#endif > + return obj->mem_flags & I915_BO_FLAG_IOMEM; > +} > + > void i915_gem_init__objects(struct drm_i915_private *i915) > { > INIT_WORK(&i915->mm.free_work, __i915_gem_free_work); > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu/drm= /i915/gem/i915_gem_object.h > index ff59e6c640e6..23e26f6b1db9 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h > @@ -147,7 +147,7 @@ i915_gem_object_put(struct drm_i915_gem_object *obj) > /* > * If more than one potential simultaneous locker, assert held. > */ > -static inline void assert_object_held_shared(struct drm_i915_gem_object = *obj) > +static inline void assert_object_held_shared(const struct drm_i915_gem_o= bject *obj) > { > /* > * Note mm list lookup is protected by > @@ -261,17 +261,9 @@ i915_gem_object_type_has(const struct drm_i915_gem_o= bject *obj, > return obj->ops->flags & flags; > } > > -static inline bool > -i915_gem_object_has_struct_page(const struct drm_i915_gem_object *obj) > -{ > - return obj->flags & I915_BO_ALLOC_STRUCT_PAGE; > -} > +bool i915_gem_object_has_struct_page(const struct drm_i915_gem_object *o= bj); > > -static inline bool > -i915_gem_object_has_iomem(const struct drm_i915_gem_object *obj) > -{ > - return i915_gem_object_type_has(obj, I915_GEM_OBJECT_HAS_IOMEM); > -} > +bool i915_gem_object_has_iomem(const struct drm_i915_gem_object *obj); > > static inline bool > i915_gem_object_is_shrinkable(const struct drm_i915_gem_object *obj) > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/g= pu/drm/i915/gem/i915_gem_object_types.h > index 2a23b77424b3..fb9ccc3f50e7 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > @@ -33,10 +33,9 @@ struct i915_lut_handle { > > struct drm_i915_gem_object_ops { > unsigned int flags; > -#define I915_GEM_OBJECT_HAS_IOMEM BIT(1) > -#define I915_GEM_OBJECT_IS_SHRINKABLE BIT(2) > -#define I915_GEM_OBJECT_IS_PROXY BIT(3) > -#define I915_GEM_OBJECT_NO_MMAP BIT(4) > +#define I915_GEM_OBJECT_IS_SHRINKABLE BIT(1) > +#define I915_GEM_OBJECT_IS_PROXY BIT(2) > +#define I915_GEM_OBJECT_NO_MMAP BIT(3) > > /* Interface between the GEM object and its backing storage. > * get_pages() is called once prior to the use of the associated = set > @@ -201,17 +200,18 @@ struct drm_i915_gem_object { > unsigned long flags; > #define I915_BO_ALLOC_CONTIGUOUS BIT(0) > #define I915_BO_ALLOC_VOLATILE BIT(1) > -#define I915_BO_ALLOC_STRUCT_PAGE BIT(2) > -#define I915_BO_ALLOC_CPU_CLEAR BIT(3) > -#define I915_BO_ALLOC_USER BIT(4) > +#define I915_BO_ALLOC_CPU_CLEAR BIT(2) > +#define I915_BO_ALLOC_USER BIT(3) > #define I915_BO_ALLOC_FLAGS (I915_BO_ALLOC_CONTIGUOUS | \ > I915_BO_ALLOC_VOLATILE | \ > - I915_BO_ALLOC_STRUCT_PAGE | \ > I915_BO_ALLOC_CPU_CLEAR | \ > I915_BO_ALLOC_USER) > -#define I915_BO_READONLY BIT(5) > -#define I915_TILING_QUIRK_BIT 6 /* unknown swizzling; do not release!= */ > +#define I915_BO_READONLY BIT(4) > +#define I915_TILING_QUIRK_BIT 5 /* unknown swizzling; do not release!= */ > > + unsigned int mem_flags:2; > +#define I915_BO_FLAG_STRUCT_PAGE BIT(0) > +#define I915_BO_FLAG_IOMEM BIT(1) > /* > * Is the object to be mapped as read-only to the GPU > * Only honoured if hardware has relevant pte bit > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pages.c b/drivers/gpu/drm/= i915/gem/i915_gem_pages.c > index 086005c1c7ea..f2f850e31b8e 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_pages.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_pages.c > @@ -351,7 +351,7 @@ void *i915_gem_object_pin_map(struct drm_i915_gem_obj= ect *obj, > int err; > > if (!i915_gem_object_has_struct_page(obj) && > - !i915_gem_object_type_has(obj, I915_GEM_OBJECT_HAS_IOMEM)) > + !i915_gem_object_has_iomem(obj)) > return ERR_PTR(-ENXIO); > > assert_object_held(obj); > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_phys.c b/drivers/gpu/drm/i= 915/gem/i915_gem_phys.c > index be72ad0634ba..7986612f48fa 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_phys.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_phys.c > @@ -76,7 +76,7 @@ static int i915_gem_object_get_pages_phys(struct drm_i9= 15_gem_object *obj) > intel_gt_chipset_flush(&to_i915(obj->base.dev)->gt); > > /* We're no longer struct page backed */ > - obj->flags &=3D ~I915_BO_ALLOC_STRUCT_PAGE; > + obj->mem_flags &=3D ~I915_BO_FLAG_STRUCT_PAGE; > __i915_gem_object_set_pages(obj, st, sg->length); > > return 0; > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/= i915/gem/i915_gem_shmem.c > index 5d16c4462fda..3648ae1d6628 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c > @@ -284,6 +284,7 @@ __i915_gem_object_release_shmem(struct drm_i915_gem_o= bject *obj, > bool needs_clflush) > { > GEM_BUG_ON(obj->mm.madv =3D=3D __I915_MADV_PURGED); > + GEM_WARN_ON(IS_DGFX(to_i915(obj->base.dev))); > > if (obj->mm.madv =3D=3D I915_MADV_DONTNEED) > obj->mm.dirty =3D false; > @@ -302,6 +303,7 @@ void i915_gem_object_put_pages_shmem(struct drm_i915_= gem_object *obj, struct sg_ > struct pagevec pvec; > struct page *page; > > + GEM_WARN_ON(IS_DGFX(to_i915(obj->base.dev))); > __i915_gem_object_release_shmem(obj, pages, true); > > i915_gem_gtt_finish_pages(obj, pages); > @@ -444,7 +446,7 @@ shmem_pread(struct drm_i915_gem_object *obj, > > static void shmem_release(struct drm_i915_gem_object *obj) > { > - if (obj->flags & I915_BO_ALLOC_STRUCT_PAGE) > + if (i915_gem_object_has_struct_page(obj)) > i915_gem_object_release_memory_region(obj); > > fput(obj->base.filp); > @@ -513,9 +515,8 @@ static int shmem_object_init(struct intel_memory_regi= on *mem, > mapping_set_gfp_mask(mapping, mask); > GEM_BUG_ON(!(mapping_gfp_mask(mapping) & __GFP_RECLAIM)); > > - i915_gem_object_init(obj, &i915_gem_shmem_ops, &lock_class, > - I915_BO_ALLOC_STRUCT_PAGE); > - > + i915_gem_object_init(obj, &i915_gem_shmem_ops, &lock_class, 0); > + obj->mem_flags |=3D I915_BO_FLAG_STRUCT_PAGE; > obj->write_domain =3D I915_GEM_DOMAIN_CPU; > obj->read_domains =3D I915_GEM_DOMAIN_CPU; > > @@ -561,6 +562,7 @@ i915_gem_object_create_shmem_from_data(struct drm_i91= 5_private *dev_priv, > resource_size_t offset; > int err; > > + GEM_WARN_ON(IS_DGFX(dev_priv)); > obj =3D i915_gem_object_create_shmem(dev_priv, round_up(size, PAG= E_SIZE)); > if (IS_ERR(obj)) > return obj; > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i9= 15/gem/i915_gem_ttm.c > index 3748098b42d5..ae12a2be11a2 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c > @@ -563,7 +563,6 @@ static u64 i915_ttm_mmap_offset(struct drm_i915_gem_o= bject *obj) > > const struct drm_i915_gem_object_ops i915_gem_ttm_obj_ops =3D { > .name =3D "i915_gem_object_ttm", > - .flags =3D I915_GEM_OBJECT_HAS_IOMEM, > > .get_pages =3D i915_ttm_get_pages, > .put_pages =3D i915_ttm_put_pages, > @@ -620,6 +619,7 @@ int __i915_gem_ttm_object_init(struct intel_memory_re= gion *mem, > i915_gem_object_init_memory_region(obj, mem); > i915_gem_object_make_unshrinkable(obj); > obj->read_domains =3D I915_GEM_DOMAIN_WC | I915_GEM_DOMAIN_GTT; > + obj->mem_flags |=3D I915_BO_FLAG_IOMEM; > i915_gem_object_set_cache_coherency(obj, I915_CACHE_NONE); > INIT_RADIX_TREE(&obj->ttm.get_io_page.radix, GFP_KERNEL | __GFP_N= OWARN); > mutex_init(&obj->ttm.get_io_page.lock); > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/dr= m/i915/gem/i915_gem_userptr.c > index 602f0ed983ec..41dfcb75f05b 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c > @@ -538,8 +538,8 @@ i915_gem_userptr_ioctl(struct drm_device *dev, > return -ENOMEM; > > drm_gem_private_object_init(dev, &obj->base, args->user_size); > - i915_gem_object_init(obj, &i915_gem_userptr_ops, &lock_class, > - I915_BO_ALLOC_STRUCT_PAGE); > + i915_gem_object_init(obj, &i915_gem_userptr_ops, &lock_class, 0); > + obj->mem_flags =3D I915_BO_FLAG_STRUCT_PAGE; > obj->read_domains =3D I915_GEM_DOMAIN_CPU; > obj->write_domain =3D I915_GEM_DOMAIN_CPU; > i915_gem_object_set_cache_coherency(obj, I915_CACHE_LLC); > diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_gem_object.c b/drive= rs/gpu/drm/i915/gem/selftests/huge_gem_object.c > index 0c8ecfdf5405..f963b8e1e37b 100644 > --- a/drivers/gpu/drm/i915/gem/selftests/huge_gem_object.c > +++ b/drivers/gpu/drm/i915/gem/selftests/huge_gem_object.c > @@ -114,8 +114,8 @@ huge_gem_object(struct drm_i915_private *i915, > return ERR_PTR(-ENOMEM); > > drm_gem_private_object_init(&i915->drm, &obj->base, dma_size); > - i915_gem_object_init(obj, &huge_ops, &lock_class, > - I915_BO_ALLOC_STRUCT_PAGE); > + i915_gem_object_init(obj, &huge_ops, &lock_class, 0); > + obj->mem_flags |=3D I915_BO_FLAG_STRUCT_PAGE; > > obj->read_domains =3D I915_GEM_DOMAIN_CPU; > obj->write_domain =3D I915_GEM_DOMAIN_CPU; > diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gp= u/drm/i915/gem/selftests/huge_pages.c > index dadd485bc52f..ccc67ed1a84b 100644 > --- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c > +++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c > @@ -167,9 +167,8 @@ huge_pages_object(struct drm_i915_private *i915, > return ERR_PTR(-ENOMEM); > > drm_gem_private_object_init(&i915->drm, &obj->base, size); > - i915_gem_object_init(obj, &huge_page_ops, &lock_class, > - I915_BO_ALLOC_STRUCT_PAGE); > - > + i915_gem_object_init(obj, &huge_page_ops, &lock_class, 0); > + obj->mem_flags |=3D I915_BO_FLAG_STRUCT_PAGE; > i915_gem_object_set_volatile(obj); > > obj->write_domain =3D I915_GEM_DOMAIN_CPU; > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers= /gpu/drm/i915/gem/selftests/i915_gem_mman.c > index ca69a29b7f2a..bfb35270a1f0 100644 > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c > @@ -837,7 +837,7 @@ static bool can_mmap(struct drm_i915_gem_object *obj,= enum i915_mmap_type type) > > if (type !=3D I915_MMAP_TYPE_GTT && > !i915_gem_object_has_struct_page(obj) && > - !i915_gem_object_type_has(obj, I915_GEM_OBJECT_HAS_IOMEM)) > + !i915_gem_object_has_iomem(obj)) > return false; > > return true; > @@ -991,7 +991,7 @@ static const char *repr_mmap_type(enum i915_mmap_type= type) > static bool can_access(const struct drm_i915_gem_object *obj) > { > return i915_gem_object_has_struct_page(obj) || > - i915_gem_object_type_has(obj, I915_GEM_OBJECT_HAS_IOMEM); > + i915_gem_object_has_iomem(obj); > } > > static int __igt_mmap_access(struct drm_i915_private *i915, > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_phys.c b/drivers= /gpu/drm/i915/gem/selftests/i915_gem_phys.c > index 3a6ce87f8b52..d43d8dae0f69 100644 > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_phys.c > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_phys.c > @@ -25,13 +25,14 @@ static int mock_phys_object(void *arg) > goto out; > } > > + i915_gem_object_lock(obj, NULL); > if (!i915_gem_object_has_struct_page(obj)) { > + i915_gem_object_unlock(obj); > err =3D -EINVAL; > pr_err("shmem has no struct page\n"); > goto out_obj; > } > > - i915_gem_object_lock(obj, NULL); > err =3D i915_gem_object_attach_phys(obj, PAGE_SIZE); > i915_gem_object_unlock(obj); > if (err) { > -- > 2.31.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.5 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 31C80C47096 for ; Thu, 3 Jun 2021 11:17:33 +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 E8DA06121D for ; Thu, 3 Jun 2021 11:17:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E8DA06121D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com 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 735886E150; Thu, 3 Jun 2021 11:17:32 +0000 (UTC) Received: from mail-qk1-x72e.google.com (mail-qk1-x72e.google.com [IPv6:2607:f8b0:4864:20::72e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 47A966E150; Thu, 3 Jun 2021 11:17:29 +0000 (UTC) Received: by mail-qk1-x72e.google.com with SMTP id 76so5442287qkn.13; Thu, 03 Jun 2021 04:17:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=2ypkkOaIQMmr4XUSylFBzyegctBbWzMZkJwaTgYYlQ8=; b=HKDam01Rzb1JQ4ePBsb/8ZacasxSR6hdeV43czHsWfDuMlBr8veQBEh5/Ryeg03Ou/ PCOr+JNHsOVLwFuHlyHjw0OKNsvIhS873HjHUeHRWSEmFwRjPKz2vLqpkLKCq4Rv6CEX Y8KnehnAcGppck/FJt7JL5Z/iWP20Va/D61X17JDmozoN7AQGdIm71zc9ieS1DwLnzfp OrnnWj9JRH+uMoce0sLneRjx1HDJao7TSKaA1ErDK70k6yhS6ZUN2nXYv/qkWJDJqm3u trbvK0c3V4W0OsnckUxgBLAvJbA80mnTafx+rCWjcO+9JEFD3+vWIRcZE90Y52do3se4 5ASg== 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=2ypkkOaIQMmr4XUSylFBzyegctBbWzMZkJwaTgYYlQ8=; b=Py7PbZyMNskmvP68TESzo0q7WwJUSEXHFjd7+6UrgN8pzTRVt3QIPPK3Kz/LT2TiWz CeFfzJyLW6tfGu7GjGg5GMBxAXaObdrPj4/PNZARNylq9i6E3f3KlgQFCEDNolViFaag KRM4KwRTp2GrsAMqs/YxECPCIgYofLsdIFal38F5ynx/t2wPICDncgQWdQ8lyUM9jmO8 pnhkQp1wLvLeGFoyC5mqygio8v3osQsIU4ZU4waU3szpW57CCIu7SrrRTw4Tjiqe/oVL 4dwUUbsNfRWqFozouyaczKsOwi90fcD/hdF1u9Nym6Kx9LUKtaV8LHWWIbLuC4fwbmje QvTg== X-Gm-Message-State: AOAM531KXa76mzG32yrJg0s/z3VpiQkRYdaBvutat5CR7SPBIorEpqmO GbI47NEC1814HnsjHS7pU5DAxwnhofYAsPKPWKMuatcYbt0= X-Google-Smtp-Source: ABdhPJy7XTq2EkJwFsxqy03SOcvKyf2eERrK3JX/l8n5dvorbEX4jx/FGcdZweX0OPsTJcvZXGuELZFiBN6gTQukZTE= X-Received: by 2002:a37:9a0b:: with SMTP id c11mr11831885qke.327.1622719048601; Thu, 03 Jun 2021 04:17:28 -0700 (PDT) MIME-Version: 1.0 References: <20210602170716.280491-1-thomas.hellstrom@linux.intel.com> <20210602170716.280491-2-thomas.hellstrom@linux.intel.com> In-Reply-To: <20210602170716.280491-2-thomas.hellstrom@linux.intel.com> From: Matthew Auld Date: Thu, 3 Jun 2021 12:17:01 +0100 Message-ID: To: =?UTF-8?Q?Thomas_Hellstr=C3=B6m?= Subject: Re: [Intel-gfx] [PATCH 1/5] drm/i915: Update object placement flags to be mutable 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: Intel Graphics Development , ML dri-devel Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gV2VkLCAyIEp1biAyMDIxIGF0IDE4OjA4LCBUaG9tYXMgSGVsbHN0csO2bQo8dGhvbWFzLmhl bGxzdHJvbUBsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+Cj4gVGhlIG9iamVjdCBvcHMgaTkxNV9H RU1fT0JKRUNUX0hBU19JT01FTSBhbmQgdGhlIG9iamVjdAo+IEk5MTVfQk9fQUxMT0NfU1RSVUNU X1BBR0UgZmxhZ3MgYXJlIGNvbnNpZGVyZWQgaW1tdXRhYmxlIGJ5Cj4gbXVjaCBvZiBvdXIgY29k ZS4gSW50cm9kdWNlIGEgbmV3IG1lbV9mbGFncyBtZW1iZXIgdG8gaG9sZCB0aGVzZQo+IGFuZCBt YWtlIHN1cmUgY2hlY2tzIGZvciB0aGVzZSBmbGFncyBiZWluZyBzZXQgYXJlIGVpdGhlciBkb25l Cj4gdW5kZXIgdGhlIG9iamVjdCBsb2NrIG9yIHdpdGggcGFnZXMgcHJvcGVybHkgcGlubmVkLiBU aGUgZmxhZ3MKPiB3aWxsIGNoYW5nZSBkdXJpbmcgbWlncmF0aW9uIHVuZGVyIHRoZSBvYmplY3Qg bG9jay4KCldoYXQgYXJlIHRoZSBydWxlcyBmb3IgdGhlIGdlbV9vYmplY3Rfb3BzIGZsYWdzPyBM aWtlIGlzX3Nocmlua2FibGU/CkNhbid0IHdlIGp1c3QgbW92ZSB0aGVzZSB0aGVyZShJT01FTSB2 cyBQQUdFKT8KCj4KPiBTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLmhl bGxzdHJvbUBsaW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9pbnRlcm5hbC5jICB8ICA0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9tbWFuLmMgICAgICB8ICA3ICsrKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX29iamVjdC5jICAgIHwgMzggKysrKysrKysrKysrKysrKysrKwo+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmggICAgfCAxNCArKy0tLS0tCj4g IC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oICB8IDIwICsrKysr LS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmMgICAgIHwg IDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BoeXMuYyAgICAgIHwg IDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMgICAgIHwg MTAgKysrLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jICAgICAg IHwgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYyAg IHwgIDQgKy0KPiAgLi4uL2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9nZW1fb2JqZWN0LmMg IHwgIDQgKy0KPiAgLi4uL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYyAg IHwgIDUgKy0tCj4gIC4uLi9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21tYW4uYyAg ICB8ICA0ICstCj4gIC4uLi9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX3BoeXMuYyAg ICB8ICAzICstCj4gIDE0IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMoKyksIDQxIGRlbGV0 aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9pbnRlcm5hbC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2ludGVybmFs LmMKPiBpbmRleCBjZTZiNjY0YjEwYWEuLjEzYjIxN2Y3NTA1NSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1faW50ZXJuYWwuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9pbnRlcm5hbC5jCj4gQEAgLTE3Nyw4ICsxNzcsOCBA QCBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LAo+ICAgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPgo+ICAg ICAgICAgZHJtX2dlbV9wcml2YXRlX29iamVjdF9pbml0KCZpOTE1LT5kcm0sICZvYmotPmJhc2Us IHNpemUpOwo+IC0gICAgICAgaTkxNV9nZW1fb2JqZWN0X2luaXQob2JqLCAmaTkxNV9nZW1fb2Jq ZWN0X2ludGVybmFsX29wcywgJmxvY2tfY2xhc3MsCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJOTE1X0JPX0FMTE9DX1NUUlVDVF9QQUdFKTsKPiArICAgICAgIGk5MTVfZ2VtX29iamVj dF9pbml0KG9iaiwgJmk5MTVfZ2VtX29iamVjdF9pbnRlcm5hbF9vcHMsICZsb2NrX2NsYXNzLCAw KTsKPiArICAgICAgIG9iai0+bWVtX2ZsYWdzIHw9IEk5MTVfQk9fRkxBR19TVFJVQ1RfUEFHRTsK Pgo+ICAgICAgICAgLyoKPiAgICAgICAgICAqIE1hcmsgdGhlIG9iamVjdCBhcyB2b2xhdGlsZSwg c3VjaCB0aGF0IHRoZSBwYWdlcyBhcmUgbWFya2VkIGFzCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fbW1hbi5jCj4gaW5kZXggZDFkZTk3ZTRhZGZkLi4xNzFhMjFjYTkzMGMgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmMKPiBAQCAtNjgzLDcg KzY4Myw3IEBAIF9fYXNzaWduX21tYXBfb2Zmc2V0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCj4KPiAgICAgICAgIGlmIChtbWFwX3R5cGUgIT0gSTkxNV9NTUFQX1RZUEVfR1RUICYm Cj4gICAgICAgICAgICAgIWk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2Uob2JqKSAmJgo+ IC0gICAgICAgICAgICFpOTE1X2dlbV9vYmplY3RfdHlwZV9oYXMob2JqLCBJOTE1X0dFTV9PQkpF Q1RfSEFTX0lPTUVNKSkKPiArICAgICAgICAgICAhaTkxNV9nZW1fb2JqZWN0X2hhc19pb21lbShv YmopKQo+ICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKPgo+ICAgICAgICAgbW1vID0g bW1hcF9vZmZzZXRfYXR0YWNoKG9iaiwgbW1hcF90eXBlLCBmaWxlKTsKPiBAQCAtNzA3LDcgKzcw NywxMiBAQCBfX2Fzc2lnbl9tbWFwX29mZnNldF9oYW5kbGUoc3RydWN0IGRybV9maWxlICpmaWxl LAo+ICAgICAgICAgaWYgKCFvYmopCj4gICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOwo+ Cj4gKyAgICAgICBlcnIgPSBpOTE1X2dlbV9vYmplY3RfbG9ja19pbnRlcnJ1cHRpYmxlKG9iaiwg TlVMTCk7Cj4gKyAgICAgICBpZiAoZXJyKQo+ICsgICAgICAgICAgICAgICBnb3RvIG91dF9wdXQ7 Cj4gICAgICAgICBlcnIgPSBfX2Fzc2lnbl9tbWFwX29mZnNldChvYmosIG1tYXBfdHlwZSwgb2Zm c2V0LCBmaWxlKTsKPiArICAgICAgIGk5MTVfZ2VtX29iamVjdF91bmxvY2sob2JqKTsKPiArb3V0 X3B1dDoKPiAgICAgICAgIGk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiAgICAgICAgIHJldHVy biBlcnI7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5j Cj4gaW5kZXggY2YxOGM0MzBkNTFmLi4wN2U4ZmY5YThhYWUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jCj4gQEAgLTQ3NSw2ICs0NzUsNDQgQEAgYm9v bCBpOTE1X2dlbV9vYmplY3RfbWlncmF0YWJsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQo+ICAgICAgICAgcmV0dXJuIG9iai0+bW0ubl9wbGFjZW1lbnRzID4gMTsKPiAgfQo+Cj4g Ky8qKgo+ICsgKiBpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9wYWdlIC0gV2hldGhlciB0aGUg b2JqZWN0IGlzIHBhZ2UtYmFja2VkCj4gKyAqIEBvYmo6IFRoZSBvYmplY3QgdG8gcXVlcnkuCj4g KyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoaWxlIHRoZSBv YmplY3QgaXMgbG9ja2VkIG9yIHBpbm5lZCwKPiArICogb3RoZXJ3aXNlIHRoZSBwYWdlIGJhY2tp bmcgbWF5IGNoYW5nZSB1bmRlciB0aGUgY2FsbGVyLgo+ICsgKgo+ICsgKiBSZXR1cm46IFRydWUg aWYgcGFnZS1iYWNrZWQsIGZhbHNlIG90aGVyd2lzZS4KPiArICovCj4gK2Jvb2wgaTkxNV9nZW1f b2JqZWN0X2hhc19zdHJ1Y3RfcGFnZShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQo+ICt7Cj4gKyNpZmRlZiBDT05GSUdfTE9DS0RFUAo+ICsgICAgICAgaWYgKElTX0RHRlgo dG9faTkxNShvYmotPmJhc2UuZGV2KSkgJiYKPiArICAgICAgICAgICBpOTE1X2dlbV9vYmplY3Rf ZXZpY3RhYmxlKCh2b2lkIF9fZm9yY2UgKilvYmopKQo+ICsgICAgICAgICAgICAgICBhc3NlcnRf b2JqZWN0X2hlbGRfc2hhcmVkKG9iaik7Cj4gKyNlbmRpZgo+ICsgICAgICAgcmV0dXJuIG9iai0+ bWVtX2ZsYWdzICYgSTkxNV9CT19GTEFHX1NUUlVDVF9QQUdFOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogaTkxNV9nZW1fb2JqZWN0X2hhc19pb21lbSAtIFdoZXRoZXIgdGhlIG9iamVjdCBpcyBpb21l bS1iYWNrZWQKPiArICogQG9iajogVGhlIG9iamVjdCB0byBxdWVyeS4KPiArICoKPiArICogVGhp cyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hpbGUgdGhlIG9iamVjdCBpcyBsb2Nr ZWQgb3IgcGlubmVkLAo+ICsgKiBvdGhlcndpc2UgdGhlIGlvbWVtIGJhY2tpbmcgbWF5IGNoYW5n ZSB1bmRlciB0aGUgY2FsbGVyLgo+ICsgKgo+ICsgKiBSZXR1cm46IFRydWUgaWYgaW9tZW0tYmFj a2VkLCBmYWxzZSBvdGhlcndpc2UuCj4gKyAqLwo+ICtib29sIGk5MTVfZ2VtX29iamVjdF9oYXNf aW9tZW0oY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiArewo+ICsjaWZk ZWYgQ09ORklHX0xPQ0tERVAKPiArICAgICAgIGlmIChJU19ER0ZYKHRvX2k5MTUob2JqLT5iYXNl LmRldikpICYmCj4gKyAgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X2V2aWN0YWJsZSgodm9pZCBf X2ZvcmNlICopb2JqKSkKPiArICAgICAgICAgICAgICAgYXNzZXJ0X29iamVjdF9oZWxkX3NoYXJl ZChvYmopOwo+ICsjZW5kaWYKPiArICAgICAgIHJldHVybiBvYmotPm1lbV9mbGFncyAmIEk5MTVf Qk9fRkxBR19JT01FTTsKPiArfQo+ICsKPiAgdm9pZCBpOTE1X2dlbV9pbml0X19vYmplY3RzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICB7Cj4gICAgICAgICBJTklUX1dPUksoJmk5 MTUtPm1tLmZyZWVfd29yaywgX19pOTE1X2dlbV9mcmVlX3dvcmspOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKPiBpbmRleCBmZjU5ZTZjNjQwZTYuLjIzZTI2 ZjZiMWRiOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f b2JqZWN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0 LmgKPiBAQCAtMTQ3LDcgKzE0Nyw3IEBAIGk5MTVfZ2VtX29iamVjdF9wdXQoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaikKPiAgLyoKPiAgICogSWYgbW9yZSB0aGFuIG9uZSBwb3RlbnRp YWwgc2ltdWx0YW5lb3VzIGxvY2tlciwgYXNzZXJ0IGhlbGQuCj4gICAqLwo+IC1zdGF0aWMgaW5s aW5lIHZvaWQgYXNzZXJ0X29iamVjdF9oZWxkX3NoYXJlZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X29iamVjdF9oZWxkX3NoYXJl ZChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICB7Cj4gICAgICAgICAv Kgo+ICAgICAgICAgICogTm90ZSBtbSBsaXN0IGxvb2t1cCBpcyBwcm90ZWN0ZWQgYnkKPiBAQCAt MjYxLDE3ICsyNjEsOSBAQCBpOTE1X2dlbV9vYmplY3RfdHlwZV9oYXMoY29uc3Qgc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgICAgICAgIHJldHVybiBvYmotPm9wcy0+ZmxhZ3Mg JiBmbGFnczsKPiAgfQo+Cj4gLXN0YXRpYyBpbmxpbmUgYm9vbAo+IC1pOTE1X2dlbV9vYmplY3Rf aGFzX3N0cnVjdF9wYWdlKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4g LXsKPiAtICAgICAgIHJldHVybiBvYmotPmZsYWdzICYgSTkxNV9CT19BTExPQ19TVFJVQ1RfUEFH RTsKPiAtfQo+ICtib29sIGk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2UoY29uc3Qgc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4KPiAtc3RhdGljIGlubGluZSBib29sCj4g LWk5MTVfZ2VtX29iamVjdF9oYXNfaW9tZW0oY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKPiAtewo+IC0gICAgICAgcmV0dXJuIGk5MTVfZ2VtX29iamVjdF90eXBlX2hhcyhv YmosIEk5MTVfR0VNX09CSkVDVF9IQVNfSU9NRU0pOwo+IC19Cj4gK2Jvb2wgaTkxNV9nZW1fb2Jq ZWN0X2hhc19pb21lbShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKPgo+ ICBzdGF0aWMgaW5saW5lIGJvb2wKPiAgaTkxNV9nZW1fb2JqZWN0X2lzX3Nocmlua2FibGUoY29u c3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oCj4gaW5kZXggMmEyM2I3NzQyNGIz Li5mYjljY2MzZjUwZTcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX29iamVjdF90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX29iamVjdF90eXBlcy5oCj4gQEAgLTMzLDEwICszMyw5IEBAIHN0cnVjdCBpOTE1X2x1 dF9oYW5kbGUgewo+Cj4gIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyB7Cj4gICAgICAg ICB1bnNpZ25lZCBpbnQgZmxhZ3M7Cj4gLSNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0hBU19JT01F TSAgICAgIEJJVCgxKQo+IC0jZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9JU19TSFJJTktBQkxFICBC SVQoMikKPiAtI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNfUFJPWFkgICAgICAgQklUKDMpCj4g LSNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX05PX01NQVAgICAgICAgICAgICAgICAgQklUKDQpCj4g KyNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUgIEJJVCgxKQo+ICsjZGVmaW5l IEk5MTVfR0VNX09CSkVDVF9JU19QUk9YWSAgICAgICBCSVQoMikKPiArI2RlZmluZSBJOTE1X0dF TV9PQkpFQ1RfTk9fTU1BUCAgICAgICAgICAgICAgICBCSVQoMykKPgo+ICAgICAgICAgLyogSW50 ZXJmYWNlIGJldHdlZW4gdGhlIEdFTSBvYmplY3QgYW5kIGl0cyBiYWNraW5nIHN0b3JhZ2UuCj4g ICAgICAgICAgKiBnZXRfcGFnZXMoKSBpcyBjYWxsZWQgb25jZSBwcmlvciB0byB0aGUgdXNlIG9m IHRoZSBhc3NvY2lhdGVkIHNldAo+IEBAIC0yMDEsMTcgKzIwMCwxOCBAQCBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCB7Cj4gICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICAjZGVmaW5l IEk5MTVfQk9fQUxMT0NfQ09OVElHVU9VUyBCSVQoMCkKPiAgI2RlZmluZSBJOTE1X0JPX0FMTE9D X1ZPTEFUSUxFICAgQklUKDEpCj4gLSNkZWZpbmUgSTkxNV9CT19BTExPQ19TVFJVQ1RfUEFHRSBC SVQoMikKPiAtI2RlZmluZSBJOTE1X0JPX0FMTE9DX0NQVV9DTEVBUiAgQklUKDMpCj4gLSNkZWZp bmUgSTkxNV9CT19BTExPQ19VU0VSICAgICAgIEJJVCg0KQo+ICsjZGVmaW5lIEk5MTVfQk9fQUxM T0NfQ1BVX0NMRUFSICBCSVQoMikKPiArI2RlZmluZSBJOTE1X0JPX0FMTE9DX1VTRVIgICAgICAg QklUKDMpCj4gICNkZWZpbmUgSTkxNV9CT19BTExPQ19GTEFHUyAoSTkxNV9CT19BTExPQ19DT05U SUdVT1VTIHwgXAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTkxNV9CT19BTExPQ19W T0xBVElMRSB8IFwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIEk5MTVfQk9fQUxMT0Nf U1RSVUNUX1BBR0UgfCBcCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJOTE1X0JPX0FM TE9DX0NQVV9DTEVBUiB8IFwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEk5MTVfQk9f QUxMT0NfVVNFUikKPiAtI2RlZmluZSBJOTE1X0JPX1JFQURPTkxZICAgICAgICAgQklUKDUpCj4g LSNkZWZpbmUgSTkxNV9USUxJTkdfUVVJUktfQklUICAgIDYgLyogdW5rbm93biBzd2l6emxpbmc7 IGRvIG5vdCByZWxlYXNlISAqLwo+ICsjZGVmaW5lIEk5MTVfQk9fUkVBRE9OTFkgICAgICAgICBC SVQoNCkKPiArI2RlZmluZSBJOTE1X1RJTElOR19RVUlSS19CSVQgICAgNSAvKiB1bmtub3duIHN3 aXp6bGluZzsgZG8gbm90IHJlbGVhc2UhICovCj4KPiArICAgICAgIHVuc2lnbmVkIGludCBtZW1f ZmxhZ3M6MjsKPiArI2RlZmluZSBJOTE1X0JPX0ZMQUdfU1RSVUNUX1BBR0UgQklUKDApCj4gKyNk ZWZpbmUgSTkxNV9CT19GTEFHX0lPTUVNICAgICAgIEJJVCgxKQo+ICAgICAgICAgLyoKPiAgICAg ICAgICAqIElzIHRoZSBvYmplY3QgdG8gYmUgbWFwcGVkIGFzIHJlYWQtb25seSB0byB0aGUgR1BV Cj4gICAgICAgICAgKiBPbmx5IGhvbm91cmVkIGlmIGhhcmR3YXJlIGhhcyByZWxldmFudCBwdGUg Yml0Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdl cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmMKPiBpbmRleCAw ODYwMDVjMWM3ZWEuLmYyZjg1MGUzMWI4ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9wYWdlcy5jCj4gQEAgLTM1MSw3ICszNTEsNyBAQCB2b2lkICppOTE1X2dlbV9v YmplY3RfcGluX21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgICAgICAg aW50IGVycjsKPgo+ICAgICAgICAgaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9wYWdl KG9iaikgJiYKPiAtICAgICAgICAgICAhaTkxNV9nZW1fb2JqZWN0X3R5cGVfaGFzKG9iaiwgSTkx NV9HRU1fT0JKRUNUX0hBU19JT01FTSkpCj4gKyAgICAgICAgICAgIWk5MTVfZ2VtX29iamVjdF9o YXNfaW9tZW0ob2JqKSkKPiAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOWElPKTsK Pgo+ICAgICAgICAgYXNzZXJ0X29iamVjdF9oZWxkKG9iaik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9waHlzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fcGh5cy5jCj4gaW5kZXggYmU3MmFkMDYzNGJhLi43OTg2NjEyZjQ4ZmEg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BoeXMuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9waHlzLmMKPiBAQCAtNzYs NyArNzYsNyBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfcGh5cyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgICAgICAgaW50ZWxfZ3RfY2hpcHNldF9m bHVzaCgmdG9faTkxNShvYmotPmJhc2UuZGV2KS0+Z3QpOwo+Cj4gICAgICAgICAvKiBXZSdyZSBu byBsb25nZXIgc3RydWN0IHBhZ2UgYmFja2VkICovCj4gLSAgICAgICBvYmotPmZsYWdzICY9IH5J OTE1X0JPX0FMTE9DX1NUUlVDVF9QQUdFOwo+ICsgICAgICAgb2JqLT5tZW1fZmxhZ3MgJj0gfkk5 MTVfQk9fRkxBR19TVFJVQ1RfUEFHRTsKPiAgICAgICAgIF9faTkxNV9nZW1fb2JqZWN0X3NldF9w YWdlcyhvYmosIHN0LCBzZy0+bGVuZ3RoKTsKPgo+ICAgICAgICAgcmV0dXJuIDA7Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMKPiBpbmRleCA1ZDE2YzQ0NjJmZGEu LjM2NDhhZTFkNjYyOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fc2htZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9z aG1lbS5jCj4gQEAgLTI4NCw2ICsyODQsNyBAQCBfX2k5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3No bWVtKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBib29sIG5lZWRzX2NsZmx1c2gpCj4gIHsKPiAgICAgICAgIEdFTV9CVUdf T04ob2JqLT5tbS5tYWR2ID09IF9fSTkxNV9NQURWX1BVUkdFRCk7Cj4gKyAgICAgICBHRU1fV0FS Tl9PTihJU19ER0ZYKHRvX2k5MTUob2JqLT5iYXNlLmRldikpKTsKPgo+ICAgICAgICAgaWYgKG9i ai0+bW0ubWFkdiA9PSBJOTE1X01BRFZfRE9OVE5FRUQpCj4gICAgICAgICAgICAgICAgIG9iai0+ bW0uZGlydHkgPSBmYWxzZTsKPiBAQCAtMzAyLDYgKzMwMyw3IEBAIHZvaWQgaTkxNV9nZW1fb2Jq ZWN0X3B1dF9wYWdlc19zaG1lbShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBzdHJ1 Y3Qgc2dfCj4gICAgICAgICBzdHJ1Y3QgcGFnZXZlYyBwdmVjOwo+ICAgICAgICAgc3RydWN0IHBh Z2UgKnBhZ2U7Cj4KPiArICAgICAgIEdFTV9XQVJOX09OKElTX0RHRlgodG9faTkxNShvYmotPmJh c2UuZGV2KSkpOwo+ICAgICAgICAgX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShvYmos IHBhZ2VzLCB0cnVlKTsKPgo+ICAgICAgICAgaTkxNV9nZW1fZ3R0X2ZpbmlzaF9wYWdlcyhvYmos IHBhZ2VzKTsKPiBAQCAtNDQ0LDcgKzQ0Niw3IEBAIHNobWVtX3ByZWFkKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCj4KPiAgc3RhdGljIHZvaWQgc2htZW1fcmVsZWFzZShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICB7Cj4gLSAgICAgICBpZiAob2JqLT5mbGFncyAm IEk5MTVfQk9fQUxMT0NfU1RSVUNUX1BBR0UpCj4gKyAgICAgICBpZiAoaTkxNV9nZW1fb2JqZWN0 X2hhc19zdHJ1Y3RfcGFnZShvYmopKQo+ICAgICAgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3Rf cmVsZWFzZV9tZW1vcnlfcmVnaW9uKG9iaik7Cj4KPiAgICAgICAgIGZwdXQob2JqLT5iYXNlLmZp bHApOwo+IEBAIC01MTMsOSArNTE1LDggQEAgc3RhdGljIGludCBzaG1lbV9vYmplY3RfaW5pdChz dHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAo+ICAgICAgICAgbWFwcGluZ19zZXRfZ2Zw X21hc2sobWFwcGluZywgbWFzayk7Cj4gICAgICAgICBHRU1fQlVHX09OKCEobWFwcGluZ19nZnBf bWFzayhtYXBwaW5nKSAmIF9fR0ZQX1JFQ0xBSU0pKTsKPgo+IC0gICAgICAgaTkxNV9nZW1fb2Jq ZWN0X2luaXQob2JqLCAmaTkxNV9nZW1fc2htZW1fb3BzLCAmbG9ja19jbGFzcywKPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEk5MTVfQk9fQUxMT0NfU1RSVUNUX1BBR0UpOwo+IC0KPiAr ICAgICAgIGk5MTVfZ2VtX29iamVjdF9pbml0KG9iaiwgJmk5MTVfZ2VtX3NobWVtX29wcywgJmxv Y2tfY2xhc3MsIDApOwo+ICsgICAgICAgb2JqLT5tZW1fZmxhZ3MgfD0gSTkxNV9CT19GTEFHX1NU UlVDVF9QQUdFOwo+ICAgICAgICAgb2JqLT53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5f Q1BVOwo+ICAgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ1BVOwo+ Cj4gQEAgLTU2MSw2ICs1NjIsNyBAQCBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtX2Zyb21f ZGF0YShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAgICAgICByZXNvdXJj ZV9zaXplX3Qgb2Zmc2V0Owo+ICAgICAgICAgaW50IGVycjsKPgo+ICsgICAgICAgR0VNX1dBUk5f T04oSVNfREdGWChkZXZfcHJpdikpOwo+ICAgICAgICAgb2JqID0gaTkxNV9nZW1fb2JqZWN0X2Ny ZWF0ZV9zaG1lbShkZXZfcHJpdiwgcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKSk7Cj4gICAgICAg ICBpZiAoSVNfRVJSKG9iaikpCj4gICAgICAgICAgICAgICAgIHJldHVybiBvYmo7Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYwo+IGluZGV4IDM3NDgwOThiNDJkNS4uYWUx MmEyYmUxMWEyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV90dG0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYwo+ IEBAIC01NjMsNyArNTYzLDYgQEAgc3RhdGljIHU2NCBpOTE1X3R0bV9tbWFwX29mZnNldChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+Cj4gIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0X29wcyBpOTE1X2dlbV90dG1fb2JqX29wcyA9IHsKPiAgICAgICAgIC5uYW1lID0g Imk5MTVfZ2VtX29iamVjdF90dG0iLAo+IC0gICAgICAgLmZsYWdzID0gSTkxNV9HRU1fT0JKRUNU X0hBU19JT01FTSwKPgo+ICAgICAgICAgLmdldF9wYWdlcyA9IGk5MTVfdHRtX2dldF9wYWdlcywK PiAgICAgICAgIC5wdXRfcGFnZXMgPSBpOTE1X3R0bV9wdXRfcGFnZXMsCj4gQEAgLTYyMCw2ICs2 MTksNyBAQCBpbnQgX19pOTE1X2dlbV90dG1fb2JqZWN0X2luaXQoc3RydWN0IGludGVsX21lbW9y eV9yZWdpb24gKm1lbSwKPiAgICAgICAgIGk5MTVfZ2VtX29iamVjdF9pbml0X21lbW9yeV9yZWdp b24ob2JqLCBtZW0pOwo+ICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X21ha2VfdW5zaHJpbmthYmxl KG9iaik7Cj4gICAgICAgICBvYmotPnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9XQyB8 IEk5MTVfR0VNX0RPTUFJTl9HVFQ7Cj4gKyAgICAgICBvYmotPm1lbV9mbGFncyB8PSBJOTE1X0JP X0ZMQUdfSU9NRU07Cj4gICAgICAgICBpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2NvaGVyZW5j eShvYmosIEk5MTVfQ0FDSEVfTk9ORSk7Cj4gICAgICAgICBJTklUX1JBRElYX1RSRUUoJm9iai0+ dHRtLmdldF9pb19wYWdlLnJhZGl4LCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKPiAgICAg ICAgIG11dGV4X2luaXQoJm9iai0+dHRtLmdldF9pb19wYWdlLmxvY2spOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwo+IGluZGV4IDYwMmYwZWQ5ODNlYy4u NDFkZmNiNzVmMDViIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV91c2VycHRyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f dXNlcnB0ci5jCj4gQEAgLTUzOCw4ICs1MzgsOCBAQCBpOTE1X2dlbV91c2VycHRyX2lvY3RsKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ Cj4gICAgICAgICBkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoZGV2LCAmb2JqLT5iYXNlLCBh cmdzLT51c2VyX3NpemUpOwo+IC0gICAgICAgaTkxNV9nZW1fb2JqZWN0X2luaXQob2JqLCAmaTkx NV9nZW1fdXNlcnB0cl9vcHMsICZsb2NrX2NsYXNzLAo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgSTkxNV9CT19BTExPQ19TVFJVQ1RfUEFHRSk7Cj4gKyAgICAgICBpOTE1X2dlbV9vYmpl Y3RfaW5pdChvYmosICZpOTE1X2dlbV91c2VycHRyX29wcywgJmxvY2tfY2xhc3MsIDApOwo+ICsg ICAgICAgb2JqLT5tZW1fZmxhZ3MgPSBJOTE1X0JPX0ZMQUdfU1RSVUNUX1BBR0U7Cj4gICAgICAg ICBvYmotPnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7Cj4gICAgICAgICBvYmot PndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7Cj4gICAgICAgICBpOTE1X2dlbV9v YmplY3Rfc2V0X2NhY2hlX2NvaGVyZW5jeShvYmosIEk5MTVfQ0FDSEVfTExDKTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9odWdlX2dlbV9vYmplY3Qu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9nZW1fb2JqZWN0LmMK PiBpbmRleCAwYzhlY2ZkZjU0MDUuLmY5NjNiOGUxZTM3YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2h1Z2VfZ2VtX29iamVjdC5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9odWdlX2dlbV9vYmplY3QuYwo+IEBAIC0x MTQsOCArMTE0LDggQEAgaHVnZV9nZW1fb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1LAo+ICAgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPgo+ICAgICAg ICAgZHJtX2dlbV9wcml2YXRlX29iamVjdF9pbml0KCZpOTE1LT5kcm0sICZvYmotPmJhc2UsIGRt YV9zaXplKTsKPiAtICAgICAgIGk5MTVfZ2VtX29iamVjdF9pbml0KG9iaiwgJmh1Z2Vfb3BzLCAm bG9ja19jbGFzcywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIEk5MTVfQk9fQUxMT0Nf U1RSVUNUX1BBR0UpOwo+ICsgICAgICAgaTkxNV9nZW1fb2JqZWN0X2luaXQob2JqLCAmaHVnZV9v cHMsICZsb2NrX2NsYXNzLCAwKTsKPiArICAgICAgIG9iai0+bWVtX2ZsYWdzIHw9IEk5MTVfQk9f RkxBR19TVFJVQ1RfUEFHRTsKPgo+ICAgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMgPSBJOTE1X0dF TV9ET01BSU5fQ1BVOwo+ICAgICAgICAgb2JqLT53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01B SU5fQ1BVOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3Rz L2h1Z2VfcGFnZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9w YWdlcy5jCj4gaW5kZXggZGFkZDQ4NWJjNTJmLi5jY2M2N2VkMWE4NGIgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwo+IEBAIC0xNjcs OSArMTY3LDggQEAgaHVnZV9wYWdlc19vYmplY3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUsCj4gICAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+Cj4gICAgICAg ICBkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoJmk5MTUtPmRybSwgJm9iai0+YmFzZSwgc2l6 ZSk7Cj4gLSAgICAgICBpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZodWdlX3BhZ2Vfb3BzLCAm bG9ja19jbGFzcywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIEk5MTVfQk9fQUxMT0Nf U1RSVUNUX1BBR0UpOwo+IC0KPiArICAgICAgIGk5MTVfZ2VtX29iamVjdF9pbml0KG9iaiwgJmh1 Z2VfcGFnZV9vcHMsICZsb2NrX2NsYXNzLCAwKTsKPiArICAgICAgIG9iai0+bWVtX2ZsYWdzIHw9 IEk5MTVfQk9fRkxBR19TVFJVQ1RfUEFHRTsKPiAgICAgICAgIGk5MTVfZ2VtX29iamVjdF9zZXRf dm9sYXRpbGUob2JqKTsKPgo+ICAgICAgICAgb2JqLT53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9E T01BSU5fQ1BVOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRl c3RzL2k5MTVfZ2VtX21tYW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMv aTkxNV9nZW1fbW1hbi5jCj4gaW5kZXggY2E2OWEyOWI3ZjJhLi5iZmIzNTI3MGExZjAgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9tbWFu LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21t YW4uYwo+IEBAIC04MzcsNyArODM3LDcgQEAgc3RhdGljIGJvb2wgY2FuX21tYXAoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgZW51bSBpOTE1X21tYXBfdHlwZSB0eXBlKQo+Cj4gICAg ICAgICBpZiAodHlwZSAhPSBJOTE1X01NQVBfVFlQRV9HVFQgJiYKPiAgICAgICAgICAgICAhaTkx NV9nZW1fb2JqZWN0X2hhc19zdHJ1Y3RfcGFnZShvYmopICYmCj4gLSAgICAgICAgICAgIWk5MTVf Z2VtX29iamVjdF90eXBlX2hhcyhvYmosIEk5MTVfR0VNX09CSkVDVF9IQVNfSU9NRU0pKQo+ICsg ICAgICAgICAgICFpOTE1X2dlbV9vYmplY3RfaGFzX2lvbWVtKG9iaikpCj4gICAgICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKPgo+ICAgICAgICAgcmV0dXJuIHRydWU7Cj4gQEAgLTk5MSw3ICs5 OTEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqcmVwcl9tbWFwX3R5cGUoZW51bSBpOTE1X21tYXBf dHlwZSB0eXBlKQo+ICBzdGF0aWMgYm9vbCBjYW5fYWNjZXNzKGNvbnN0IHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCj4gIHsKPiAgICAgICAgIHJldHVybiBpOTE1X2dlbV9vYmplY3Rf aGFzX3N0cnVjdF9wYWdlKG9iaikgfHwKPiAtICAgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3Rf dHlwZV9oYXMob2JqLCBJOTE1X0dFTV9PQkpFQ1RfSEFTX0lPTUVNKTsKPiArICAgICAgICAgICAg ICBpOTE1X2dlbV9vYmplY3RfaGFzX2lvbWVtKG9iaik7Cj4gIH0KPgo+ICBzdGF0aWMgaW50IF9f aWd0X21tYXBfYWNjZXNzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX3BoeXMuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fcGh5cy5jCj4gaW5k ZXggM2E2Y2U4N2Y4YjUyLi5kNDNkOGRhZTBmNjkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9waHlzLmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX3BoeXMuYwo+IEBAIC0yNSwxMyArMjUs MTQgQEAgc3RhdGljIGludCBtb2NrX3BoeXNfb2JqZWN0KHZvaWQgKmFyZykKPiAgICAgICAgICAg ICAgICAgZ290byBvdXQ7Cj4gICAgICAgICB9Cj4KPiArICAgICAgIGk5MTVfZ2VtX29iamVjdF9s b2NrKG9iaiwgTlVMTCk7Cj4gICAgICAgICBpZiAoIWk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0 X3BhZ2Uob2JqKSkgewo+ICsgICAgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3RfdW5sb2NrKG9i aik7Cj4gICAgICAgICAgICAgICAgIGVyciA9IC1FSU5WQUw7Cj4gICAgICAgICAgICAgICAgIHBy X2Vycigic2htZW0gaGFzIG5vIHN0cnVjdCBwYWdlXG4iKTsKPiAgICAgICAgICAgICAgICAgZ290 byBvdXRfb2JqOwo+ICAgICAgICAgfQo+Cj4gLSAgICAgICBpOTE1X2dlbV9vYmplY3RfbG9jayhv YmosIE5VTEwpOwo+ICAgICAgICAgZXJyID0gaTkxNV9nZW1fb2JqZWN0X2F0dGFjaF9waHlzKG9i aiwgUEFHRV9TSVpFKTsKPiAgICAgICAgIGk5MTVfZ2VtX29iamVjdF91bmxvY2sob2JqKTsKPiAg ICAgICAgIGlmIChlcnIpIHsKPiAtLQo+IDIuMzEuMQo+Cj4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=