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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 1E21DC48BE0 for ; Fri, 11 Jun 2021 14:55:19 +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 DD7C060200 for ; Fri, 11 Jun 2021 14:55:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DD7C060200 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.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 5EACE6EE9A; Fri, 11 Jun 2021 14:55:18 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id ABF1C6EE9A; Fri, 11 Jun 2021 14:55:17 +0000 (UTC) IronPort-SDR: R/ObtAFNMlQKsGvhxKq4Ez3wrUxhq6tvls8kiXjuKYp4q3i6YSENzWnH+c7tXFjr9TvC8alMXW fi/CC4ye+naA== X-IronPort-AV: E=McAfee;i="6200,9189,10012"; a="205355253" X-IronPort-AV: E=Sophos;i="5.83,265,1616482800"; d="scan'208";a="205355253" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2021 07:55:17 -0700 IronPort-SDR: qIHsg+FgDD19H2SVO6g0oIXr4QQedhi6hUva8PF1PDpVKqdFHNl9sP9byAmk/GWxvuOKw2Nn66 Y5hjU5gAvHHw== X-IronPort-AV: E=Sophos;i="5.83,265,1616482800"; d="scan'208";a="450783213" Received: from delmer-mobl.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.23]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2021 07:55:15 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH v2 1/4] drm/i915: Update object placement flags to be mutable Date: Fri, 11 Jun 2021 16:54:56 +0200 Message-Id: <20210611145459.8576-2-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210611145459.8576-1-thomas.hellstrom@linux.intel.com> References: <20210611145459.8576-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" 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. Signed-off-by: Thomas Hellström v2: - Unconditionally set VM_IO on our VMAs in line with the rest core gem and TTM. Since the bo might be migrated while the VMA is still alive, there is no sense, whether or not it maps iomem might change. --- drivers/gpu/drm/i915/gem/i915_gem_internal.c | 4 +- drivers/gpu/drm/i915/gem/i915_gem_mman.c | 12 +++--- 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, 79 insertions(+), 45 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_internal.c b/drivers/gpu/drm/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_private *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_class, - I915_BO_ALLOC_STRUCT_PAGE); + i915_gem_object_init(obj, &i915_gem_object_internal_ops, &lock_class, 0); + obj->mem_flags |= 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/i915/gem/i915_gem_mman.c index 2fd155742bd2..6497a2dbdab9 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c @@ -684,7 +684,7 @@ __assign_mmap_offset(struct drm_i915_gem_object *obj, if (mmap_type != 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 = mmap_offset_attach(obj, mmap_type, file); @@ -708,7 +708,12 @@ __assign_mmap_offset_handle(struct drm_file *file, if (!obj) return -ENOENT; + err = i915_gem_object_lock_interruptible(obj, NULL); + if (err) + goto out_put; err = __assign_mmap_offset(obj, mmap_type, offset, file); + i915_gem_object_unlock(obj); +out_put: i915_gem_object_put(obj); return err; } @@ -932,10 +937,7 @@ int i915_gem_mmap(struct file *filp, struct vm_area_struct *vma) return PTR_ERR(anon); } - vma->vm_flags |= VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP; - - if (i915_gem_object_has_iomem(obj)) - vma->vm_flags |= VM_IO; + vma->vm_flags |= VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP | VM_IO; /* * We keep the ref on mmo->obj, not vm_file, but we require 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 pinned, + * 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 *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_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 pinned, + * 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 e9eecebf5c9d..60c760ebde42 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_object *obj) { /* * Note mm list lookup is protected by @@ -261,17 +261,9 @@ i915_gem_object_type_has(const struct drm_i915_gem_object *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 *obj); -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/gpu/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_object *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/i915/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_i915_gem_object *obj) intel_gt_chipset_flush(&to_i915(obj->base.dev)->gt); /* We're no longer struct page backed */ - obj->flags &= ~I915_BO_ALLOC_STRUCT_PAGE; + obj->mem_flags &= ~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_object *obj, bool needs_clflush) { GEM_BUG_ON(obj->mm.madv == __I915_MADV_PURGED); + GEM_WARN_ON(IS_DGFX(to_i915(obj->base.dev))); if (obj->mm.madv == I915_MADV_DONTNEED) obj->mm.dirty = 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_region *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 |= I915_BO_FLAG_STRUCT_PAGE; obj->write_domain = I915_GEM_DOMAIN_CPU; obj->read_domains = I915_GEM_DOMAIN_CPU; @@ -561,6 +562,7 @@ i915_gem_object_create_shmem_from_data(struct drm_i915_private *dev_priv, resource_size_t offset; int err; + GEM_WARN_ON(IS_DGFX(dev_priv)); obj = i915_gem_object_create_shmem(dev_priv, round_up(size, PAGE_SIZE)); if (IS_ERR(obj)) return obj; diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c index bf33724bed5c..33ab47f1e05b 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_object *obj) const struct drm_i915_gem_object_ops i915_gem_ttm_obj_ops = { .name = "i915_gem_object_ttm", - .flags = I915_GEM_OBJECT_HAS_IOMEM, .get_pages = i915_ttm_get_pages, .put_pages = i915_ttm_put_pages, @@ -620,6 +619,7 @@ int __i915_gem_ttm_object_init(struct intel_memory_region *mem, i915_gem_object_init_memory_region(obj, mem); i915_gem_object_make_unshrinkable(obj); obj->read_domains = I915_GEM_DOMAIN_WC | I915_GEM_DOMAIN_GTT; + obj->mem_flags |= 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_NOWARN); mutex_init(&obj->ttm.get_io_page.lock); diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c index 7487bab11f0b..e99fce4429a7 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 = I915_BO_FLAG_STRUCT_PAGE; obj->read_domains = I915_GEM_DOMAIN_CPU; obj->write_domain = 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/drivers/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 |= I915_BO_FLAG_STRUCT_PAGE; obj->read_domains = I915_GEM_DOMAIN_CPU; obj->write_domain = I915_GEM_DOMAIN_CPU; diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/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 |= I915_BO_FLAG_STRUCT_PAGE; i915_gem_object_set_volatile(obj); obj->write_domain = 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 44b5de06ce64..fcea0ddabcc5 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 != 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 = -EINVAL; pr_err("shmem has no struct page\n"); goto out_obj; } - i915_gem_object_lock(obj, NULL); err = i915_gem_object_attach_phys(obj, PAGE_SIZE); i915_gem_object_unlock(obj); if (err) { -- 2.31.1 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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 29555C48BD1 for ; Fri, 11 Jun 2021 14:55:20 +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 F03A1611CD for ; Fri, 11 Jun 2021 14:55:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F03A1611CD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.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 7DC406EE99; Fri, 11 Jun 2021 14:55:19 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id ABF1C6EE9A; Fri, 11 Jun 2021 14:55:17 +0000 (UTC) IronPort-SDR: R/ObtAFNMlQKsGvhxKq4Ez3wrUxhq6tvls8kiXjuKYp4q3i6YSENzWnH+c7tXFjr9TvC8alMXW fi/CC4ye+naA== X-IronPort-AV: E=McAfee;i="6200,9189,10012"; a="205355253" X-IronPort-AV: E=Sophos;i="5.83,265,1616482800"; d="scan'208";a="205355253" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2021 07:55:17 -0700 IronPort-SDR: qIHsg+FgDD19H2SVO6g0oIXr4QQedhi6hUva8PF1PDpVKqdFHNl9sP9byAmk/GWxvuOKw2Nn66 Y5hjU5gAvHHw== X-IronPort-AV: E=Sophos;i="5.83,265,1616482800"; d="scan'208";a="450783213" Received: from delmer-mobl.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.23]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2021 07:55:15 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Fri, 11 Jun 2021 16:54:56 +0200 Message-Id: <20210611145459.8576-2-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210611145459.8576-1-thomas.hellstrom@linux.intel.com> References: <20210611145459.8576-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2 1/4] 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: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" VGhlIG9iamVjdCBvcHMgaTkxNV9HRU1fT0JKRUNUX0hBU19JT01FTSBhbmQgdGhlIG9iamVjdApJ OTE1X0JPX0FMTE9DX1NUUlVDVF9QQUdFIGZsYWdzIGFyZSBjb25zaWRlcmVkIGltbXV0YWJsZSBi eQptdWNoIG9mIG91ciBjb2RlLiBJbnRyb2R1Y2UgYSBuZXcgbWVtX2ZsYWdzIG1lbWJlciB0byBo b2xkIHRoZXNlCmFuZCBtYWtlIHN1cmUgY2hlY2tzIGZvciB0aGVzZSBmbGFncyBiZWluZyBzZXQg YXJlIGVpdGhlciBkb25lCnVuZGVyIHRoZSBvYmplY3QgbG9jayBvciB3aXRoIHBhZ2VzIHByb3Bl cmx5IHBpbm5lZC4gVGhlIGZsYWdzCndpbGwgY2hhbmdlIGR1cmluZyBtaWdyYXRpb24gdW5kZXIg dGhlIG9iamVjdCBsb2NrLgoKU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21h cy5oZWxsc3Ryb21AbGludXguaW50ZWwuY29tPgp2MjoKLSBVbmNvbmRpdGlvbmFsbHkgc2V0IFZN X0lPIG9uIG91ciBWTUFzIGluIGxpbmUgd2l0aCB0aGUgcmVzdCBjb3JlIGdlbQogIGFuZCBUVE0u IFNpbmNlIHRoZSBibyBtaWdodCBiZSBtaWdyYXRlZCB3aGlsZSB0aGUgVk1BIGlzIHN0aWxsIGFs aXZlLAogIHRoZXJlIGlzIG5vIHNlbnNlLCB3aGV0aGVyIG9yIG5vdCBpdCBtYXBzIGlvbWVtIG1p Z2h0IGNoYW5nZS4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1faW50ZXJu YWwuYyAgfCAgNCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYyAg ICAgIHwgMTIgKysrLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0 LmMgICAgfCAzOCArKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fb2JqZWN0LmggICAgfCAxNCArKy0tLS0tCiAuLi4vZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9vYmplY3RfdHlwZXMuaCAgfCAyMCArKysrKy0tLS0tCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYyAgICAgfCAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX3BoeXMuYyAgICAgIHwgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9zaG1lbS5jICAgICB8IDEwICsrKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fdHRtLmMgICAgICAgfCAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX3VzZXJwdHIuYyAgIHwgIDQgKy0KIC4uLi9kcm0vaTkxNS9nZW0vc2VsZnRl c3RzL2h1Z2VfZ2VtX29iamVjdC5jICB8ICA0ICstCiAuLi4vZ3B1L2RybS9pOTE1L2dlbS9zZWxm dGVzdHMvaHVnZV9wYWdlcy5jICAgfCAgNSArLS0KIC4uLi9kcm0vaTkxNS9nZW0vc2VsZnRlc3Rz L2k5MTVfZ2VtX21tYW4uYyAgICB8ICA0ICstCiAuLi4vZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9p OTE1X2dlbV9waHlzLmMgICAgfCAgMyArLQogMTQgZmlsZXMgY2hhbmdlZCwgNzkgaW5zZXJ0aW9u cygrKSwgNDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX2ludGVybmFsLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1faW50ZXJuYWwuYwppbmRleCBjZTZiNjY0YjEwYWEuLjEzYjIxN2Y3NTA1NSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2ludGVybmFsLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2ludGVybmFsLmMKQEAgLTE3Nyw4ICsxNzcs OCBAQCBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1LAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWRybV9nZW1fcHJpdmF0 ZV9vYmplY3RfaW5pdCgmaTkxNS0+ZHJtLCAmb2JqLT5iYXNlLCBzaXplKTsKLQlpOTE1X2dlbV9v YmplY3RfaW5pdChvYmosICZpOTE1X2dlbV9vYmplY3RfaW50ZXJuYWxfb3BzLCAmbG9ja19jbGFz cywKLQkJCSAgICAgSTkxNV9CT19BTExPQ19TVFJVQ1RfUEFHRSk7CisJaTkxNV9nZW1fb2JqZWN0 X2luaXQob2JqLCAmaTkxNV9nZW1fb2JqZWN0X2ludGVybmFsX29wcywgJmxvY2tfY2xhc3MsIDAp OworCW9iai0+bWVtX2ZsYWdzIHw9IEk5MTVfQk9fRkxBR19TVFJVQ1RfUEFHRTsKIAogCS8qCiAJ ICogTWFyayB0aGUgb2JqZWN0IGFzIHZvbGF0aWxlLCBzdWNoIHRoYXQgdGhlIHBhZ2VzIGFyZSBt YXJrZWQgYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9t bWFuLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jCmluZGV4IDJm ZDE1NTc0MmJkMi4uNjQ5N2EyZGJkYWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fbW1hbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9tbWFuLmMKQEAgLTY4NCw3ICs2ODQsNyBAQCBfX2Fzc2lnbl9tbWFwX29mZnNldChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCiAJaWYgKG1tYXBfdHlwZSAhPSBJOTE1X01N QVBfVFlQRV9HVFQgJiYKIAkgICAgIWk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2Uob2Jq KSAmJgotCSAgICAhaTkxNV9nZW1fb2JqZWN0X3R5cGVfaGFzKG9iaiwgSTkxNV9HRU1fT0JKRUNU X0hBU19JT01FTSkpCisJICAgICFpOTE1X2dlbV9vYmplY3RfaGFzX2lvbWVtKG9iaikpCiAJCXJl dHVybiAtRU5PREVWOwogCiAJbW1vID0gbW1hcF9vZmZzZXRfYXR0YWNoKG9iaiwgbW1hcF90eXBl LCBmaWxlKTsKQEAgLTcwOCw3ICs3MDgsMTIgQEAgX19hc3NpZ25fbW1hcF9vZmZzZXRfaGFuZGxl KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKIAlpZiAoIW9iaikKIAkJcmV0dXJuIC1FTk9FTlQ7CiAK KwllcnIgPSBpOTE1X2dlbV9vYmplY3RfbG9ja19pbnRlcnJ1cHRpYmxlKG9iaiwgTlVMTCk7CisJ aWYgKGVycikKKwkJZ290byBvdXRfcHV0OwogCWVyciA9IF9fYXNzaWduX21tYXBfb2Zmc2V0KG9i aiwgbW1hcF90eXBlLCBvZmZzZXQsIGZpbGUpOworCWk5MTVfZ2VtX29iamVjdF91bmxvY2sob2Jq KTsKK291dF9wdXQ6CiAJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwogCXJldHVybiBlcnI7CiB9 CkBAIC05MzIsMTAgKzkzNyw3IEBAIGludCBpOTE1X2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxw LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAkJcmV0dXJuIFBUUl9FUlIoYW5vbik7CiAJ fQogCi0Jdm1hLT52bV9mbGFncyB8PSBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EIHwgVk1fRE9O VERVTVA7Ci0KLQlpZiAoaTkxNV9nZW1fb2JqZWN0X2hhc19pb21lbShvYmopKQotCQl2bWEtPnZt X2ZsYWdzIHw9IFZNX0lPOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUEZOTUFQIHwgVk1fRE9OVEVY UEFORCB8IFZNX0RPTlREVU1QIHwgVk1fSU87CiAKIAkvKgogCSAqIFdlIGtlZXAgdGhlIHJlZiBv biBtbW8tPm9iaiwgbm90IHZtX2ZpbGUsIGJ1dCB3ZSByZXF1aXJlCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMKaW5kZXggY2YxOGM0MzBkNTFmLi4wN2U4ZmY5YThh YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3Qu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMKQEAgLTQ3 NSw2ICs0NzUsNDQgQEAgYm9vbCBpOTE1X2dlbV9vYmplY3RfbWlncmF0YWJsZShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCXJldHVybiBvYmotPm1tLm5fcGxhY2VtZW50cyA+IDE7 CiB9CiAKKy8qKgorICogaTkxNV9nZW1fb2JqZWN0X2hhc19zdHJ1Y3RfcGFnZSAtIFdoZXRoZXIg dGhlIG9iamVjdCBpcyBwYWdlLWJhY2tlZAorICogQG9iajogVGhlIG9iamVjdCB0byBxdWVyeS4K KyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGUgb2Jq ZWN0IGlzIGxvY2tlZCBvciBwaW5uZWQsCisgKiBvdGhlcndpc2UgdGhlIHBhZ2UgYmFja2luZyBt YXkgY2hhbmdlIHVuZGVyIHRoZSBjYWxsZXIuCisgKgorICogUmV0dXJuOiBUcnVlIGlmIHBhZ2Ut YmFja2VkLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgaTkxNV9nZW1fb2JqZWN0X2hhc19z dHJ1Y3RfcGFnZShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworI2lm ZGVmIENPTkZJR19MT0NLREVQCisJaWYgKElTX0RHRlgodG9faTkxNShvYmotPmJhc2UuZGV2KSkg JiYKKwkgICAgaTkxNV9nZW1fb2JqZWN0X2V2aWN0YWJsZSgodm9pZCBfX2ZvcmNlICopb2JqKSkK KwkJYXNzZXJ0X29iamVjdF9oZWxkX3NoYXJlZChvYmopOworI2VuZGlmCisJcmV0dXJuIG9iai0+ bWVtX2ZsYWdzICYgSTkxNV9CT19GTEFHX1NUUlVDVF9QQUdFOworfQorCisvKioKKyAqIGk5MTVf Z2VtX29iamVjdF9oYXNfaW9tZW0gLSBXaGV0aGVyIHRoZSBvYmplY3QgaXMgaW9tZW0tYmFja2Vk CisgKiBAb2JqOiBUaGUgb2JqZWN0IHRvIHF1ZXJ5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hv dWxkIG9ubHkgYmUgY2FsbGVkIHdoaWxlIHRoZSBvYmplY3QgaXMgbG9ja2VkIG9yIHBpbm5lZCwK KyAqIG90aGVyd2lzZSB0aGUgaW9tZW0gYmFja2luZyBtYXkgY2hhbmdlIHVuZGVyIHRoZSBjYWxs ZXIuCisgKgorICogUmV0dXJuOiBUcnVlIGlmIGlvbWVtLWJhY2tlZCwgZmFsc2Ugb3RoZXJ3aXNl LgorICovCitib29sIGk5MTVfZ2VtX29iamVjdF9oYXNfaW9tZW0oY29uc3Qgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorCWlmIChJU19E R0ZYKHRvX2k5MTUob2JqLT5iYXNlLmRldikpICYmCisJICAgIGk5MTVfZ2VtX29iamVjdF9ldmlj dGFibGUoKHZvaWQgX19mb3JjZSAqKW9iaikpCisJCWFzc2VydF9vYmplY3RfaGVsZF9zaGFyZWQo b2JqKTsKKyNlbmRpZgorCXJldHVybiBvYmotPm1lbV9mbGFncyAmIEk5MTVfQk9fRkxBR19JT01F TTsKK30KKwogdm9pZCBpOTE1X2dlbV9pbml0X19vYmplY3RzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KQogewogCUlOSVRfV09SSygmaTkxNS0+bW0uZnJlZV93b3JrLCBfX2k5MTVfZ2Vt X2ZyZWVfd29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgK aW5kZXggZTllZWNlYmY1YzlkLi42MGM3NjBlYmRlNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKQEAgLTE0Nyw3ICsxNDcsNyBAQCBpOTE1X2dlbV9vYmpl Y3RfcHV0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAvKgogICogSWYgbW9yZSB0 aGFuIG9uZSBwb3RlbnRpYWwgc2ltdWx0YW5lb3VzIGxvY2tlciwgYXNzZXJ0IGhlbGQuCiAgKi8K LXN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfb2JqZWN0X2hlbGRfc2hhcmVkKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmopCitzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X29iamVjdF9o ZWxkX3NoYXJlZChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewogCS8q CiAJICogTm90ZSBtbSBsaXN0IGxvb2t1cCBpcyBwcm90ZWN0ZWQgYnkKQEAgLTI2MSwxNyArMjYx LDkgQEAgaTkxNV9nZW1fb2JqZWN0X3R5cGVfaGFzKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCiAJcmV0dXJuIG9iai0+b3BzLT5mbGFncyAmIGZsYWdzOwogfQogCi1zdGF0 aWMgaW5saW5lIGJvb2wKLWk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2UoY29uc3Qgc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlyZXR1cm4gb2JqLT5mbGFncyAmIEk5 MTVfQk9fQUxMT0NfU1RSVUNUX1BBR0U7Ci19Citib29sIGk5MTVfZ2VtX29iamVjdF9oYXNfc3Ry dWN0X3BhZ2UoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CiAKLXN0YXRp YyBpbmxpbmUgYm9vbAotaTkxNV9nZW1fb2JqZWN0X2hhc19pb21lbShjb25zdCBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCXJldHVybiBpOTE1X2dlbV9vYmplY3RfdHlwZV9o YXMob2JqLCBJOTE1X0dFTV9PQkpFQ1RfSEFTX0lPTUVNKTsKLX0KK2Jvb2wgaTkxNV9nZW1fb2Jq ZWN0X2hhc19pb21lbShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIAog c3RhdGljIGlubGluZSBib29sCiBpOTE1X2dlbV9vYmplY3RfaXNfc2hyaW5rYWJsZShjb25zdCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oCmluZGV4IDJhMjNiNzc0MjRiMy4uZmI5Y2Nj M2Y1MGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2Jq ZWN0X3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVj dF90eXBlcy5oCkBAIC0zMywxMCArMzMsOSBAQCBzdHJ1Y3QgaTkxNV9sdXRfaGFuZGxlIHsKIAog c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIHsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0j ZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9IQVNfSU9NRU0JQklUKDEpCi0jZGVmaW5lIEk5MTVfR0VN X09CSkVDVF9JU19TSFJJTktBQkxFCUJJVCgyKQotI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNf UFJPWFkJQklUKDMpCi0jZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9OT19NTUFQCQlCSVQoNCkKKyNk ZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUJQklUKDEpCisjZGVmaW5lIEk5MTVf R0VNX09CSkVDVF9JU19QUk9YWQlCSVQoMikKKyNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX05PX01N QVAJCUJJVCgzKQogCiAJLyogSW50ZXJmYWNlIGJldHdlZW4gdGhlIEdFTSBvYmplY3QgYW5kIGl0 cyBiYWNraW5nIHN0b3JhZ2UuCiAJICogZ2V0X3BhZ2VzKCkgaXMgY2FsbGVkIG9uY2UgcHJpb3Ig dG8gdGhlIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBzZXQKQEAgLTIwMSwxNyArMjAwLDE4IEBAIHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0IHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2RlZmlu ZSBJOTE1X0JPX0FMTE9DX0NPTlRJR1VPVVMgQklUKDApCiAjZGVmaW5lIEk5MTVfQk9fQUxMT0Nf Vk9MQVRJTEUgICBCSVQoMSkKLSNkZWZpbmUgSTkxNV9CT19BTExPQ19TVFJVQ1RfUEFHRSBCSVQo MikKLSNkZWZpbmUgSTkxNV9CT19BTExPQ19DUFVfQ0xFQVIgIEJJVCgzKQotI2RlZmluZSBJOTE1 X0JPX0FMTE9DX1VTRVIgICAgICAgQklUKDQpCisjZGVmaW5lIEk5MTVfQk9fQUxMT0NfQ1BVX0NM RUFSICBCSVQoMikKKyNkZWZpbmUgSTkxNV9CT19BTExPQ19VU0VSICAgICAgIEJJVCgzKQogI2Rl ZmluZSBJOTE1X0JPX0FMTE9DX0ZMQUdTIChJOTE1X0JPX0FMTE9DX0NPTlRJR1VPVVMgfCBcCiAJ CQkgICAgIEk5MTVfQk9fQUxMT0NfVk9MQVRJTEUgfCBcCi0JCQkgICAgIEk5MTVfQk9fQUxMT0Nf U1RSVUNUX1BBR0UgfCBcCiAJCQkgICAgIEk5MTVfQk9fQUxMT0NfQ1BVX0NMRUFSIHwgXAogCQkJ ICAgICBJOTE1X0JPX0FMTE9DX1VTRVIpCi0jZGVmaW5lIEk5MTVfQk9fUkVBRE9OTFkgICAgICAg ICBCSVQoNSkKLSNkZWZpbmUgSTkxNV9USUxJTkdfUVVJUktfQklUICAgIDYgLyogdW5rbm93biBz d2l6emxpbmc7IGRvIG5vdCByZWxlYXNlISAqLworI2RlZmluZSBJOTE1X0JPX1JFQURPTkxZICAg ICAgICAgQklUKDQpCisjZGVmaW5lIEk5MTVfVElMSU5HX1FVSVJLX0JJVCAgICA1IC8qIHVua25v d24gc3dpenpsaW5nOyBkbyBub3QgcmVsZWFzZSEgKi8KIAorCXVuc2lnbmVkIGludCBtZW1fZmxh Z3M6MjsKKyNkZWZpbmUgSTkxNV9CT19GTEFHX1NUUlVDVF9QQUdFIEJJVCgwKQorI2RlZmluZSBJ OTE1X0JPX0ZMQUdfSU9NRU0gICAgICAgQklUKDEpCiAJLyoKIAkgKiBJcyB0aGUgb2JqZWN0IHRv IGJlIG1hcHBlZCBhcyByZWFkLW9ubHkgdG8gdGhlIEdQVQogCSAqIE9ubHkgaG9ub3VyZWQgaWYg aGFyZHdhcmUgaGFzIHJlbGV2YW50IHB0ZSBiaXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX3BhZ2VzLmMKaW5kZXggMDg2MDA1YzFjN2VhLi5mMmY4NTBlMzFiOGUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCkBAIC0zNTEsNyArMzUxLDcgQEAg dm9pZCAqaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKIAlpbnQgZXJyOwogCiAJaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9wYWdl KG9iaikgJiYKLQkgICAgIWk5MTVfZ2VtX29iamVjdF90eXBlX2hhcyhvYmosIEk5MTVfR0VNX09C SkVDVF9IQVNfSU9NRU0pKQorCSAgICAhaTkxNV9nZW1fb2JqZWN0X2hhc19pb21lbShvYmopKQog CQlyZXR1cm4gRVJSX1BUUigtRU5YSU8pOwogCiAJYXNzZXJ0X29iamVjdF9oZWxkKG9iaik7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGh5cy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BoeXMuYwppbmRleCBiZTcyYWQwNjM0YmEu Ljc5ODY2MTJmNDhmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX3BoeXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGh5cy5j CkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19w aHlzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJaW50ZWxfZ3RfY2hpcHNldF9m bHVzaCgmdG9faTkxNShvYmotPmJhc2UuZGV2KS0+Z3QpOwogCiAJLyogV2UncmUgbm8gbG9uZ2Vy IHN0cnVjdCBwYWdlIGJhY2tlZCAqLwotCW9iai0+ZmxhZ3MgJj0gfkk5MTVfQk9fQUxMT0NfU1RS VUNUX1BBR0U7CisJb2JqLT5tZW1fZmxhZ3MgJj0gfkk5MTVfQk9fRkxBR19TVFJVQ1RfUEFHRTsK IAlfX2k5MTVfZ2VtX29iamVjdF9zZXRfcGFnZXMob2JqLCBzdCwgc2ctPmxlbmd0aCk7CiAKIAly ZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9z aG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMKaW5kZXgg NWQxNmM0NDYyZmRhLi4zNjQ4YWUxZDY2MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9zaG1lbS5jCkBAIC0yODQsNiArMjg0LDcgQEAgX19pOTE1X2dlbV9vYmplY3RfcmVs ZWFzZV9zaG1lbShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJCWJvb2wgbmVl ZHNfY2xmbHVzaCkKIHsKIAlHRU1fQlVHX09OKG9iai0+bW0ubWFkdiA9PSBfX0k5MTVfTUFEVl9Q VVJHRUQpOworCUdFTV9XQVJOX09OKElTX0RHRlgodG9faTkxNShvYmotPmJhc2UuZGV2KSkpOwog CiAJaWYgKG9iai0+bW0ubWFkdiA9PSBJOTE1X01BRFZfRE9OVE5FRUQpCiAJCW9iai0+bW0uZGly dHkgPSBmYWxzZTsKQEAgLTMwMiw2ICszMDMsNyBAQCB2b2lkIGk5MTVfZ2VtX29iamVjdF9wdXRf cGFnZXNfc2htZW0oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHNnXwog CXN0cnVjdCBwYWdldmVjIHB2ZWM7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKKwlHRU1fV0FSTl9P TihJU19ER0ZYKHRvX2k5MTUob2JqLT5iYXNlLmRldikpKTsKIAlfX2k5MTVfZ2VtX29iamVjdF9y ZWxlYXNlX3NobWVtKG9iaiwgcGFnZXMsIHRydWUpOwogCiAJaTkxNV9nZW1fZ3R0X2ZpbmlzaF9w YWdlcyhvYmosIHBhZ2VzKTsKQEAgLTQ0NCw3ICs0NDYsNyBAQCBzaG1lbV9wcmVhZChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCiBzdGF0aWMgdm9pZCBzaG1lbV9yZWxlYXNlKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0JaWYgKG9iai0+ZmxhZ3MgJiBJOTE1 X0JPX0FMTE9DX1NUUlVDVF9QQUdFKQorCWlmIChpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9w YWdlKG9iaikpCiAJCWk5MTVfZ2VtX29iamVjdF9yZWxlYXNlX21lbW9yeV9yZWdpb24ob2JqKTsK IAogCWZwdXQob2JqLT5iYXNlLmZpbHApOwpAQCAtNTEzLDkgKzUxNSw4IEBAIHN0YXRpYyBpbnQg c2htZW1fb2JqZWN0X2luaXQoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKIAltYXBw aW5nX3NldF9nZnBfbWFzayhtYXBwaW5nLCBtYXNrKTsKIAlHRU1fQlVHX09OKCEobWFwcGluZ19n ZnBfbWFzayhtYXBwaW5nKSAmIF9fR0ZQX1JFQ0xBSU0pKTsKIAotCWk5MTVfZ2VtX29iamVjdF9p bml0KG9iaiwgJmk5MTVfZ2VtX3NobWVtX29wcywgJmxvY2tfY2xhc3MsCi0JCQkgICAgIEk5MTVf Qk9fQUxMT0NfU1RSVUNUX1BBR0UpOwotCisJaTkxNV9nZW1fb2JqZWN0X2luaXQob2JqLCAmaTkx NV9nZW1fc2htZW1fb3BzLCAmbG9ja19jbGFzcywgMCk7CisJb2JqLT5tZW1fZmxhZ3MgfD0gSTkx NV9CT19GTEFHX1NUUlVDVF9QQUdFOwogCW9iai0+d3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9N QUlOX0NQVTsKIAlvYmotPnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CiAKQEAg LTU2MSw2ICs1NjIsNyBAQCBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtX2Zyb21fZGF0YShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJcmVzb3VyY2Vfc2l6ZV90IG9mZnNl dDsKIAlpbnQgZXJyOwogCisJR0VNX1dBUk5fT04oSVNfREdGWChkZXZfcHJpdikpOwogCW9iaiA9 IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oZGV2X3ByaXYsIHJvdW5kX3VwKHNpemUsIFBB R0VfU0laRSkpOwogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0dXJuIG9iajsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYwppbmRleCBiZjMzNzI0YmVkNWMuLjMzYWI0N2YxZTA1 YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYwpAQCAtNTYzLDcgKzU2 Myw2IEBAIHN0YXRpYyB1NjQgaTkxNV90dG1fbW1hcF9vZmZzZXQoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKIAogY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5 MTVfZ2VtX3R0bV9vYmpfb3BzID0gewogCS5uYW1lID0gImk5MTVfZ2VtX29iamVjdF90dG0iLAot CS5mbGFncyA9IEk5MTVfR0VNX09CSkVDVF9IQVNfSU9NRU0sCiAKIAkuZ2V0X3BhZ2VzID0gaTkx NV90dG1fZ2V0X3BhZ2VzLAogCS5wdXRfcGFnZXMgPSBpOTE1X3R0bV9wdXRfcGFnZXMsCkBAIC02 MjAsNiArNjE5LDcgQEAgaW50IF9faTkxNV9nZW1fdHRtX29iamVjdF9pbml0KHN0cnVjdCBpbnRl bF9tZW1vcnlfcmVnaW9uICptZW0sCiAJaTkxNV9nZW1fb2JqZWN0X2luaXRfbWVtb3J5X3JlZ2lv bihvYmosIG1lbSk7CiAJaTkxNV9nZW1fb2JqZWN0X21ha2VfdW5zaHJpbmthYmxlKG9iaik7CiAJ b2JqLT5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fV0MgfCBJOTE1X0dFTV9ET01BSU5f R1RUOworCW9iai0+bWVtX2ZsYWdzIHw9IEk5MTVfQk9fRkxBR19JT01FTTsKIAlpOTE1X2dlbV9v YmplY3Rfc2V0X2NhY2hlX2NvaGVyZW5jeShvYmosIEk5MTVfQ0FDSEVfTk9ORSk7CiAJSU5JVF9S QURJWF9UUkVFKCZvYmotPnR0bS5nZXRfaW9fcGFnZS5yYWRpeCwgR0ZQX0tFUk5FTCB8IF9fR0ZQ X05PV0FSTik7CiAJbXV0ZXhfaW5pdCgmb2JqLT50dG0uZ2V0X2lvX3BhZ2UubG9jayk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwppbmRleCA3NDg3YmFiMTFm MGIuLmU5OWZjZTQ0MjlhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX3VzZXJwdHIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f dXNlcnB0ci5jCkBAIC01MzgsOCArNTM4LDggQEAgaTkxNV9nZW1fdXNlcnB0cl9pb2N0bChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRybV9nZW1fcHJpdmF0 ZV9vYmplY3RfaW5pdChkZXYsICZvYmotPmJhc2UsIGFyZ3MtPnVzZXJfc2l6ZSk7Ci0JaTkxNV9n ZW1fb2JqZWN0X2luaXQob2JqLCAmaTkxNV9nZW1fdXNlcnB0cl9vcHMsICZsb2NrX2NsYXNzLAot CQkJICAgICBJOTE1X0JPX0FMTE9DX1NUUlVDVF9QQUdFKTsKKwlpOTE1X2dlbV9vYmplY3RfaW5p dChvYmosICZpOTE1X2dlbV91c2VycHRyX29wcywgJmxvY2tfY2xhc3MsIDApOworCW9iai0+bWVt X2ZsYWdzID0gSTkxNV9CT19GTEFHX1NUUlVDVF9QQUdFOwogCW9iai0+cmVhZF9kb21haW5zID0g STkxNV9HRU1fRE9NQUlOX0NQVTsKIAlvYmotPndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJ Tl9DUFU7CiAJaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9jb2hlcmVuY3kob2JqLCBJOTE1X0NB Q0hFX0xMQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3Rz L2h1Z2VfZ2VtX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9o dWdlX2dlbV9vYmplY3QuYwppbmRleCAwYzhlY2ZkZjU0MDUuLmY5NjNiOGUxZTM3YiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9odWdlX2dlbV9vYmplY3Qu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2h1Z2VfZ2VtX29iamVj dC5jCkBAIC0xMTQsOCArMTE0LDggQEAgaHVnZV9nZW1fb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1LAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWRybV9nZW1fcHJp dmF0ZV9vYmplY3RfaW5pdCgmaTkxNS0+ZHJtLCAmb2JqLT5iYXNlLCBkbWFfc2l6ZSk7Ci0JaTkx NV9nZW1fb2JqZWN0X2luaXQob2JqLCAmaHVnZV9vcHMsICZsb2NrX2NsYXNzLAotCQkJICAgICBJ OTE1X0JPX0FMTE9DX1NUUlVDVF9QQUdFKTsKKwlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZo dWdlX29wcywgJmxvY2tfY2xhc3MsIDApOworCW9iai0+bWVtX2ZsYWdzIHw9IEk5MTVfQk9fRkxB R19TVFJVQ1RfUEFHRTsKIAogCW9iai0+cmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NQ VTsKIAlvYmotPndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jCmluZGV4IGRhZGQ0ODVi YzUyZi4uY2NjNjdlZDFhODRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v c2VsZnRlc3RzL2h1Z2VfcGFnZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2Vs ZnRlc3RzL2h1Z2VfcGFnZXMuYwpAQCAtMTY3LDkgKzE2Nyw4IEBAIGh1Z2VfcGFnZXNfb2JqZWN0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKIAogCWRybV9nZW1fcHJpdmF0ZV9vYmplY3RfaW5pdCgmaTkxNS0+ZHJtLCAmb2JqLT5iYXNl LCBzaXplKTsKLQlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZodWdlX3BhZ2Vfb3BzLCAmbG9j a19jbGFzcywKLQkJCSAgICAgSTkxNV9CT19BTExPQ19TVFJVQ1RfUEFHRSk7Ci0KKwlpOTE1X2dl bV9vYmplY3RfaW5pdChvYmosICZodWdlX3BhZ2Vfb3BzLCAmbG9ja19jbGFzcywgMCk7CisJb2Jq LT5tZW1fZmxhZ3MgfD0gSTkxNV9CT19GTEFHX1NUUlVDVF9QQUdFOwogCWk5MTVfZ2VtX29iamVj dF9zZXRfdm9sYXRpbGUob2JqKTsKIAogCW9iai0+d3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9N QUlOX0NQVTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMv aTkxNV9nZW1fbW1hbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1 X2dlbV9tbWFuLmMKaW5kZXggNDRiNWRlMDZjZTY0Li5mY2VhMGRkYWJjYzUgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbW1hbi5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbW1hbi5jCkBAIC04 MzcsNyArODM3LDcgQEAgc3RhdGljIGJvb2wgY2FuX21tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwgZW51bSBpOTE1X21tYXBfdHlwZSB0eXBlKQogCiAJaWYgKHR5cGUgIT0gSTkx NV9NTUFQX1RZUEVfR1RUICYmCiAJICAgICFpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9wYWdl KG9iaikgJiYKLQkgICAgIWk5MTVfZ2VtX29iamVjdF90eXBlX2hhcyhvYmosIEk5MTVfR0VNX09C SkVDVF9IQVNfSU9NRU0pKQorCSAgICAhaTkxNV9nZW1fb2JqZWN0X2hhc19pb21lbShvYmopKQog CQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTk5MSw3ICs5OTEsNyBAQCBzdGF0 aWMgY29uc3QgY2hhciAqcmVwcl9tbWFwX3R5cGUoZW51bSBpOTE1X21tYXBfdHlwZSB0eXBlKQog c3RhdGljIGJvb2wgY2FuX2FjY2Vzcyhjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQogewogCXJldHVybiBpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9wYWdlKG9iaikgfHwK LQkgICAgICAgaTkxNV9nZW1fb2JqZWN0X3R5cGVfaGFzKG9iaiwgSTkxNV9HRU1fT0JKRUNUX0hB U19JT01FTSk7CisJICAgICAgIGk5MTVfZ2VtX29iamVjdF9oYXNfaW9tZW0ob2JqKTsKIH0KIAog c3RhdGljIGludCBfX2lndF9tbWFwX2FjY2VzcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9n ZW1fcGh5cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9w aHlzLmMKaW5kZXggM2E2Y2U4N2Y4YjUyLi5kNDNkOGRhZTBmNjkgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fcGh5cy5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fcGh5cy5jCkBAIC0yNSwxMyAr MjUsMTQgQEAgc3RhdGljIGludCBtb2NrX3BoeXNfb2JqZWN0KHZvaWQgKmFyZykKIAkJZ290byBv dXQ7CiAJfQogCisJaTkxNV9nZW1fb2JqZWN0X2xvY2sob2JqLCBOVUxMKTsKIAlpZiAoIWk5MTVf Z2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2Uob2JqKSkgeworCQlpOTE1X2dlbV9vYmplY3RfdW5s b2NrKG9iaik7CiAJCWVyciA9IC1FSU5WQUw7CiAJCXByX2Vycigic2htZW0gaGFzIG5vIHN0cnVj dCBwYWdlXG4iKTsKIAkJZ290byBvdXRfb2JqOwogCX0KIAotCWk5MTVfZ2VtX29iamVjdF9sb2Nr KG9iaiwgTlVMTCk7CiAJZXJyID0gaTkxNV9nZW1fb2JqZWN0X2F0dGFjaF9waHlzKG9iaiwgUEFH RV9TSVpFKTsKIAlpOTE1X2dlbV9vYmplY3RfdW5sb2NrKG9iaik7CiAJaWYgKGVycikgewotLSAK Mi4zMS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK