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=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 D0E83CA9EC4 for ; Mon, 28 Oct 2019 20:10:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8F64921744 for ; Mon, 28 Oct 2019 20:10:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=ziepe.ca header.i=@ziepe.ca header.b="N7d4nLhT" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727650AbfJ1UKx (ORCPT ); Mon, 28 Oct 2019 16:10:53 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:43526 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726483AbfJ1UKx (ORCPT ); Mon, 28 Oct 2019 16:10:53 -0400 Received: by mail-qk1-f194.google.com with SMTP id a194so9752611qkg.10 for ; Mon, 28 Oct 2019 13:10:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ziepe.ca; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oam7ohQj1kc8X7oZ0yNH5Qsiwr3vqfv4zRUy2hYn6VU=; b=N7d4nLhTvUMAd7m6ziC7Fnj8Fj2CROvNmQEOjInKL4+Co2BowIq9/67UGOKMH9lu3l v1lJgY60Lvap2Ol+aPfOvbu+ct1M49IJCP9kjFJybc7MSm13Yz19vQFIxnvZauHYQnAq Tyed+DS0BV73Lk3U+Muf7IdAsRNmnvS9FYFHJIPWiXHxqb+A8SR5sOQbGgk6pbNcNCbe ZJlgb5V8MwBEuEU6SiQQOf3ZhxPQw5OpEsa0GUzFj1giRGyCsV+YkmtWVYDal1QylK/X j/hvQvUBbitvFj7W8XAgGK6FWzI9bi2GEb/fFY0CTm8OtYBVd8K8YIP27/9hLoeA7SOy TP1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oam7ohQj1kc8X7oZ0yNH5Qsiwr3vqfv4zRUy2hYn6VU=; b=XyNhdKG2DvakB4tT+vRhZf+pdYX/BLTZyhxnsZ0OPJIaz8ijPJG7yBuLlsQR7BH1BF jkptU4WTFPJu38VesxZTVOng5I93lYpd4RnTkClJiBV1kd+UUIHDOVjBuU/XvfCWT2/C imZw6TzKPIGCeUTmWoCYQibwBIfEIXXeoWg1v3la2jwxNbGpjTj+ctzu7wdAXQWHJP/X 6etxFqpn/3ZX02eWUJGWlbh9pzfXuN0/INx3/IQYZNxgkRN2qPcIiaA7YKMtdWDWuhBr pM/RYdVz1paK7ytj/ZOTAMxck55n7GUEdX3eWvHyHA+GiXhHxEmZhw4eQ2ckOPi667Uu I/Ew== X-Gm-Message-State: APjAAAUI38A3lJB+/5ePiBHkk/ItmipklqXvQNon4kpMmwzkqq+udRW+ mTFc6Kdg8lDYL5AawI04YQx5LA== X-Google-Smtp-Source: APXvYqzFOk0mWTm9zmmEUnrvaGyK7qwShQOI+2XOcxc/OnuoCxvgWFx41ArWQecOobsikGRR1SYw3A== X-Received: by 2002:a37:ac0b:: with SMTP id e11mr9437740qkm.454.1572293451378; Mon, 28 Oct 2019 13:10:51 -0700 (PDT) Received: from ziepe.ca (hlfxns017vw-142-162-113-180.dhcp-dynamic.fibreop.ns.bellaliant.net. [142.162.113.180]) by smtp.gmail.com with ESMTPSA id d10sm1589264qkk.99.2019.10.28.13.10.44 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 28 Oct 2019 13:10:48 -0700 (PDT) Received: from jgg by mlx.ziepe.ca with local (Exim 4.90_1) (envelope-from ) id 1iPBLf-0001hR-OF; Mon, 28 Oct 2019 17:10:43 -0300 From: Jason Gunthorpe To: linux-mm@kvack.org, Jerome Glisse , Ralph Campbell , John Hubbard , Felix.Kuehling@amd.com Cc: linux-rdma@vger.kernel.org, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, Alex Deucher , Ben Skeggs , Boris Ostrovsky , =?UTF-8?q?Christian=20K=C3=B6nig?= , David Zhou , Dennis Dalessandro , Juergen Gross , Mike Marciniszyn , Oleksandr Andrushchenko , Petr Cvek , Stefano Stabellini , nouveau@lists.freedesktop.org, xen-devel@lists.xenproject.org, Christoph Hellwig , Jason Gunthorpe Subject: [PATCH v2 15/15] mm/hmm: remove hmm_mirror and related Date: Mon, 28 Oct 2019 17:10:32 -0300 Message-Id: <20191028201032.6352-16-jgg@ziepe.ca> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191028201032.6352-1-jgg@ziepe.ca> References: <20191028201032.6352-1-jgg@ziepe.ca> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org From: Jason Gunthorpe The only two users of this are now converted to use mmu_range_notifier, delete all the code and update hmm.rst. Reviewed-by: Jérôme Glisse Signed-off-by: Jason Gunthorpe --- Documentation/vm/hmm.rst | 105 ++++----------- include/linux/hmm.h | 183 +------------------------ mm/Kconfig | 1 - mm/hmm.c | 284 +-------------------------------------- 4 files changed, 33 insertions(+), 540 deletions(-) diff --git a/Documentation/vm/hmm.rst b/Documentation/vm/hmm.rst index 0a5960beccf76d..a247643035c4e2 100644 --- a/Documentation/vm/hmm.rst +++ b/Documentation/vm/hmm.rst @@ -147,49 +147,16 @@ Address space mirroring implementation and API Address space mirroring's main objective is to allow duplication of a range of CPU page table into a device page table; HMM helps keep both synchronized. A device driver that wants to mirror a process address space must start with the -registration of an hmm_mirror struct:: - - int hmm_mirror_register(struct hmm_mirror *mirror, - struct mm_struct *mm); - -The mirror struct has a set of callbacks that are used -to propagate CPU page tables:: - - struct hmm_mirror_ops { - /* release() - release hmm_mirror - * - * @mirror: pointer to struct hmm_mirror - * - * This is called when the mm_struct is being released. The callback - * must ensure that all access to any pages obtained from this mirror - * is halted before the callback returns. All future access should - * fault. - */ - void (*release)(struct hmm_mirror *mirror); - - /* sync_cpu_device_pagetables() - synchronize page tables - * - * @mirror: pointer to struct hmm_mirror - * @update: update information (see struct mmu_notifier_range) - * Return: -EAGAIN if update.blockable false and callback need to - * block, 0 otherwise. - * - * This callback ultimately originates from mmu_notifiers when the CPU - * page table is updated. The device driver must update its page table - * in response to this callback. The update argument tells what action - * to perform. - * - * The device driver must not return from this callback until the device - * page tables are completely updated (TLBs flushed, etc); this is a - * synchronous call. - */ - int (*sync_cpu_device_pagetables)(struct hmm_mirror *mirror, - const struct hmm_update *update); - }; - -The device driver must perform the update action to the range (mark range -read only, or fully unmap, etc.). The device must complete the update before -the driver callback returns. +registration of a mmu_range_notifier:: + + mrn->ops = &driver_ops; + int mmu_range_notifier_insert(struct mmu_range_notifier *mrn, + unsigned long start, unsigned long length, + struct mm_struct *mm); + +During the driver_ops->invalidate() callback the device driver must perform +the update action to the range (mark range read only, or fully unmap, +etc.). The device must complete the update before the driver callback returns. When the device driver wants to populate a range of virtual addresses, it can use:: @@ -216,70 +183,46 @@ The usage pattern is:: struct hmm_range range; ... + range.notifier = &mrn; range.start = ...; range.end = ...; range.pfns = ...; range.flags = ...; range.values = ...; range.pfn_shift = ...; - hmm_range_register(&range, mirror); - /* - * Just wait for range to be valid, safe to ignore return value as we - * will use the return value of hmm_range_fault() below under the - * mmap_sem to ascertain the validity of the range. - */ - hmm_range_wait_until_valid(&range, TIMEOUT_IN_MSEC); + if (!mmget_not_zero(mrn->notifier.mm)) + return -EFAULT; again: + range.notifier_seq = mmu_range_read_begin(&mrn); down_read(&mm->mmap_sem); ret = hmm_range_fault(&range, HMM_RANGE_SNAPSHOT); if (ret) { up_read(&mm->mmap_sem); - if (ret == -EBUSY) { - /* - * No need to check hmm_range_wait_until_valid() return value - * on retry we will get proper error with hmm_range_fault() - */ - hmm_range_wait_until_valid(&range, TIMEOUT_IN_MSEC); - goto again; - } - hmm_range_unregister(&range); + if (ret == -EBUSY) + goto again; return ret; } + up_read(&mm->mmap_sem); + take_lock(driver->update); - if (!hmm_range_valid(&range)) { + if (mmu_range_read_retry(&mrn, range.notifier_seq) { release_lock(driver->update); - up_read(&mm->mmap_sem); goto again; } - // Use pfns array content to update device page table + /* Use pfns array content to update device page table, + * under the update lock */ - hmm_range_unregister(&range); release_lock(driver->update); - up_read(&mm->mmap_sem); return 0; } The driver->update lock is the same lock that the driver takes inside its -sync_cpu_device_pagetables() callback. That lock must be held before calling -hmm_range_valid() to avoid any race with a concurrent CPU page table update. - -HMM implements all this on top of the mmu_notifier API because we wanted a -simpler API and also to be able to perform optimizations latter on like doing -concurrent device updates in multi-devices scenario. - -HMM also serves as an impedance mismatch between how CPU page table updates -are done (by CPU write to the page table and TLB flushes) and how devices -update their own page table. Device updates are a multi-step process. First, -appropriate commands are written to a buffer, then this buffer is scheduled for -execution on the device. It is only once the device has executed commands in -the buffer that the update is done. Creating and scheduling the update command -buffer can happen concurrently for multiple devices. Waiting for each device to -report commands as executed is serialized (there is no point in doing this -concurrently). - +invalidate() callback. That lock must be held before calling +mmu_range_read_retry() to avoid any race with a concurrent CPU page table +update. Leverage default_flags and pfn_flags_mask ========================================= diff --git a/include/linux/hmm.h b/include/linux/hmm.h index 2666eb08a40615..b4af5173523232 100644 --- a/include/linux/hmm.h +++ b/include/linux/hmm.h @@ -68,29 +68,6 @@ #include #include - -/* - * struct hmm - HMM per mm struct - * - * @mm: mm struct this HMM struct is bound to - * @lock: lock protecting ranges list - * @ranges: list of range being snapshotted - * @mirrors: list of mirrors for this mm - * @mmu_notifier: mmu notifier to track updates to CPU page table - * @mirrors_sem: read/write semaphore protecting the mirrors list - * @wq: wait queue for user waiting on a range invalidation - * @notifiers: count of active mmu notifiers - */ -struct hmm { - struct mmu_notifier mmu_notifier; - spinlock_t ranges_lock; - struct list_head ranges; - struct list_head mirrors; - struct rw_semaphore mirrors_sem; - wait_queue_head_t wq; - long notifiers; -}; - /* * hmm_pfn_flag_e - HMM flag enums * @@ -143,9 +120,8 @@ enum hmm_pfn_value_e { /* * struct hmm_range - track invalidation lock on virtual address range * - * @notifier: an optional mmu_range_notifier - * @notifier_seq: when notifier is used this is the result of - * mmu_range_read_begin() + * @notifier: a mmu_range_notifier that includes the start/end + * @notifier_seq: result of mmu_range_read_begin() * @hmm: the core HMM structure this range is active against * @vma: the vm area struct for the range * @list: all range lock are on a list @@ -162,8 +138,6 @@ enum hmm_pfn_value_e { struct hmm_range { struct mmu_range_notifier *notifier; unsigned long notifier_seq; - struct hmm *hmm; - struct list_head list; unsigned long start; unsigned long end; uint64_t *pfns; @@ -172,32 +146,8 @@ struct hmm_range { uint64_t default_flags; uint64_t pfn_flags_mask; uint8_t pfn_shift; - bool valid; }; -/* - * hmm_range_wait_until_valid() - wait for range to be valid - * @range: range affected by invalidation to wait on - * @timeout: time out for wait in ms (ie abort wait after that period of time) - * Return: true if the range is valid, false otherwise. - */ -static inline bool hmm_range_wait_until_valid(struct hmm_range *range, - unsigned long timeout) -{ - return wait_event_timeout(range->hmm->wq, range->valid, - msecs_to_jiffies(timeout)) != 0; -} - -/* - * hmm_range_valid() - test if a range is valid or not - * @range: range - * Return: true if the range is valid, false otherwise. - */ -static inline bool hmm_range_valid(struct hmm_range *range) -{ - return range->valid; -} - /* * hmm_device_entry_to_page() - return struct page pointed to by a device entry * @range: range use to decode device entry value @@ -267,111 +217,6 @@ static inline uint64_t hmm_device_entry_from_pfn(const struct hmm_range *range, range->flags[HMM_PFN_VALID]; } -/* - * Mirroring: how to synchronize device page table with CPU page table. - * - * A device driver that is participating in HMM mirroring must always - * synchronize with CPU page table updates. For this, device drivers can either - * directly use mmu_notifier APIs or they can use the hmm_mirror API. Device - * drivers can decide to register one mirror per device per process, or just - * one mirror per process for a group of devices. The pattern is: - * - * int device_bind_address_space(..., struct mm_struct *mm, ...) - * { - * struct device_address_space *das; - * - * // Device driver specific initialization, and allocation of das - * // which contains an hmm_mirror struct as one of its fields. - * ... - * - * ret = hmm_mirror_register(&das->mirror, mm, &device_mirror_ops); - * if (ret) { - * // Cleanup on error - * return ret; - * } - * - * // Other device driver specific initialization - * ... - * } - * - * Once an hmm_mirror is registered for an address space, the device driver - * will get callbacks through sync_cpu_device_pagetables() operation (see - * hmm_mirror_ops struct). - * - * Device driver must not free the struct containing the hmm_mirror struct - * before calling hmm_mirror_unregister(). The expected usage is to do that when - * the device driver is unbinding from an address space. - * - * - * void device_unbind_address_space(struct device_address_space *das) - * { - * // Device driver specific cleanup - * ... - * - * hmm_mirror_unregister(&das->mirror); - * - * // Other device driver specific cleanup, and now das can be freed - * ... - * } - */ - -struct hmm_mirror; - -/* - * struct hmm_mirror_ops - HMM mirror device operations callback - * - * @update: callback to update range on a device - */ -struct hmm_mirror_ops { - /* release() - release hmm_mirror - * - * @mirror: pointer to struct hmm_mirror - * - * This is called when the mm_struct is being released. The callback - * must ensure that all access to any pages obtained from this mirror - * is halted before the callback returns. All future access should - * fault. - */ - void (*release)(struct hmm_mirror *mirror); - - /* sync_cpu_device_pagetables() - synchronize page tables - * - * @mirror: pointer to struct hmm_mirror - * @update: update information (see struct mmu_notifier_range) - * Return: -EAGAIN if mmu_notifier_range_blockable(update) is false - * and callback needs to block, 0 otherwise. - * - * This callback ultimately originates from mmu_notifiers when the CPU - * page table is updated. The device driver must update its page table - * in response to this callback. The update argument tells what action - * to perform. - * - * The device driver must not return from this callback until the device - * page tables are completely updated (TLBs flushed, etc); this is a - * synchronous call. - */ - int (*sync_cpu_device_pagetables)( - struct hmm_mirror *mirror, - const struct mmu_notifier_range *update); -}; - -/* - * struct hmm_mirror - mirror struct for a device driver - * - * @hmm: pointer to struct hmm (which is unique per mm_struct) - * @ops: device driver callback for HMM mirror operations - * @list: for list of mirrors of a given mm - * - * Each address space (mm_struct) being mirrored by a device must register one - * instance of an hmm_mirror struct with HMM. HMM will track the list of all - * mirrors for each mm_struct. - */ -struct hmm_mirror { - struct hmm *hmm; - const struct hmm_mirror_ops *ops; - struct list_head list; -}; - /* * Retry fault if non-blocking, drop mmap_sem and return -EAGAIN in that case. */ @@ -381,15 +226,9 @@ struct hmm_mirror { #define HMM_FAULT_SNAPSHOT (1 << 1) #ifdef CONFIG_HMM_MIRROR -int hmm_mirror_register(struct hmm_mirror *mirror, struct mm_struct *mm); -void hmm_mirror_unregister(struct hmm_mirror *mirror); - /* * Please see Documentation/vm/hmm.rst for how to use the range API. */ -int hmm_range_register(struct hmm_range *range, struct hmm_mirror *mirror); -void hmm_range_unregister(struct hmm_range *range); - long hmm_range_fault(struct hmm_range *range, unsigned int flags); long hmm_range_dma_map(struct hmm_range *range, @@ -401,24 +240,6 @@ long hmm_range_dma_unmap(struct hmm_range *range, dma_addr_t *daddrs, bool dirty); #else -int hmm_mirror_register(struct hmm_mirror *mirror, struct mm_struct *mm) -{ - return -EOPNOTSUPP; -} - -void hmm_mirror_unregister(struct hmm_mirror *mirror) -{ -} - -int hmm_range_register(struct hmm_range *range, struct hmm_mirror *mirror) -{ - return -EOPNOTSUPP; -} - -void hmm_range_unregister(struct hmm_range *range) -{ -} - static inline long hmm_range_fault(struct hmm_range *range, unsigned int flags) { return -EOPNOTSUPP; diff --git a/mm/Kconfig b/mm/Kconfig index d0b5046d9aeffd..e38ff1d5968dbf 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -675,7 +675,6 @@ config DEV_PAGEMAP_OPS config HMM_MIRROR bool depends on MMU - depends on MMU_NOTIFIER config DEVICE_PRIVATE bool "Unaddressable device memory (GPU memory, ...)" diff --git a/mm/hmm.c b/mm/hmm.c index 22ac3595771feb..75d15a820e182e 100644 --- a/mm/hmm.c +++ b/mm/hmm.c @@ -26,193 +26,6 @@ #include #include -static struct mmu_notifier *hmm_alloc_notifier(struct mm_struct *mm) -{ - struct hmm *hmm; - - hmm = kzalloc(sizeof(*hmm), GFP_KERNEL); - if (!hmm) - return ERR_PTR(-ENOMEM); - - init_waitqueue_head(&hmm->wq); - INIT_LIST_HEAD(&hmm->mirrors); - init_rwsem(&hmm->mirrors_sem); - INIT_LIST_HEAD(&hmm->ranges); - spin_lock_init(&hmm->ranges_lock); - hmm->notifiers = 0; - return &hmm->mmu_notifier; -} - -static void hmm_free_notifier(struct mmu_notifier *mn) -{ - struct hmm *hmm = container_of(mn, struct hmm, mmu_notifier); - - WARN_ON(!list_empty(&hmm->ranges)); - WARN_ON(!list_empty(&hmm->mirrors)); - kfree(hmm); -} - -static void hmm_release(struct mmu_notifier *mn, struct mm_struct *mm) -{ - struct hmm *hmm = container_of(mn, struct hmm, mmu_notifier); - struct hmm_mirror *mirror; - - /* - * Since hmm_range_register() holds the mmget() lock hmm_release() is - * prevented as long as a range exists. - */ - WARN_ON(!list_empty_careful(&hmm->ranges)); - - down_read(&hmm->mirrors_sem); - list_for_each_entry(mirror, &hmm->mirrors, list) { - /* - * Note: The driver is not allowed to trigger - * hmm_mirror_unregister() from this thread. - */ - if (mirror->ops->release) - mirror->ops->release(mirror); - } - up_read(&hmm->mirrors_sem); -} - -static void notifiers_decrement(struct hmm *hmm) -{ - unsigned long flags; - - spin_lock_irqsave(&hmm->ranges_lock, flags); - hmm->notifiers--; - if (!hmm->notifiers) { - struct hmm_range *range; - - list_for_each_entry(range, &hmm->ranges, list) { - if (range->valid) - continue; - range->valid = true; - } - wake_up_all(&hmm->wq); - } - spin_unlock_irqrestore(&hmm->ranges_lock, flags); -} - -static int hmm_invalidate_range_start(struct mmu_notifier *mn, - const struct mmu_notifier_range *nrange) -{ - struct hmm *hmm = container_of(mn, struct hmm, mmu_notifier); - struct hmm_mirror *mirror; - struct hmm_range *range; - unsigned long flags; - int ret = 0; - - spin_lock_irqsave(&hmm->ranges_lock, flags); - hmm->notifiers++; - list_for_each_entry(range, &hmm->ranges, list) { - if (nrange->end < range->start || nrange->start >= range->end) - continue; - - range->valid = false; - } - spin_unlock_irqrestore(&hmm->ranges_lock, flags); - - if (mmu_notifier_range_blockable(nrange)) - down_read(&hmm->mirrors_sem); - else if (!down_read_trylock(&hmm->mirrors_sem)) { - ret = -EAGAIN; - goto out; - } - - list_for_each_entry(mirror, &hmm->mirrors, list) { - int rc; - - rc = mirror->ops->sync_cpu_device_pagetables(mirror, nrange); - if (rc) { - if (WARN_ON(mmu_notifier_range_blockable(nrange) || - rc != -EAGAIN)) - continue; - ret = -EAGAIN; - break; - } - } - up_read(&hmm->mirrors_sem); - -out: - if (ret) - notifiers_decrement(hmm); - return ret; -} - -static void hmm_invalidate_range_end(struct mmu_notifier *mn, - const struct mmu_notifier_range *nrange) -{ - struct hmm *hmm = container_of(mn, struct hmm, mmu_notifier); - - notifiers_decrement(hmm); -} - -static const struct mmu_notifier_ops hmm_mmu_notifier_ops = { - .release = hmm_release, - .invalidate_range_start = hmm_invalidate_range_start, - .invalidate_range_end = hmm_invalidate_range_end, - .alloc_notifier = hmm_alloc_notifier, - .free_notifier = hmm_free_notifier, -}; - -/* - * hmm_mirror_register() - register a mirror against an mm - * - * @mirror: new mirror struct to register - * @mm: mm to register against - * Return: 0 on success, -ENOMEM if no memory, -EINVAL if invalid arguments - * - * To start mirroring a process address space, the device driver must register - * an HMM mirror struct. - * - * The caller cannot unregister the hmm_mirror while any ranges are - * registered. - * - * Callers using this function must put a call to mmu_notifier_synchronize() - * in their module exit functions. - */ -int hmm_mirror_register(struct hmm_mirror *mirror, struct mm_struct *mm) -{ - struct mmu_notifier *mn; - - lockdep_assert_held_write(&mm->mmap_sem); - - /* Sanity check */ - if (!mm || !mirror || !mirror->ops) - return -EINVAL; - - mn = mmu_notifier_get_locked(&hmm_mmu_notifier_ops, mm); - if (IS_ERR(mn)) - return PTR_ERR(mn); - mirror->hmm = container_of(mn, struct hmm, mmu_notifier); - - down_write(&mirror->hmm->mirrors_sem); - list_add(&mirror->list, &mirror->hmm->mirrors); - up_write(&mirror->hmm->mirrors_sem); - - return 0; -} -EXPORT_SYMBOL(hmm_mirror_register); - -/* - * hmm_mirror_unregister() - unregister a mirror - * - * @mirror: mirror struct to unregister - * - * Stop mirroring a process address space, and cleanup. - */ -void hmm_mirror_unregister(struct hmm_mirror *mirror) -{ - struct hmm *hmm = mirror->hmm; - - down_write(&hmm->mirrors_sem); - list_del(&mirror->list); - up_write(&hmm->mirrors_sem); - mmu_notifier_put(&hmm->mmu_notifier); -} -EXPORT_SYMBOL(hmm_mirror_unregister); - struct hmm_vma_walk { struct hmm_range *range; struct dev_pagemap *pgmap; @@ -779,87 +592,6 @@ static void hmm_pfns_clear(struct hmm_range *range, *pfns = range->values[HMM_PFN_NONE]; } -/* - * hmm_range_register() - start tracking change to CPU page table over a range - * @range: range - * @mm: the mm struct for the range of virtual address - * - * Return: 0 on success, -EFAULT if the address space is no longer valid - * - * Track updates to the CPU page table see include/linux/hmm.h - */ -int hmm_range_register(struct hmm_range *range, struct hmm_mirror *mirror) -{ - struct hmm *hmm = mirror->hmm; - unsigned long flags; - - range->valid = false; - range->hmm = NULL; - - if ((range->start & (PAGE_SIZE - 1)) || (range->end & (PAGE_SIZE - 1))) - return -EINVAL; - if (range->start >= range->end) - return -EINVAL; - - /* Prevent hmm_release() from running while the range is valid */ - if (!mmget_not_zero(hmm->mmu_notifier.mm)) - return -EFAULT; - - /* Initialize range to track CPU page table updates. */ - spin_lock_irqsave(&hmm->ranges_lock, flags); - - range->hmm = hmm; - list_add(&range->list, &hmm->ranges); - - /* - * If there are any concurrent notifiers we have to wait for them for - * the range to be valid (see hmm_range_wait_until_valid()). - */ - if (!hmm->notifiers) - range->valid = true; - spin_unlock_irqrestore(&hmm->ranges_lock, flags); - - return 0; -} -EXPORT_SYMBOL(hmm_range_register); - -/* - * hmm_range_unregister() - stop tracking change to CPU page table over a range - * @range: range - * - * Range struct is used to track updates to the CPU page table after a call to - * hmm_range_register(). See include/linux/hmm.h for how to use it. - */ -void hmm_range_unregister(struct hmm_range *range) -{ - struct hmm *hmm = range->hmm; - unsigned long flags; - - spin_lock_irqsave(&hmm->ranges_lock, flags); - list_del_init(&range->list); - spin_unlock_irqrestore(&hmm->ranges_lock, flags); - - /* Drop reference taken by hmm_range_register() */ - mmput(hmm->mmu_notifier.mm); - - /* - * The range is now invalid and the ref on the hmm is dropped, so - * poison the pointer. Leave other fields in place, for the caller's - * use. - */ - range->valid = false; - memset(&range->hmm, POISON_INUSE, sizeof(range->hmm)); -} -EXPORT_SYMBOL(hmm_range_unregister); - -static bool needs_retry(struct hmm_range *range) -{ - if (range->notifier) - return mmu_range_check_retry(range->notifier, - range->notifier_seq); - return !range->valid; -} - static const struct mm_walk_ops hmm_walk_ops = { .pud_entry = hmm_vma_walk_pud, .pmd_entry = hmm_vma_walk_pmd, @@ -900,20 +632,15 @@ long hmm_range_fault(struct hmm_range *range, unsigned int flags) const unsigned long device_vma = VM_IO | VM_PFNMAP | VM_MIXEDMAP; unsigned long start = range->start, end; struct hmm_vma_walk hmm_vma_walk; - struct mm_struct *mm; + struct mm_struct *mm = range->notifier->mm; struct vm_area_struct *vma; int ret; - if (range->notifier) - mm = range->notifier->mm; - else - mm = range->hmm->mmu_notifier.mm; - lockdep_assert_held(&mm->mmap_sem); do { /* If range is no longer valid force retry. */ - if (needs_retry(range)) + if (mmu_range_check_retry(range->notifier, range->notifier_seq)) return -EBUSY; vma = find_vma(mm, start); @@ -946,7 +673,9 @@ long hmm_range_fault(struct hmm_range *range, unsigned int flags) start = hmm_vma_walk.last; /* Keep trying while the range is valid. */ - } while (ret == -EBUSY && !needs_retry(range)); + } while (ret == -EBUSY && + !mmu_range_check_retry(range->notifier, + range->notifier_seq)); if (ret) { unsigned long i; @@ -1004,7 +733,8 @@ long hmm_range_dma_map(struct hmm_range *range, struct device *device, continue; /* Check if range is being invalidated */ - if (needs_retry(range)) { + if (mmu_range_check_retry(range->notifier, + range->notifier_seq)) { ret = -EBUSY; goto unmap; } -- 2.23.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Gunthorpe Subject: [PATCH v2 15/15] mm/hmm: remove hmm_mirror and related Date: Mon, 28 Oct 2019 17:10:32 -0300 Message-ID: <20191028201032.6352-16-jgg@ziepe.ca> References: <20191028201032.6352-1-jgg@ziepe.ca> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191028201032.6352-1-jgg@ziepe.ca> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-mm@kvack.org, Jerome Glisse , Ralph Campbell , John Hubbard , Felix.Kuehling@amd.com Cc: Juergen Gross , David Zhou , Mike Marciniszyn , Stefano Stabellini , Oleksandr Andrushchenko , linux-rdma@vger.kernel.org, nouveau@lists.freedesktop.org, Dennis Dalessandro , amd-gfx@lists.freedesktop.org, Christoph Hellwig , Jason Gunthorpe , dri-devel@lists.freedesktop.org, Alex Deucher , xen-devel@lists.xenproject.org, Boris Ostrovsky , Petr Cvek , =?UTF-8?q?Christian=20K=C3=B6nig?= , Ben Skeggs List-Id: nouveau.vger.kernel.org RnJvbTogSmFzb24gR3VudGhvcnBlIDxqZ2dAbWVsbGFub3guY29tPgoKVGhlIG9ubHkgdHdvIHVz ZXJzIG9mIHRoaXMgYXJlIG5vdyBjb252ZXJ0ZWQgdG8gdXNlIG1tdV9yYW5nZV9ub3RpZmllciwK ZGVsZXRlIGFsbCB0aGUgY29kZSBhbmQgdXBkYXRlIGhtbS5yc3QuCgpSZXZpZXdlZC1ieTogSsOp csO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+ClNpZ25lZC1vZmYtYnk6IEphc29uIEd1 bnRob3JwZSA8amdnQG1lbGxhbm94LmNvbT4KLS0tCiBEb2N1bWVudGF0aW9uL3ZtL2htbS5yc3Qg fCAxMDUgKysrKy0tLS0tLS0tLS0tCiBpbmNsdWRlL2xpbnV4L2htbS5oICAgICAgfCAxODMgKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbW0vS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAxIC0K IG1tL2htbS5jICAgICAgICAgICAgICAgICB8IDI4NCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgNTQwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vaG1tLnJzdCBiL0RvY3Vt ZW50YXRpb24vdm0vaG1tLnJzdAppbmRleCAwYTU5NjBiZWNjZjc2ZC4uYTI0NzY0MzAzNWM0ZTIg MTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vaG1tLnJzdAorKysgYi9Eb2N1bWVudGF0aW9u L3ZtL2htbS5yc3QKQEAgLTE0Nyw0OSArMTQ3LDE2IEBAIEFkZHJlc3Mgc3BhY2UgbWlycm9yaW5n IGltcGxlbWVudGF0aW9uIGFuZCBBUEkKIEFkZHJlc3Mgc3BhY2UgbWlycm9yaW5nJ3MgbWFpbiBv YmplY3RpdmUgaXMgdG8gYWxsb3cgZHVwbGljYXRpb24gb2YgYSByYW5nZSBvZgogQ1BVIHBhZ2Ug dGFibGUgaW50byBhIGRldmljZSBwYWdlIHRhYmxlOyBITU0gaGVscHMga2VlcCBib3RoIHN5bmNo cm9uaXplZC4gQQogZGV2aWNlIGRyaXZlciB0aGF0IHdhbnRzIHRvIG1pcnJvciBhIHByb2Nlc3Mg YWRkcmVzcyBzcGFjZSBtdXN0IHN0YXJ0IHdpdGggdGhlCi1yZWdpc3RyYXRpb24gb2YgYW4gaG1t X21pcnJvciBzdHJ1Y3Q6OgotCi0gaW50IGhtbV9taXJyb3JfcmVnaXN0ZXIoc3RydWN0IGhtbV9t aXJyb3IgKm1pcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0 ICptbSk7Ci0KLVRoZSBtaXJyb3Igc3RydWN0IGhhcyBhIHNldCBvZiBjYWxsYmFja3MgdGhhdCBh cmUgdXNlZAotdG8gcHJvcGFnYXRlIENQVSBwYWdlIHRhYmxlczo6Ci0KLSBzdHJ1Y3QgaG1tX21p cnJvcl9vcHMgewotICAgICAvKiByZWxlYXNlKCkgLSByZWxlYXNlIGhtbV9taXJyb3IKLSAgICAg ICoKLSAgICAgICogQG1pcnJvcjogcG9pbnRlciB0byBzdHJ1Y3QgaG1tX21pcnJvcgotICAgICAg KgotICAgICAgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBtbV9zdHJ1Y3QgaXMgYmVpbmcgcmVs ZWFzZWQuICBUaGUgY2FsbGJhY2sKLSAgICAgICogbXVzdCBlbnN1cmUgdGhhdCBhbGwgYWNjZXNz IHRvIGFueSBwYWdlcyBvYnRhaW5lZCBmcm9tIHRoaXMgbWlycm9yCi0gICAgICAqIGlzIGhhbHRl ZCBiZWZvcmUgdGhlIGNhbGxiYWNrIHJldHVybnMuIEFsbCBmdXR1cmUgYWNjZXNzIHNob3VsZAot ICAgICAgKiBmYXVsdC4KLSAgICAgICovCi0gICAgIHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgaG1t X21pcnJvciAqbWlycm9yKTsKLQotICAgICAvKiBzeW5jX2NwdV9kZXZpY2VfcGFnZXRhYmxlcygp IC0gc3luY2hyb25pemUgcGFnZSB0YWJsZXMKLSAgICAgICoKLSAgICAgICogQG1pcnJvcjogcG9p bnRlciB0byBzdHJ1Y3QgaG1tX21pcnJvcgotICAgICAgKiBAdXBkYXRlOiB1cGRhdGUgaW5mb3Jt YXRpb24gKHNlZSBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlKQotICAgICAgKiBSZXR1cm46IC1F QUdBSU4gaWYgdXBkYXRlLmJsb2NrYWJsZSBmYWxzZSBhbmQgY2FsbGJhY2sgbmVlZCB0bwotICAg ICAgKiAgICAgICAgIGJsb2NrLCAwIG90aGVyd2lzZS4KLSAgICAgICoKLSAgICAgICogVGhpcyBj YWxsYmFjayB1bHRpbWF0ZWx5IG9yaWdpbmF0ZXMgZnJvbSBtbXVfbm90aWZpZXJzIHdoZW4gdGhl IENQVQotICAgICAgKiBwYWdlIHRhYmxlIGlzIHVwZGF0ZWQuIFRoZSBkZXZpY2UgZHJpdmVyIG11 c3QgdXBkYXRlIGl0cyBwYWdlIHRhYmxlCi0gICAgICAqIGluIHJlc3BvbnNlIHRvIHRoaXMgY2Fs bGJhY2suIFRoZSB1cGRhdGUgYXJndW1lbnQgdGVsbHMgd2hhdCBhY3Rpb24KLSAgICAgICogdG8g cGVyZm9ybS4KLSAgICAgICoKLSAgICAgICogVGhlIGRldmljZSBkcml2ZXIgbXVzdCBub3QgcmV0 dXJuIGZyb20gdGhpcyBjYWxsYmFjayB1bnRpbCB0aGUgZGV2aWNlCi0gICAgICAqIHBhZ2UgdGFi bGVzIGFyZSBjb21wbGV0ZWx5IHVwZGF0ZWQgKFRMQnMgZmx1c2hlZCwgZXRjKTsgdGhpcyBpcyBh Ci0gICAgICAqIHN5bmNocm9ub3VzIGNhbGwuCi0gICAgICAqLwotICAgICBpbnQgKCpzeW5jX2Nw dV9kZXZpY2VfcGFnZXRhYmxlcykoc3RydWN0IGhtbV9taXJyb3IgKm1pcnJvciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBobW1fdXBkYXRlICp1 cGRhdGUpOwotIH07Ci0KLVRoZSBkZXZpY2UgZHJpdmVyIG11c3QgcGVyZm9ybSB0aGUgdXBkYXRl IGFjdGlvbiB0byB0aGUgcmFuZ2UgKG1hcmsgcmFuZ2UKLXJlYWQgb25seSwgb3IgZnVsbHkgdW5t YXAsIGV0Yy4pLiBUaGUgZGV2aWNlIG11c3QgY29tcGxldGUgdGhlIHVwZGF0ZSBiZWZvcmUKLXRo ZSBkcml2ZXIgY2FsbGJhY2sgcmV0dXJucy4KK3JlZ2lzdHJhdGlvbiBvZiBhIG1tdV9yYW5nZV9u b3RpZmllcjo6CisKKyBtcm4tPm9wcyA9ICZkcml2ZXJfb3BzOworIGludCBtbXVfcmFuZ2Vfbm90 aWZpZXJfaW5zZXJ0KHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybiwKKwkJCSAgICAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAorCQkJICAgICAgc3RydWN0 IG1tX3N0cnVjdCAqbW0pOworCitEdXJpbmcgdGhlIGRyaXZlcl9vcHMtPmludmFsaWRhdGUoKSBj YWxsYmFjayB0aGUgZGV2aWNlIGRyaXZlciBtdXN0IHBlcmZvcm0KK3RoZSB1cGRhdGUgYWN0aW9u IHRvIHRoZSByYW5nZSAobWFyayByYW5nZSByZWFkIG9ubHksIG9yIGZ1bGx5IHVubWFwLAorZXRj LikuIFRoZSBkZXZpY2UgbXVzdCBjb21wbGV0ZSB0aGUgdXBkYXRlIGJlZm9yZSB0aGUgZHJpdmVy IGNhbGxiYWNrIHJldHVybnMuCiAKIFdoZW4gdGhlIGRldmljZSBkcml2ZXIgd2FudHMgdG8gcG9w dWxhdGUgYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcywgaXQgY2FuCiB1c2U6OgpAQCAtMjE2 LDcwICsxODMsNDYgQEAgVGhlIHVzYWdlIHBhdHRlcm4gaXM6OgogICAgICAgc3RydWN0IGhtbV9y YW5nZSByYW5nZTsKICAgICAgIC4uLgogCisgICAgICByYW5nZS5ub3RpZmllciA9ICZtcm47CiAg ICAgICByYW5nZS5zdGFydCA9IC4uLjsKICAgICAgIHJhbmdlLmVuZCA9IC4uLjsKICAgICAgIHJh bmdlLnBmbnMgPSAuLi47CiAgICAgICByYW5nZS5mbGFncyA9IC4uLjsKICAgICAgIHJhbmdlLnZh bHVlcyA9IC4uLjsKICAgICAgIHJhbmdlLnBmbl9zaGlmdCA9IC4uLjsKLSAgICAgIGhtbV9yYW5n ZV9yZWdpc3RlcigmcmFuZ2UsIG1pcnJvcik7CiAKLSAgICAgIC8qCi0gICAgICAgKiBKdXN0IHdh aXQgZm9yIHJhbmdlIHRvIGJlIHZhbGlkLCBzYWZlIHRvIGlnbm9yZSByZXR1cm4gdmFsdWUgYXMg d2UKLSAgICAgICAqIHdpbGwgdXNlIHRoZSByZXR1cm4gdmFsdWUgb2YgaG1tX3JhbmdlX2ZhdWx0 KCkgYmVsb3cgdW5kZXIgdGhlCi0gICAgICAgKiBtbWFwX3NlbSB0byBhc2NlcnRhaW4gdGhlIHZh bGlkaXR5IG9mIHRoZSByYW5nZS4KLSAgICAgICAqLwotICAgICAgaG1tX3JhbmdlX3dhaXRfdW50 aWxfdmFsaWQoJnJhbmdlLCBUSU1FT1VUX0lOX01TRUMpOworICAgICAgaWYgKCFtbWdldF9ub3Rf emVybyhtcm4tPm5vdGlmaWVyLm1tKSkKKyAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKIAogIGFn YWluOgorICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X3JhbmdlX3JlYWRfYmVnaW4oJm1y bik7CiAgICAgICBkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAgICAgICByZXQgPSBobW1fcmFu Z2VfZmF1bHQoJnJhbmdlLCBITU1fUkFOR0VfU05BUFNIT1QpOwogICAgICAgaWYgKHJldCkgewog ICAgICAgICAgIHVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0gICAgICAgICAgaWYgKHJldCA9PSAt RUJVU1kpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBObyBuZWVkIHRvIGNoZWNr IGhtbV9yYW5nZV93YWl0X3VudGlsX3ZhbGlkKCkgcmV0dXJuIHZhbHVlCi0gICAgICAgICAgICAg KiBvbiByZXRyeSB3ZSB3aWxsIGdldCBwcm9wZXIgZXJyb3Igd2l0aCBobW1fcmFuZ2VfZmF1bHQo KQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBobW1fcmFuZ2Vfd2FpdF91bnRpbF92YWxp ZCgmcmFuZ2UsIFRJTUVPVVRfSU5fTVNFQyk7Ci0gICAgICAgICAgICBnb3RvIGFnYWluOwotICAg ICAgICAgIH0KLSAgICAgICAgICBobW1fcmFuZ2VfdW5yZWdpc3RlcigmcmFuZ2UpOworICAgICAg ICAgIGlmIChyZXQgPT0gLUVCVVNZKQorICAgICAgICAgICAgICAgICBnb3RvIGFnYWluOwogICAg ICAgICAgIHJldHVybiByZXQ7CiAgICAgICB9CisgICAgICB1cF9yZWFkKCZtbS0+bW1hcF9zZW0p OworCiAgICAgICB0YWtlX2xvY2soZHJpdmVyLT51cGRhdGUpOwotICAgICAgaWYgKCFobW1fcmFu Z2VfdmFsaWQoJnJhbmdlKSkgeworICAgICAgaWYgKG1tdV9yYW5nZV9yZWFkX3JldHJ5KCZtcm4s IHJhbmdlLm5vdGlmaWVyX3NlcSkgewogICAgICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItPnVw ZGF0ZSk7Ci0gICAgICAgICAgdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKICAgICAgICAgICBnb3Rv IGFnYWluOwogICAgICAgfQogCi0gICAgICAvLyBVc2UgcGZucyBhcnJheSBjb250ZW50IHRvIHVw ZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZQorICAgICAgLyogVXNlIHBmbnMgYXJyYXkgY29udGVudCB0 byB1cGRhdGUgZGV2aWNlIHBhZ2UgdGFibGUsCisgICAgICAgKiB1bmRlciB0aGUgdXBkYXRlIGxv Y2sgKi8KIAotICAgICAgaG1tX3JhbmdlX3VucmVnaXN0ZXIoJnJhbmdlKTsKICAgICAgIHJlbGVh c2VfbG9jayhkcml2ZXItPnVwZGF0ZSk7Ci0gICAgICB1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwog ICAgICAgcmV0dXJuIDA7CiAgfQogCiBUaGUgZHJpdmVyLT51cGRhdGUgbG9jayBpcyB0aGUgc2Ft ZSBsb2NrIHRoYXQgdGhlIGRyaXZlciB0YWtlcyBpbnNpZGUgaXRzCi1zeW5jX2NwdV9kZXZpY2Vf cGFnZXRhYmxlcygpIGNhbGxiYWNrLiBUaGF0IGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxs aW5nCi1obW1fcmFuZ2VfdmFsaWQoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVu dCBDUFUgcGFnZSB0YWJsZSB1cGRhdGUuCi0KLUhNTSBpbXBsZW1lbnRzIGFsbCB0aGlzIG9uIHRv cCBvZiB0aGUgbW11X25vdGlmaWVyIEFQSSBiZWNhdXNlIHdlIHdhbnRlZCBhCi1zaW1wbGVyIEFQ SSBhbmQgYWxzbyB0byBiZSBhYmxlIHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucyBsYXR0ZXIgb24g bGlrZSBkb2luZwotY29uY3VycmVudCBkZXZpY2UgdXBkYXRlcyBpbiBtdWx0aS1kZXZpY2VzIHNj ZW5hcmlvLgotCi1ITU0gYWxzbyBzZXJ2ZXMgYXMgYW4gaW1wZWRhbmNlIG1pc21hdGNoIGJldHdl ZW4gaG93IENQVSBwYWdlIHRhYmxlIHVwZGF0ZXMKLWFyZSBkb25lIChieSBDUFUgd3JpdGUgdG8g dGhlIHBhZ2UgdGFibGUgYW5kIFRMQiBmbHVzaGVzKSBhbmQgaG93IGRldmljZXMKLXVwZGF0ZSB0 aGVpciBvd24gcGFnZSB0YWJsZS4gRGV2aWNlIHVwZGF0ZXMgYXJlIGEgbXVsdGktc3RlcCBwcm9j ZXNzLiBGaXJzdCwKLWFwcHJvcHJpYXRlIGNvbW1hbmRzIGFyZSB3cml0dGVuIHRvIGEgYnVmZmVy LCB0aGVuIHRoaXMgYnVmZmVyIGlzIHNjaGVkdWxlZCBmb3IKLWV4ZWN1dGlvbiBvbiB0aGUgZGV2 aWNlLiBJdCBpcyBvbmx5IG9uY2UgdGhlIGRldmljZSBoYXMgZXhlY3V0ZWQgY29tbWFuZHMgaW4K LXRoZSBidWZmZXIgdGhhdCB0aGUgdXBkYXRlIGlzIGRvbmUuIENyZWF0aW5nIGFuZCBzY2hlZHVs aW5nIHRoZSB1cGRhdGUgY29tbWFuZAotYnVmZmVyIGNhbiBoYXBwZW4gY29uY3VycmVudGx5IGZv ciBtdWx0aXBsZSBkZXZpY2VzLiBXYWl0aW5nIGZvciBlYWNoIGRldmljZSB0bwotcmVwb3J0IGNv bW1hbmRzIGFzIGV4ZWN1dGVkIGlzIHNlcmlhbGl6ZWQgKHRoZXJlIGlzIG5vIHBvaW50IGluIGRv aW5nIHRoaXMKLWNvbmN1cnJlbnRseSkuCi0KK2ludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBs b2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZworbW11X3JhbmdlX3JlYWRfcmV0cnkoKSB0 byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZQordXBkYXRl LgogCiBMZXZlcmFnZSBkZWZhdWx0X2ZsYWdzIGFuZCBwZm5fZmxhZ3NfbWFzawogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlu dXgvaG1tLmggYi9pbmNsdWRlL2xpbnV4L2htbS5oCmluZGV4IDI2NjZlYjA4YTQwNjE1Li5iNGFm NTE3MzUyMzIzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaAorKysgYi9pbmNsdWRl L2xpbnV4L2htbS5oCkBAIC02OCwyOSArNjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRp b24uaD4KICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4KIAotCi0vKgotICogc3RydWN0 IGhtbSAtIEhNTSBwZXIgbW0gc3RydWN0Ci0gKgotICogQG1tOiBtbSBzdHJ1Y3QgdGhpcyBITU0g c3RydWN0IGlzIGJvdW5kIHRvCi0gKiBAbG9jazogbG9jayBwcm90ZWN0aW5nIHJhbmdlcyBsaXN0 Ci0gKiBAcmFuZ2VzOiBsaXN0IG9mIHJhbmdlIGJlaW5nIHNuYXBzaG90dGVkCi0gKiBAbWlycm9y czogbGlzdCBvZiBtaXJyb3JzIGZvciB0aGlzIG1tCi0gKiBAbW11X25vdGlmaWVyOiBtbXUgbm90 aWZpZXIgdG8gdHJhY2sgdXBkYXRlcyB0byBDUFUgcGFnZSB0YWJsZQotICogQG1pcnJvcnNfc2Vt OiByZWFkL3dyaXRlIHNlbWFwaG9yZSBwcm90ZWN0aW5nIHRoZSBtaXJyb3JzIGxpc3QKLSAqIEB3 cTogd2FpdCBxdWV1ZSBmb3IgdXNlciB3YWl0aW5nIG9uIGEgcmFuZ2UgaW52YWxpZGF0aW9uCi0g KiBAbm90aWZpZXJzOiBjb3VudCBvZiBhY3RpdmUgbW11IG5vdGlmaWVycwotICovCi1zdHJ1Y3Qg aG1tIHsKLQlzdHJ1Y3QgbW11X25vdGlmaWVyCW1tdV9ub3RpZmllcjsKLQlzcGlubG9ja190CQly YW5nZXNfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXJhbmdlczsKLQlzdHJ1Y3QgbGlzdF9oZWFk CW1pcnJvcnM7Ci0Jc3RydWN0IHJ3X3NlbWFwaG9yZQltaXJyb3JzX3NlbTsKLQl3YWl0X3F1ZXVl X2hlYWRfdAl3cTsKLQlsb25nCQkJbm90aWZpZXJzOwotfTsKLQogLyoKICAqIGhtbV9wZm5fZmxh Z19lIC0gSE1NIGZsYWcgZW51bXMKICAqCkBAIC0xNDMsOSArMTIwLDggQEAgZW51bSBobW1fcGZu X3ZhbHVlX2UgewogLyoKICAqIHN0cnVjdCBobW1fcmFuZ2UgLSB0cmFjayBpbnZhbGlkYXRpb24g bG9jayBvbiB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UKICAqCi0gKiBAbm90aWZpZXI6IGFuIG9wdGlv bmFsIG1tdV9yYW5nZV9ub3RpZmllcgotICogQG5vdGlmaWVyX3NlcTogd2hlbiBub3RpZmllciBp cyB1c2VkIHRoaXMgaXMgdGhlIHJlc3VsdCBvZgotICogICAgICAgICAgICAgICAgbW11X3Jhbmdl X3JlYWRfYmVnaW4oKQorICogQG5vdGlmaWVyOiBhIG1tdV9yYW5nZV9ub3RpZmllciB0aGF0IGlu Y2x1ZGVzIHRoZSBzdGFydC9lbmQKKyAqIEBub3RpZmllcl9zZXE6IHJlc3VsdCBvZiBtbXVfcmFu Z2VfcmVhZF9iZWdpbigpCiAgKiBAaG1tOiB0aGUgY29yZSBITU0gc3RydWN0dXJlIHRoaXMgcmFu Z2UgaXMgYWN0aXZlIGFnYWluc3QKICAqIEB2bWE6IHRoZSB2bSBhcmVhIHN0cnVjdCBmb3IgdGhl IHJhbmdlCiAgKiBAbGlzdDogYWxsIHJhbmdlIGxvY2sgYXJlIG9uIGEgbGlzdApAQCAtMTYyLDgg KzEzOCw2IEBAIGVudW0gaG1tX3Bmbl92YWx1ZV9lIHsKIHN0cnVjdCBobW1fcmFuZ2UgewogCXN0 cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm5vdGlmaWVyOwogCXVuc2lnbmVkIGxvbmcJCW5vdGlm aWVyX3NlcTsKLQlzdHJ1Y3QgaG1tCQkqaG1tOwotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAl1 bnNpZ25lZCBsb25nCQlzdGFydDsKIAl1bnNpZ25lZCBsb25nCQllbmQ7CiAJdWludDY0X3QJCSpw Zm5zOwpAQCAtMTcyLDMyICsxNDYsOCBAQCBzdHJ1Y3QgaG1tX3JhbmdlIHsKIAl1aW50NjRfdAkJ ZGVmYXVsdF9mbGFnczsKIAl1aW50NjRfdAkJcGZuX2ZsYWdzX21hc2s7CiAJdWludDhfdAkJCXBm bl9zaGlmdDsKLQlib29sCQkJdmFsaWQ7CiB9OwogCi0vKgotICogaG1tX3JhbmdlX3dhaXRfdW50 aWxfdmFsaWQoKSAtIHdhaXQgZm9yIHJhbmdlIHRvIGJlIHZhbGlkCi0gKiBAcmFuZ2U6IHJhbmdl IGFmZmVjdGVkIGJ5IGludmFsaWRhdGlvbiB0byB3YWl0IG9uCi0gKiBAdGltZW91dDogdGltZSBv dXQgZm9yIHdhaXQgaW4gbXMgKGllIGFib3J0IHdhaXQgYWZ0ZXIgdGhhdCBwZXJpb2Qgb2YgdGlt ZSkKLSAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmFuZ2UgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lz ZS4KLSAqLwotc3RhdGljIGlubGluZSBib29sIGhtbV9yYW5nZV93YWl0X3VudGlsX3ZhbGlkKHN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQp Ci17Ci0JcmV0dXJuIHdhaXRfZXZlbnRfdGltZW91dChyYW5nZS0+aG1tLT53cSwgcmFuZ2UtPnZh bGlkLAotCQkJCSAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSkgIT0gMDsKLX0KLQotLyoKLSAq IGhtbV9yYW5nZV92YWxpZCgpIC0gdGVzdCBpZiBhIHJhbmdlIGlzIHZhbGlkIG9yIG5vdAotICog QHJhbmdlOiByYW5nZQotICogUmV0dXJuOiB0cnVlIGlmIHRoZSByYW5nZSBpcyB2YWxpZCwgZmFs c2Ugb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wgaG1tX3JhbmdlX3ZhbGlkKHN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQotewotCXJldHVybiByYW5nZS0+dmFsaWQ7Ci19Ci0KIC8q CiAgKiBobW1fZGV2aWNlX2VudHJ5X3RvX3BhZ2UoKSAtIHJldHVybiBzdHJ1Y3QgcGFnZSBwb2lu dGVkIHRvIGJ5IGEgZGV2aWNlIGVudHJ5CiAgKiBAcmFuZ2U6IHJhbmdlIHVzZSB0byBkZWNvZGUg ZGV2aWNlIGVudHJ5IHZhbHVlCkBAIC0yNjcsMTExICsyMTcsNiBAQCBzdGF0aWMgaW5saW5lIHVp bnQ2NF90IGhtbV9kZXZpY2VfZW50cnlfZnJvbV9wZm4oY29uc3Qgc3RydWN0IGhtbV9yYW5nZSAq cmFuZ2UsCiAJCXJhbmdlLT5mbGFnc1tITU1fUEZOX1ZBTElEXTsKIH0KIAotLyoKLSAqIE1pcnJv cmluZzogaG93IHRvIHN5bmNocm9uaXplIGRldmljZSBwYWdlIHRhYmxlIHdpdGggQ1BVIHBhZ2Ug dGFibGUuCi0gKgotICogQSBkZXZpY2UgZHJpdmVyIHRoYXQgaXMgcGFydGljaXBhdGluZyBpbiBI TU0gbWlycm9yaW5nIG11c3QgYWx3YXlzCi0gKiBzeW5jaHJvbml6ZSB3aXRoIENQVSBwYWdlIHRh YmxlIHVwZGF0ZXMuIEZvciB0aGlzLCBkZXZpY2UgZHJpdmVycyBjYW4gZWl0aGVyCi0gKiBkaXJl Y3RseSB1c2UgbW11X25vdGlmaWVyIEFQSXMgb3IgdGhleSBjYW4gdXNlIHRoZSBobW1fbWlycm9y IEFQSS4gRGV2aWNlCi0gKiBkcml2ZXJzIGNhbiBkZWNpZGUgdG8gcmVnaXN0ZXIgb25lIG1pcnJv ciBwZXIgZGV2aWNlIHBlciBwcm9jZXNzLCBvciBqdXN0Ci0gKiBvbmUgbWlycm9yIHBlciBwcm9j ZXNzIGZvciBhIGdyb3VwIG9mIGRldmljZXMuIFRoZSBwYXR0ZXJuIGlzOgotICoKLSAqICAgICAg aW50IGRldmljZV9iaW5kX2FkZHJlc3Nfc3BhY2UoLi4uLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwg Li4uKQotICogICAgICB7Ci0gKiAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2FkZHJlc3Nfc3BhY2Ug KmRhczsKLSAqCi0gKiAgICAgICAgICAvLyBEZXZpY2UgZHJpdmVyIHNwZWNpZmljIGluaXRpYWxp emF0aW9uLCBhbmQgYWxsb2NhdGlvbiBvZiBkYXMKLSAqICAgICAgICAgIC8vIHdoaWNoIGNvbnRh aW5zIGFuIGhtbV9taXJyb3Igc3RydWN0IGFzIG9uZSBvZiBpdHMgZmllbGRzLgotICogICAgICAg ICAgLi4uCi0gKgotICogICAgICAgICAgcmV0ID0gaG1tX21pcnJvcl9yZWdpc3RlcigmZGFzLT5t aXJyb3IsIG1tLCAmZGV2aWNlX21pcnJvcl9vcHMpOwotICogICAgICAgICAgaWYgKHJldCkgewot ICogICAgICAgICAgICAgIC8vIENsZWFudXAgb24gZXJyb3IKLSAqICAgICAgICAgICAgICByZXR1 cm4gcmV0OwotICogICAgICAgICAgfQotICoKLSAqICAgICAgICAgIC8vIE90aGVyIGRldmljZSBk cml2ZXIgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24KLSAqICAgICAgICAgIC4uLgotICogICAgICB9 Ci0gKgotICogT25jZSBhbiBobW1fbWlycm9yIGlzIHJlZ2lzdGVyZWQgZm9yIGFuIGFkZHJlc3Mg c3BhY2UsIHRoZSBkZXZpY2UgZHJpdmVyCi0gKiB3aWxsIGdldCBjYWxsYmFja3MgdGhyb3VnaCBz eW5jX2NwdV9kZXZpY2VfcGFnZXRhYmxlcygpIG9wZXJhdGlvbiAoc2VlCi0gKiBobW1fbWlycm9y X29wcyBzdHJ1Y3QpLgotICoKLSAqIERldmljZSBkcml2ZXIgbXVzdCBub3QgZnJlZSB0aGUgc3Ry dWN0IGNvbnRhaW5pbmcgdGhlIGhtbV9taXJyb3Igc3RydWN0Ci0gKiBiZWZvcmUgY2FsbGluZyBo bW1fbWlycm9yX3VucmVnaXN0ZXIoKS4gVGhlIGV4cGVjdGVkIHVzYWdlIGlzIHRvIGRvIHRoYXQg d2hlbgotICogdGhlIGRldmljZSBkcml2ZXIgaXMgdW5iaW5kaW5nIGZyb20gYW4gYWRkcmVzcyBz cGFjZS4KLSAqCi0gKgotICogICAgICB2b2lkIGRldmljZV91bmJpbmRfYWRkcmVzc19zcGFjZShz dHJ1Y3QgZGV2aWNlX2FkZHJlc3Nfc3BhY2UgKmRhcykKLSAqICAgICAgewotICogICAgICAgICAg Ly8gRGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjbGVhbnVwCi0gKiAgICAgICAgICAuLi4KLSAqCi0g KiAgICAgICAgICBobW1fbWlycm9yX3VucmVnaXN0ZXIoJmRhcy0+bWlycm9yKTsKLSAqCi0gKiAg ICAgICAgICAvLyBPdGhlciBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNsZWFudXAsIGFuZCBub3cg ZGFzIGNhbiBiZSBmcmVlZAotICogICAgICAgICAgLi4uCi0gKiAgICAgIH0KLSAqLwotCi1zdHJ1 Y3QgaG1tX21pcnJvcjsKLQotLyoKLSAqIHN0cnVjdCBobW1fbWlycm9yX29wcyAtIEhNTSBtaXJy b3IgZGV2aWNlIG9wZXJhdGlvbnMgY2FsbGJhY2sKLSAqCi0gKiBAdXBkYXRlOiBjYWxsYmFjayB0 byB1cGRhdGUgcmFuZ2Ugb24gYSBkZXZpY2UKLSAqLwotc3RydWN0IGhtbV9taXJyb3Jfb3BzIHsK LQkvKiByZWxlYXNlKCkgLSByZWxlYXNlIGhtbV9taXJyb3IKLQkgKgotCSAqIEBtaXJyb3I6IHBv aW50ZXIgdG8gc3RydWN0IGhtbV9taXJyb3IKLQkgKgotCSAqIFRoaXMgaXMgY2FsbGVkIHdoZW4g dGhlIG1tX3N0cnVjdCBpcyBiZWluZyByZWxlYXNlZC4gIFRoZSBjYWxsYmFjawotCSAqIG11c3Qg ZW5zdXJlIHRoYXQgYWxsIGFjY2VzcyB0byBhbnkgcGFnZXMgb2J0YWluZWQgZnJvbSB0aGlzIG1p cnJvcgotCSAqIGlzIGhhbHRlZCBiZWZvcmUgdGhlIGNhbGxiYWNrIHJldHVybnMuIEFsbCBmdXR1 cmUgYWNjZXNzIHNob3VsZAotCSAqIGZhdWx0LgotCSAqLwotCXZvaWQgKCpyZWxlYXNlKShzdHJ1 Y3QgaG1tX21pcnJvciAqbWlycm9yKTsKLQotCS8qIHN5bmNfY3B1X2RldmljZV9wYWdldGFibGVz KCkgLSBzeW5jaHJvbml6ZSBwYWdlIHRhYmxlcwotCSAqCi0JICogQG1pcnJvcjogcG9pbnRlciB0 byBzdHJ1Y3QgaG1tX21pcnJvcgotCSAqIEB1cGRhdGU6IHVwZGF0ZSBpbmZvcm1hdGlvbiAoc2Vl IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UpCi0JICogUmV0dXJuOiAtRUFHQUlOIGlmIG1tdV9u b3RpZmllcl9yYW5nZV9ibG9ja2FibGUodXBkYXRlKSBpcyBmYWxzZQotCSAqIGFuZCBjYWxsYmFj ayBuZWVkcyB0byBibG9jaywgMCBvdGhlcndpc2UuCi0JICoKLQkgKiBUaGlzIGNhbGxiYWNrIHVs dGltYXRlbHkgb3JpZ2luYXRlcyBmcm9tIG1tdV9ub3RpZmllcnMgd2hlbiB0aGUgQ1BVCi0JICog cGFnZSB0YWJsZSBpcyB1cGRhdGVkLiBUaGUgZGV2aWNlIGRyaXZlciBtdXN0IHVwZGF0ZSBpdHMg cGFnZSB0YWJsZQotCSAqIGluIHJlc3BvbnNlIHRvIHRoaXMgY2FsbGJhY2suIFRoZSB1cGRhdGUg YXJndW1lbnQgdGVsbHMgd2hhdCBhY3Rpb24KLQkgKiB0byBwZXJmb3JtLgotCSAqCi0JICogVGhl IGRldmljZSBkcml2ZXIgbXVzdCBub3QgcmV0dXJuIGZyb20gdGhpcyBjYWxsYmFjayB1bnRpbCB0 aGUgZGV2aWNlCi0JICogcGFnZSB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgdXBkYXRlZCAoVExCcyBm bHVzaGVkLCBldGMpOyB0aGlzIGlzIGEKLQkgKiBzeW5jaHJvbm91cyBjYWxsLgotCSAqLwotCWlu dCAoKnN5bmNfY3B1X2RldmljZV9wYWdldGFibGVzKSgKLQkJc3RydWN0IGhtbV9taXJyb3IgKm1p cnJvciwKLQkJY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqdXBkYXRlKTsKLX07Ci0K LS8qCi0gKiBzdHJ1Y3QgaG1tX21pcnJvciAtIG1pcnJvciBzdHJ1Y3QgZm9yIGEgZGV2aWNlIGRy aXZlcgotICoKLSAqIEBobW06IHBvaW50ZXIgdG8gc3RydWN0IGhtbSAod2hpY2ggaXMgdW5pcXVl IHBlciBtbV9zdHJ1Y3QpCi0gKiBAb3BzOiBkZXZpY2UgZHJpdmVyIGNhbGxiYWNrIGZvciBITU0g bWlycm9yIG9wZXJhdGlvbnMKLSAqIEBsaXN0OiBmb3IgbGlzdCBvZiBtaXJyb3JzIG9mIGEgZ2l2 ZW4gbW0KLSAqCi0gKiBFYWNoIGFkZHJlc3Mgc3BhY2UgKG1tX3N0cnVjdCkgYmVpbmcgbWlycm9y ZWQgYnkgYSBkZXZpY2UgbXVzdCByZWdpc3RlciBvbmUKLSAqIGluc3RhbmNlIG9mIGFuIGhtbV9t aXJyb3Igc3RydWN0IHdpdGggSE1NLiBITU0gd2lsbCB0cmFjayB0aGUgbGlzdCBvZiBhbGwKLSAq IG1pcnJvcnMgZm9yIGVhY2ggbW1fc3RydWN0LgotICovCi1zdHJ1Y3QgaG1tX21pcnJvciB7Ci0J c3RydWN0IGhtbQkJCSpobW07Ci0JY29uc3Qgc3RydWN0IGhtbV9taXJyb3Jfb3BzCSpvcHM7Ci0J c3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKLX07Ci0KIC8qCiAgKiBSZXRyeSBmYXVsdCBpZiBub24t YmxvY2tpbmcsIGRyb3AgbW1hcF9zZW0gYW5kIHJldHVybiAtRUFHQUlOIGluIHRoYXQgY2FzZS4K ICAqLwpAQCAtMzgxLDE1ICsyMjYsOSBAQCBzdHJ1Y3QgaG1tX21pcnJvciB7CiAjZGVmaW5lIEhN TV9GQVVMVF9TTkFQU0hPVAkJKDEgPDwgMSkKIAogI2lmZGVmIENPTkZJR19ITU1fTUlSUk9SCi1p bnQgaG1tX21pcnJvcl9yZWdpc3RlcihzdHJ1Y3QgaG1tX21pcnJvciAqbWlycm9yLCBzdHJ1Y3Qg bW1fc3RydWN0ICptbSk7Ci12b2lkIGhtbV9taXJyb3JfdW5yZWdpc3RlcihzdHJ1Y3QgaG1tX21p cnJvciAqbWlycm9yKTsKLQogLyoKICAqIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi92bS9obW0u cnN0IGZvciBob3cgdG8gdXNlIHRoZSByYW5nZSBBUEkuCiAgKi8KLWludCBobW1fcmFuZ2VfcmVn aXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHN0cnVjdCBobW1fbWlycm9yICptaXJyb3Ip Owotdm9pZCBobW1fcmFuZ2VfdW5yZWdpc3RlcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7Ci0K IGxvbmcgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCB1bnNpZ25lZCBp bnQgZmxhZ3MpOwogCiBsb25nIGhtbV9yYW5nZV9kbWFfbWFwKHN0cnVjdCBobW1fcmFuZ2UgKnJh bmdlLApAQCAtNDAxLDI0ICsyNDAsNiBAQCBsb25nIGhtbV9yYW5nZV9kbWFfdW5tYXAoc3RydWN0 IGhtbV9yYW5nZSAqcmFuZ2UsCiAJCQkgZG1hX2FkZHJfdCAqZGFkZHJzLAogCQkJIGJvb2wgZGly dHkpOwogI2Vsc2UKLWludCBobW1fbWlycm9yX3JlZ2lzdGVyKHN0cnVjdCBobW1fbWlycm9yICpt aXJyb3IsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0K LQotdm9pZCBobW1fbWlycm9yX3VucmVnaXN0ZXIoc3RydWN0IGhtbV9taXJyb3IgKm1pcnJvcikK LXsKLX0KLQotaW50IGhtbV9yYW5nZV9yZWdpc3RlcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwg c3RydWN0IGhtbV9taXJyb3IgKm1pcnJvcikKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0K LXZvaWQgaG1tX3JhbmdlX3VucmVnaXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCi17Ci19 Ci0KIHN0YXRpYyBpbmxpbmUgbG9uZyBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAq cmFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYg LS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBkMGI1MDQ2ZDlhZWZmZC4uZTM4 ZmYxZDU5NjhkYmYgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAt Njc1LDcgKzY3NSw2IEBAIGNvbmZpZyBERVZfUEFHRU1BUF9PUFMKIGNvbmZpZyBITU1fTUlSUk9S CiAJYm9vbAogCWRlcGVuZHMgb24gTU1VCi0JZGVwZW5kcyBvbiBNTVVfTk9USUZJRVIKIAogY29u ZmlnIERFVklDRV9QUklWQVRFCiAJYm9vbCAiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChH UFUgbWVtb3J5LCAuLi4pIgpkaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uYwppbmRleCAy MmFjMzU5NTc3MWZlYi4uNzVkMTVhODIwZTE4MmUgMTAwNjQ0Ci0tLSBhL21tL2htbS5jCisrKyBi L21tL2htbS5jCkBAIC0yNiwxOTMgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZp ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnlfaG90cGx1Zy5oPgogCi1zdGF0aWMgc3RydWN0 IG1tdV9ub3RpZmllciAqaG1tX2FsbG9jX25vdGlmaWVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQot ewotCXN0cnVjdCBobW0gKmhtbTsKLQotCWhtbSA9IGt6YWxsb2Moc2l6ZW9mKCpobW0pLCBHRlBf S0VSTkVMKTsKLQlpZiAoIWhtbSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlpbml0 X3dhaXRxdWV1ZV9oZWFkKCZobW0tPndxKTsKLQlJTklUX0xJU1RfSEVBRCgmaG1tLT5taXJyb3Jz KTsKLQlpbml0X3J3c2VtKCZobW0tPm1pcnJvcnNfc2VtKTsKLQlJTklUX0xJU1RfSEVBRCgmaG1t LT5yYW5nZXMpOwotCXNwaW5fbG9ja19pbml0KCZobW0tPnJhbmdlc19sb2NrKTsKLQlobW0tPm5v dGlmaWVycyA9IDA7Ci0JcmV0dXJuICZobW0tPm1tdV9ub3RpZmllcjsKLX0KLQotc3RhdGljIHZv aWQgaG1tX2ZyZWVfbm90aWZpZXIoc3RydWN0IG1tdV9ub3RpZmllciAqbW4pCi17Ci0Jc3RydWN0 IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90aWZpZXIpOwot Ci0JV0FSTl9PTighbGlzdF9lbXB0eSgmaG1tLT5yYW5nZXMpKTsKLQlXQVJOX09OKCFsaXN0X2Vt cHR5KCZobW0tPm1pcnJvcnMpKTsKLQlrZnJlZShobW0pOwotfQotCi1zdGF0aWMgdm9pZCBobW1f cmVsZWFzZShzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17 Ci0Jc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90 aWZpZXIpOwotCXN0cnVjdCBobW1fbWlycm9yICptaXJyb3I7Ci0KLQkvKgotCSAqIFNpbmNlIGht bV9yYW5nZV9yZWdpc3RlcigpIGhvbGRzIHRoZSBtbWdldCgpIGxvY2sgaG1tX3JlbGVhc2UoKSBp cwotCSAqIHByZXZlbnRlZCBhcyBsb25nIGFzIGEgcmFuZ2UgZXhpc3RzLgotCSAqLwotCVdBUk5f T04oIWxpc3RfZW1wdHlfY2FyZWZ1bCgmaG1tLT5yYW5nZXMpKTsKLQotCWRvd25fcmVhZCgmaG1t LT5taXJyb3JzX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtaXJyb3IsICZobW0tPm1pcnJv cnMsIGxpc3QpIHsKLQkJLyoKLQkJICogTm90ZTogVGhlIGRyaXZlciBpcyBub3QgYWxsb3dlZCB0 byB0cmlnZ2VyCi0JCSAqIGhtbV9taXJyb3JfdW5yZWdpc3RlcigpIGZyb20gdGhpcyB0aHJlYWQu Ci0JCSAqLwotCQlpZiAobWlycm9yLT5vcHMtPnJlbGVhc2UpCi0JCQltaXJyb3ItPm9wcy0+cmVs ZWFzZShtaXJyb3IpOwotCX0KLQl1cF9yZWFkKCZobW0tPm1pcnJvcnNfc2VtKTsKLX0KLQotc3Rh dGljIHZvaWQgbm90aWZpZXJzX2RlY3JlbWVudChzdHJ1Y3QgaG1tICpobW0pCi17Ci0JdW5zaWdu ZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBm bGFncyk7Ci0JaG1tLT5ub3RpZmllcnMtLTsKLQlpZiAoIWhtbS0+bm90aWZpZXJzKSB7Ci0JCXN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkocmFuZ2UsICZo bW0tPnJhbmdlcywgbGlzdCkgewotCQkJaWYgKHJhbmdlLT52YWxpZCkKLQkJCQljb250aW51ZTsK LQkJCXJhbmdlLT52YWxpZCA9IHRydWU7Ci0JCX0KLQkJd2FrZV91cF9hbGwoJmhtbS0+d3EpOwot CX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci19 Ci0KLXN0YXRpYyBpbnQgaG1tX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3Rp ZmllciAqbW4sCi0JCQljb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpucmFuZ2UpCi17 Ci0Jc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90 aWZpZXIpOwotCXN0cnVjdCBobW1fbWlycm9yICptaXJyb3I7Ci0Jc3RydWN0IGhtbV9yYW5nZSAq cmFuZ2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9j a19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci0JaG1tLT5ub3RpZmllcnMrKzsK LQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhbmdlLCAmaG1tLT5yYW5nZXMsIGxpc3QpIHsKLQkJaWYg KG5yYW5nZS0+ZW5kIDwgcmFuZ2UtPnN0YXJ0IHx8IG5yYW5nZS0+c3RhcnQgPj0gcmFuZ2UtPmVu ZCkKLQkJCWNvbnRpbnVlOwotCi0JCXJhbmdlLT52YWxpZCA9IGZhbHNlOwotCX0KLQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci0KLQlpZiAobW11X25v dGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShucmFuZ2UpKQotCQlkb3duX3JlYWQoJmhtbS0+bWlycm9y c19zZW0pOwotCWVsc2UgaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmaG1tLT5taXJyb3JzX3NlbSkp IHsKLQkJcmV0ID0gLUVBR0FJTjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9l bnRyeShtaXJyb3IsICZobW0tPm1pcnJvcnMsIGxpc3QpIHsKLQkJaW50IHJjOwotCi0JCXJjID0g bWlycm9yLT5vcHMtPnN5bmNfY3B1X2RldmljZV9wYWdldGFibGVzKG1pcnJvciwgbnJhbmdlKTsK LQkJaWYgKHJjKSB7Ci0JCQlpZiAoV0FSTl9PTihtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxl KG5yYW5nZSkgfHwKLQkJCSAgICByYyAhPSAtRUFHQUlOKSkKLQkJCQljb250aW51ZTsKLQkJCXJl dCA9IC1FQUdBSU47Ci0JCQlicmVhazsKLQkJfQotCX0KLQl1cF9yZWFkKCZobW0tPm1pcnJvcnNf c2VtKTsKLQotb3V0OgotCWlmIChyZXQpCi0JCW5vdGlmaWVyc19kZWNyZW1lbnQoaG1tKTsKLQly ZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBobW1faW52YWxpZGF0ZV9yYW5nZV9lbmQoc3Ry dWN0IG1tdV9ub3RpZmllciAqbW4sCi0JCQljb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3Jhbmdl ICpucmFuZ2UpCi17Ci0Jc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3Qg aG1tLCBtbXVfbm90aWZpZXIpOwotCi0Jbm90aWZpZXJzX2RlY3JlbWVudChobW0pOwotfQotCi1z dGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMgaG1tX21tdV9ub3RpZmllcl9vcHMg PSB7Ci0JLnJlbGVhc2UJCT0gaG1tX3JlbGVhc2UsCi0JLmludmFsaWRhdGVfcmFuZ2Vfc3RhcnQJ PSBobW1faW52YWxpZGF0ZV9yYW5nZV9zdGFydCwKLQkuaW52YWxpZGF0ZV9yYW5nZV9lbmQJPSBo bW1faW52YWxpZGF0ZV9yYW5nZV9lbmQsCi0JLmFsbG9jX25vdGlmaWVyCQk9IGhtbV9hbGxvY19u b3RpZmllciwKLQkuZnJlZV9ub3RpZmllcgkJPSBobW1fZnJlZV9ub3RpZmllciwKLX07Ci0KLS8q Ci0gKiBobW1fbWlycm9yX3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIG1pcnJvciBhZ2FpbnN0IGFu IG1tCi0gKgotICogQG1pcnJvcjogbmV3IG1pcnJvciBzdHJ1Y3QgdG8gcmVnaXN0ZXIKLSAqIEBt bTogbW0gdG8gcmVnaXN0ZXIgYWdhaW5zdAotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9N RU0gaWYgbm8gbWVtb3J5LCAtRUlOVkFMIGlmIGludmFsaWQgYXJndW1lbnRzCi0gKgotICogVG8g c3RhcnQgbWlycm9yaW5nIGEgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCB0aGUgZGV2aWNlIGRyaXZl ciBtdXN0IHJlZ2lzdGVyCi0gKiBhbiBITU0gbWlycm9yIHN0cnVjdC4KLSAqCi0gKiBUaGUgY2Fs bGVyIGNhbm5vdCB1bnJlZ2lzdGVyIHRoZSBobW1fbWlycm9yIHdoaWxlIGFueSByYW5nZXMgYXJl Ci0gKiByZWdpc3RlcmVkLgotICoKLSAqIENhbGxlcnMgdXNpbmcgdGhpcyBmdW5jdGlvbiBtdXN0 IHB1dCBhIGNhbGwgdG8gbW11X25vdGlmaWVyX3N5bmNocm9uaXplKCkKLSAqIGluIHRoZWlyIG1v ZHVsZSBleGl0IGZ1bmN0aW9ucy4KLSAqLwotaW50IGhtbV9taXJyb3JfcmVnaXN0ZXIoc3RydWN0 IGhtbV9taXJyb3IgKm1pcnJvciwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IG1t dV9ub3RpZmllciAqbW47Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZtbS0+bW1hcF9z ZW0pOwotCi0JLyogU2FuaXR5IGNoZWNrICovCi0JaWYgKCFtbSB8fCAhbWlycm9yIHx8ICFtaXJy b3ItPm9wcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltbiA9IG1tdV9ub3RpZmllcl9nZXRfbG9j a2VkKCZobW1fbW11X25vdGlmaWVyX29wcywgbW0pOwotCWlmIChJU19FUlIobW4pKQotCQlyZXR1 cm4gUFRSX0VSUihtbik7Ci0JbWlycm9yLT5obW0gPSBjb250YWluZXJfb2YobW4sIHN0cnVjdCBo bW0sIG1tdV9ub3RpZmllcik7Ci0KLQlkb3duX3dyaXRlKCZtaXJyb3ItPmhtbS0+bWlycm9yc19z ZW0pOwotCWxpc3RfYWRkKCZtaXJyb3ItPmxpc3QsICZtaXJyb3ItPmhtbS0+bWlycm9ycyk7Ci0J dXBfd3JpdGUoJm1pcnJvci0+aG1tLT5taXJyb3JzX3NlbSk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVY UE9SVF9TWU1CT0woaG1tX21pcnJvcl9yZWdpc3Rlcik7Ci0KLS8qCi0gKiBobW1fbWlycm9yX3Vu cmVnaXN0ZXIoKSAtIHVucmVnaXN0ZXIgYSBtaXJyb3IKLSAqCi0gKiBAbWlycm9yOiBtaXJyb3Ig c3RydWN0IHRvIHVucmVnaXN0ZXIKLSAqCi0gKiBTdG9wIG1pcnJvcmluZyBhIHByb2Nlc3MgYWRk cmVzcyBzcGFjZSwgYW5kIGNsZWFudXAuCi0gKi8KLXZvaWQgaG1tX21pcnJvcl91bnJlZ2lzdGVy KHN0cnVjdCBobW1fbWlycm9yICptaXJyb3IpCi17Ci0Jc3RydWN0IGhtbSAqaG1tID0gbWlycm9y LT5obW07Ci0KLQlkb3duX3dyaXRlKCZobW0tPm1pcnJvcnNfc2VtKTsKLQlsaXN0X2RlbCgmbWly cm9yLT5saXN0KTsKLQl1cF93cml0ZSgmaG1tLT5taXJyb3JzX3NlbSk7Ci0JbW11X25vdGlmaWVy X3B1dCgmaG1tLT5tbXVfbm90aWZpZXIpOwotfQotRVhQT1JUX1NZTUJPTChobW1fbWlycm9yX3Vu cmVnaXN0ZXIpOwotCiBzdHJ1Y3QgaG1tX3ZtYV93YWxrIHsKIAlzdHJ1Y3QgaG1tX3JhbmdlCSpy YW5nZTsKIAlzdHJ1Y3QgZGV2X3BhZ2VtYXAJKnBnbWFwOwpAQCAtNzc5LDg3ICs1OTIsNiBAQCBz dGF0aWMgdm9pZCBobW1fcGZuc19jbGVhcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwKIAkJKnBm bnMgPSByYW5nZS0+dmFsdWVzW0hNTV9QRk5fTk9ORV07CiB9CiAKLS8qCi0gKiBobW1fcmFuZ2Vf cmVnaXN0ZXIoKSAtIHN0YXJ0IHRyYWNraW5nIGNoYW5nZSB0byBDUFUgcGFnZSB0YWJsZSBvdmVy IGEgcmFuZ2UKLSAqIEByYW5nZTogcmFuZ2UKLSAqIEBtbTogdGhlIG1tIHN0cnVjdCBmb3IgdGhl IHJhbmdlIG9mIHZpcnR1YWwgYWRkcmVzcwotICoKLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAt RUZBVUxUIGlmIHRoZSBhZGRyZXNzIHNwYWNlIGlzIG5vIGxvbmdlciB2YWxpZAotICoKLSAqIFRy YWNrIHVwZGF0ZXMgdG8gdGhlIENQVSBwYWdlIHRhYmxlIHNlZSBpbmNsdWRlL2xpbnV4L2htbS5o Ci0gKi8KLWludCBobW1fcmFuZ2VfcmVnaXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHN0 cnVjdCBobW1fbWlycm9yICptaXJyb3IpCi17Ci0Jc3RydWN0IGhtbSAqaG1tID0gbWlycm9yLT5o bW07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXJhbmdlLT52YWxpZCA9IGZhbHNlOwotCXJh bmdlLT5obW0gPSBOVUxMOwotCi0JaWYgKChyYW5nZS0+c3RhcnQgJiAoUEFHRV9TSVpFIC0gMSkp IHx8IChyYW5nZS0+ZW5kICYgKFBBR0VfU0laRSAtIDEpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J aWYgKHJhbmdlLT5zdGFydCA+PSByYW5nZS0+ZW5kKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8q IFByZXZlbnQgaG1tX3JlbGVhc2UoKSBmcm9tIHJ1bm5pbmcgd2hpbGUgdGhlIHJhbmdlIGlzIHZh bGlkICovCi0JaWYgKCFtbWdldF9ub3RfemVybyhobW0tPm1tdV9ub3RpZmllci5tbSkpCi0JCXJl dHVybiAtRUZBVUxUOwotCi0JLyogSW5pdGlhbGl6ZSByYW5nZSB0byB0cmFjayBDUFUgcGFnZSB0 YWJsZSB1cGRhdGVzLiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBm bGFncyk7Ci0KLQlyYW5nZS0+aG1tID0gaG1tOwotCWxpc3RfYWRkKCZyYW5nZS0+bGlzdCwgJmht bS0+cmFuZ2VzKTsKLQotCS8qCi0JICogSWYgdGhlcmUgYXJlIGFueSBjb25jdXJyZW50IG5vdGlm aWVycyB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZW0gZm9yCi0JICogdGhlIHJhbmdlIHRvIGJlIHZh bGlkIChzZWUgaG1tX3JhbmdlX3dhaXRfdW50aWxfdmFsaWQoKSkuCi0JICovCi0JaWYgKCFobW0t Pm5vdGlmaWVycykKLQkJcmFuZ2UtPnZhbGlkID0gdHJ1ZTsKLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9T WU1CT0woaG1tX3JhbmdlX3JlZ2lzdGVyKTsKLQotLyoKLSAqIGhtbV9yYW5nZV91bnJlZ2lzdGVy KCkgLSBzdG9wIHRyYWNraW5nIGNoYW5nZSB0byBDUFUgcGFnZSB0YWJsZSBvdmVyIGEgcmFuZ2UK LSAqIEByYW5nZTogcmFuZ2UKLSAqCi0gKiBSYW5nZSBzdHJ1Y3QgaXMgdXNlZCB0byB0cmFjayB1 cGRhdGVzIHRvIHRoZSBDUFUgcGFnZSB0YWJsZSBhZnRlciBhIGNhbGwgdG8KLSAqIGhtbV9yYW5n ZV9yZWdpc3RlcigpLiBTZWUgaW5jbHVkZS9saW51eC9obW0uaCBmb3IgaG93IHRvIHVzZSBpdC4K LSAqLwotdm9pZCBobW1fcmFuZ2VfdW5yZWdpc3RlcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSkK LXsKLQlzdHJ1Y3QgaG1tICpobW0gPSByYW5nZS0+aG1tOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaG1tLT5yYW5nZXNfbG9jaywgZmxhZ3MpOwotCWxpc3Rf ZGVsX2luaXQoJnJhbmdlLT5saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZobW0tPnJh bmdlc19sb2NrLCBmbGFncyk7Ci0KLQkvKiBEcm9wIHJlZmVyZW5jZSB0YWtlbiBieSBobW1fcmFu Z2VfcmVnaXN0ZXIoKSAqLwotCW1tcHV0KGhtbS0+bW11X25vdGlmaWVyLm1tKTsKLQotCS8qCi0J ICogVGhlIHJhbmdlIGlzIG5vdyBpbnZhbGlkIGFuZCB0aGUgcmVmIG9uIHRoZSBobW0gaXMgZHJv cHBlZCwgc28KLQkgKiBwb2lzb24gdGhlIHBvaW50ZXIuICBMZWF2ZSBvdGhlciBmaWVsZHMgaW4g cGxhY2UsIGZvciB0aGUgY2FsbGVyJ3MKLQkgKiB1c2UuCi0JICovCi0JcmFuZ2UtPnZhbGlkID0g ZmFsc2U7Ci0JbWVtc2V0KCZyYW5nZS0+aG1tLCBQT0lTT05fSU5VU0UsIHNpemVvZihyYW5nZS0+ aG1tKSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV91bnJlZ2lzdGVyKTsKLQotc3RhdGlj IGJvb2wgbmVlZHNfcmV0cnkoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCi17Ci0JaWYgKHJhbmdl LT5ub3RpZmllcikKLQkJcmV0dXJuIG1tdV9yYW5nZV9jaGVja19yZXRyeShyYW5nZS0+bm90aWZp ZXIsCi0JCQkJCSAgICAgcmFuZ2UtPm5vdGlmaWVyX3NlcSk7Ci0JcmV0dXJuICFyYW5nZS0+dmFs aWQ7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgaG1tX3dhbGtfb3BzID0g ewogCS5wdWRfZW50cnkJPSBobW1fdm1hX3dhbGtfcHVkLAogCS5wbWRfZW50cnkJPSBobW1fdm1h X3dhbGtfcG1kLApAQCAtOTAwLDIwICs2MzIsMTUgQEAgbG9uZyBobW1fcmFuZ2VfZmF1bHQoc3Ry dWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKIAljb25zdCB1bnNpZ25l ZCBsb25nIGRldmljZV92bWEgPSBWTV9JTyB8IFZNX1BGTk1BUCB8IFZNX01JWEVETUFQOwogCXVu c2lnbmVkIGxvbmcgc3RhcnQgPSByYW5nZS0+c3RhcnQsIGVuZDsKIAlzdHJ1Y3QgaG1tX3ZtYV93 YWxrIGhtbV92bWFfd2FsazsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgbW1fc3Ry dWN0ICptbSA9IHJhbmdlLT5ub3RpZmllci0+bW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWE7CiAJaW50IHJldDsKIAotCWlmIChyYW5nZS0+bm90aWZpZXIpCi0JCW1tID0gcmFuZ2UtPm5v dGlmaWVyLT5tbTsKLQllbHNlCi0JCW1tID0gcmFuZ2UtPmhtbS0+bW11X25vdGlmaWVyLm1tOwot CiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbW0tPm1tYXBfc2VtKTsKIAogCWRvIHsKIAkJLyogSWYg cmFuZ2UgaXMgbm8gbG9uZ2VyIHZhbGlkIGZvcmNlIHJldHJ5LiAqLwotCQlpZiAobmVlZHNfcmV0 cnkocmFuZ2UpKQorCQlpZiAobW11X3JhbmdlX2NoZWNrX3JldHJ5KHJhbmdlLT5ub3RpZmllciwg cmFuZ2UtPm5vdGlmaWVyX3NlcSkpCiAJCQlyZXR1cm4gLUVCVVNZOwogCiAJCXZtYSA9IGZpbmRf dm1hKG1tLCBzdGFydCk7CkBAIC05NDYsNyArNjczLDkgQEAgbG9uZyBobW1fcmFuZ2VfZmF1bHQo c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKIAkJCXN0YXJ0ID0g aG1tX3ZtYV93YWxrLmxhc3Q7CiAKIAkJCS8qIEtlZXAgdHJ5aW5nIHdoaWxlIHRoZSByYW5nZSBp cyB2YWxpZC4gKi8KLQkJfSB3aGlsZSAocmV0ID09IC1FQlVTWSAmJiAhbmVlZHNfcmV0cnkocmFu Z2UpKTsKKwkJfSB3aGlsZSAocmV0ID09IC1FQlVTWSAmJgorCQkJICFtbXVfcmFuZ2VfY2hlY2tf cmV0cnkocmFuZ2UtPm5vdGlmaWVyLAorCQkJCQkJcmFuZ2UtPm5vdGlmaWVyX3NlcSkpOwogCiAJ CWlmIChyZXQpIHsKIAkJCXVuc2lnbmVkIGxvbmcgaTsKQEAgLTEwMDQsNyArNzMzLDggQEAgbG9u ZyBobW1fcmFuZ2VfZG1hX21hcChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgc3RydWN0IGRldmlj ZSAqZGV2aWNlLAogCQkJY29udGludWU7CiAKIAkJLyogQ2hlY2sgaWYgcmFuZ2UgaXMgYmVpbmcg aW52YWxpZGF0ZWQgKi8KLQkJaWYgKG5lZWRzX3JldHJ5KHJhbmdlKSkgeworCQlpZiAobW11X3Jh bmdlX2NoZWNrX3JldHJ5KHJhbmdlLT5ub3RpZmllciwKKwkJCQkJICByYW5nZS0+bm90aWZpZXJf c2VxKSkgewogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byB1bm1hcDsKIAkJfQotLSAKMi4yMy4w CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA== 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=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=unavailable 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 78B73CA9EC0 for ; Mon, 28 Oct 2019 21:08:08 +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 5606C218AC for ; Mon, 28 Oct 2019 21:08:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5606C218AC Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ziepe.ca 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 A09746EA53; Mon, 28 Oct 2019 21:07:59 +0000 (UTC) Received: from mail-qk1-x742.google.com (mail-qk1-x742.google.com [IPv6:2607:f8b0:4864:20::742]) by gabe.freedesktop.org (Postfix) with ESMTPS id A2EB789CBC for ; Mon, 28 Oct 2019 20:10:52 +0000 (UTC) Received: by mail-qk1-x742.google.com with SMTP id a194so9752612qkg.10 for ; Mon, 28 Oct 2019 13:10:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oam7ohQj1kc8X7oZ0yNH5Qsiwr3vqfv4zRUy2hYn6VU=; b=nwGSRXWySe+lhsiB/q0Nm3AlGNEAkTls/YeZZ8sdpvKIRcLp68ExFNQzcqo4YNnTly xZKXWGR2Bxlb7eJs/o7ddUJF2S/V+o4XaNFuuCQRPU1gPAtmTzmZpsty40gyWDfMmAwT 2Xb3WJMJnnjmrQ1OCargEZ5STK+Yc3TYb8Dp2NMiG9gbAzgvrf2iSmZNC8beb781bVxh okh71El+bj2HOo4tbKvuhlkZ4f8xTYD3domIaer0kyC6fGmnbIxK7M9L/G99jSWePpNY J/Te0dT9TN6XSunY/tTAv0MB/q6ZISnY2d/M+7wwu0H+4DpP4qZheQmX/UqocenKgwJa K6sQ== X-Gm-Message-State: APjAAAUmPMifvL8bhDqrZOyHRbAaTsnEH0cuxs1BqLMrSLGZf4KDOhuT Cj6XJCugBziiD6dpX6E/wiZfkQ== X-Google-Smtp-Source: APXvYqzFOk0mWTm9zmmEUnrvaGyK7qwShQOI+2XOcxc/OnuoCxvgWFx41ArWQecOobsikGRR1SYw3A== X-Received: by 2002:a37:ac0b:: with SMTP id e11mr9437740qkm.454.1572293451378; Mon, 28 Oct 2019 13:10:51 -0700 (PDT) Received: from ziepe.ca (hlfxns017vw-142-162-113-180.dhcp-dynamic.fibreop.ns.bellaliant.net. [142.162.113.180]) by smtp.gmail.com with ESMTPSA id d10sm1589264qkk.99.2019.10.28.13.10.44 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 28 Oct 2019 13:10:48 -0700 (PDT) Received: from jgg by mlx.ziepe.ca with local (Exim 4.90_1) (envelope-from ) id 1iPBLf-0001hR-OF; Mon, 28 Oct 2019 17:10:43 -0300 From: Jason Gunthorpe To: linux-mm@kvack.org, Jerome Glisse , Ralph Campbell , John Hubbard , Felix.Kuehling@amd.com Subject: [PATCH v2 15/15] mm/hmm: remove hmm_mirror and related Date: Mon, 28 Oct 2019 17:10:32 -0300 Message-Id: <20191028201032.6352-16-jgg@ziepe.ca> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191028201032.6352-1-jgg@ziepe.ca> References: <20191028201032.6352-1-jgg@ziepe.ca> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 28 Oct 2019 21:07:58 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ziepe.ca; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oam7ohQj1kc8X7oZ0yNH5Qsiwr3vqfv4zRUy2hYn6VU=; b=N7d4nLhTvUMAd7m6ziC7Fnj8Fj2CROvNmQEOjInKL4+Co2BowIq9/67UGOKMH9lu3l v1lJgY60Lvap2Ol+aPfOvbu+ct1M49IJCP9kjFJybc7MSm13Yz19vQFIxnvZauHYQnAq Tyed+DS0BV73Lk3U+Muf7IdAsRNmnvS9FYFHJIPWiXHxqb+A8SR5sOQbGgk6pbNcNCbe ZJlgb5V8MwBEuEU6SiQQOf3ZhxPQw5OpEsa0GUzFj1giRGyCsV+YkmtWVYDal1QylK/X j/hvQvUBbitvFj7W8XAgGK6FWzI9bi2GEb/fFY0CTm8OtYBVd8K8YIP27/9hLoeA7SOy TP1A== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Juergen Gross , Mike Marciniszyn , Stefano Stabellini , Oleksandr Andrushchenko , linux-rdma@vger.kernel.org, nouveau@lists.freedesktop.org, Dennis Dalessandro , amd-gfx@lists.freedesktop.org, Christoph Hellwig , Jason Gunthorpe , dri-devel@lists.freedesktop.org, Alex Deucher , xen-devel@lists.xenproject.org, Boris Ostrovsky , Petr Cvek , =?UTF-8?q?Christian=20K=C3=B6nig?= , Ben Skeggs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191028201032.N1LkgF-Y3Q_H9N3Xm7mSfiui1iI9UMK4vblS_a_I6aA@z> RnJvbTogSmFzb24gR3VudGhvcnBlIDxqZ2dAbWVsbGFub3guY29tPgoKVGhlIG9ubHkgdHdvIHVz ZXJzIG9mIHRoaXMgYXJlIG5vdyBjb252ZXJ0ZWQgdG8gdXNlIG1tdV9yYW5nZV9ub3RpZmllciwK ZGVsZXRlIGFsbCB0aGUgY29kZSBhbmQgdXBkYXRlIGhtbS5yc3QuCgpSZXZpZXdlZC1ieTogSsOp csO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+ClNpZ25lZC1vZmYtYnk6IEphc29uIEd1 bnRob3JwZSA8amdnQG1lbGxhbm94LmNvbT4KLS0tCiBEb2N1bWVudGF0aW9uL3ZtL2htbS5yc3Qg fCAxMDUgKysrKy0tLS0tLS0tLS0tCiBpbmNsdWRlL2xpbnV4L2htbS5oICAgICAgfCAxODMgKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbW0vS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAxIC0K IG1tL2htbS5jICAgICAgICAgICAgICAgICB8IDI4NCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgNTQwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vaG1tLnJzdCBiL0RvY3Vt ZW50YXRpb24vdm0vaG1tLnJzdAppbmRleCAwYTU5NjBiZWNjZjc2ZC4uYTI0NzY0MzAzNWM0ZTIg MTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vaG1tLnJzdAorKysgYi9Eb2N1bWVudGF0aW9u L3ZtL2htbS5yc3QKQEAgLTE0Nyw0OSArMTQ3LDE2IEBAIEFkZHJlc3Mgc3BhY2UgbWlycm9yaW5n IGltcGxlbWVudGF0aW9uIGFuZCBBUEkKIEFkZHJlc3Mgc3BhY2UgbWlycm9yaW5nJ3MgbWFpbiBv YmplY3RpdmUgaXMgdG8gYWxsb3cgZHVwbGljYXRpb24gb2YgYSByYW5nZSBvZgogQ1BVIHBhZ2Ug dGFibGUgaW50byBhIGRldmljZSBwYWdlIHRhYmxlOyBITU0gaGVscHMga2VlcCBib3RoIHN5bmNo cm9uaXplZC4gQQogZGV2aWNlIGRyaXZlciB0aGF0IHdhbnRzIHRvIG1pcnJvciBhIHByb2Nlc3Mg YWRkcmVzcyBzcGFjZSBtdXN0IHN0YXJ0IHdpdGggdGhlCi1yZWdpc3RyYXRpb24gb2YgYW4gaG1t X21pcnJvciBzdHJ1Y3Q6OgotCi0gaW50IGhtbV9taXJyb3JfcmVnaXN0ZXIoc3RydWN0IGhtbV9t aXJyb3IgKm1pcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0 ICptbSk7Ci0KLVRoZSBtaXJyb3Igc3RydWN0IGhhcyBhIHNldCBvZiBjYWxsYmFja3MgdGhhdCBh cmUgdXNlZAotdG8gcHJvcGFnYXRlIENQVSBwYWdlIHRhYmxlczo6Ci0KLSBzdHJ1Y3QgaG1tX21p cnJvcl9vcHMgewotICAgICAvKiByZWxlYXNlKCkgLSByZWxlYXNlIGhtbV9taXJyb3IKLSAgICAg ICoKLSAgICAgICogQG1pcnJvcjogcG9pbnRlciB0byBzdHJ1Y3QgaG1tX21pcnJvcgotICAgICAg KgotICAgICAgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBtbV9zdHJ1Y3QgaXMgYmVpbmcgcmVs ZWFzZWQuICBUaGUgY2FsbGJhY2sKLSAgICAgICogbXVzdCBlbnN1cmUgdGhhdCBhbGwgYWNjZXNz IHRvIGFueSBwYWdlcyBvYnRhaW5lZCBmcm9tIHRoaXMgbWlycm9yCi0gICAgICAqIGlzIGhhbHRl ZCBiZWZvcmUgdGhlIGNhbGxiYWNrIHJldHVybnMuIEFsbCBmdXR1cmUgYWNjZXNzIHNob3VsZAot ICAgICAgKiBmYXVsdC4KLSAgICAgICovCi0gICAgIHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgaG1t X21pcnJvciAqbWlycm9yKTsKLQotICAgICAvKiBzeW5jX2NwdV9kZXZpY2VfcGFnZXRhYmxlcygp IC0gc3luY2hyb25pemUgcGFnZSB0YWJsZXMKLSAgICAgICoKLSAgICAgICogQG1pcnJvcjogcG9p bnRlciB0byBzdHJ1Y3QgaG1tX21pcnJvcgotICAgICAgKiBAdXBkYXRlOiB1cGRhdGUgaW5mb3Jt YXRpb24gKHNlZSBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlKQotICAgICAgKiBSZXR1cm46IC1F QUdBSU4gaWYgdXBkYXRlLmJsb2NrYWJsZSBmYWxzZSBhbmQgY2FsbGJhY2sgbmVlZCB0bwotICAg ICAgKiAgICAgICAgIGJsb2NrLCAwIG90aGVyd2lzZS4KLSAgICAgICoKLSAgICAgICogVGhpcyBj YWxsYmFjayB1bHRpbWF0ZWx5IG9yaWdpbmF0ZXMgZnJvbSBtbXVfbm90aWZpZXJzIHdoZW4gdGhl IENQVQotICAgICAgKiBwYWdlIHRhYmxlIGlzIHVwZGF0ZWQuIFRoZSBkZXZpY2UgZHJpdmVyIG11 c3QgdXBkYXRlIGl0cyBwYWdlIHRhYmxlCi0gICAgICAqIGluIHJlc3BvbnNlIHRvIHRoaXMgY2Fs bGJhY2suIFRoZSB1cGRhdGUgYXJndW1lbnQgdGVsbHMgd2hhdCBhY3Rpb24KLSAgICAgICogdG8g cGVyZm9ybS4KLSAgICAgICoKLSAgICAgICogVGhlIGRldmljZSBkcml2ZXIgbXVzdCBub3QgcmV0 dXJuIGZyb20gdGhpcyBjYWxsYmFjayB1bnRpbCB0aGUgZGV2aWNlCi0gICAgICAqIHBhZ2UgdGFi bGVzIGFyZSBjb21wbGV0ZWx5IHVwZGF0ZWQgKFRMQnMgZmx1c2hlZCwgZXRjKTsgdGhpcyBpcyBh Ci0gICAgICAqIHN5bmNocm9ub3VzIGNhbGwuCi0gICAgICAqLwotICAgICBpbnQgKCpzeW5jX2Nw dV9kZXZpY2VfcGFnZXRhYmxlcykoc3RydWN0IGhtbV9taXJyb3IgKm1pcnJvciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBobW1fdXBkYXRlICp1 cGRhdGUpOwotIH07Ci0KLVRoZSBkZXZpY2UgZHJpdmVyIG11c3QgcGVyZm9ybSB0aGUgdXBkYXRl IGFjdGlvbiB0byB0aGUgcmFuZ2UgKG1hcmsgcmFuZ2UKLXJlYWQgb25seSwgb3IgZnVsbHkgdW5t YXAsIGV0Yy4pLiBUaGUgZGV2aWNlIG11c3QgY29tcGxldGUgdGhlIHVwZGF0ZSBiZWZvcmUKLXRo ZSBkcml2ZXIgY2FsbGJhY2sgcmV0dXJucy4KK3JlZ2lzdHJhdGlvbiBvZiBhIG1tdV9yYW5nZV9u b3RpZmllcjo6CisKKyBtcm4tPm9wcyA9ICZkcml2ZXJfb3BzOworIGludCBtbXVfcmFuZ2Vfbm90 aWZpZXJfaW5zZXJ0KHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybiwKKwkJCSAgICAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAorCQkJICAgICAgc3RydWN0 IG1tX3N0cnVjdCAqbW0pOworCitEdXJpbmcgdGhlIGRyaXZlcl9vcHMtPmludmFsaWRhdGUoKSBj YWxsYmFjayB0aGUgZGV2aWNlIGRyaXZlciBtdXN0IHBlcmZvcm0KK3RoZSB1cGRhdGUgYWN0aW9u IHRvIHRoZSByYW5nZSAobWFyayByYW5nZSByZWFkIG9ubHksIG9yIGZ1bGx5IHVubWFwLAorZXRj LikuIFRoZSBkZXZpY2UgbXVzdCBjb21wbGV0ZSB0aGUgdXBkYXRlIGJlZm9yZSB0aGUgZHJpdmVy IGNhbGxiYWNrIHJldHVybnMuCiAKIFdoZW4gdGhlIGRldmljZSBkcml2ZXIgd2FudHMgdG8gcG9w dWxhdGUgYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcywgaXQgY2FuCiB1c2U6OgpAQCAtMjE2 LDcwICsxODMsNDYgQEAgVGhlIHVzYWdlIHBhdHRlcm4gaXM6OgogICAgICAgc3RydWN0IGhtbV9y YW5nZSByYW5nZTsKICAgICAgIC4uLgogCisgICAgICByYW5nZS5ub3RpZmllciA9ICZtcm47CiAg ICAgICByYW5nZS5zdGFydCA9IC4uLjsKICAgICAgIHJhbmdlLmVuZCA9IC4uLjsKICAgICAgIHJh bmdlLnBmbnMgPSAuLi47CiAgICAgICByYW5nZS5mbGFncyA9IC4uLjsKICAgICAgIHJhbmdlLnZh bHVlcyA9IC4uLjsKICAgICAgIHJhbmdlLnBmbl9zaGlmdCA9IC4uLjsKLSAgICAgIGhtbV9yYW5n ZV9yZWdpc3RlcigmcmFuZ2UsIG1pcnJvcik7CiAKLSAgICAgIC8qCi0gICAgICAgKiBKdXN0IHdh aXQgZm9yIHJhbmdlIHRvIGJlIHZhbGlkLCBzYWZlIHRvIGlnbm9yZSByZXR1cm4gdmFsdWUgYXMg d2UKLSAgICAgICAqIHdpbGwgdXNlIHRoZSByZXR1cm4gdmFsdWUgb2YgaG1tX3JhbmdlX2ZhdWx0 KCkgYmVsb3cgdW5kZXIgdGhlCi0gICAgICAgKiBtbWFwX3NlbSB0byBhc2NlcnRhaW4gdGhlIHZh bGlkaXR5IG9mIHRoZSByYW5nZS4KLSAgICAgICAqLwotICAgICAgaG1tX3JhbmdlX3dhaXRfdW50 aWxfdmFsaWQoJnJhbmdlLCBUSU1FT1VUX0lOX01TRUMpOworICAgICAgaWYgKCFtbWdldF9ub3Rf emVybyhtcm4tPm5vdGlmaWVyLm1tKSkKKyAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKIAogIGFn YWluOgorICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X3JhbmdlX3JlYWRfYmVnaW4oJm1y bik7CiAgICAgICBkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAgICAgICByZXQgPSBobW1fcmFu Z2VfZmF1bHQoJnJhbmdlLCBITU1fUkFOR0VfU05BUFNIT1QpOwogICAgICAgaWYgKHJldCkgewog ICAgICAgICAgIHVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0gICAgICAgICAgaWYgKHJldCA9PSAt RUJVU1kpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBObyBuZWVkIHRvIGNoZWNr IGhtbV9yYW5nZV93YWl0X3VudGlsX3ZhbGlkKCkgcmV0dXJuIHZhbHVlCi0gICAgICAgICAgICAg KiBvbiByZXRyeSB3ZSB3aWxsIGdldCBwcm9wZXIgZXJyb3Igd2l0aCBobW1fcmFuZ2VfZmF1bHQo KQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBobW1fcmFuZ2Vfd2FpdF91bnRpbF92YWxp ZCgmcmFuZ2UsIFRJTUVPVVRfSU5fTVNFQyk7Ci0gICAgICAgICAgICBnb3RvIGFnYWluOwotICAg ICAgICAgIH0KLSAgICAgICAgICBobW1fcmFuZ2VfdW5yZWdpc3RlcigmcmFuZ2UpOworICAgICAg ICAgIGlmIChyZXQgPT0gLUVCVVNZKQorICAgICAgICAgICAgICAgICBnb3RvIGFnYWluOwogICAg ICAgICAgIHJldHVybiByZXQ7CiAgICAgICB9CisgICAgICB1cF9yZWFkKCZtbS0+bW1hcF9zZW0p OworCiAgICAgICB0YWtlX2xvY2soZHJpdmVyLT51cGRhdGUpOwotICAgICAgaWYgKCFobW1fcmFu Z2VfdmFsaWQoJnJhbmdlKSkgeworICAgICAgaWYgKG1tdV9yYW5nZV9yZWFkX3JldHJ5KCZtcm4s IHJhbmdlLm5vdGlmaWVyX3NlcSkgewogICAgICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItPnVw ZGF0ZSk7Ci0gICAgICAgICAgdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKICAgICAgICAgICBnb3Rv IGFnYWluOwogICAgICAgfQogCi0gICAgICAvLyBVc2UgcGZucyBhcnJheSBjb250ZW50IHRvIHVw ZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZQorICAgICAgLyogVXNlIHBmbnMgYXJyYXkgY29udGVudCB0 byB1cGRhdGUgZGV2aWNlIHBhZ2UgdGFibGUsCisgICAgICAgKiB1bmRlciB0aGUgdXBkYXRlIGxv Y2sgKi8KIAotICAgICAgaG1tX3JhbmdlX3VucmVnaXN0ZXIoJnJhbmdlKTsKICAgICAgIHJlbGVh c2VfbG9jayhkcml2ZXItPnVwZGF0ZSk7Ci0gICAgICB1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwog ICAgICAgcmV0dXJuIDA7CiAgfQogCiBUaGUgZHJpdmVyLT51cGRhdGUgbG9jayBpcyB0aGUgc2Ft ZSBsb2NrIHRoYXQgdGhlIGRyaXZlciB0YWtlcyBpbnNpZGUgaXRzCi1zeW5jX2NwdV9kZXZpY2Vf cGFnZXRhYmxlcygpIGNhbGxiYWNrLiBUaGF0IGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxs aW5nCi1obW1fcmFuZ2VfdmFsaWQoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVu dCBDUFUgcGFnZSB0YWJsZSB1cGRhdGUuCi0KLUhNTSBpbXBsZW1lbnRzIGFsbCB0aGlzIG9uIHRv cCBvZiB0aGUgbW11X25vdGlmaWVyIEFQSSBiZWNhdXNlIHdlIHdhbnRlZCBhCi1zaW1wbGVyIEFQ SSBhbmQgYWxzbyB0byBiZSBhYmxlIHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucyBsYXR0ZXIgb24g bGlrZSBkb2luZwotY29uY3VycmVudCBkZXZpY2UgdXBkYXRlcyBpbiBtdWx0aS1kZXZpY2VzIHNj ZW5hcmlvLgotCi1ITU0gYWxzbyBzZXJ2ZXMgYXMgYW4gaW1wZWRhbmNlIG1pc21hdGNoIGJldHdl ZW4gaG93IENQVSBwYWdlIHRhYmxlIHVwZGF0ZXMKLWFyZSBkb25lIChieSBDUFUgd3JpdGUgdG8g dGhlIHBhZ2UgdGFibGUgYW5kIFRMQiBmbHVzaGVzKSBhbmQgaG93IGRldmljZXMKLXVwZGF0ZSB0 aGVpciBvd24gcGFnZSB0YWJsZS4gRGV2aWNlIHVwZGF0ZXMgYXJlIGEgbXVsdGktc3RlcCBwcm9j ZXNzLiBGaXJzdCwKLWFwcHJvcHJpYXRlIGNvbW1hbmRzIGFyZSB3cml0dGVuIHRvIGEgYnVmZmVy LCB0aGVuIHRoaXMgYnVmZmVyIGlzIHNjaGVkdWxlZCBmb3IKLWV4ZWN1dGlvbiBvbiB0aGUgZGV2 aWNlLiBJdCBpcyBvbmx5IG9uY2UgdGhlIGRldmljZSBoYXMgZXhlY3V0ZWQgY29tbWFuZHMgaW4K LXRoZSBidWZmZXIgdGhhdCB0aGUgdXBkYXRlIGlzIGRvbmUuIENyZWF0aW5nIGFuZCBzY2hlZHVs aW5nIHRoZSB1cGRhdGUgY29tbWFuZAotYnVmZmVyIGNhbiBoYXBwZW4gY29uY3VycmVudGx5IGZv ciBtdWx0aXBsZSBkZXZpY2VzLiBXYWl0aW5nIGZvciBlYWNoIGRldmljZSB0bwotcmVwb3J0IGNv bW1hbmRzIGFzIGV4ZWN1dGVkIGlzIHNlcmlhbGl6ZWQgKHRoZXJlIGlzIG5vIHBvaW50IGluIGRv aW5nIHRoaXMKLWNvbmN1cnJlbnRseSkuCi0KK2ludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBs b2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZworbW11X3JhbmdlX3JlYWRfcmV0cnkoKSB0 byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZQordXBkYXRl LgogCiBMZXZlcmFnZSBkZWZhdWx0X2ZsYWdzIGFuZCBwZm5fZmxhZ3NfbWFzawogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlu dXgvaG1tLmggYi9pbmNsdWRlL2xpbnV4L2htbS5oCmluZGV4IDI2NjZlYjA4YTQwNjE1Li5iNGFm NTE3MzUyMzIzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaAorKysgYi9pbmNsdWRl L2xpbnV4L2htbS5oCkBAIC02OCwyOSArNjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRp b24uaD4KICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4KIAotCi0vKgotICogc3RydWN0 IGhtbSAtIEhNTSBwZXIgbW0gc3RydWN0Ci0gKgotICogQG1tOiBtbSBzdHJ1Y3QgdGhpcyBITU0g c3RydWN0IGlzIGJvdW5kIHRvCi0gKiBAbG9jazogbG9jayBwcm90ZWN0aW5nIHJhbmdlcyBsaXN0 Ci0gKiBAcmFuZ2VzOiBsaXN0IG9mIHJhbmdlIGJlaW5nIHNuYXBzaG90dGVkCi0gKiBAbWlycm9y czogbGlzdCBvZiBtaXJyb3JzIGZvciB0aGlzIG1tCi0gKiBAbW11X25vdGlmaWVyOiBtbXUgbm90 aWZpZXIgdG8gdHJhY2sgdXBkYXRlcyB0byBDUFUgcGFnZSB0YWJsZQotICogQG1pcnJvcnNfc2Vt OiByZWFkL3dyaXRlIHNlbWFwaG9yZSBwcm90ZWN0aW5nIHRoZSBtaXJyb3JzIGxpc3QKLSAqIEB3 cTogd2FpdCBxdWV1ZSBmb3IgdXNlciB3YWl0aW5nIG9uIGEgcmFuZ2UgaW52YWxpZGF0aW9uCi0g KiBAbm90aWZpZXJzOiBjb3VudCBvZiBhY3RpdmUgbW11IG5vdGlmaWVycwotICovCi1zdHJ1Y3Qg aG1tIHsKLQlzdHJ1Y3QgbW11X25vdGlmaWVyCW1tdV9ub3RpZmllcjsKLQlzcGlubG9ja190CQly YW5nZXNfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXJhbmdlczsKLQlzdHJ1Y3QgbGlzdF9oZWFk CW1pcnJvcnM7Ci0Jc3RydWN0IHJ3X3NlbWFwaG9yZQltaXJyb3JzX3NlbTsKLQl3YWl0X3F1ZXVl X2hlYWRfdAl3cTsKLQlsb25nCQkJbm90aWZpZXJzOwotfTsKLQogLyoKICAqIGhtbV9wZm5fZmxh Z19lIC0gSE1NIGZsYWcgZW51bXMKICAqCkBAIC0xNDMsOSArMTIwLDggQEAgZW51bSBobW1fcGZu X3ZhbHVlX2UgewogLyoKICAqIHN0cnVjdCBobW1fcmFuZ2UgLSB0cmFjayBpbnZhbGlkYXRpb24g bG9jayBvbiB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UKICAqCi0gKiBAbm90aWZpZXI6IGFuIG9wdGlv bmFsIG1tdV9yYW5nZV9ub3RpZmllcgotICogQG5vdGlmaWVyX3NlcTogd2hlbiBub3RpZmllciBp cyB1c2VkIHRoaXMgaXMgdGhlIHJlc3VsdCBvZgotICogICAgICAgICAgICAgICAgbW11X3Jhbmdl X3JlYWRfYmVnaW4oKQorICogQG5vdGlmaWVyOiBhIG1tdV9yYW5nZV9ub3RpZmllciB0aGF0IGlu Y2x1ZGVzIHRoZSBzdGFydC9lbmQKKyAqIEBub3RpZmllcl9zZXE6IHJlc3VsdCBvZiBtbXVfcmFu Z2VfcmVhZF9iZWdpbigpCiAgKiBAaG1tOiB0aGUgY29yZSBITU0gc3RydWN0dXJlIHRoaXMgcmFu Z2UgaXMgYWN0aXZlIGFnYWluc3QKICAqIEB2bWE6IHRoZSB2bSBhcmVhIHN0cnVjdCBmb3IgdGhl IHJhbmdlCiAgKiBAbGlzdDogYWxsIHJhbmdlIGxvY2sgYXJlIG9uIGEgbGlzdApAQCAtMTYyLDgg KzEzOCw2IEBAIGVudW0gaG1tX3Bmbl92YWx1ZV9lIHsKIHN0cnVjdCBobW1fcmFuZ2UgewogCXN0 cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm5vdGlmaWVyOwogCXVuc2lnbmVkIGxvbmcJCW5vdGlm aWVyX3NlcTsKLQlzdHJ1Y3QgaG1tCQkqaG1tOwotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAl1 bnNpZ25lZCBsb25nCQlzdGFydDsKIAl1bnNpZ25lZCBsb25nCQllbmQ7CiAJdWludDY0X3QJCSpw Zm5zOwpAQCAtMTcyLDMyICsxNDYsOCBAQCBzdHJ1Y3QgaG1tX3JhbmdlIHsKIAl1aW50NjRfdAkJ ZGVmYXVsdF9mbGFnczsKIAl1aW50NjRfdAkJcGZuX2ZsYWdzX21hc2s7CiAJdWludDhfdAkJCXBm bl9zaGlmdDsKLQlib29sCQkJdmFsaWQ7CiB9OwogCi0vKgotICogaG1tX3JhbmdlX3dhaXRfdW50 aWxfdmFsaWQoKSAtIHdhaXQgZm9yIHJhbmdlIHRvIGJlIHZhbGlkCi0gKiBAcmFuZ2U6IHJhbmdl IGFmZmVjdGVkIGJ5IGludmFsaWRhdGlvbiB0byB3YWl0IG9uCi0gKiBAdGltZW91dDogdGltZSBv dXQgZm9yIHdhaXQgaW4gbXMgKGllIGFib3J0IHdhaXQgYWZ0ZXIgdGhhdCBwZXJpb2Qgb2YgdGlt ZSkKLSAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmFuZ2UgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lz ZS4KLSAqLwotc3RhdGljIGlubGluZSBib29sIGhtbV9yYW5nZV93YWl0X3VudGlsX3ZhbGlkKHN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQp Ci17Ci0JcmV0dXJuIHdhaXRfZXZlbnRfdGltZW91dChyYW5nZS0+aG1tLT53cSwgcmFuZ2UtPnZh bGlkLAotCQkJCSAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSkgIT0gMDsKLX0KLQotLyoKLSAq IGhtbV9yYW5nZV92YWxpZCgpIC0gdGVzdCBpZiBhIHJhbmdlIGlzIHZhbGlkIG9yIG5vdAotICog QHJhbmdlOiByYW5nZQotICogUmV0dXJuOiB0cnVlIGlmIHRoZSByYW5nZSBpcyB2YWxpZCwgZmFs c2Ugb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wgaG1tX3JhbmdlX3ZhbGlkKHN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQotewotCXJldHVybiByYW5nZS0+dmFsaWQ7Ci19Ci0KIC8q CiAgKiBobW1fZGV2aWNlX2VudHJ5X3RvX3BhZ2UoKSAtIHJldHVybiBzdHJ1Y3QgcGFnZSBwb2lu dGVkIHRvIGJ5IGEgZGV2aWNlIGVudHJ5CiAgKiBAcmFuZ2U6IHJhbmdlIHVzZSB0byBkZWNvZGUg ZGV2aWNlIGVudHJ5IHZhbHVlCkBAIC0yNjcsMTExICsyMTcsNiBAQCBzdGF0aWMgaW5saW5lIHVp bnQ2NF90IGhtbV9kZXZpY2VfZW50cnlfZnJvbV9wZm4oY29uc3Qgc3RydWN0IGhtbV9yYW5nZSAq cmFuZ2UsCiAJCXJhbmdlLT5mbGFnc1tITU1fUEZOX1ZBTElEXTsKIH0KIAotLyoKLSAqIE1pcnJv cmluZzogaG93IHRvIHN5bmNocm9uaXplIGRldmljZSBwYWdlIHRhYmxlIHdpdGggQ1BVIHBhZ2Ug dGFibGUuCi0gKgotICogQSBkZXZpY2UgZHJpdmVyIHRoYXQgaXMgcGFydGljaXBhdGluZyBpbiBI TU0gbWlycm9yaW5nIG11c3QgYWx3YXlzCi0gKiBzeW5jaHJvbml6ZSB3aXRoIENQVSBwYWdlIHRh YmxlIHVwZGF0ZXMuIEZvciB0aGlzLCBkZXZpY2UgZHJpdmVycyBjYW4gZWl0aGVyCi0gKiBkaXJl Y3RseSB1c2UgbW11X25vdGlmaWVyIEFQSXMgb3IgdGhleSBjYW4gdXNlIHRoZSBobW1fbWlycm9y IEFQSS4gRGV2aWNlCi0gKiBkcml2ZXJzIGNhbiBkZWNpZGUgdG8gcmVnaXN0ZXIgb25lIG1pcnJv ciBwZXIgZGV2aWNlIHBlciBwcm9jZXNzLCBvciBqdXN0Ci0gKiBvbmUgbWlycm9yIHBlciBwcm9j ZXNzIGZvciBhIGdyb3VwIG9mIGRldmljZXMuIFRoZSBwYXR0ZXJuIGlzOgotICoKLSAqICAgICAg aW50IGRldmljZV9iaW5kX2FkZHJlc3Nfc3BhY2UoLi4uLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwg Li4uKQotICogICAgICB7Ci0gKiAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2FkZHJlc3Nfc3BhY2Ug KmRhczsKLSAqCi0gKiAgICAgICAgICAvLyBEZXZpY2UgZHJpdmVyIHNwZWNpZmljIGluaXRpYWxp emF0aW9uLCBhbmQgYWxsb2NhdGlvbiBvZiBkYXMKLSAqICAgICAgICAgIC8vIHdoaWNoIGNvbnRh aW5zIGFuIGhtbV9taXJyb3Igc3RydWN0IGFzIG9uZSBvZiBpdHMgZmllbGRzLgotICogICAgICAg ICAgLi4uCi0gKgotICogICAgICAgICAgcmV0ID0gaG1tX21pcnJvcl9yZWdpc3RlcigmZGFzLT5t aXJyb3IsIG1tLCAmZGV2aWNlX21pcnJvcl9vcHMpOwotICogICAgICAgICAgaWYgKHJldCkgewot ICogICAgICAgICAgICAgIC8vIENsZWFudXAgb24gZXJyb3IKLSAqICAgICAgICAgICAgICByZXR1 cm4gcmV0OwotICogICAgICAgICAgfQotICoKLSAqICAgICAgICAgIC8vIE90aGVyIGRldmljZSBk cml2ZXIgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24KLSAqICAgICAgICAgIC4uLgotICogICAgICB9 Ci0gKgotICogT25jZSBhbiBobW1fbWlycm9yIGlzIHJlZ2lzdGVyZWQgZm9yIGFuIGFkZHJlc3Mg c3BhY2UsIHRoZSBkZXZpY2UgZHJpdmVyCi0gKiB3aWxsIGdldCBjYWxsYmFja3MgdGhyb3VnaCBz eW5jX2NwdV9kZXZpY2VfcGFnZXRhYmxlcygpIG9wZXJhdGlvbiAoc2VlCi0gKiBobW1fbWlycm9y X29wcyBzdHJ1Y3QpLgotICoKLSAqIERldmljZSBkcml2ZXIgbXVzdCBub3QgZnJlZSB0aGUgc3Ry dWN0IGNvbnRhaW5pbmcgdGhlIGhtbV9taXJyb3Igc3RydWN0Ci0gKiBiZWZvcmUgY2FsbGluZyBo bW1fbWlycm9yX3VucmVnaXN0ZXIoKS4gVGhlIGV4cGVjdGVkIHVzYWdlIGlzIHRvIGRvIHRoYXQg d2hlbgotICogdGhlIGRldmljZSBkcml2ZXIgaXMgdW5iaW5kaW5nIGZyb20gYW4gYWRkcmVzcyBz cGFjZS4KLSAqCi0gKgotICogICAgICB2b2lkIGRldmljZV91bmJpbmRfYWRkcmVzc19zcGFjZShz dHJ1Y3QgZGV2aWNlX2FkZHJlc3Nfc3BhY2UgKmRhcykKLSAqICAgICAgewotICogICAgICAgICAg Ly8gRGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjbGVhbnVwCi0gKiAgICAgICAgICAuLi4KLSAqCi0g KiAgICAgICAgICBobW1fbWlycm9yX3VucmVnaXN0ZXIoJmRhcy0+bWlycm9yKTsKLSAqCi0gKiAg ICAgICAgICAvLyBPdGhlciBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNsZWFudXAsIGFuZCBub3cg ZGFzIGNhbiBiZSBmcmVlZAotICogICAgICAgICAgLi4uCi0gKiAgICAgIH0KLSAqLwotCi1zdHJ1 Y3QgaG1tX21pcnJvcjsKLQotLyoKLSAqIHN0cnVjdCBobW1fbWlycm9yX29wcyAtIEhNTSBtaXJy b3IgZGV2aWNlIG9wZXJhdGlvbnMgY2FsbGJhY2sKLSAqCi0gKiBAdXBkYXRlOiBjYWxsYmFjayB0 byB1cGRhdGUgcmFuZ2Ugb24gYSBkZXZpY2UKLSAqLwotc3RydWN0IGhtbV9taXJyb3Jfb3BzIHsK LQkvKiByZWxlYXNlKCkgLSByZWxlYXNlIGhtbV9taXJyb3IKLQkgKgotCSAqIEBtaXJyb3I6IHBv aW50ZXIgdG8gc3RydWN0IGhtbV9taXJyb3IKLQkgKgotCSAqIFRoaXMgaXMgY2FsbGVkIHdoZW4g dGhlIG1tX3N0cnVjdCBpcyBiZWluZyByZWxlYXNlZC4gIFRoZSBjYWxsYmFjawotCSAqIG11c3Qg ZW5zdXJlIHRoYXQgYWxsIGFjY2VzcyB0byBhbnkgcGFnZXMgb2J0YWluZWQgZnJvbSB0aGlzIG1p cnJvcgotCSAqIGlzIGhhbHRlZCBiZWZvcmUgdGhlIGNhbGxiYWNrIHJldHVybnMuIEFsbCBmdXR1 cmUgYWNjZXNzIHNob3VsZAotCSAqIGZhdWx0LgotCSAqLwotCXZvaWQgKCpyZWxlYXNlKShzdHJ1 Y3QgaG1tX21pcnJvciAqbWlycm9yKTsKLQotCS8qIHN5bmNfY3B1X2RldmljZV9wYWdldGFibGVz KCkgLSBzeW5jaHJvbml6ZSBwYWdlIHRhYmxlcwotCSAqCi0JICogQG1pcnJvcjogcG9pbnRlciB0 byBzdHJ1Y3QgaG1tX21pcnJvcgotCSAqIEB1cGRhdGU6IHVwZGF0ZSBpbmZvcm1hdGlvbiAoc2Vl IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UpCi0JICogUmV0dXJuOiAtRUFHQUlOIGlmIG1tdV9u b3RpZmllcl9yYW5nZV9ibG9ja2FibGUodXBkYXRlKSBpcyBmYWxzZQotCSAqIGFuZCBjYWxsYmFj ayBuZWVkcyB0byBibG9jaywgMCBvdGhlcndpc2UuCi0JICoKLQkgKiBUaGlzIGNhbGxiYWNrIHVs dGltYXRlbHkgb3JpZ2luYXRlcyBmcm9tIG1tdV9ub3RpZmllcnMgd2hlbiB0aGUgQ1BVCi0JICog cGFnZSB0YWJsZSBpcyB1cGRhdGVkLiBUaGUgZGV2aWNlIGRyaXZlciBtdXN0IHVwZGF0ZSBpdHMg cGFnZSB0YWJsZQotCSAqIGluIHJlc3BvbnNlIHRvIHRoaXMgY2FsbGJhY2suIFRoZSB1cGRhdGUg YXJndW1lbnQgdGVsbHMgd2hhdCBhY3Rpb24KLQkgKiB0byBwZXJmb3JtLgotCSAqCi0JICogVGhl IGRldmljZSBkcml2ZXIgbXVzdCBub3QgcmV0dXJuIGZyb20gdGhpcyBjYWxsYmFjayB1bnRpbCB0 aGUgZGV2aWNlCi0JICogcGFnZSB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgdXBkYXRlZCAoVExCcyBm bHVzaGVkLCBldGMpOyB0aGlzIGlzIGEKLQkgKiBzeW5jaHJvbm91cyBjYWxsLgotCSAqLwotCWlu dCAoKnN5bmNfY3B1X2RldmljZV9wYWdldGFibGVzKSgKLQkJc3RydWN0IGhtbV9taXJyb3IgKm1p cnJvciwKLQkJY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqdXBkYXRlKTsKLX07Ci0K LS8qCi0gKiBzdHJ1Y3QgaG1tX21pcnJvciAtIG1pcnJvciBzdHJ1Y3QgZm9yIGEgZGV2aWNlIGRy aXZlcgotICoKLSAqIEBobW06IHBvaW50ZXIgdG8gc3RydWN0IGhtbSAod2hpY2ggaXMgdW5pcXVl IHBlciBtbV9zdHJ1Y3QpCi0gKiBAb3BzOiBkZXZpY2UgZHJpdmVyIGNhbGxiYWNrIGZvciBITU0g bWlycm9yIG9wZXJhdGlvbnMKLSAqIEBsaXN0OiBmb3IgbGlzdCBvZiBtaXJyb3JzIG9mIGEgZ2l2 ZW4gbW0KLSAqCi0gKiBFYWNoIGFkZHJlc3Mgc3BhY2UgKG1tX3N0cnVjdCkgYmVpbmcgbWlycm9y ZWQgYnkgYSBkZXZpY2UgbXVzdCByZWdpc3RlciBvbmUKLSAqIGluc3RhbmNlIG9mIGFuIGhtbV9t aXJyb3Igc3RydWN0IHdpdGggSE1NLiBITU0gd2lsbCB0cmFjayB0aGUgbGlzdCBvZiBhbGwKLSAq IG1pcnJvcnMgZm9yIGVhY2ggbW1fc3RydWN0LgotICovCi1zdHJ1Y3QgaG1tX21pcnJvciB7Ci0J c3RydWN0IGhtbQkJCSpobW07Ci0JY29uc3Qgc3RydWN0IGhtbV9taXJyb3Jfb3BzCSpvcHM7Ci0J c3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKLX07Ci0KIC8qCiAgKiBSZXRyeSBmYXVsdCBpZiBub24t YmxvY2tpbmcsIGRyb3AgbW1hcF9zZW0gYW5kIHJldHVybiAtRUFHQUlOIGluIHRoYXQgY2FzZS4K ICAqLwpAQCAtMzgxLDE1ICsyMjYsOSBAQCBzdHJ1Y3QgaG1tX21pcnJvciB7CiAjZGVmaW5lIEhN TV9GQVVMVF9TTkFQU0hPVAkJKDEgPDwgMSkKIAogI2lmZGVmIENPTkZJR19ITU1fTUlSUk9SCi1p bnQgaG1tX21pcnJvcl9yZWdpc3RlcihzdHJ1Y3QgaG1tX21pcnJvciAqbWlycm9yLCBzdHJ1Y3Qg bW1fc3RydWN0ICptbSk7Ci12b2lkIGhtbV9taXJyb3JfdW5yZWdpc3RlcihzdHJ1Y3QgaG1tX21p cnJvciAqbWlycm9yKTsKLQogLyoKICAqIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi92bS9obW0u cnN0IGZvciBob3cgdG8gdXNlIHRoZSByYW5nZSBBUEkuCiAgKi8KLWludCBobW1fcmFuZ2VfcmVn aXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHN0cnVjdCBobW1fbWlycm9yICptaXJyb3Ip Owotdm9pZCBobW1fcmFuZ2VfdW5yZWdpc3RlcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7Ci0K IGxvbmcgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCB1bnNpZ25lZCBp bnQgZmxhZ3MpOwogCiBsb25nIGhtbV9yYW5nZV9kbWFfbWFwKHN0cnVjdCBobW1fcmFuZ2UgKnJh bmdlLApAQCAtNDAxLDI0ICsyNDAsNiBAQCBsb25nIGhtbV9yYW5nZV9kbWFfdW5tYXAoc3RydWN0 IGhtbV9yYW5nZSAqcmFuZ2UsCiAJCQkgZG1hX2FkZHJfdCAqZGFkZHJzLAogCQkJIGJvb2wgZGly dHkpOwogI2Vsc2UKLWludCBobW1fbWlycm9yX3JlZ2lzdGVyKHN0cnVjdCBobW1fbWlycm9yICpt aXJyb3IsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0K LQotdm9pZCBobW1fbWlycm9yX3VucmVnaXN0ZXIoc3RydWN0IGhtbV9taXJyb3IgKm1pcnJvcikK LXsKLX0KLQotaW50IGhtbV9yYW5nZV9yZWdpc3RlcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwg c3RydWN0IGhtbV9taXJyb3IgKm1pcnJvcikKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0K LXZvaWQgaG1tX3JhbmdlX3VucmVnaXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCi17Ci19 Ci0KIHN0YXRpYyBpbmxpbmUgbG9uZyBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAq cmFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYg LS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBkMGI1MDQ2ZDlhZWZmZC4uZTM4 ZmYxZDU5NjhkYmYgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAt Njc1LDcgKzY3NSw2IEBAIGNvbmZpZyBERVZfUEFHRU1BUF9PUFMKIGNvbmZpZyBITU1fTUlSUk9S CiAJYm9vbAogCWRlcGVuZHMgb24gTU1VCi0JZGVwZW5kcyBvbiBNTVVfTk9USUZJRVIKIAogY29u ZmlnIERFVklDRV9QUklWQVRFCiAJYm9vbCAiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChH UFUgbWVtb3J5LCAuLi4pIgpkaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uYwppbmRleCAy MmFjMzU5NTc3MWZlYi4uNzVkMTVhODIwZTE4MmUgMTAwNjQ0Ci0tLSBhL21tL2htbS5jCisrKyBi L21tL2htbS5jCkBAIC0yNiwxOTMgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZp ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnlfaG90cGx1Zy5oPgogCi1zdGF0aWMgc3RydWN0 IG1tdV9ub3RpZmllciAqaG1tX2FsbG9jX25vdGlmaWVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQot ewotCXN0cnVjdCBobW0gKmhtbTsKLQotCWhtbSA9IGt6YWxsb2Moc2l6ZW9mKCpobW0pLCBHRlBf S0VSTkVMKTsKLQlpZiAoIWhtbSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlpbml0 X3dhaXRxdWV1ZV9oZWFkKCZobW0tPndxKTsKLQlJTklUX0xJU1RfSEVBRCgmaG1tLT5taXJyb3Jz KTsKLQlpbml0X3J3c2VtKCZobW0tPm1pcnJvcnNfc2VtKTsKLQlJTklUX0xJU1RfSEVBRCgmaG1t LT5yYW5nZXMpOwotCXNwaW5fbG9ja19pbml0KCZobW0tPnJhbmdlc19sb2NrKTsKLQlobW0tPm5v dGlmaWVycyA9IDA7Ci0JcmV0dXJuICZobW0tPm1tdV9ub3RpZmllcjsKLX0KLQotc3RhdGljIHZv aWQgaG1tX2ZyZWVfbm90aWZpZXIoc3RydWN0IG1tdV9ub3RpZmllciAqbW4pCi17Ci0Jc3RydWN0 IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90aWZpZXIpOwot Ci0JV0FSTl9PTighbGlzdF9lbXB0eSgmaG1tLT5yYW5nZXMpKTsKLQlXQVJOX09OKCFsaXN0X2Vt cHR5KCZobW0tPm1pcnJvcnMpKTsKLQlrZnJlZShobW0pOwotfQotCi1zdGF0aWMgdm9pZCBobW1f cmVsZWFzZShzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17 Ci0Jc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90 aWZpZXIpOwotCXN0cnVjdCBobW1fbWlycm9yICptaXJyb3I7Ci0KLQkvKgotCSAqIFNpbmNlIGht bV9yYW5nZV9yZWdpc3RlcigpIGhvbGRzIHRoZSBtbWdldCgpIGxvY2sgaG1tX3JlbGVhc2UoKSBp cwotCSAqIHByZXZlbnRlZCBhcyBsb25nIGFzIGEgcmFuZ2UgZXhpc3RzLgotCSAqLwotCVdBUk5f T04oIWxpc3RfZW1wdHlfY2FyZWZ1bCgmaG1tLT5yYW5nZXMpKTsKLQotCWRvd25fcmVhZCgmaG1t LT5taXJyb3JzX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtaXJyb3IsICZobW0tPm1pcnJv cnMsIGxpc3QpIHsKLQkJLyoKLQkJICogTm90ZTogVGhlIGRyaXZlciBpcyBub3QgYWxsb3dlZCB0 byB0cmlnZ2VyCi0JCSAqIGhtbV9taXJyb3JfdW5yZWdpc3RlcigpIGZyb20gdGhpcyB0aHJlYWQu Ci0JCSAqLwotCQlpZiAobWlycm9yLT5vcHMtPnJlbGVhc2UpCi0JCQltaXJyb3ItPm9wcy0+cmVs ZWFzZShtaXJyb3IpOwotCX0KLQl1cF9yZWFkKCZobW0tPm1pcnJvcnNfc2VtKTsKLX0KLQotc3Rh dGljIHZvaWQgbm90aWZpZXJzX2RlY3JlbWVudChzdHJ1Y3QgaG1tICpobW0pCi17Ci0JdW5zaWdu ZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBm bGFncyk7Ci0JaG1tLT5ub3RpZmllcnMtLTsKLQlpZiAoIWhtbS0+bm90aWZpZXJzKSB7Ci0JCXN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkocmFuZ2UsICZo bW0tPnJhbmdlcywgbGlzdCkgewotCQkJaWYgKHJhbmdlLT52YWxpZCkKLQkJCQljb250aW51ZTsK LQkJCXJhbmdlLT52YWxpZCA9IHRydWU7Ci0JCX0KLQkJd2FrZV91cF9hbGwoJmhtbS0+d3EpOwot CX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci19 Ci0KLXN0YXRpYyBpbnQgaG1tX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3Rp ZmllciAqbW4sCi0JCQljb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpucmFuZ2UpCi17 Ci0Jc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90 aWZpZXIpOwotCXN0cnVjdCBobW1fbWlycm9yICptaXJyb3I7Ci0Jc3RydWN0IGhtbV9yYW5nZSAq cmFuZ2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9j a19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci0JaG1tLT5ub3RpZmllcnMrKzsK LQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhbmdlLCAmaG1tLT5yYW5nZXMsIGxpc3QpIHsKLQkJaWYg KG5yYW5nZS0+ZW5kIDwgcmFuZ2UtPnN0YXJ0IHx8IG5yYW5nZS0+c3RhcnQgPj0gcmFuZ2UtPmVu ZCkKLQkJCWNvbnRpbnVlOwotCi0JCXJhbmdlLT52YWxpZCA9IGZhbHNlOwotCX0KLQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci0KLQlpZiAobW11X25v dGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShucmFuZ2UpKQotCQlkb3duX3JlYWQoJmhtbS0+bWlycm9y c19zZW0pOwotCWVsc2UgaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmaG1tLT5taXJyb3JzX3NlbSkp IHsKLQkJcmV0ID0gLUVBR0FJTjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9l bnRyeShtaXJyb3IsICZobW0tPm1pcnJvcnMsIGxpc3QpIHsKLQkJaW50IHJjOwotCi0JCXJjID0g bWlycm9yLT5vcHMtPnN5bmNfY3B1X2RldmljZV9wYWdldGFibGVzKG1pcnJvciwgbnJhbmdlKTsK LQkJaWYgKHJjKSB7Ci0JCQlpZiAoV0FSTl9PTihtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxl KG5yYW5nZSkgfHwKLQkJCSAgICByYyAhPSAtRUFHQUlOKSkKLQkJCQljb250aW51ZTsKLQkJCXJl dCA9IC1FQUdBSU47Ci0JCQlicmVhazsKLQkJfQotCX0KLQl1cF9yZWFkKCZobW0tPm1pcnJvcnNf c2VtKTsKLQotb3V0OgotCWlmIChyZXQpCi0JCW5vdGlmaWVyc19kZWNyZW1lbnQoaG1tKTsKLQly ZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBobW1faW52YWxpZGF0ZV9yYW5nZV9lbmQoc3Ry dWN0IG1tdV9ub3RpZmllciAqbW4sCi0JCQljb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3Jhbmdl ICpucmFuZ2UpCi17Ci0Jc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3Qg aG1tLCBtbXVfbm90aWZpZXIpOwotCi0Jbm90aWZpZXJzX2RlY3JlbWVudChobW0pOwotfQotCi1z dGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMgaG1tX21tdV9ub3RpZmllcl9vcHMg PSB7Ci0JLnJlbGVhc2UJCT0gaG1tX3JlbGVhc2UsCi0JLmludmFsaWRhdGVfcmFuZ2Vfc3RhcnQJ PSBobW1faW52YWxpZGF0ZV9yYW5nZV9zdGFydCwKLQkuaW52YWxpZGF0ZV9yYW5nZV9lbmQJPSBo bW1faW52YWxpZGF0ZV9yYW5nZV9lbmQsCi0JLmFsbG9jX25vdGlmaWVyCQk9IGhtbV9hbGxvY19u b3RpZmllciwKLQkuZnJlZV9ub3RpZmllcgkJPSBobW1fZnJlZV9ub3RpZmllciwKLX07Ci0KLS8q Ci0gKiBobW1fbWlycm9yX3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIG1pcnJvciBhZ2FpbnN0IGFu IG1tCi0gKgotICogQG1pcnJvcjogbmV3IG1pcnJvciBzdHJ1Y3QgdG8gcmVnaXN0ZXIKLSAqIEBt bTogbW0gdG8gcmVnaXN0ZXIgYWdhaW5zdAotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9N RU0gaWYgbm8gbWVtb3J5LCAtRUlOVkFMIGlmIGludmFsaWQgYXJndW1lbnRzCi0gKgotICogVG8g c3RhcnQgbWlycm9yaW5nIGEgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCB0aGUgZGV2aWNlIGRyaXZl ciBtdXN0IHJlZ2lzdGVyCi0gKiBhbiBITU0gbWlycm9yIHN0cnVjdC4KLSAqCi0gKiBUaGUgY2Fs bGVyIGNhbm5vdCB1bnJlZ2lzdGVyIHRoZSBobW1fbWlycm9yIHdoaWxlIGFueSByYW5nZXMgYXJl Ci0gKiByZWdpc3RlcmVkLgotICoKLSAqIENhbGxlcnMgdXNpbmcgdGhpcyBmdW5jdGlvbiBtdXN0 IHB1dCBhIGNhbGwgdG8gbW11X25vdGlmaWVyX3N5bmNocm9uaXplKCkKLSAqIGluIHRoZWlyIG1v ZHVsZSBleGl0IGZ1bmN0aW9ucy4KLSAqLwotaW50IGhtbV9taXJyb3JfcmVnaXN0ZXIoc3RydWN0 IGhtbV9taXJyb3IgKm1pcnJvciwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IG1t dV9ub3RpZmllciAqbW47Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZtbS0+bW1hcF9z ZW0pOwotCi0JLyogU2FuaXR5IGNoZWNrICovCi0JaWYgKCFtbSB8fCAhbWlycm9yIHx8ICFtaXJy b3ItPm9wcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltbiA9IG1tdV9ub3RpZmllcl9nZXRfbG9j a2VkKCZobW1fbW11X25vdGlmaWVyX29wcywgbW0pOwotCWlmIChJU19FUlIobW4pKQotCQlyZXR1 cm4gUFRSX0VSUihtbik7Ci0JbWlycm9yLT5obW0gPSBjb250YWluZXJfb2YobW4sIHN0cnVjdCBo bW0sIG1tdV9ub3RpZmllcik7Ci0KLQlkb3duX3dyaXRlKCZtaXJyb3ItPmhtbS0+bWlycm9yc19z ZW0pOwotCWxpc3RfYWRkKCZtaXJyb3ItPmxpc3QsICZtaXJyb3ItPmhtbS0+bWlycm9ycyk7Ci0J dXBfd3JpdGUoJm1pcnJvci0+aG1tLT5taXJyb3JzX3NlbSk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVY UE9SVF9TWU1CT0woaG1tX21pcnJvcl9yZWdpc3Rlcik7Ci0KLS8qCi0gKiBobW1fbWlycm9yX3Vu cmVnaXN0ZXIoKSAtIHVucmVnaXN0ZXIgYSBtaXJyb3IKLSAqCi0gKiBAbWlycm9yOiBtaXJyb3Ig c3RydWN0IHRvIHVucmVnaXN0ZXIKLSAqCi0gKiBTdG9wIG1pcnJvcmluZyBhIHByb2Nlc3MgYWRk cmVzcyBzcGFjZSwgYW5kIGNsZWFudXAuCi0gKi8KLXZvaWQgaG1tX21pcnJvcl91bnJlZ2lzdGVy KHN0cnVjdCBobW1fbWlycm9yICptaXJyb3IpCi17Ci0Jc3RydWN0IGhtbSAqaG1tID0gbWlycm9y LT5obW07Ci0KLQlkb3duX3dyaXRlKCZobW0tPm1pcnJvcnNfc2VtKTsKLQlsaXN0X2RlbCgmbWly cm9yLT5saXN0KTsKLQl1cF93cml0ZSgmaG1tLT5taXJyb3JzX3NlbSk7Ci0JbW11X25vdGlmaWVy X3B1dCgmaG1tLT5tbXVfbm90aWZpZXIpOwotfQotRVhQT1JUX1NZTUJPTChobW1fbWlycm9yX3Vu cmVnaXN0ZXIpOwotCiBzdHJ1Y3QgaG1tX3ZtYV93YWxrIHsKIAlzdHJ1Y3QgaG1tX3JhbmdlCSpy YW5nZTsKIAlzdHJ1Y3QgZGV2X3BhZ2VtYXAJKnBnbWFwOwpAQCAtNzc5LDg3ICs1OTIsNiBAQCBz dGF0aWMgdm9pZCBobW1fcGZuc19jbGVhcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwKIAkJKnBm bnMgPSByYW5nZS0+dmFsdWVzW0hNTV9QRk5fTk9ORV07CiB9CiAKLS8qCi0gKiBobW1fcmFuZ2Vf cmVnaXN0ZXIoKSAtIHN0YXJ0IHRyYWNraW5nIGNoYW5nZSB0byBDUFUgcGFnZSB0YWJsZSBvdmVy IGEgcmFuZ2UKLSAqIEByYW5nZTogcmFuZ2UKLSAqIEBtbTogdGhlIG1tIHN0cnVjdCBmb3IgdGhl IHJhbmdlIG9mIHZpcnR1YWwgYWRkcmVzcwotICoKLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAt RUZBVUxUIGlmIHRoZSBhZGRyZXNzIHNwYWNlIGlzIG5vIGxvbmdlciB2YWxpZAotICoKLSAqIFRy YWNrIHVwZGF0ZXMgdG8gdGhlIENQVSBwYWdlIHRhYmxlIHNlZSBpbmNsdWRlL2xpbnV4L2htbS5o Ci0gKi8KLWludCBobW1fcmFuZ2VfcmVnaXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHN0 cnVjdCBobW1fbWlycm9yICptaXJyb3IpCi17Ci0Jc3RydWN0IGhtbSAqaG1tID0gbWlycm9yLT5o bW07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXJhbmdlLT52YWxpZCA9IGZhbHNlOwotCXJh bmdlLT5obW0gPSBOVUxMOwotCi0JaWYgKChyYW5nZS0+c3RhcnQgJiAoUEFHRV9TSVpFIC0gMSkp IHx8IChyYW5nZS0+ZW5kICYgKFBBR0VfU0laRSAtIDEpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J aWYgKHJhbmdlLT5zdGFydCA+PSByYW5nZS0+ZW5kKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8q IFByZXZlbnQgaG1tX3JlbGVhc2UoKSBmcm9tIHJ1bm5pbmcgd2hpbGUgdGhlIHJhbmdlIGlzIHZh bGlkICovCi0JaWYgKCFtbWdldF9ub3RfemVybyhobW0tPm1tdV9ub3RpZmllci5tbSkpCi0JCXJl dHVybiAtRUZBVUxUOwotCi0JLyogSW5pdGlhbGl6ZSByYW5nZSB0byB0cmFjayBDUFUgcGFnZSB0 YWJsZSB1cGRhdGVzLiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBm bGFncyk7Ci0KLQlyYW5nZS0+aG1tID0gaG1tOwotCWxpc3RfYWRkKCZyYW5nZS0+bGlzdCwgJmht bS0+cmFuZ2VzKTsKLQotCS8qCi0JICogSWYgdGhlcmUgYXJlIGFueSBjb25jdXJyZW50IG5vdGlm aWVycyB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZW0gZm9yCi0JICogdGhlIHJhbmdlIHRvIGJlIHZh bGlkIChzZWUgaG1tX3JhbmdlX3dhaXRfdW50aWxfdmFsaWQoKSkuCi0JICovCi0JaWYgKCFobW0t Pm5vdGlmaWVycykKLQkJcmFuZ2UtPnZhbGlkID0gdHJ1ZTsKLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9T WU1CT0woaG1tX3JhbmdlX3JlZ2lzdGVyKTsKLQotLyoKLSAqIGhtbV9yYW5nZV91bnJlZ2lzdGVy KCkgLSBzdG9wIHRyYWNraW5nIGNoYW5nZSB0byBDUFUgcGFnZSB0YWJsZSBvdmVyIGEgcmFuZ2UK LSAqIEByYW5nZTogcmFuZ2UKLSAqCi0gKiBSYW5nZSBzdHJ1Y3QgaXMgdXNlZCB0byB0cmFjayB1 cGRhdGVzIHRvIHRoZSBDUFUgcGFnZSB0YWJsZSBhZnRlciBhIGNhbGwgdG8KLSAqIGhtbV9yYW5n ZV9yZWdpc3RlcigpLiBTZWUgaW5jbHVkZS9saW51eC9obW0uaCBmb3IgaG93IHRvIHVzZSBpdC4K LSAqLwotdm9pZCBobW1fcmFuZ2VfdW5yZWdpc3RlcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSkK LXsKLQlzdHJ1Y3QgaG1tICpobW0gPSByYW5nZS0+aG1tOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaG1tLT5yYW5nZXNfbG9jaywgZmxhZ3MpOwotCWxpc3Rf ZGVsX2luaXQoJnJhbmdlLT5saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZobW0tPnJh bmdlc19sb2NrLCBmbGFncyk7Ci0KLQkvKiBEcm9wIHJlZmVyZW5jZSB0YWtlbiBieSBobW1fcmFu Z2VfcmVnaXN0ZXIoKSAqLwotCW1tcHV0KGhtbS0+bW11X25vdGlmaWVyLm1tKTsKLQotCS8qCi0J ICogVGhlIHJhbmdlIGlzIG5vdyBpbnZhbGlkIGFuZCB0aGUgcmVmIG9uIHRoZSBobW0gaXMgZHJv cHBlZCwgc28KLQkgKiBwb2lzb24gdGhlIHBvaW50ZXIuICBMZWF2ZSBvdGhlciBmaWVsZHMgaW4g cGxhY2UsIGZvciB0aGUgY2FsbGVyJ3MKLQkgKiB1c2UuCi0JICovCi0JcmFuZ2UtPnZhbGlkID0g ZmFsc2U7Ci0JbWVtc2V0KCZyYW5nZS0+aG1tLCBQT0lTT05fSU5VU0UsIHNpemVvZihyYW5nZS0+ aG1tKSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV91bnJlZ2lzdGVyKTsKLQotc3RhdGlj IGJvb2wgbmVlZHNfcmV0cnkoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCi17Ci0JaWYgKHJhbmdl LT5ub3RpZmllcikKLQkJcmV0dXJuIG1tdV9yYW5nZV9jaGVja19yZXRyeShyYW5nZS0+bm90aWZp ZXIsCi0JCQkJCSAgICAgcmFuZ2UtPm5vdGlmaWVyX3NlcSk7Ci0JcmV0dXJuICFyYW5nZS0+dmFs aWQ7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgaG1tX3dhbGtfb3BzID0g ewogCS5wdWRfZW50cnkJPSBobW1fdm1hX3dhbGtfcHVkLAogCS5wbWRfZW50cnkJPSBobW1fdm1h X3dhbGtfcG1kLApAQCAtOTAwLDIwICs2MzIsMTUgQEAgbG9uZyBobW1fcmFuZ2VfZmF1bHQoc3Ry dWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKIAljb25zdCB1bnNpZ25l ZCBsb25nIGRldmljZV92bWEgPSBWTV9JTyB8IFZNX1BGTk1BUCB8IFZNX01JWEVETUFQOwogCXVu c2lnbmVkIGxvbmcgc3RhcnQgPSByYW5nZS0+c3RhcnQsIGVuZDsKIAlzdHJ1Y3QgaG1tX3ZtYV93 YWxrIGhtbV92bWFfd2FsazsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgbW1fc3Ry dWN0ICptbSA9IHJhbmdlLT5ub3RpZmllci0+bW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWE7CiAJaW50IHJldDsKIAotCWlmIChyYW5nZS0+bm90aWZpZXIpCi0JCW1tID0gcmFuZ2UtPm5v dGlmaWVyLT5tbTsKLQllbHNlCi0JCW1tID0gcmFuZ2UtPmhtbS0+bW11X25vdGlmaWVyLm1tOwot CiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbW0tPm1tYXBfc2VtKTsKIAogCWRvIHsKIAkJLyogSWYg cmFuZ2UgaXMgbm8gbG9uZ2VyIHZhbGlkIGZvcmNlIHJldHJ5LiAqLwotCQlpZiAobmVlZHNfcmV0 cnkocmFuZ2UpKQorCQlpZiAobW11X3JhbmdlX2NoZWNrX3JldHJ5KHJhbmdlLT5ub3RpZmllciwg cmFuZ2UtPm5vdGlmaWVyX3NlcSkpCiAJCQlyZXR1cm4gLUVCVVNZOwogCiAJCXZtYSA9IGZpbmRf dm1hKG1tLCBzdGFydCk7CkBAIC05NDYsNyArNjczLDkgQEAgbG9uZyBobW1fcmFuZ2VfZmF1bHQo c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKIAkJCXN0YXJ0ID0g aG1tX3ZtYV93YWxrLmxhc3Q7CiAKIAkJCS8qIEtlZXAgdHJ5aW5nIHdoaWxlIHRoZSByYW5nZSBp cyB2YWxpZC4gKi8KLQkJfSB3aGlsZSAocmV0ID09IC1FQlVTWSAmJiAhbmVlZHNfcmV0cnkocmFu Z2UpKTsKKwkJfSB3aGlsZSAocmV0ID09IC1FQlVTWSAmJgorCQkJICFtbXVfcmFuZ2VfY2hlY2tf cmV0cnkocmFuZ2UtPm5vdGlmaWVyLAorCQkJCQkJcmFuZ2UtPm5vdGlmaWVyX3NlcSkpOwogCiAJ CWlmIChyZXQpIHsKIAkJCXVuc2lnbmVkIGxvbmcgaTsKQEAgLTEwMDQsNyArNzMzLDggQEAgbG9u ZyBobW1fcmFuZ2VfZG1hX21hcChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgc3RydWN0IGRldmlj ZSAqZGV2aWNlLAogCQkJY29udGludWU7CiAKIAkJLyogQ2hlY2sgaWYgcmFuZ2UgaXMgYmVpbmcg aW52YWxpZGF0ZWQgKi8KLQkJaWYgKG5lZWRzX3JldHJ5KHJhbmdlKSkgeworCQlpZiAobW11X3Jh bmdlX2NoZWNrX3JldHJ5KHJhbmdlLT5ub3RpZmllciwKKwkJCQkJICByYW5nZS0+bm90aWZpZXJf c2VxKSkgewogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byB1bm1hcDsKIAkJfQotLSAKMi4yMy4w CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw= 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=-9.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 AB4A9CA9EC0 for ; Mon, 28 Oct 2019 20:12:11 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (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 77CCE208C0 for ; Mon, 28 Oct 2019 20:12:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=ziepe.ca header.i=@ziepe.ca header.b="N7d4nLhT" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 77CCE208C0 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ziepe.ca Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iPBMr-00024q-H8; Mon, 28 Oct 2019 20:11:57 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iPBMp-00023S-Ox for xen-devel@lists.xenproject.org; Mon, 28 Oct 2019 20:11:55 +0000 X-Inumbo-ID: 0a6d3284-f9bf-11e9-a531-bc764e2007e4 Received: from mail-qk1-x742.google.com (unknown [2607:f8b0:4864:20::742]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 0a6d3284-f9bf-11e9-a531-bc764e2007e4; Mon, 28 Oct 2019 20:10:52 +0000 (UTC) Received: by mail-qk1-x742.google.com with SMTP id 71so9801007qkl.0 for ; Mon, 28 Oct 2019 13:10:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ziepe.ca; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oam7ohQj1kc8X7oZ0yNH5Qsiwr3vqfv4zRUy2hYn6VU=; b=N7d4nLhTvUMAd7m6ziC7Fnj8Fj2CROvNmQEOjInKL4+Co2BowIq9/67UGOKMH9lu3l v1lJgY60Lvap2Ol+aPfOvbu+ct1M49IJCP9kjFJybc7MSm13Yz19vQFIxnvZauHYQnAq Tyed+DS0BV73Lk3U+Muf7IdAsRNmnvS9FYFHJIPWiXHxqb+A8SR5sOQbGgk6pbNcNCbe ZJlgb5V8MwBEuEU6SiQQOf3ZhxPQw5OpEsa0GUzFj1giRGyCsV+YkmtWVYDal1QylK/X j/hvQvUBbitvFj7W8XAgGK6FWzI9bi2GEb/fFY0CTm8OtYBVd8K8YIP27/9hLoeA7SOy TP1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oam7ohQj1kc8X7oZ0yNH5Qsiwr3vqfv4zRUy2hYn6VU=; b=dol1Ib0+PYxeTX0ajwkAv1yruOvLFXfSMVz8SpMwKem9Rz35YchSShOaCtb7vEsoFK N3GoMtffnIJIRwfBJ6UjXgUWdACr/NLPfEx6MBVE5mR6nyHoU1alzRu3puH7mU2gb7HC oS4QTmOTRVTgcwikpIxhkLIieYqCuZzAFeT0pvIrPQWdwtG/nOwyIMm6orC4kq7MxenP Djz+uCzk1UYRGriiCMWYpU3+0Mdu+1Zf+fAypGh8sR28seuQZ8Vd3YywLTrDl3cbyLcn WnONCrpUMWT0fZK2pxXQ7Ao6mY3eRWlqJGPlRRbXyWQeV5T/PWHgUKmHTqR11n6Oirjv r/bw== X-Gm-Message-State: APjAAAUDNsVpRFuvzJo5+VTSx3fqCXzsDOd3BDvH/RcyTUViL0A0X60I i4Gw5+hlb2EfmGzHZFJFZBKzww== X-Google-Smtp-Source: APXvYqzFOk0mWTm9zmmEUnrvaGyK7qwShQOI+2XOcxc/OnuoCxvgWFx41ArWQecOobsikGRR1SYw3A== X-Received: by 2002:a37:ac0b:: with SMTP id e11mr9437740qkm.454.1572293451378; Mon, 28 Oct 2019 13:10:51 -0700 (PDT) Received: from ziepe.ca (hlfxns017vw-142-162-113-180.dhcp-dynamic.fibreop.ns.bellaliant.net. [142.162.113.180]) by smtp.gmail.com with ESMTPSA id d10sm1589264qkk.99.2019.10.28.13.10.44 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 28 Oct 2019 13:10:48 -0700 (PDT) Received: from jgg by mlx.ziepe.ca with local (Exim 4.90_1) (envelope-from ) id 1iPBLf-0001hR-OF; Mon, 28 Oct 2019 17:10:43 -0300 From: Jason Gunthorpe To: linux-mm@kvack.org, Jerome Glisse , Ralph Campbell , John Hubbard , Felix.Kuehling@amd.com Date: Mon, 28 Oct 2019 17:10:32 -0300 Message-Id: <20191028201032.6352-16-jgg@ziepe.ca> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191028201032.6352-1-jgg@ziepe.ca> References: <20191028201032.6352-1-jgg@ziepe.ca> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v2 15/15] mm/hmm: remove hmm_mirror and related X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Juergen Gross , David Zhou , Mike Marciniszyn , Stefano Stabellini , Oleksandr Andrushchenko , linux-rdma@vger.kernel.org, nouveau@lists.freedesktop.org, Dennis Dalessandro , amd-gfx@lists.freedesktop.org, Christoph Hellwig , Jason Gunthorpe , dri-devel@lists.freedesktop.org, Alex Deucher , xen-devel@lists.xenproject.org, Boris Ostrovsky , Petr Cvek , =?UTF-8?q?Christian=20K=C3=B6nig?= , Ben Skeggs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" RnJvbTogSmFzb24gR3VudGhvcnBlIDxqZ2dAbWVsbGFub3guY29tPgoKVGhlIG9ubHkgdHdvIHVz ZXJzIG9mIHRoaXMgYXJlIG5vdyBjb252ZXJ0ZWQgdG8gdXNlIG1tdV9yYW5nZV9ub3RpZmllciwK ZGVsZXRlIGFsbCB0aGUgY29kZSBhbmQgdXBkYXRlIGhtbS5yc3QuCgpSZXZpZXdlZC1ieTogSsOp csO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+ClNpZ25lZC1vZmYtYnk6IEphc29uIEd1 bnRob3JwZSA8amdnQG1lbGxhbm94LmNvbT4KLS0tCiBEb2N1bWVudGF0aW9uL3ZtL2htbS5yc3Qg fCAxMDUgKysrKy0tLS0tLS0tLS0tCiBpbmNsdWRlL2xpbnV4L2htbS5oICAgICAgfCAxODMgKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbW0vS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAxIC0K IG1tL2htbS5jICAgICAgICAgICAgICAgICB8IDI4NCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgNTQwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vaG1tLnJzdCBiL0RvY3Vt ZW50YXRpb24vdm0vaG1tLnJzdAppbmRleCAwYTU5NjBiZWNjZjc2ZC4uYTI0NzY0MzAzNWM0ZTIg MTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vaG1tLnJzdAorKysgYi9Eb2N1bWVudGF0aW9u L3ZtL2htbS5yc3QKQEAgLTE0Nyw0OSArMTQ3LDE2IEBAIEFkZHJlc3Mgc3BhY2UgbWlycm9yaW5n IGltcGxlbWVudGF0aW9uIGFuZCBBUEkKIEFkZHJlc3Mgc3BhY2UgbWlycm9yaW5nJ3MgbWFpbiBv YmplY3RpdmUgaXMgdG8gYWxsb3cgZHVwbGljYXRpb24gb2YgYSByYW5nZSBvZgogQ1BVIHBhZ2Ug dGFibGUgaW50byBhIGRldmljZSBwYWdlIHRhYmxlOyBITU0gaGVscHMga2VlcCBib3RoIHN5bmNo cm9uaXplZC4gQQogZGV2aWNlIGRyaXZlciB0aGF0IHdhbnRzIHRvIG1pcnJvciBhIHByb2Nlc3Mg YWRkcmVzcyBzcGFjZSBtdXN0IHN0YXJ0IHdpdGggdGhlCi1yZWdpc3RyYXRpb24gb2YgYW4gaG1t X21pcnJvciBzdHJ1Y3Q6OgotCi0gaW50IGhtbV9taXJyb3JfcmVnaXN0ZXIoc3RydWN0IGhtbV9t aXJyb3IgKm1pcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0 ICptbSk7Ci0KLVRoZSBtaXJyb3Igc3RydWN0IGhhcyBhIHNldCBvZiBjYWxsYmFja3MgdGhhdCBh cmUgdXNlZAotdG8gcHJvcGFnYXRlIENQVSBwYWdlIHRhYmxlczo6Ci0KLSBzdHJ1Y3QgaG1tX21p cnJvcl9vcHMgewotICAgICAvKiByZWxlYXNlKCkgLSByZWxlYXNlIGhtbV9taXJyb3IKLSAgICAg ICoKLSAgICAgICogQG1pcnJvcjogcG9pbnRlciB0byBzdHJ1Y3QgaG1tX21pcnJvcgotICAgICAg KgotICAgICAgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBtbV9zdHJ1Y3QgaXMgYmVpbmcgcmVs ZWFzZWQuICBUaGUgY2FsbGJhY2sKLSAgICAgICogbXVzdCBlbnN1cmUgdGhhdCBhbGwgYWNjZXNz IHRvIGFueSBwYWdlcyBvYnRhaW5lZCBmcm9tIHRoaXMgbWlycm9yCi0gICAgICAqIGlzIGhhbHRl ZCBiZWZvcmUgdGhlIGNhbGxiYWNrIHJldHVybnMuIEFsbCBmdXR1cmUgYWNjZXNzIHNob3VsZAot ICAgICAgKiBmYXVsdC4KLSAgICAgICovCi0gICAgIHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgaG1t X21pcnJvciAqbWlycm9yKTsKLQotICAgICAvKiBzeW5jX2NwdV9kZXZpY2VfcGFnZXRhYmxlcygp IC0gc3luY2hyb25pemUgcGFnZSB0YWJsZXMKLSAgICAgICoKLSAgICAgICogQG1pcnJvcjogcG9p bnRlciB0byBzdHJ1Y3QgaG1tX21pcnJvcgotICAgICAgKiBAdXBkYXRlOiB1cGRhdGUgaW5mb3Jt YXRpb24gKHNlZSBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlKQotICAgICAgKiBSZXR1cm46IC1F QUdBSU4gaWYgdXBkYXRlLmJsb2NrYWJsZSBmYWxzZSBhbmQgY2FsbGJhY2sgbmVlZCB0bwotICAg ICAgKiAgICAgICAgIGJsb2NrLCAwIG90aGVyd2lzZS4KLSAgICAgICoKLSAgICAgICogVGhpcyBj YWxsYmFjayB1bHRpbWF0ZWx5IG9yaWdpbmF0ZXMgZnJvbSBtbXVfbm90aWZpZXJzIHdoZW4gdGhl IENQVQotICAgICAgKiBwYWdlIHRhYmxlIGlzIHVwZGF0ZWQuIFRoZSBkZXZpY2UgZHJpdmVyIG11 c3QgdXBkYXRlIGl0cyBwYWdlIHRhYmxlCi0gICAgICAqIGluIHJlc3BvbnNlIHRvIHRoaXMgY2Fs bGJhY2suIFRoZSB1cGRhdGUgYXJndW1lbnQgdGVsbHMgd2hhdCBhY3Rpb24KLSAgICAgICogdG8g cGVyZm9ybS4KLSAgICAgICoKLSAgICAgICogVGhlIGRldmljZSBkcml2ZXIgbXVzdCBub3QgcmV0 dXJuIGZyb20gdGhpcyBjYWxsYmFjayB1bnRpbCB0aGUgZGV2aWNlCi0gICAgICAqIHBhZ2UgdGFi bGVzIGFyZSBjb21wbGV0ZWx5IHVwZGF0ZWQgKFRMQnMgZmx1c2hlZCwgZXRjKTsgdGhpcyBpcyBh Ci0gICAgICAqIHN5bmNocm9ub3VzIGNhbGwuCi0gICAgICAqLwotICAgICBpbnQgKCpzeW5jX2Nw dV9kZXZpY2VfcGFnZXRhYmxlcykoc3RydWN0IGhtbV9taXJyb3IgKm1pcnJvciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBobW1fdXBkYXRlICp1 cGRhdGUpOwotIH07Ci0KLVRoZSBkZXZpY2UgZHJpdmVyIG11c3QgcGVyZm9ybSB0aGUgdXBkYXRl IGFjdGlvbiB0byB0aGUgcmFuZ2UgKG1hcmsgcmFuZ2UKLXJlYWQgb25seSwgb3IgZnVsbHkgdW5t YXAsIGV0Yy4pLiBUaGUgZGV2aWNlIG11c3QgY29tcGxldGUgdGhlIHVwZGF0ZSBiZWZvcmUKLXRo ZSBkcml2ZXIgY2FsbGJhY2sgcmV0dXJucy4KK3JlZ2lzdHJhdGlvbiBvZiBhIG1tdV9yYW5nZV9u b3RpZmllcjo6CisKKyBtcm4tPm9wcyA9ICZkcml2ZXJfb3BzOworIGludCBtbXVfcmFuZ2Vfbm90 aWZpZXJfaW5zZXJ0KHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybiwKKwkJCSAgICAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAorCQkJICAgICAgc3RydWN0 IG1tX3N0cnVjdCAqbW0pOworCitEdXJpbmcgdGhlIGRyaXZlcl9vcHMtPmludmFsaWRhdGUoKSBj YWxsYmFjayB0aGUgZGV2aWNlIGRyaXZlciBtdXN0IHBlcmZvcm0KK3RoZSB1cGRhdGUgYWN0aW9u IHRvIHRoZSByYW5nZSAobWFyayByYW5nZSByZWFkIG9ubHksIG9yIGZ1bGx5IHVubWFwLAorZXRj LikuIFRoZSBkZXZpY2UgbXVzdCBjb21wbGV0ZSB0aGUgdXBkYXRlIGJlZm9yZSB0aGUgZHJpdmVy IGNhbGxiYWNrIHJldHVybnMuCiAKIFdoZW4gdGhlIGRldmljZSBkcml2ZXIgd2FudHMgdG8gcG9w dWxhdGUgYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcywgaXQgY2FuCiB1c2U6OgpAQCAtMjE2 LDcwICsxODMsNDYgQEAgVGhlIHVzYWdlIHBhdHRlcm4gaXM6OgogICAgICAgc3RydWN0IGhtbV9y YW5nZSByYW5nZTsKICAgICAgIC4uLgogCisgICAgICByYW5nZS5ub3RpZmllciA9ICZtcm47CiAg ICAgICByYW5nZS5zdGFydCA9IC4uLjsKICAgICAgIHJhbmdlLmVuZCA9IC4uLjsKICAgICAgIHJh bmdlLnBmbnMgPSAuLi47CiAgICAgICByYW5nZS5mbGFncyA9IC4uLjsKICAgICAgIHJhbmdlLnZh bHVlcyA9IC4uLjsKICAgICAgIHJhbmdlLnBmbl9zaGlmdCA9IC4uLjsKLSAgICAgIGhtbV9yYW5n ZV9yZWdpc3RlcigmcmFuZ2UsIG1pcnJvcik7CiAKLSAgICAgIC8qCi0gICAgICAgKiBKdXN0IHdh aXQgZm9yIHJhbmdlIHRvIGJlIHZhbGlkLCBzYWZlIHRvIGlnbm9yZSByZXR1cm4gdmFsdWUgYXMg d2UKLSAgICAgICAqIHdpbGwgdXNlIHRoZSByZXR1cm4gdmFsdWUgb2YgaG1tX3JhbmdlX2ZhdWx0 KCkgYmVsb3cgdW5kZXIgdGhlCi0gICAgICAgKiBtbWFwX3NlbSB0byBhc2NlcnRhaW4gdGhlIHZh bGlkaXR5IG9mIHRoZSByYW5nZS4KLSAgICAgICAqLwotICAgICAgaG1tX3JhbmdlX3dhaXRfdW50 aWxfdmFsaWQoJnJhbmdlLCBUSU1FT1VUX0lOX01TRUMpOworICAgICAgaWYgKCFtbWdldF9ub3Rf emVybyhtcm4tPm5vdGlmaWVyLm1tKSkKKyAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKIAogIGFn YWluOgorICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X3JhbmdlX3JlYWRfYmVnaW4oJm1y bik7CiAgICAgICBkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAgICAgICByZXQgPSBobW1fcmFu Z2VfZmF1bHQoJnJhbmdlLCBITU1fUkFOR0VfU05BUFNIT1QpOwogICAgICAgaWYgKHJldCkgewog ICAgICAgICAgIHVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0gICAgICAgICAgaWYgKHJldCA9PSAt RUJVU1kpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBObyBuZWVkIHRvIGNoZWNr IGhtbV9yYW5nZV93YWl0X3VudGlsX3ZhbGlkKCkgcmV0dXJuIHZhbHVlCi0gICAgICAgICAgICAg KiBvbiByZXRyeSB3ZSB3aWxsIGdldCBwcm9wZXIgZXJyb3Igd2l0aCBobW1fcmFuZ2VfZmF1bHQo KQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBobW1fcmFuZ2Vfd2FpdF91bnRpbF92YWxp ZCgmcmFuZ2UsIFRJTUVPVVRfSU5fTVNFQyk7Ci0gICAgICAgICAgICBnb3RvIGFnYWluOwotICAg ICAgICAgIH0KLSAgICAgICAgICBobW1fcmFuZ2VfdW5yZWdpc3RlcigmcmFuZ2UpOworICAgICAg ICAgIGlmIChyZXQgPT0gLUVCVVNZKQorICAgICAgICAgICAgICAgICBnb3RvIGFnYWluOwogICAg ICAgICAgIHJldHVybiByZXQ7CiAgICAgICB9CisgICAgICB1cF9yZWFkKCZtbS0+bW1hcF9zZW0p OworCiAgICAgICB0YWtlX2xvY2soZHJpdmVyLT51cGRhdGUpOwotICAgICAgaWYgKCFobW1fcmFu Z2VfdmFsaWQoJnJhbmdlKSkgeworICAgICAgaWYgKG1tdV9yYW5nZV9yZWFkX3JldHJ5KCZtcm4s IHJhbmdlLm5vdGlmaWVyX3NlcSkgewogICAgICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItPnVw ZGF0ZSk7Ci0gICAgICAgICAgdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKICAgICAgICAgICBnb3Rv IGFnYWluOwogICAgICAgfQogCi0gICAgICAvLyBVc2UgcGZucyBhcnJheSBjb250ZW50IHRvIHVw ZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZQorICAgICAgLyogVXNlIHBmbnMgYXJyYXkgY29udGVudCB0 byB1cGRhdGUgZGV2aWNlIHBhZ2UgdGFibGUsCisgICAgICAgKiB1bmRlciB0aGUgdXBkYXRlIGxv Y2sgKi8KIAotICAgICAgaG1tX3JhbmdlX3VucmVnaXN0ZXIoJnJhbmdlKTsKICAgICAgIHJlbGVh c2VfbG9jayhkcml2ZXItPnVwZGF0ZSk7Ci0gICAgICB1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwog ICAgICAgcmV0dXJuIDA7CiAgfQogCiBUaGUgZHJpdmVyLT51cGRhdGUgbG9jayBpcyB0aGUgc2Ft ZSBsb2NrIHRoYXQgdGhlIGRyaXZlciB0YWtlcyBpbnNpZGUgaXRzCi1zeW5jX2NwdV9kZXZpY2Vf cGFnZXRhYmxlcygpIGNhbGxiYWNrLiBUaGF0IGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxs aW5nCi1obW1fcmFuZ2VfdmFsaWQoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVu dCBDUFUgcGFnZSB0YWJsZSB1cGRhdGUuCi0KLUhNTSBpbXBsZW1lbnRzIGFsbCB0aGlzIG9uIHRv cCBvZiB0aGUgbW11X25vdGlmaWVyIEFQSSBiZWNhdXNlIHdlIHdhbnRlZCBhCi1zaW1wbGVyIEFQ SSBhbmQgYWxzbyB0byBiZSBhYmxlIHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucyBsYXR0ZXIgb24g bGlrZSBkb2luZwotY29uY3VycmVudCBkZXZpY2UgdXBkYXRlcyBpbiBtdWx0aS1kZXZpY2VzIHNj ZW5hcmlvLgotCi1ITU0gYWxzbyBzZXJ2ZXMgYXMgYW4gaW1wZWRhbmNlIG1pc21hdGNoIGJldHdl ZW4gaG93IENQVSBwYWdlIHRhYmxlIHVwZGF0ZXMKLWFyZSBkb25lIChieSBDUFUgd3JpdGUgdG8g dGhlIHBhZ2UgdGFibGUgYW5kIFRMQiBmbHVzaGVzKSBhbmQgaG93IGRldmljZXMKLXVwZGF0ZSB0 aGVpciBvd24gcGFnZSB0YWJsZS4gRGV2aWNlIHVwZGF0ZXMgYXJlIGEgbXVsdGktc3RlcCBwcm9j ZXNzLiBGaXJzdCwKLWFwcHJvcHJpYXRlIGNvbW1hbmRzIGFyZSB3cml0dGVuIHRvIGEgYnVmZmVy LCB0aGVuIHRoaXMgYnVmZmVyIGlzIHNjaGVkdWxlZCBmb3IKLWV4ZWN1dGlvbiBvbiB0aGUgZGV2 aWNlLiBJdCBpcyBvbmx5IG9uY2UgdGhlIGRldmljZSBoYXMgZXhlY3V0ZWQgY29tbWFuZHMgaW4K LXRoZSBidWZmZXIgdGhhdCB0aGUgdXBkYXRlIGlzIGRvbmUuIENyZWF0aW5nIGFuZCBzY2hlZHVs aW5nIHRoZSB1cGRhdGUgY29tbWFuZAotYnVmZmVyIGNhbiBoYXBwZW4gY29uY3VycmVudGx5IGZv ciBtdWx0aXBsZSBkZXZpY2VzLiBXYWl0aW5nIGZvciBlYWNoIGRldmljZSB0bwotcmVwb3J0IGNv bW1hbmRzIGFzIGV4ZWN1dGVkIGlzIHNlcmlhbGl6ZWQgKHRoZXJlIGlzIG5vIHBvaW50IGluIGRv aW5nIHRoaXMKLWNvbmN1cnJlbnRseSkuCi0KK2ludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBs b2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZworbW11X3JhbmdlX3JlYWRfcmV0cnkoKSB0 byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZQordXBkYXRl LgogCiBMZXZlcmFnZSBkZWZhdWx0X2ZsYWdzIGFuZCBwZm5fZmxhZ3NfbWFzawogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlu dXgvaG1tLmggYi9pbmNsdWRlL2xpbnV4L2htbS5oCmluZGV4IDI2NjZlYjA4YTQwNjE1Li5iNGFm NTE3MzUyMzIzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaAorKysgYi9pbmNsdWRl L2xpbnV4L2htbS5oCkBAIC02OCwyOSArNjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRp b24uaD4KICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4KIAotCi0vKgotICogc3RydWN0 IGhtbSAtIEhNTSBwZXIgbW0gc3RydWN0Ci0gKgotICogQG1tOiBtbSBzdHJ1Y3QgdGhpcyBITU0g c3RydWN0IGlzIGJvdW5kIHRvCi0gKiBAbG9jazogbG9jayBwcm90ZWN0aW5nIHJhbmdlcyBsaXN0 Ci0gKiBAcmFuZ2VzOiBsaXN0IG9mIHJhbmdlIGJlaW5nIHNuYXBzaG90dGVkCi0gKiBAbWlycm9y czogbGlzdCBvZiBtaXJyb3JzIGZvciB0aGlzIG1tCi0gKiBAbW11X25vdGlmaWVyOiBtbXUgbm90 aWZpZXIgdG8gdHJhY2sgdXBkYXRlcyB0byBDUFUgcGFnZSB0YWJsZQotICogQG1pcnJvcnNfc2Vt OiByZWFkL3dyaXRlIHNlbWFwaG9yZSBwcm90ZWN0aW5nIHRoZSBtaXJyb3JzIGxpc3QKLSAqIEB3 cTogd2FpdCBxdWV1ZSBmb3IgdXNlciB3YWl0aW5nIG9uIGEgcmFuZ2UgaW52YWxpZGF0aW9uCi0g KiBAbm90aWZpZXJzOiBjb3VudCBvZiBhY3RpdmUgbW11IG5vdGlmaWVycwotICovCi1zdHJ1Y3Qg aG1tIHsKLQlzdHJ1Y3QgbW11X25vdGlmaWVyCW1tdV9ub3RpZmllcjsKLQlzcGlubG9ja190CQly YW5nZXNfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXJhbmdlczsKLQlzdHJ1Y3QgbGlzdF9oZWFk CW1pcnJvcnM7Ci0Jc3RydWN0IHJ3X3NlbWFwaG9yZQltaXJyb3JzX3NlbTsKLQl3YWl0X3F1ZXVl X2hlYWRfdAl3cTsKLQlsb25nCQkJbm90aWZpZXJzOwotfTsKLQogLyoKICAqIGhtbV9wZm5fZmxh Z19lIC0gSE1NIGZsYWcgZW51bXMKICAqCkBAIC0xNDMsOSArMTIwLDggQEAgZW51bSBobW1fcGZu X3ZhbHVlX2UgewogLyoKICAqIHN0cnVjdCBobW1fcmFuZ2UgLSB0cmFjayBpbnZhbGlkYXRpb24g bG9jayBvbiB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UKICAqCi0gKiBAbm90aWZpZXI6IGFuIG9wdGlv bmFsIG1tdV9yYW5nZV9ub3RpZmllcgotICogQG5vdGlmaWVyX3NlcTogd2hlbiBub3RpZmllciBp cyB1c2VkIHRoaXMgaXMgdGhlIHJlc3VsdCBvZgotICogICAgICAgICAgICAgICAgbW11X3Jhbmdl X3JlYWRfYmVnaW4oKQorICogQG5vdGlmaWVyOiBhIG1tdV9yYW5nZV9ub3RpZmllciB0aGF0IGlu Y2x1ZGVzIHRoZSBzdGFydC9lbmQKKyAqIEBub3RpZmllcl9zZXE6IHJlc3VsdCBvZiBtbXVfcmFu Z2VfcmVhZF9iZWdpbigpCiAgKiBAaG1tOiB0aGUgY29yZSBITU0gc3RydWN0dXJlIHRoaXMgcmFu Z2UgaXMgYWN0aXZlIGFnYWluc3QKICAqIEB2bWE6IHRoZSB2bSBhcmVhIHN0cnVjdCBmb3IgdGhl IHJhbmdlCiAgKiBAbGlzdDogYWxsIHJhbmdlIGxvY2sgYXJlIG9uIGEgbGlzdApAQCAtMTYyLDgg KzEzOCw2IEBAIGVudW0gaG1tX3Bmbl92YWx1ZV9lIHsKIHN0cnVjdCBobW1fcmFuZ2UgewogCXN0 cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm5vdGlmaWVyOwogCXVuc2lnbmVkIGxvbmcJCW5vdGlm aWVyX3NlcTsKLQlzdHJ1Y3QgaG1tCQkqaG1tOwotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAl1 bnNpZ25lZCBsb25nCQlzdGFydDsKIAl1bnNpZ25lZCBsb25nCQllbmQ7CiAJdWludDY0X3QJCSpw Zm5zOwpAQCAtMTcyLDMyICsxNDYsOCBAQCBzdHJ1Y3QgaG1tX3JhbmdlIHsKIAl1aW50NjRfdAkJ ZGVmYXVsdF9mbGFnczsKIAl1aW50NjRfdAkJcGZuX2ZsYWdzX21hc2s7CiAJdWludDhfdAkJCXBm bl9zaGlmdDsKLQlib29sCQkJdmFsaWQ7CiB9OwogCi0vKgotICogaG1tX3JhbmdlX3dhaXRfdW50 aWxfdmFsaWQoKSAtIHdhaXQgZm9yIHJhbmdlIHRvIGJlIHZhbGlkCi0gKiBAcmFuZ2U6IHJhbmdl IGFmZmVjdGVkIGJ5IGludmFsaWRhdGlvbiB0byB3YWl0IG9uCi0gKiBAdGltZW91dDogdGltZSBv dXQgZm9yIHdhaXQgaW4gbXMgKGllIGFib3J0IHdhaXQgYWZ0ZXIgdGhhdCBwZXJpb2Qgb2YgdGlt ZSkKLSAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmFuZ2UgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lz ZS4KLSAqLwotc3RhdGljIGlubGluZSBib29sIGhtbV9yYW5nZV93YWl0X3VudGlsX3ZhbGlkKHN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQp Ci17Ci0JcmV0dXJuIHdhaXRfZXZlbnRfdGltZW91dChyYW5nZS0+aG1tLT53cSwgcmFuZ2UtPnZh bGlkLAotCQkJCSAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSkgIT0gMDsKLX0KLQotLyoKLSAq IGhtbV9yYW5nZV92YWxpZCgpIC0gdGVzdCBpZiBhIHJhbmdlIGlzIHZhbGlkIG9yIG5vdAotICog QHJhbmdlOiByYW5nZQotICogUmV0dXJuOiB0cnVlIGlmIHRoZSByYW5nZSBpcyB2YWxpZCwgZmFs c2Ugb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wgaG1tX3JhbmdlX3ZhbGlkKHN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQotewotCXJldHVybiByYW5nZS0+dmFsaWQ7Ci19Ci0KIC8q CiAgKiBobW1fZGV2aWNlX2VudHJ5X3RvX3BhZ2UoKSAtIHJldHVybiBzdHJ1Y3QgcGFnZSBwb2lu dGVkIHRvIGJ5IGEgZGV2aWNlIGVudHJ5CiAgKiBAcmFuZ2U6IHJhbmdlIHVzZSB0byBkZWNvZGUg ZGV2aWNlIGVudHJ5IHZhbHVlCkBAIC0yNjcsMTExICsyMTcsNiBAQCBzdGF0aWMgaW5saW5lIHVp bnQ2NF90IGhtbV9kZXZpY2VfZW50cnlfZnJvbV9wZm4oY29uc3Qgc3RydWN0IGhtbV9yYW5nZSAq cmFuZ2UsCiAJCXJhbmdlLT5mbGFnc1tITU1fUEZOX1ZBTElEXTsKIH0KIAotLyoKLSAqIE1pcnJv cmluZzogaG93IHRvIHN5bmNocm9uaXplIGRldmljZSBwYWdlIHRhYmxlIHdpdGggQ1BVIHBhZ2Ug dGFibGUuCi0gKgotICogQSBkZXZpY2UgZHJpdmVyIHRoYXQgaXMgcGFydGljaXBhdGluZyBpbiBI TU0gbWlycm9yaW5nIG11c3QgYWx3YXlzCi0gKiBzeW5jaHJvbml6ZSB3aXRoIENQVSBwYWdlIHRh YmxlIHVwZGF0ZXMuIEZvciB0aGlzLCBkZXZpY2UgZHJpdmVycyBjYW4gZWl0aGVyCi0gKiBkaXJl Y3RseSB1c2UgbW11X25vdGlmaWVyIEFQSXMgb3IgdGhleSBjYW4gdXNlIHRoZSBobW1fbWlycm9y IEFQSS4gRGV2aWNlCi0gKiBkcml2ZXJzIGNhbiBkZWNpZGUgdG8gcmVnaXN0ZXIgb25lIG1pcnJv ciBwZXIgZGV2aWNlIHBlciBwcm9jZXNzLCBvciBqdXN0Ci0gKiBvbmUgbWlycm9yIHBlciBwcm9j ZXNzIGZvciBhIGdyb3VwIG9mIGRldmljZXMuIFRoZSBwYXR0ZXJuIGlzOgotICoKLSAqICAgICAg aW50IGRldmljZV9iaW5kX2FkZHJlc3Nfc3BhY2UoLi4uLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwg Li4uKQotICogICAgICB7Ci0gKiAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2FkZHJlc3Nfc3BhY2Ug KmRhczsKLSAqCi0gKiAgICAgICAgICAvLyBEZXZpY2UgZHJpdmVyIHNwZWNpZmljIGluaXRpYWxp emF0aW9uLCBhbmQgYWxsb2NhdGlvbiBvZiBkYXMKLSAqICAgICAgICAgIC8vIHdoaWNoIGNvbnRh aW5zIGFuIGhtbV9taXJyb3Igc3RydWN0IGFzIG9uZSBvZiBpdHMgZmllbGRzLgotICogICAgICAg ICAgLi4uCi0gKgotICogICAgICAgICAgcmV0ID0gaG1tX21pcnJvcl9yZWdpc3RlcigmZGFzLT5t aXJyb3IsIG1tLCAmZGV2aWNlX21pcnJvcl9vcHMpOwotICogICAgICAgICAgaWYgKHJldCkgewot ICogICAgICAgICAgICAgIC8vIENsZWFudXAgb24gZXJyb3IKLSAqICAgICAgICAgICAgICByZXR1 cm4gcmV0OwotICogICAgICAgICAgfQotICoKLSAqICAgICAgICAgIC8vIE90aGVyIGRldmljZSBk cml2ZXIgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24KLSAqICAgICAgICAgIC4uLgotICogICAgICB9 Ci0gKgotICogT25jZSBhbiBobW1fbWlycm9yIGlzIHJlZ2lzdGVyZWQgZm9yIGFuIGFkZHJlc3Mg c3BhY2UsIHRoZSBkZXZpY2UgZHJpdmVyCi0gKiB3aWxsIGdldCBjYWxsYmFja3MgdGhyb3VnaCBz eW5jX2NwdV9kZXZpY2VfcGFnZXRhYmxlcygpIG9wZXJhdGlvbiAoc2VlCi0gKiBobW1fbWlycm9y X29wcyBzdHJ1Y3QpLgotICoKLSAqIERldmljZSBkcml2ZXIgbXVzdCBub3QgZnJlZSB0aGUgc3Ry dWN0IGNvbnRhaW5pbmcgdGhlIGhtbV9taXJyb3Igc3RydWN0Ci0gKiBiZWZvcmUgY2FsbGluZyBo bW1fbWlycm9yX3VucmVnaXN0ZXIoKS4gVGhlIGV4cGVjdGVkIHVzYWdlIGlzIHRvIGRvIHRoYXQg d2hlbgotICogdGhlIGRldmljZSBkcml2ZXIgaXMgdW5iaW5kaW5nIGZyb20gYW4gYWRkcmVzcyBz cGFjZS4KLSAqCi0gKgotICogICAgICB2b2lkIGRldmljZV91bmJpbmRfYWRkcmVzc19zcGFjZShz dHJ1Y3QgZGV2aWNlX2FkZHJlc3Nfc3BhY2UgKmRhcykKLSAqICAgICAgewotICogICAgICAgICAg Ly8gRGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjbGVhbnVwCi0gKiAgICAgICAgICAuLi4KLSAqCi0g KiAgICAgICAgICBobW1fbWlycm9yX3VucmVnaXN0ZXIoJmRhcy0+bWlycm9yKTsKLSAqCi0gKiAg ICAgICAgICAvLyBPdGhlciBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNsZWFudXAsIGFuZCBub3cg ZGFzIGNhbiBiZSBmcmVlZAotICogICAgICAgICAgLi4uCi0gKiAgICAgIH0KLSAqLwotCi1zdHJ1 Y3QgaG1tX21pcnJvcjsKLQotLyoKLSAqIHN0cnVjdCBobW1fbWlycm9yX29wcyAtIEhNTSBtaXJy b3IgZGV2aWNlIG9wZXJhdGlvbnMgY2FsbGJhY2sKLSAqCi0gKiBAdXBkYXRlOiBjYWxsYmFjayB0 byB1cGRhdGUgcmFuZ2Ugb24gYSBkZXZpY2UKLSAqLwotc3RydWN0IGhtbV9taXJyb3Jfb3BzIHsK LQkvKiByZWxlYXNlKCkgLSByZWxlYXNlIGhtbV9taXJyb3IKLQkgKgotCSAqIEBtaXJyb3I6IHBv aW50ZXIgdG8gc3RydWN0IGhtbV9taXJyb3IKLQkgKgotCSAqIFRoaXMgaXMgY2FsbGVkIHdoZW4g dGhlIG1tX3N0cnVjdCBpcyBiZWluZyByZWxlYXNlZC4gIFRoZSBjYWxsYmFjawotCSAqIG11c3Qg ZW5zdXJlIHRoYXQgYWxsIGFjY2VzcyB0byBhbnkgcGFnZXMgb2J0YWluZWQgZnJvbSB0aGlzIG1p cnJvcgotCSAqIGlzIGhhbHRlZCBiZWZvcmUgdGhlIGNhbGxiYWNrIHJldHVybnMuIEFsbCBmdXR1 cmUgYWNjZXNzIHNob3VsZAotCSAqIGZhdWx0LgotCSAqLwotCXZvaWQgKCpyZWxlYXNlKShzdHJ1 Y3QgaG1tX21pcnJvciAqbWlycm9yKTsKLQotCS8qIHN5bmNfY3B1X2RldmljZV9wYWdldGFibGVz KCkgLSBzeW5jaHJvbml6ZSBwYWdlIHRhYmxlcwotCSAqCi0JICogQG1pcnJvcjogcG9pbnRlciB0 byBzdHJ1Y3QgaG1tX21pcnJvcgotCSAqIEB1cGRhdGU6IHVwZGF0ZSBpbmZvcm1hdGlvbiAoc2Vl IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UpCi0JICogUmV0dXJuOiAtRUFHQUlOIGlmIG1tdV9u b3RpZmllcl9yYW5nZV9ibG9ja2FibGUodXBkYXRlKSBpcyBmYWxzZQotCSAqIGFuZCBjYWxsYmFj ayBuZWVkcyB0byBibG9jaywgMCBvdGhlcndpc2UuCi0JICoKLQkgKiBUaGlzIGNhbGxiYWNrIHVs dGltYXRlbHkgb3JpZ2luYXRlcyBmcm9tIG1tdV9ub3RpZmllcnMgd2hlbiB0aGUgQ1BVCi0JICog cGFnZSB0YWJsZSBpcyB1cGRhdGVkLiBUaGUgZGV2aWNlIGRyaXZlciBtdXN0IHVwZGF0ZSBpdHMg cGFnZSB0YWJsZQotCSAqIGluIHJlc3BvbnNlIHRvIHRoaXMgY2FsbGJhY2suIFRoZSB1cGRhdGUg YXJndW1lbnQgdGVsbHMgd2hhdCBhY3Rpb24KLQkgKiB0byBwZXJmb3JtLgotCSAqCi0JICogVGhl IGRldmljZSBkcml2ZXIgbXVzdCBub3QgcmV0dXJuIGZyb20gdGhpcyBjYWxsYmFjayB1bnRpbCB0 aGUgZGV2aWNlCi0JICogcGFnZSB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgdXBkYXRlZCAoVExCcyBm bHVzaGVkLCBldGMpOyB0aGlzIGlzIGEKLQkgKiBzeW5jaHJvbm91cyBjYWxsLgotCSAqLwotCWlu dCAoKnN5bmNfY3B1X2RldmljZV9wYWdldGFibGVzKSgKLQkJc3RydWN0IGhtbV9taXJyb3IgKm1p cnJvciwKLQkJY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqdXBkYXRlKTsKLX07Ci0K LS8qCi0gKiBzdHJ1Y3QgaG1tX21pcnJvciAtIG1pcnJvciBzdHJ1Y3QgZm9yIGEgZGV2aWNlIGRy aXZlcgotICoKLSAqIEBobW06IHBvaW50ZXIgdG8gc3RydWN0IGhtbSAod2hpY2ggaXMgdW5pcXVl IHBlciBtbV9zdHJ1Y3QpCi0gKiBAb3BzOiBkZXZpY2UgZHJpdmVyIGNhbGxiYWNrIGZvciBITU0g bWlycm9yIG9wZXJhdGlvbnMKLSAqIEBsaXN0OiBmb3IgbGlzdCBvZiBtaXJyb3JzIG9mIGEgZ2l2 ZW4gbW0KLSAqCi0gKiBFYWNoIGFkZHJlc3Mgc3BhY2UgKG1tX3N0cnVjdCkgYmVpbmcgbWlycm9y ZWQgYnkgYSBkZXZpY2UgbXVzdCByZWdpc3RlciBvbmUKLSAqIGluc3RhbmNlIG9mIGFuIGhtbV9t aXJyb3Igc3RydWN0IHdpdGggSE1NLiBITU0gd2lsbCB0cmFjayB0aGUgbGlzdCBvZiBhbGwKLSAq IG1pcnJvcnMgZm9yIGVhY2ggbW1fc3RydWN0LgotICovCi1zdHJ1Y3QgaG1tX21pcnJvciB7Ci0J c3RydWN0IGhtbQkJCSpobW07Ci0JY29uc3Qgc3RydWN0IGhtbV9taXJyb3Jfb3BzCSpvcHM7Ci0J c3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKLX07Ci0KIC8qCiAgKiBSZXRyeSBmYXVsdCBpZiBub24t YmxvY2tpbmcsIGRyb3AgbW1hcF9zZW0gYW5kIHJldHVybiAtRUFHQUlOIGluIHRoYXQgY2FzZS4K ICAqLwpAQCAtMzgxLDE1ICsyMjYsOSBAQCBzdHJ1Y3QgaG1tX21pcnJvciB7CiAjZGVmaW5lIEhN TV9GQVVMVF9TTkFQU0hPVAkJKDEgPDwgMSkKIAogI2lmZGVmIENPTkZJR19ITU1fTUlSUk9SCi1p bnQgaG1tX21pcnJvcl9yZWdpc3RlcihzdHJ1Y3QgaG1tX21pcnJvciAqbWlycm9yLCBzdHJ1Y3Qg bW1fc3RydWN0ICptbSk7Ci12b2lkIGhtbV9taXJyb3JfdW5yZWdpc3RlcihzdHJ1Y3QgaG1tX21p cnJvciAqbWlycm9yKTsKLQogLyoKICAqIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi92bS9obW0u cnN0IGZvciBob3cgdG8gdXNlIHRoZSByYW5nZSBBUEkuCiAgKi8KLWludCBobW1fcmFuZ2VfcmVn aXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHN0cnVjdCBobW1fbWlycm9yICptaXJyb3Ip Owotdm9pZCBobW1fcmFuZ2VfdW5yZWdpc3RlcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7Ci0K IGxvbmcgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCB1bnNpZ25lZCBp bnQgZmxhZ3MpOwogCiBsb25nIGhtbV9yYW5nZV9kbWFfbWFwKHN0cnVjdCBobW1fcmFuZ2UgKnJh bmdlLApAQCAtNDAxLDI0ICsyNDAsNiBAQCBsb25nIGhtbV9yYW5nZV9kbWFfdW5tYXAoc3RydWN0 IGhtbV9yYW5nZSAqcmFuZ2UsCiAJCQkgZG1hX2FkZHJfdCAqZGFkZHJzLAogCQkJIGJvb2wgZGly dHkpOwogI2Vsc2UKLWludCBobW1fbWlycm9yX3JlZ2lzdGVyKHN0cnVjdCBobW1fbWlycm9yICpt aXJyb3IsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0K LQotdm9pZCBobW1fbWlycm9yX3VucmVnaXN0ZXIoc3RydWN0IGhtbV9taXJyb3IgKm1pcnJvcikK LXsKLX0KLQotaW50IGhtbV9yYW5nZV9yZWdpc3RlcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwg c3RydWN0IGhtbV9taXJyb3IgKm1pcnJvcikKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0K LXZvaWQgaG1tX3JhbmdlX3VucmVnaXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCi17Ci19 Ci0KIHN0YXRpYyBpbmxpbmUgbG9uZyBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAq cmFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYg LS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBkMGI1MDQ2ZDlhZWZmZC4uZTM4 ZmYxZDU5NjhkYmYgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAt Njc1LDcgKzY3NSw2IEBAIGNvbmZpZyBERVZfUEFHRU1BUF9PUFMKIGNvbmZpZyBITU1fTUlSUk9S CiAJYm9vbAogCWRlcGVuZHMgb24gTU1VCi0JZGVwZW5kcyBvbiBNTVVfTk9USUZJRVIKIAogY29u ZmlnIERFVklDRV9QUklWQVRFCiAJYm9vbCAiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChH UFUgbWVtb3J5LCAuLi4pIgpkaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uYwppbmRleCAy MmFjMzU5NTc3MWZlYi4uNzVkMTVhODIwZTE4MmUgMTAwNjQ0Ci0tLSBhL21tL2htbS5jCisrKyBi L21tL2htbS5jCkBAIC0yNiwxOTMgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZp ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnlfaG90cGx1Zy5oPgogCi1zdGF0aWMgc3RydWN0 IG1tdV9ub3RpZmllciAqaG1tX2FsbG9jX25vdGlmaWVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQot ewotCXN0cnVjdCBobW0gKmhtbTsKLQotCWhtbSA9IGt6YWxsb2Moc2l6ZW9mKCpobW0pLCBHRlBf S0VSTkVMKTsKLQlpZiAoIWhtbSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlpbml0 X3dhaXRxdWV1ZV9oZWFkKCZobW0tPndxKTsKLQlJTklUX0xJU1RfSEVBRCgmaG1tLT5taXJyb3Jz KTsKLQlpbml0X3J3c2VtKCZobW0tPm1pcnJvcnNfc2VtKTsKLQlJTklUX0xJU1RfSEVBRCgmaG1t LT5yYW5nZXMpOwotCXNwaW5fbG9ja19pbml0KCZobW0tPnJhbmdlc19sb2NrKTsKLQlobW0tPm5v dGlmaWVycyA9IDA7Ci0JcmV0dXJuICZobW0tPm1tdV9ub3RpZmllcjsKLX0KLQotc3RhdGljIHZv aWQgaG1tX2ZyZWVfbm90aWZpZXIoc3RydWN0IG1tdV9ub3RpZmllciAqbW4pCi17Ci0Jc3RydWN0 IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90aWZpZXIpOwot Ci0JV0FSTl9PTighbGlzdF9lbXB0eSgmaG1tLT5yYW5nZXMpKTsKLQlXQVJOX09OKCFsaXN0X2Vt cHR5KCZobW0tPm1pcnJvcnMpKTsKLQlrZnJlZShobW0pOwotfQotCi1zdGF0aWMgdm9pZCBobW1f cmVsZWFzZShzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17 Ci0Jc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90 aWZpZXIpOwotCXN0cnVjdCBobW1fbWlycm9yICptaXJyb3I7Ci0KLQkvKgotCSAqIFNpbmNlIGht bV9yYW5nZV9yZWdpc3RlcigpIGhvbGRzIHRoZSBtbWdldCgpIGxvY2sgaG1tX3JlbGVhc2UoKSBp cwotCSAqIHByZXZlbnRlZCBhcyBsb25nIGFzIGEgcmFuZ2UgZXhpc3RzLgotCSAqLwotCVdBUk5f T04oIWxpc3RfZW1wdHlfY2FyZWZ1bCgmaG1tLT5yYW5nZXMpKTsKLQotCWRvd25fcmVhZCgmaG1t LT5taXJyb3JzX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtaXJyb3IsICZobW0tPm1pcnJv cnMsIGxpc3QpIHsKLQkJLyoKLQkJICogTm90ZTogVGhlIGRyaXZlciBpcyBub3QgYWxsb3dlZCB0 byB0cmlnZ2VyCi0JCSAqIGhtbV9taXJyb3JfdW5yZWdpc3RlcigpIGZyb20gdGhpcyB0aHJlYWQu Ci0JCSAqLwotCQlpZiAobWlycm9yLT5vcHMtPnJlbGVhc2UpCi0JCQltaXJyb3ItPm9wcy0+cmVs ZWFzZShtaXJyb3IpOwotCX0KLQl1cF9yZWFkKCZobW0tPm1pcnJvcnNfc2VtKTsKLX0KLQotc3Rh dGljIHZvaWQgbm90aWZpZXJzX2RlY3JlbWVudChzdHJ1Y3QgaG1tICpobW0pCi17Ci0JdW5zaWdu ZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBm bGFncyk7Ci0JaG1tLT5ub3RpZmllcnMtLTsKLQlpZiAoIWhtbS0+bm90aWZpZXJzKSB7Ci0JCXN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkocmFuZ2UsICZo bW0tPnJhbmdlcywgbGlzdCkgewotCQkJaWYgKHJhbmdlLT52YWxpZCkKLQkJCQljb250aW51ZTsK LQkJCXJhbmdlLT52YWxpZCA9IHRydWU7Ci0JCX0KLQkJd2FrZV91cF9hbGwoJmhtbS0+d3EpOwot CX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci19 Ci0KLXN0YXRpYyBpbnQgaG1tX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3Rp ZmllciAqbW4sCi0JCQljb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpucmFuZ2UpCi17 Ci0Jc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90 aWZpZXIpOwotCXN0cnVjdCBobW1fbWlycm9yICptaXJyb3I7Ci0Jc3RydWN0IGhtbV9yYW5nZSAq cmFuZ2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9j a19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci0JaG1tLT5ub3RpZmllcnMrKzsK LQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhbmdlLCAmaG1tLT5yYW5nZXMsIGxpc3QpIHsKLQkJaWYg KG5yYW5nZS0+ZW5kIDwgcmFuZ2UtPnN0YXJ0IHx8IG5yYW5nZS0+c3RhcnQgPj0gcmFuZ2UtPmVu ZCkKLQkJCWNvbnRpbnVlOwotCi0JCXJhbmdlLT52YWxpZCA9IGZhbHNlOwotCX0KLQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci0KLQlpZiAobW11X25v dGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShucmFuZ2UpKQotCQlkb3duX3JlYWQoJmhtbS0+bWlycm9y c19zZW0pOwotCWVsc2UgaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmaG1tLT5taXJyb3JzX3NlbSkp IHsKLQkJcmV0ID0gLUVBR0FJTjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9l bnRyeShtaXJyb3IsICZobW0tPm1pcnJvcnMsIGxpc3QpIHsKLQkJaW50IHJjOwotCi0JCXJjID0g bWlycm9yLT5vcHMtPnN5bmNfY3B1X2RldmljZV9wYWdldGFibGVzKG1pcnJvciwgbnJhbmdlKTsK LQkJaWYgKHJjKSB7Ci0JCQlpZiAoV0FSTl9PTihtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxl KG5yYW5nZSkgfHwKLQkJCSAgICByYyAhPSAtRUFHQUlOKSkKLQkJCQljb250aW51ZTsKLQkJCXJl dCA9IC1FQUdBSU47Ci0JCQlicmVhazsKLQkJfQotCX0KLQl1cF9yZWFkKCZobW0tPm1pcnJvcnNf c2VtKTsKLQotb3V0OgotCWlmIChyZXQpCi0JCW5vdGlmaWVyc19kZWNyZW1lbnQoaG1tKTsKLQly ZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBobW1faW52YWxpZGF0ZV9yYW5nZV9lbmQoc3Ry dWN0IG1tdV9ub3RpZmllciAqbW4sCi0JCQljb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3Jhbmdl ICpucmFuZ2UpCi17Ci0Jc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3Qg aG1tLCBtbXVfbm90aWZpZXIpOwotCi0Jbm90aWZpZXJzX2RlY3JlbWVudChobW0pOwotfQotCi1z dGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMgaG1tX21tdV9ub3RpZmllcl9vcHMg PSB7Ci0JLnJlbGVhc2UJCT0gaG1tX3JlbGVhc2UsCi0JLmludmFsaWRhdGVfcmFuZ2Vfc3RhcnQJ PSBobW1faW52YWxpZGF0ZV9yYW5nZV9zdGFydCwKLQkuaW52YWxpZGF0ZV9yYW5nZV9lbmQJPSBo bW1faW52YWxpZGF0ZV9yYW5nZV9lbmQsCi0JLmFsbG9jX25vdGlmaWVyCQk9IGhtbV9hbGxvY19u b3RpZmllciwKLQkuZnJlZV9ub3RpZmllcgkJPSBobW1fZnJlZV9ub3RpZmllciwKLX07Ci0KLS8q Ci0gKiBobW1fbWlycm9yX3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIG1pcnJvciBhZ2FpbnN0IGFu IG1tCi0gKgotICogQG1pcnJvcjogbmV3IG1pcnJvciBzdHJ1Y3QgdG8gcmVnaXN0ZXIKLSAqIEBt bTogbW0gdG8gcmVnaXN0ZXIgYWdhaW5zdAotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9N RU0gaWYgbm8gbWVtb3J5LCAtRUlOVkFMIGlmIGludmFsaWQgYXJndW1lbnRzCi0gKgotICogVG8g c3RhcnQgbWlycm9yaW5nIGEgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCB0aGUgZGV2aWNlIGRyaXZl ciBtdXN0IHJlZ2lzdGVyCi0gKiBhbiBITU0gbWlycm9yIHN0cnVjdC4KLSAqCi0gKiBUaGUgY2Fs bGVyIGNhbm5vdCB1bnJlZ2lzdGVyIHRoZSBobW1fbWlycm9yIHdoaWxlIGFueSByYW5nZXMgYXJl Ci0gKiByZWdpc3RlcmVkLgotICoKLSAqIENhbGxlcnMgdXNpbmcgdGhpcyBmdW5jdGlvbiBtdXN0 IHB1dCBhIGNhbGwgdG8gbW11X25vdGlmaWVyX3N5bmNocm9uaXplKCkKLSAqIGluIHRoZWlyIG1v ZHVsZSBleGl0IGZ1bmN0aW9ucy4KLSAqLwotaW50IGhtbV9taXJyb3JfcmVnaXN0ZXIoc3RydWN0 IGhtbV9taXJyb3IgKm1pcnJvciwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IG1t dV9ub3RpZmllciAqbW47Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZtbS0+bW1hcF9z ZW0pOwotCi0JLyogU2FuaXR5IGNoZWNrICovCi0JaWYgKCFtbSB8fCAhbWlycm9yIHx8ICFtaXJy b3ItPm9wcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltbiA9IG1tdV9ub3RpZmllcl9nZXRfbG9j a2VkKCZobW1fbW11X25vdGlmaWVyX29wcywgbW0pOwotCWlmIChJU19FUlIobW4pKQotCQlyZXR1 cm4gUFRSX0VSUihtbik7Ci0JbWlycm9yLT5obW0gPSBjb250YWluZXJfb2YobW4sIHN0cnVjdCBo bW0sIG1tdV9ub3RpZmllcik7Ci0KLQlkb3duX3dyaXRlKCZtaXJyb3ItPmhtbS0+bWlycm9yc19z ZW0pOwotCWxpc3RfYWRkKCZtaXJyb3ItPmxpc3QsICZtaXJyb3ItPmhtbS0+bWlycm9ycyk7Ci0J dXBfd3JpdGUoJm1pcnJvci0+aG1tLT5taXJyb3JzX3NlbSk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVY UE9SVF9TWU1CT0woaG1tX21pcnJvcl9yZWdpc3Rlcik7Ci0KLS8qCi0gKiBobW1fbWlycm9yX3Vu cmVnaXN0ZXIoKSAtIHVucmVnaXN0ZXIgYSBtaXJyb3IKLSAqCi0gKiBAbWlycm9yOiBtaXJyb3Ig c3RydWN0IHRvIHVucmVnaXN0ZXIKLSAqCi0gKiBTdG9wIG1pcnJvcmluZyBhIHByb2Nlc3MgYWRk cmVzcyBzcGFjZSwgYW5kIGNsZWFudXAuCi0gKi8KLXZvaWQgaG1tX21pcnJvcl91bnJlZ2lzdGVy KHN0cnVjdCBobW1fbWlycm9yICptaXJyb3IpCi17Ci0Jc3RydWN0IGhtbSAqaG1tID0gbWlycm9y LT5obW07Ci0KLQlkb3duX3dyaXRlKCZobW0tPm1pcnJvcnNfc2VtKTsKLQlsaXN0X2RlbCgmbWly cm9yLT5saXN0KTsKLQl1cF93cml0ZSgmaG1tLT5taXJyb3JzX3NlbSk7Ci0JbW11X25vdGlmaWVy X3B1dCgmaG1tLT5tbXVfbm90aWZpZXIpOwotfQotRVhQT1JUX1NZTUJPTChobW1fbWlycm9yX3Vu cmVnaXN0ZXIpOwotCiBzdHJ1Y3QgaG1tX3ZtYV93YWxrIHsKIAlzdHJ1Y3QgaG1tX3JhbmdlCSpy YW5nZTsKIAlzdHJ1Y3QgZGV2X3BhZ2VtYXAJKnBnbWFwOwpAQCAtNzc5LDg3ICs1OTIsNiBAQCBz dGF0aWMgdm9pZCBobW1fcGZuc19jbGVhcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwKIAkJKnBm bnMgPSByYW5nZS0+dmFsdWVzW0hNTV9QRk5fTk9ORV07CiB9CiAKLS8qCi0gKiBobW1fcmFuZ2Vf cmVnaXN0ZXIoKSAtIHN0YXJ0IHRyYWNraW5nIGNoYW5nZSB0byBDUFUgcGFnZSB0YWJsZSBvdmVy IGEgcmFuZ2UKLSAqIEByYW5nZTogcmFuZ2UKLSAqIEBtbTogdGhlIG1tIHN0cnVjdCBmb3IgdGhl IHJhbmdlIG9mIHZpcnR1YWwgYWRkcmVzcwotICoKLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAt RUZBVUxUIGlmIHRoZSBhZGRyZXNzIHNwYWNlIGlzIG5vIGxvbmdlciB2YWxpZAotICoKLSAqIFRy YWNrIHVwZGF0ZXMgdG8gdGhlIENQVSBwYWdlIHRhYmxlIHNlZSBpbmNsdWRlL2xpbnV4L2htbS5o Ci0gKi8KLWludCBobW1fcmFuZ2VfcmVnaXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHN0 cnVjdCBobW1fbWlycm9yICptaXJyb3IpCi17Ci0Jc3RydWN0IGhtbSAqaG1tID0gbWlycm9yLT5o bW07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXJhbmdlLT52YWxpZCA9IGZhbHNlOwotCXJh bmdlLT5obW0gPSBOVUxMOwotCi0JaWYgKChyYW5nZS0+c3RhcnQgJiAoUEFHRV9TSVpFIC0gMSkp IHx8IChyYW5nZS0+ZW5kICYgKFBBR0VfU0laRSAtIDEpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J aWYgKHJhbmdlLT5zdGFydCA+PSByYW5nZS0+ZW5kKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8q IFByZXZlbnQgaG1tX3JlbGVhc2UoKSBmcm9tIHJ1bm5pbmcgd2hpbGUgdGhlIHJhbmdlIGlzIHZh bGlkICovCi0JaWYgKCFtbWdldF9ub3RfemVybyhobW0tPm1tdV9ub3RpZmllci5tbSkpCi0JCXJl dHVybiAtRUZBVUxUOwotCi0JLyogSW5pdGlhbGl6ZSByYW5nZSB0byB0cmFjayBDUFUgcGFnZSB0 YWJsZSB1cGRhdGVzLiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBm bGFncyk7Ci0KLQlyYW5nZS0+aG1tID0gaG1tOwotCWxpc3RfYWRkKCZyYW5nZS0+bGlzdCwgJmht bS0+cmFuZ2VzKTsKLQotCS8qCi0JICogSWYgdGhlcmUgYXJlIGFueSBjb25jdXJyZW50IG5vdGlm aWVycyB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZW0gZm9yCi0JICogdGhlIHJhbmdlIHRvIGJlIHZh bGlkIChzZWUgaG1tX3JhbmdlX3dhaXRfdW50aWxfdmFsaWQoKSkuCi0JICovCi0JaWYgKCFobW0t Pm5vdGlmaWVycykKLQkJcmFuZ2UtPnZhbGlkID0gdHJ1ZTsKLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9T WU1CT0woaG1tX3JhbmdlX3JlZ2lzdGVyKTsKLQotLyoKLSAqIGhtbV9yYW5nZV91bnJlZ2lzdGVy KCkgLSBzdG9wIHRyYWNraW5nIGNoYW5nZSB0byBDUFUgcGFnZSB0YWJsZSBvdmVyIGEgcmFuZ2UK LSAqIEByYW5nZTogcmFuZ2UKLSAqCi0gKiBSYW5nZSBzdHJ1Y3QgaXMgdXNlZCB0byB0cmFjayB1 cGRhdGVzIHRvIHRoZSBDUFUgcGFnZSB0YWJsZSBhZnRlciBhIGNhbGwgdG8KLSAqIGhtbV9yYW5n ZV9yZWdpc3RlcigpLiBTZWUgaW5jbHVkZS9saW51eC9obW0uaCBmb3IgaG93IHRvIHVzZSBpdC4K LSAqLwotdm9pZCBobW1fcmFuZ2VfdW5yZWdpc3RlcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSkK LXsKLQlzdHJ1Y3QgaG1tICpobW0gPSByYW5nZS0+aG1tOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaG1tLT5yYW5nZXNfbG9jaywgZmxhZ3MpOwotCWxpc3Rf ZGVsX2luaXQoJnJhbmdlLT5saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZobW0tPnJh bmdlc19sb2NrLCBmbGFncyk7Ci0KLQkvKiBEcm9wIHJlZmVyZW5jZSB0YWtlbiBieSBobW1fcmFu Z2VfcmVnaXN0ZXIoKSAqLwotCW1tcHV0KGhtbS0+bW11X25vdGlmaWVyLm1tKTsKLQotCS8qCi0J ICogVGhlIHJhbmdlIGlzIG5vdyBpbnZhbGlkIGFuZCB0aGUgcmVmIG9uIHRoZSBobW0gaXMgZHJv cHBlZCwgc28KLQkgKiBwb2lzb24gdGhlIHBvaW50ZXIuICBMZWF2ZSBvdGhlciBmaWVsZHMgaW4g cGxhY2UsIGZvciB0aGUgY2FsbGVyJ3MKLQkgKiB1c2UuCi0JICovCi0JcmFuZ2UtPnZhbGlkID0g ZmFsc2U7Ci0JbWVtc2V0KCZyYW5nZS0+aG1tLCBQT0lTT05fSU5VU0UsIHNpemVvZihyYW5nZS0+ aG1tKSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV91bnJlZ2lzdGVyKTsKLQotc3RhdGlj IGJvb2wgbmVlZHNfcmV0cnkoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCi17Ci0JaWYgKHJhbmdl LT5ub3RpZmllcikKLQkJcmV0dXJuIG1tdV9yYW5nZV9jaGVja19yZXRyeShyYW5nZS0+bm90aWZp ZXIsCi0JCQkJCSAgICAgcmFuZ2UtPm5vdGlmaWVyX3NlcSk7Ci0JcmV0dXJuICFyYW5nZS0+dmFs aWQ7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgaG1tX3dhbGtfb3BzID0g ewogCS5wdWRfZW50cnkJPSBobW1fdm1hX3dhbGtfcHVkLAogCS5wbWRfZW50cnkJPSBobW1fdm1h X3dhbGtfcG1kLApAQCAtOTAwLDIwICs2MzIsMTUgQEAgbG9uZyBobW1fcmFuZ2VfZmF1bHQoc3Ry dWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKIAljb25zdCB1bnNpZ25l ZCBsb25nIGRldmljZV92bWEgPSBWTV9JTyB8IFZNX1BGTk1BUCB8IFZNX01JWEVETUFQOwogCXVu c2lnbmVkIGxvbmcgc3RhcnQgPSByYW5nZS0+c3RhcnQsIGVuZDsKIAlzdHJ1Y3QgaG1tX3ZtYV93 YWxrIGhtbV92bWFfd2FsazsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgbW1fc3Ry dWN0ICptbSA9IHJhbmdlLT5ub3RpZmllci0+bW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWE7CiAJaW50IHJldDsKIAotCWlmIChyYW5nZS0+bm90aWZpZXIpCi0JCW1tID0gcmFuZ2UtPm5v dGlmaWVyLT5tbTsKLQllbHNlCi0JCW1tID0gcmFuZ2UtPmhtbS0+bW11X25vdGlmaWVyLm1tOwot CiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbW0tPm1tYXBfc2VtKTsKIAogCWRvIHsKIAkJLyogSWYg cmFuZ2UgaXMgbm8gbG9uZ2VyIHZhbGlkIGZvcmNlIHJldHJ5LiAqLwotCQlpZiAobmVlZHNfcmV0 cnkocmFuZ2UpKQorCQlpZiAobW11X3JhbmdlX2NoZWNrX3JldHJ5KHJhbmdlLT5ub3RpZmllciwg cmFuZ2UtPm5vdGlmaWVyX3NlcSkpCiAJCQlyZXR1cm4gLUVCVVNZOwogCiAJCXZtYSA9IGZpbmRf dm1hKG1tLCBzdGFydCk7CkBAIC05NDYsNyArNjczLDkgQEAgbG9uZyBobW1fcmFuZ2VfZmF1bHQo c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKIAkJCXN0YXJ0ID0g aG1tX3ZtYV93YWxrLmxhc3Q7CiAKIAkJCS8qIEtlZXAgdHJ5aW5nIHdoaWxlIHRoZSByYW5nZSBp cyB2YWxpZC4gKi8KLQkJfSB3aGlsZSAocmV0ID09IC1FQlVTWSAmJiAhbmVlZHNfcmV0cnkocmFu Z2UpKTsKKwkJfSB3aGlsZSAocmV0ID09IC1FQlVTWSAmJgorCQkJICFtbXVfcmFuZ2VfY2hlY2tf cmV0cnkocmFuZ2UtPm5vdGlmaWVyLAorCQkJCQkJcmFuZ2UtPm5vdGlmaWVyX3NlcSkpOwogCiAJ CWlmIChyZXQpIHsKIAkJCXVuc2lnbmVkIGxvbmcgaTsKQEAgLTEwMDQsNyArNzMzLDggQEAgbG9u ZyBobW1fcmFuZ2VfZG1hX21hcChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgc3RydWN0IGRldmlj ZSAqZGV2aWNlLAogCQkJY29udGludWU7CiAKIAkJLyogQ2hlY2sgaWYgcmFuZ2UgaXMgYmVpbmcg aW52YWxpZGF0ZWQgKi8KLQkJaWYgKG5lZWRzX3JldHJ5KHJhbmdlKSkgeworCQlpZiAobW11X3Jh bmdlX2NoZWNrX3JldHJ5KHJhbmdlLT5ub3RpZmllciwKKwkJCQkJICByYW5nZS0+bm90aWZpZXJf c2VxKSkgewogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byB1bm1hcDsKIAkJfQotLSAKMi4yMy4w CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA== 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=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=unavailable 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 5B233CA9EC0 for ; Mon, 28 Oct 2019 20:17:21 +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 3D54B21721 for ; Mon, 28 Oct 2019 20:17:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3D54B21721 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ziepe.ca Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B8F406EA02; Mon, 28 Oct 2019 20:17:17 +0000 (UTC) Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by gabe.freedesktop.org (Postfix) with ESMTPS id AA9A389D5F for ; Mon, 28 Oct 2019 20:10:52 +0000 (UTC) Received: by mail-qk1-x743.google.com with SMTP id m125so5822879qkd.8 for ; Mon, 28 Oct 2019 13:10:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oam7ohQj1kc8X7oZ0yNH5Qsiwr3vqfv4zRUy2hYn6VU=; b=GSGub8T5716KsMbtRop8ezJSqErUp0LDgIrkwnX53R3qv8TmyFDpk2O+RNfE5IRcjs XMSOoCtc0LHvUeeuY91pGBrIC6Pgg8SCD+ZQGRN9HXdKNJzhyskvL9xjtZhPx0MQyIlr qVOb6YXR0X5Q+1jRYiTqVZpeSes2+4A4UqhJqPDIf1oQmYKE6ra5KHSzesMxRUeVAsgT sL27q+7+V98iSDx4/yLk+2d0I8xswlYHA7G6euIlGJN3KwaOLOGlqIsUFggKuDKwgNWz 62Zhsah5C3mgiFsYQiY+xiRc9W1urmNcteD8klmAubDOBa4xwXIqROQkzKS0ade0ktVw fb9A== X-Gm-Message-State: APjAAAXYc9hxAPQRj9ritVlSeTL7qgvwUhkMaUw5KkNhH2ZhA1Ptq2Ei VnaLrRbzKJKuqz2c1VFfbdLxCw== X-Google-Smtp-Source: APXvYqzFOk0mWTm9zmmEUnrvaGyK7qwShQOI+2XOcxc/OnuoCxvgWFx41ArWQecOobsikGRR1SYw3A== X-Received: by 2002:a37:ac0b:: with SMTP id e11mr9437740qkm.454.1572293451378; Mon, 28 Oct 2019 13:10:51 -0700 (PDT) Received: from ziepe.ca (hlfxns017vw-142-162-113-180.dhcp-dynamic.fibreop.ns.bellaliant.net. [142.162.113.180]) by smtp.gmail.com with ESMTPSA id d10sm1589264qkk.99.2019.10.28.13.10.44 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 28 Oct 2019 13:10:48 -0700 (PDT) Received: from jgg by mlx.ziepe.ca with local (Exim 4.90_1) (envelope-from ) id 1iPBLf-0001hR-OF; Mon, 28 Oct 2019 17:10:43 -0300 From: Jason Gunthorpe To: linux-mm@kvack.org, Jerome Glisse , Ralph Campbell , John Hubbard , Felix.Kuehling@amd.com Subject: [PATCH v2 15/15] mm/hmm: remove hmm_mirror and related Date: Mon, 28 Oct 2019 17:10:32 -0300 Message-Id: <20191028201032.6352-16-jgg@ziepe.ca> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191028201032.6352-1-jgg@ziepe.ca> References: <20191028201032.6352-1-jgg@ziepe.ca> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 28 Oct 2019 20:17:16 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ziepe.ca; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oam7ohQj1kc8X7oZ0yNH5Qsiwr3vqfv4zRUy2hYn6VU=; b=N7d4nLhTvUMAd7m6ziC7Fnj8Fj2CROvNmQEOjInKL4+Co2BowIq9/67UGOKMH9lu3l v1lJgY60Lvap2Ol+aPfOvbu+ct1M49IJCP9kjFJybc7MSm13Yz19vQFIxnvZauHYQnAq Tyed+DS0BV73Lk3U+Muf7IdAsRNmnvS9FYFHJIPWiXHxqb+A8SR5sOQbGgk6pbNcNCbe ZJlgb5V8MwBEuEU6SiQQOf3ZhxPQw5OpEsa0GUzFj1giRGyCsV+YkmtWVYDal1QylK/X j/hvQvUBbitvFj7W8XAgGK6FWzI9bi2GEb/fFY0CTm8OtYBVd8K8YIP27/9hLoeA7SOy TP1A== X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Juergen Gross , David Zhou , Mike Marciniszyn , Stefano Stabellini , Oleksandr Andrushchenko , linux-rdma@vger.kernel.org, nouveau@lists.freedesktop.org, Dennis Dalessandro , amd-gfx@lists.freedesktop.org, Christoph Hellwig , Jason Gunthorpe , dri-devel@lists.freedesktop.org, Alex Deucher , xen-devel@lists.xenproject.org, Boris Ostrovsky , Petr Cvek , =?UTF-8?q?Christian=20K=C3=B6nig?= , Ben Skeggs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" Message-ID: <20191028201032.5DGBPm175eZr01Cqs0PvbfkzYNkwPgRHCliw6W3r920@z> RnJvbTogSmFzb24gR3VudGhvcnBlIDxqZ2dAbWVsbGFub3guY29tPgoKVGhlIG9ubHkgdHdvIHVz ZXJzIG9mIHRoaXMgYXJlIG5vdyBjb252ZXJ0ZWQgdG8gdXNlIG1tdV9yYW5nZV9ub3RpZmllciwK ZGVsZXRlIGFsbCB0aGUgY29kZSBhbmQgdXBkYXRlIGhtbS5yc3QuCgpSZXZpZXdlZC1ieTogSsOp csO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+ClNpZ25lZC1vZmYtYnk6IEphc29uIEd1 bnRob3JwZSA8amdnQG1lbGxhbm94LmNvbT4KLS0tCiBEb2N1bWVudGF0aW9uL3ZtL2htbS5yc3Qg fCAxMDUgKysrKy0tLS0tLS0tLS0tCiBpbmNsdWRlL2xpbnV4L2htbS5oICAgICAgfCAxODMgKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbW0vS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAxIC0K IG1tL2htbS5jICAgICAgICAgICAgICAgICB8IDI4NCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgNTQwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vaG1tLnJzdCBiL0RvY3Vt ZW50YXRpb24vdm0vaG1tLnJzdAppbmRleCAwYTU5NjBiZWNjZjc2ZC4uYTI0NzY0MzAzNWM0ZTIg MTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vaG1tLnJzdAorKysgYi9Eb2N1bWVudGF0aW9u L3ZtL2htbS5yc3QKQEAgLTE0Nyw0OSArMTQ3LDE2IEBAIEFkZHJlc3Mgc3BhY2UgbWlycm9yaW5n IGltcGxlbWVudGF0aW9uIGFuZCBBUEkKIEFkZHJlc3Mgc3BhY2UgbWlycm9yaW5nJ3MgbWFpbiBv YmplY3RpdmUgaXMgdG8gYWxsb3cgZHVwbGljYXRpb24gb2YgYSByYW5nZSBvZgogQ1BVIHBhZ2Ug dGFibGUgaW50byBhIGRldmljZSBwYWdlIHRhYmxlOyBITU0gaGVscHMga2VlcCBib3RoIHN5bmNo cm9uaXplZC4gQQogZGV2aWNlIGRyaXZlciB0aGF0IHdhbnRzIHRvIG1pcnJvciBhIHByb2Nlc3Mg YWRkcmVzcyBzcGFjZSBtdXN0IHN0YXJ0IHdpdGggdGhlCi1yZWdpc3RyYXRpb24gb2YgYW4gaG1t X21pcnJvciBzdHJ1Y3Q6OgotCi0gaW50IGhtbV9taXJyb3JfcmVnaXN0ZXIoc3RydWN0IGhtbV9t aXJyb3IgKm1pcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0 ICptbSk7Ci0KLVRoZSBtaXJyb3Igc3RydWN0IGhhcyBhIHNldCBvZiBjYWxsYmFja3MgdGhhdCBh cmUgdXNlZAotdG8gcHJvcGFnYXRlIENQVSBwYWdlIHRhYmxlczo6Ci0KLSBzdHJ1Y3QgaG1tX21p cnJvcl9vcHMgewotICAgICAvKiByZWxlYXNlKCkgLSByZWxlYXNlIGhtbV9taXJyb3IKLSAgICAg ICoKLSAgICAgICogQG1pcnJvcjogcG9pbnRlciB0byBzdHJ1Y3QgaG1tX21pcnJvcgotICAgICAg KgotICAgICAgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBtbV9zdHJ1Y3QgaXMgYmVpbmcgcmVs ZWFzZWQuICBUaGUgY2FsbGJhY2sKLSAgICAgICogbXVzdCBlbnN1cmUgdGhhdCBhbGwgYWNjZXNz IHRvIGFueSBwYWdlcyBvYnRhaW5lZCBmcm9tIHRoaXMgbWlycm9yCi0gICAgICAqIGlzIGhhbHRl ZCBiZWZvcmUgdGhlIGNhbGxiYWNrIHJldHVybnMuIEFsbCBmdXR1cmUgYWNjZXNzIHNob3VsZAot ICAgICAgKiBmYXVsdC4KLSAgICAgICovCi0gICAgIHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgaG1t X21pcnJvciAqbWlycm9yKTsKLQotICAgICAvKiBzeW5jX2NwdV9kZXZpY2VfcGFnZXRhYmxlcygp IC0gc3luY2hyb25pemUgcGFnZSB0YWJsZXMKLSAgICAgICoKLSAgICAgICogQG1pcnJvcjogcG9p bnRlciB0byBzdHJ1Y3QgaG1tX21pcnJvcgotICAgICAgKiBAdXBkYXRlOiB1cGRhdGUgaW5mb3Jt YXRpb24gKHNlZSBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlKQotICAgICAgKiBSZXR1cm46IC1F QUdBSU4gaWYgdXBkYXRlLmJsb2NrYWJsZSBmYWxzZSBhbmQgY2FsbGJhY2sgbmVlZCB0bwotICAg ICAgKiAgICAgICAgIGJsb2NrLCAwIG90aGVyd2lzZS4KLSAgICAgICoKLSAgICAgICogVGhpcyBj YWxsYmFjayB1bHRpbWF0ZWx5IG9yaWdpbmF0ZXMgZnJvbSBtbXVfbm90aWZpZXJzIHdoZW4gdGhl IENQVQotICAgICAgKiBwYWdlIHRhYmxlIGlzIHVwZGF0ZWQuIFRoZSBkZXZpY2UgZHJpdmVyIG11 c3QgdXBkYXRlIGl0cyBwYWdlIHRhYmxlCi0gICAgICAqIGluIHJlc3BvbnNlIHRvIHRoaXMgY2Fs bGJhY2suIFRoZSB1cGRhdGUgYXJndW1lbnQgdGVsbHMgd2hhdCBhY3Rpb24KLSAgICAgICogdG8g cGVyZm9ybS4KLSAgICAgICoKLSAgICAgICogVGhlIGRldmljZSBkcml2ZXIgbXVzdCBub3QgcmV0 dXJuIGZyb20gdGhpcyBjYWxsYmFjayB1bnRpbCB0aGUgZGV2aWNlCi0gICAgICAqIHBhZ2UgdGFi bGVzIGFyZSBjb21wbGV0ZWx5IHVwZGF0ZWQgKFRMQnMgZmx1c2hlZCwgZXRjKTsgdGhpcyBpcyBh Ci0gICAgICAqIHN5bmNocm9ub3VzIGNhbGwuCi0gICAgICAqLwotICAgICBpbnQgKCpzeW5jX2Nw dV9kZXZpY2VfcGFnZXRhYmxlcykoc3RydWN0IGhtbV9taXJyb3IgKm1pcnJvciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBobW1fdXBkYXRlICp1 cGRhdGUpOwotIH07Ci0KLVRoZSBkZXZpY2UgZHJpdmVyIG11c3QgcGVyZm9ybSB0aGUgdXBkYXRl IGFjdGlvbiB0byB0aGUgcmFuZ2UgKG1hcmsgcmFuZ2UKLXJlYWQgb25seSwgb3IgZnVsbHkgdW5t YXAsIGV0Yy4pLiBUaGUgZGV2aWNlIG11c3QgY29tcGxldGUgdGhlIHVwZGF0ZSBiZWZvcmUKLXRo ZSBkcml2ZXIgY2FsbGJhY2sgcmV0dXJucy4KK3JlZ2lzdHJhdGlvbiBvZiBhIG1tdV9yYW5nZV9u b3RpZmllcjo6CisKKyBtcm4tPm9wcyA9ICZkcml2ZXJfb3BzOworIGludCBtbXVfcmFuZ2Vfbm90 aWZpZXJfaW5zZXJ0KHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybiwKKwkJCSAgICAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAorCQkJICAgICAgc3RydWN0 IG1tX3N0cnVjdCAqbW0pOworCitEdXJpbmcgdGhlIGRyaXZlcl9vcHMtPmludmFsaWRhdGUoKSBj YWxsYmFjayB0aGUgZGV2aWNlIGRyaXZlciBtdXN0IHBlcmZvcm0KK3RoZSB1cGRhdGUgYWN0aW9u IHRvIHRoZSByYW5nZSAobWFyayByYW5nZSByZWFkIG9ubHksIG9yIGZ1bGx5IHVubWFwLAorZXRj LikuIFRoZSBkZXZpY2UgbXVzdCBjb21wbGV0ZSB0aGUgdXBkYXRlIGJlZm9yZSB0aGUgZHJpdmVy IGNhbGxiYWNrIHJldHVybnMuCiAKIFdoZW4gdGhlIGRldmljZSBkcml2ZXIgd2FudHMgdG8gcG9w dWxhdGUgYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcywgaXQgY2FuCiB1c2U6OgpAQCAtMjE2 LDcwICsxODMsNDYgQEAgVGhlIHVzYWdlIHBhdHRlcm4gaXM6OgogICAgICAgc3RydWN0IGhtbV9y YW5nZSByYW5nZTsKICAgICAgIC4uLgogCisgICAgICByYW5nZS5ub3RpZmllciA9ICZtcm47CiAg ICAgICByYW5nZS5zdGFydCA9IC4uLjsKICAgICAgIHJhbmdlLmVuZCA9IC4uLjsKICAgICAgIHJh bmdlLnBmbnMgPSAuLi47CiAgICAgICByYW5nZS5mbGFncyA9IC4uLjsKICAgICAgIHJhbmdlLnZh bHVlcyA9IC4uLjsKICAgICAgIHJhbmdlLnBmbl9zaGlmdCA9IC4uLjsKLSAgICAgIGhtbV9yYW5n ZV9yZWdpc3RlcigmcmFuZ2UsIG1pcnJvcik7CiAKLSAgICAgIC8qCi0gICAgICAgKiBKdXN0IHdh aXQgZm9yIHJhbmdlIHRvIGJlIHZhbGlkLCBzYWZlIHRvIGlnbm9yZSByZXR1cm4gdmFsdWUgYXMg d2UKLSAgICAgICAqIHdpbGwgdXNlIHRoZSByZXR1cm4gdmFsdWUgb2YgaG1tX3JhbmdlX2ZhdWx0 KCkgYmVsb3cgdW5kZXIgdGhlCi0gICAgICAgKiBtbWFwX3NlbSB0byBhc2NlcnRhaW4gdGhlIHZh bGlkaXR5IG9mIHRoZSByYW5nZS4KLSAgICAgICAqLwotICAgICAgaG1tX3JhbmdlX3dhaXRfdW50 aWxfdmFsaWQoJnJhbmdlLCBUSU1FT1VUX0lOX01TRUMpOworICAgICAgaWYgKCFtbWdldF9ub3Rf emVybyhtcm4tPm5vdGlmaWVyLm1tKSkKKyAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKIAogIGFn YWluOgorICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X3JhbmdlX3JlYWRfYmVnaW4oJm1y bik7CiAgICAgICBkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAgICAgICByZXQgPSBobW1fcmFu Z2VfZmF1bHQoJnJhbmdlLCBITU1fUkFOR0VfU05BUFNIT1QpOwogICAgICAgaWYgKHJldCkgewog ICAgICAgICAgIHVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0gICAgICAgICAgaWYgKHJldCA9PSAt RUJVU1kpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBObyBuZWVkIHRvIGNoZWNr IGhtbV9yYW5nZV93YWl0X3VudGlsX3ZhbGlkKCkgcmV0dXJuIHZhbHVlCi0gICAgICAgICAgICAg KiBvbiByZXRyeSB3ZSB3aWxsIGdldCBwcm9wZXIgZXJyb3Igd2l0aCBobW1fcmFuZ2VfZmF1bHQo KQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBobW1fcmFuZ2Vfd2FpdF91bnRpbF92YWxp ZCgmcmFuZ2UsIFRJTUVPVVRfSU5fTVNFQyk7Ci0gICAgICAgICAgICBnb3RvIGFnYWluOwotICAg ICAgICAgIH0KLSAgICAgICAgICBobW1fcmFuZ2VfdW5yZWdpc3RlcigmcmFuZ2UpOworICAgICAg ICAgIGlmIChyZXQgPT0gLUVCVVNZKQorICAgICAgICAgICAgICAgICBnb3RvIGFnYWluOwogICAg ICAgICAgIHJldHVybiByZXQ7CiAgICAgICB9CisgICAgICB1cF9yZWFkKCZtbS0+bW1hcF9zZW0p OworCiAgICAgICB0YWtlX2xvY2soZHJpdmVyLT51cGRhdGUpOwotICAgICAgaWYgKCFobW1fcmFu Z2VfdmFsaWQoJnJhbmdlKSkgeworICAgICAgaWYgKG1tdV9yYW5nZV9yZWFkX3JldHJ5KCZtcm4s IHJhbmdlLm5vdGlmaWVyX3NlcSkgewogICAgICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItPnVw ZGF0ZSk7Ci0gICAgICAgICAgdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKICAgICAgICAgICBnb3Rv IGFnYWluOwogICAgICAgfQogCi0gICAgICAvLyBVc2UgcGZucyBhcnJheSBjb250ZW50IHRvIHVw ZGF0ZSBkZXZpY2UgcGFnZSB0YWJsZQorICAgICAgLyogVXNlIHBmbnMgYXJyYXkgY29udGVudCB0 byB1cGRhdGUgZGV2aWNlIHBhZ2UgdGFibGUsCisgICAgICAgKiB1bmRlciB0aGUgdXBkYXRlIGxv Y2sgKi8KIAotICAgICAgaG1tX3JhbmdlX3VucmVnaXN0ZXIoJnJhbmdlKTsKICAgICAgIHJlbGVh c2VfbG9jayhkcml2ZXItPnVwZGF0ZSk7Ci0gICAgICB1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwog ICAgICAgcmV0dXJuIDA7CiAgfQogCiBUaGUgZHJpdmVyLT51cGRhdGUgbG9jayBpcyB0aGUgc2Ft ZSBsb2NrIHRoYXQgdGhlIGRyaXZlciB0YWtlcyBpbnNpZGUgaXRzCi1zeW5jX2NwdV9kZXZpY2Vf cGFnZXRhYmxlcygpIGNhbGxiYWNrLiBUaGF0IGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxs aW5nCi1obW1fcmFuZ2VfdmFsaWQoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVu dCBDUFUgcGFnZSB0YWJsZSB1cGRhdGUuCi0KLUhNTSBpbXBsZW1lbnRzIGFsbCB0aGlzIG9uIHRv cCBvZiB0aGUgbW11X25vdGlmaWVyIEFQSSBiZWNhdXNlIHdlIHdhbnRlZCBhCi1zaW1wbGVyIEFQ SSBhbmQgYWxzbyB0byBiZSBhYmxlIHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucyBsYXR0ZXIgb24g bGlrZSBkb2luZwotY29uY3VycmVudCBkZXZpY2UgdXBkYXRlcyBpbiBtdWx0aS1kZXZpY2VzIHNj ZW5hcmlvLgotCi1ITU0gYWxzbyBzZXJ2ZXMgYXMgYW4gaW1wZWRhbmNlIG1pc21hdGNoIGJldHdl ZW4gaG93IENQVSBwYWdlIHRhYmxlIHVwZGF0ZXMKLWFyZSBkb25lIChieSBDUFUgd3JpdGUgdG8g dGhlIHBhZ2UgdGFibGUgYW5kIFRMQiBmbHVzaGVzKSBhbmQgaG93IGRldmljZXMKLXVwZGF0ZSB0 aGVpciBvd24gcGFnZSB0YWJsZS4gRGV2aWNlIHVwZGF0ZXMgYXJlIGEgbXVsdGktc3RlcCBwcm9j ZXNzLiBGaXJzdCwKLWFwcHJvcHJpYXRlIGNvbW1hbmRzIGFyZSB3cml0dGVuIHRvIGEgYnVmZmVy LCB0aGVuIHRoaXMgYnVmZmVyIGlzIHNjaGVkdWxlZCBmb3IKLWV4ZWN1dGlvbiBvbiB0aGUgZGV2 aWNlLiBJdCBpcyBvbmx5IG9uY2UgdGhlIGRldmljZSBoYXMgZXhlY3V0ZWQgY29tbWFuZHMgaW4K LXRoZSBidWZmZXIgdGhhdCB0aGUgdXBkYXRlIGlzIGRvbmUuIENyZWF0aW5nIGFuZCBzY2hlZHVs aW5nIHRoZSB1cGRhdGUgY29tbWFuZAotYnVmZmVyIGNhbiBoYXBwZW4gY29uY3VycmVudGx5IGZv ciBtdWx0aXBsZSBkZXZpY2VzLiBXYWl0aW5nIGZvciBlYWNoIGRldmljZSB0bwotcmVwb3J0IGNv bW1hbmRzIGFzIGV4ZWN1dGVkIGlzIHNlcmlhbGl6ZWQgKHRoZXJlIGlzIG5vIHBvaW50IGluIGRv aW5nIHRoaXMKLWNvbmN1cnJlbnRseSkuCi0KK2ludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBs b2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZworbW11X3JhbmdlX3JlYWRfcmV0cnkoKSB0 byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZQordXBkYXRl LgogCiBMZXZlcmFnZSBkZWZhdWx0X2ZsYWdzIGFuZCBwZm5fZmxhZ3NfbWFzawogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlu dXgvaG1tLmggYi9pbmNsdWRlL2xpbnV4L2htbS5oCmluZGV4IDI2NjZlYjA4YTQwNjE1Li5iNGFm NTE3MzUyMzIzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaAorKysgYi9pbmNsdWRl L2xpbnV4L2htbS5oCkBAIC02OCwyOSArNjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRp b24uaD4KICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4KIAotCi0vKgotICogc3RydWN0 IGhtbSAtIEhNTSBwZXIgbW0gc3RydWN0Ci0gKgotICogQG1tOiBtbSBzdHJ1Y3QgdGhpcyBITU0g c3RydWN0IGlzIGJvdW5kIHRvCi0gKiBAbG9jazogbG9jayBwcm90ZWN0aW5nIHJhbmdlcyBsaXN0 Ci0gKiBAcmFuZ2VzOiBsaXN0IG9mIHJhbmdlIGJlaW5nIHNuYXBzaG90dGVkCi0gKiBAbWlycm9y czogbGlzdCBvZiBtaXJyb3JzIGZvciB0aGlzIG1tCi0gKiBAbW11X25vdGlmaWVyOiBtbXUgbm90 aWZpZXIgdG8gdHJhY2sgdXBkYXRlcyB0byBDUFUgcGFnZSB0YWJsZQotICogQG1pcnJvcnNfc2Vt OiByZWFkL3dyaXRlIHNlbWFwaG9yZSBwcm90ZWN0aW5nIHRoZSBtaXJyb3JzIGxpc3QKLSAqIEB3 cTogd2FpdCBxdWV1ZSBmb3IgdXNlciB3YWl0aW5nIG9uIGEgcmFuZ2UgaW52YWxpZGF0aW9uCi0g KiBAbm90aWZpZXJzOiBjb3VudCBvZiBhY3RpdmUgbW11IG5vdGlmaWVycwotICovCi1zdHJ1Y3Qg aG1tIHsKLQlzdHJ1Y3QgbW11X25vdGlmaWVyCW1tdV9ub3RpZmllcjsKLQlzcGlubG9ja190CQly YW5nZXNfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXJhbmdlczsKLQlzdHJ1Y3QgbGlzdF9oZWFk CW1pcnJvcnM7Ci0Jc3RydWN0IHJ3X3NlbWFwaG9yZQltaXJyb3JzX3NlbTsKLQl3YWl0X3F1ZXVl X2hlYWRfdAl3cTsKLQlsb25nCQkJbm90aWZpZXJzOwotfTsKLQogLyoKICAqIGhtbV9wZm5fZmxh Z19lIC0gSE1NIGZsYWcgZW51bXMKICAqCkBAIC0xNDMsOSArMTIwLDggQEAgZW51bSBobW1fcGZu X3ZhbHVlX2UgewogLyoKICAqIHN0cnVjdCBobW1fcmFuZ2UgLSB0cmFjayBpbnZhbGlkYXRpb24g bG9jayBvbiB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UKICAqCi0gKiBAbm90aWZpZXI6IGFuIG9wdGlv bmFsIG1tdV9yYW5nZV9ub3RpZmllcgotICogQG5vdGlmaWVyX3NlcTogd2hlbiBub3RpZmllciBp cyB1c2VkIHRoaXMgaXMgdGhlIHJlc3VsdCBvZgotICogICAgICAgICAgICAgICAgbW11X3Jhbmdl X3JlYWRfYmVnaW4oKQorICogQG5vdGlmaWVyOiBhIG1tdV9yYW5nZV9ub3RpZmllciB0aGF0IGlu Y2x1ZGVzIHRoZSBzdGFydC9lbmQKKyAqIEBub3RpZmllcl9zZXE6IHJlc3VsdCBvZiBtbXVfcmFu Z2VfcmVhZF9iZWdpbigpCiAgKiBAaG1tOiB0aGUgY29yZSBITU0gc3RydWN0dXJlIHRoaXMgcmFu Z2UgaXMgYWN0aXZlIGFnYWluc3QKICAqIEB2bWE6IHRoZSB2bSBhcmVhIHN0cnVjdCBmb3IgdGhl IHJhbmdlCiAgKiBAbGlzdDogYWxsIHJhbmdlIGxvY2sgYXJlIG9uIGEgbGlzdApAQCAtMTYyLDgg KzEzOCw2IEBAIGVudW0gaG1tX3Bmbl92YWx1ZV9lIHsKIHN0cnVjdCBobW1fcmFuZ2UgewogCXN0 cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm5vdGlmaWVyOwogCXVuc2lnbmVkIGxvbmcJCW5vdGlm aWVyX3NlcTsKLQlzdHJ1Y3QgaG1tCQkqaG1tOwotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAl1 bnNpZ25lZCBsb25nCQlzdGFydDsKIAl1bnNpZ25lZCBsb25nCQllbmQ7CiAJdWludDY0X3QJCSpw Zm5zOwpAQCAtMTcyLDMyICsxNDYsOCBAQCBzdHJ1Y3QgaG1tX3JhbmdlIHsKIAl1aW50NjRfdAkJ ZGVmYXVsdF9mbGFnczsKIAl1aW50NjRfdAkJcGZuX2ZsYWdzX21hc2s7CiAJdWludDhfdAkJCXBm bl9zaGlmdDsKLQlib29sCQkJdmFsaWQ7CiB9OwogCi0vKgotICogaG1tX3JhbmdlX3dhaXRfdW50 aWxfdmFsaWQoKSAtIHdhaXQgZm9yIHJhbmdlIHRvIGJlIHZhbGlkCi0gKiBAcmFuZ2U6IHJhbmdl IGFmZmVjdGVkIGJ5IGludmFsaWRhdGlvbiB0byB3YWl0IG9uCi0gKiBAdGltZW91dDogdGltZSBv dXQgZm9yIHdhaXQgaW4gbXMgKGllIGFib3J0IHdhaXQgYWZ0ZXIgdGhhdCBwZXJpb2Qgb2YgdGlt ZSkKLSAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmFuZ2UgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lz ZS4KLSAqLwotc3RhdGljIGlubGluZSBib29sIGhtbV9yYW5nZV93YWl0X3VudGlsX3ZhbGlkKHN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQp Ci17Ci0JcmV0dXJuIHdhaXRfZXZlbnRfdGltZW91dChyYW5nZS0+aG1tLT53cSwgcmFuZ2UtPnZh bGlkLAotCQkJCSAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSkgIT0gMDsKLX0KLQotLyoKLSAq IGhtbV9yYW5nZV92YWxpZCgpIC0gdGVzdCBpZiBhIHJhbmdlIGlzIHZhbGlkIG9yIG5vdAotICog QHJhbmdlOiByYW5nZQotICogUmV0dXJuOiB0cnVlIGlmIHRoZSByYW5nZSBpcyB2YWxpZCwgZmFs c2Ugb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wgaG1tX3JhbmdlX3ZhbGlkKHN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQotewotCXJldHVybiByYW5nZS0+dmFsaWQ7Ci19Ci0KIC8q CiAgKiBobW1fZGV2aWNlX2VudHJ5X3RvX3BhZ2UoKSAtIHJldHVybiBzdHJ1Y3QgcGFnZSBwb2lu dGVkIHRvIGJ5IGEgZGV2aWNlIGVudHJ5CiAgKiBAcmFuZ2U6IHJhbmdlIHVzZSB0byBkZWNvZGUg ZGV2aWNlIGVudHJ5IHZhbHVlCkBAIC0yNjcsMTExICsyMTcsNiBAQCBzdGF0aWMgaW5saW5lIHVp bnQ2NF90IGhtbV9kZXZpY2VfZW50cnlfZnJvbV9wZm4oY29uc3Qgc3RydWN0IGhtbV9yYW5nZSAq cmFuZ2UsCiAJCXJhbmdlLT5mbGFnc1tITU1fUEZOX1ZBTElEXTsKIH0KIAotLyoKLSAqIE1pcnJv cmluZzogaG93IHRvIHN5bmNocm9uaXplIGRldmljZSBwYWdlIHRhYmxlIHdpdGggQ1BVIHBhZ2Ug dGFibGUuCi0gKgotICogQSBkZXZpY2UgZHJpdmVyIHRoYXQgaXMgcGFydGljaXBhdGluZyBpbiBI TU0gbWlycm9yaW5nIG11c3QgYWx3YXlzCi0gKiBzeW5jaHJvbml6ZSB3aXRoIENQVSBwYWdlIHRh YmxlIHVwZGF0ZXMuIEZvciB0aGlzLCBkZXZpY2UgZHJpdmVycyBjYW4gZWl0aGVyCi0gKiBkaXJl Y3RseSB1c2UgbW11X25vdGlmaWVyIEFQSXMgb3IgdGhleSBjYW4gdXNlIHRoZSBobW1fbWlycm9y IEFQSS4gRGV2aWNlCi0gKiBkcml2ZXJzIGNhbiBkZWNpZGUgdG8gcmVnaXN0ZXIgb25lIG1pcnJv ciBwZXIgZGV2aWNlIHBlciBwcm9jZXNzLCBvciBqdXN0Ci0gKiBvbmUgbWlycm9yIHBlciBwcm9j ZXNzIGZvciBhIGdyb3VwIG9mIGRldmljZXMuIFRoZSBwYXR0ZXJuIGlzOgotICoKLSAqICAgICAg aW50IGRldmljZV9iaW5kX2FkZHJlc3Nfc3BhY2UoLi4uLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwg Li4uKQotICogICAgICB7Ci0gKiAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2FkZHJlc3Nfc3BhY2Ug KmRhczsKLSAqCi0gKiAgICAgICAgICAvLyBEZXZpY2UgZHJpdmVyIHNwZWNpZmljIGluaXRpYWxp emF0aW9uLCBhbmQgYWxsb2NhdGlvbiBvZiBkYXMKLSAqICAgICAgICAgIC8vIHdoaWNoIGNvbnRh aW5zIGFuIGhtbV9taXJyb3Igc3RydWN0IGFzIG9uZSBvZiBpdHMgZmllbGRzLgotICogICAgICAg ICAgLi4uCi0gKgotICogICAgICAgICAgcmV0ID0gaG1tX21pcnJvcl9yZWdpc3RlcigmZGFzLT5t aXJyb3IsIG1tLCAmZGV2aWNlX21pcnJvcl9vcHMpOwotICogICAgICAgICAgaWYgKHJldCkgewot ICogICAgICAgICAgICAgIC8vIENsZWFudXAgb24gZXJyb3IKLSAqICAgICAgICAgICAgICByZXR1 cm4gcmV0OwotICogICAgICAgICAgfQotICoKLSAqICAgICAgICAgIC8vIE90aGVyIGRldmljZSBk cml2ZXIgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24KLSAqICAgICAgICAgIC4uLgotICogICAgICB9 Ci0gKgotICogT25jZSBhbiBobW1fbWlycm9yIGlzIHJlZ2lzdGVyZWQgZm9yIGFuIGFkZHJlc3Mg c3BhY2UsIHRoZSBkZXZpY2UgZHJpdmVyCi0gKiB3aWxsIGdldCBjYWxsYmFja3MgdGhyb3VnaCBz eW5jX2NwdV9kZXZpY2VfcGFnZXRhYmxlcygpIG9wZXJhdGlvbiAoc2VlCi0gKiBobW1fbWlycm9y X29wcyBzdHJ1Y3QpLgotICoKLSAqIERldmljZSBkcml2ZXIgbXVzdCBub3QgZnJlZSB0aGUgc3Ry dWN0IGNvbnRhaW5pbmcgdGhlIGhtbV9taXJyb3Igc3RydWN0Ci0gKiBiZWZvcmUgY2FsbGluZyBo bW1fbWlycm9yX3VucmVnaXN0ZXIoKS4gVGhlIGV4cGVjdGVkIHVzYWdlIGlzIHRvIGRvIHRoYXQg d2hlbgotICogdGhlIGRldmljZSBkcml2ZXIgaXMgdW5iaW5kaW5nIGZyb20gYW4gYWRkcmVzcyBz cGFjZS4KLSAqCi0gKgotICogICAgICB2b2lkIGRldmljZV91bmJpbmRfYWRkcmVzc19zcGFjZShz dHJ1Y3QgZGV2aWNlX2FkZHJlc3Nfc3BhY2UgKmRhcykKLSAqICAgICAgewotICogICAgICAgICAg Ly8gRGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjbGVhbnVwCi0gKiAgICAgICAgICAuLi4KLSAqCi0g KiAgICAgICAgICBobW1fbWlycm9yX3VucmVnaXN0ZXIoJmRhcy0+bWlycm9yKTsKLSAqCi0gKiAg ICAgICAgICAvLyBPdGhlciBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNsZWFudXAsIGFuZCBub3cg ZGFzIGNhbiBiZSBmcmVlZAotICogICAgICAgICAgLi4uCi0gKiAgICAgIH0KLSAqLwotCi1zdHJ1 Y3QgaG1tX21pcnJvcjsKLQotLyoKLSAqIHN0cnVjdCBobW1fbWlycm9yX29wcyAtIEhNTSBtaXJy b3IgZGV2aWNlIG9wZXJhdGlvbnMgY2FsbGJhY2sKLSAqCi0gKiBAdXBkYXRlOiBjYWxsYmFjayB0 byB1cGRhdGUgcmFuZ2Ugb24gYSBkZXZpY2UKLSAqLwotc3RydWN0IGhtbV9taXJyb3Jfb3BzIHsK LQkvKiByZWxlYXNlKCkgLSByZWxlYXNlIGhtbV9taXJyb3IKLQkgKgotCSAqIEBtaXJyb3I6IHBv aW50ZXIgdG8gc3RydWN0IGhtbV9taXJyb3IKLQkgKgotCSAqIFRoaXMgaXMgY2FsbGVkIHdoZW4g dGhlIG1tX3N0cnVjdCBpcyBiZWluZyByZWxlYXNlZC4gIFRoZSBjYWxsYmFjawotCSAqIG11c3Qg ZW5zdXJlIHRoYXQgYWxsIGFjY2VzcyB0byBhbnkgcGFnZXMgb2J0YWluZWQgZnJvbSB0aGlzIG1p cnJvcgotCSAqIGlzIGhhbHRlZCBiZWZvcmUgdGhlIGNhbGxiYWNrIHJldHVybnMuIEFsbCBmdXR1 cmUgYWNjZXNzIHNob3VsZAotCSAqIGZhdWx0LgotCSAqLwotCXZvaWQgKCpyZWxlYXNlKShzdHJ1 Y3QgaG1tX21pcnJvciAqbWlycm9yKTsKLQotCS8qIHN5bmNfY3B1X2RldmljZV9wYWdldGFibGVz KCkgLSBzeW5jaHJvbml6ZSBwYWdlIHRhYmxlcwotCSAqCi0JICogQG1pcnJvcjogcG9pbnRlciB0 byBzdHJ1Y3QgaG1tX21pcnJvcgotCSAqIEB1cGRhdGU6IHVwZGF0ZSBpbmZvcm1hdGlvbiAoc2Vl IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UpCi0JICogUmV0dXJuOiAtRUFHQUlOIGlmIG1tdV9u b3RpZmllcl9yYW5nZV9ibG9ja2FibGUodXBkYXRlKSBpcyBmYWxzZQotCSAqIGFuZCBjYWxsYmFj ayBuZWVkcyB0byBibG9jaywgMCBvdGhlcndpc2UuCi0JICoKLQkgKiBUaGlzIGNhbGxiYWNrIHVs dGltYXRlbHkgb3JpZ2luYXRlcyBmcm9tIG1tdV9ub3RpZmllcnMgd2hlbiB0aGUgQ1BVCi0JICog cGFnZSB0YWJsZSBpcyB1cGRhdGVkLiBUaGUgZGV2aWNlIGRyaXZlciBtdXN0IHVwZGF0ZSBpdHMg cGFnZSB0YWJsZQotCSAqIGluIHJlc3BvbnNlIHRvIHRoaXMgY2FsbGJhY2suIFRoZSB1cGRhdGUg YXJndW1lbnQgdGVsbHMgd2hhdCBhY3Rpb24KLQkgKiB0byBwZXJmb3JtLgotCSAqCi0JICogVGhl IGRldmljZSBkcml2ZXIgbXVzdCBub3QgcmV0dXJuIGZyb20gdGhpcyBjYWxsYmFjayB1bnRpbCB0 aGUgZGV2aWNlCi0JICogcGFnZSB0YWJsZXMgYXJlIGNvbXBsZXRlbHkgdXBkYXRlZCAoVExCcyBm bHVzaGVkLCBldGMpOyB0aGlzIGlzIGEKLQkgKiBzeW5jaHJvbm91cyBjYWxsLgotCSAqLwotCWlu dCAoKnN5bmNfY3B1X2RldmljZV9wYWdldGFibGVzKSgKLQkJc3RydWN0IGhtbV9taXJyb3IgKm1p cnJvciwKLQkJY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqdXBkYXRlKTsKLX07Ci0K LS8qCi0gKiBzdHJ1Y3QgaG1tX21pcnJvciAtIG1pcnJvciBzdHJ1Y3QgZm9yIGEgZGV2aWNlIGRy aXZlcgotICoKLSAqIEBobW06IHBvaW50ZXIgdG8gc3RydWN0IGhtbSAod2hpY2ggaXMgdW5pcXVl IHBlciBtbV9zdHJ1Y3QpCi0gKiBAb3BzOiBkZXZpY2UgZHJpdmVyIGNhbGxiYWNrIGZvciBITU0g bWlycm9yIG9wZXJhdGlvbnMKLSAqIEBsaXN0OiBmb3IgbGlzdCBvZiBtaXJyb3JzIG9mIGEgZ2l2 ZW4gbW0KLSAqCi0gKiBFYWNoIGFkZHJlc3Mgc3BhY2UgKG1tX3N0cnVjdCkgYmVpbmcgbWlycm9y ZWQgYnkgYSBkZXZpY2UgbXVzdCByZWdpc3RlciBvbmUKLSAqIGluc3RhbmNlIG9mIGFuIGhtbV9t aXJyb3Igc3RydWN0IHdpdGggSE1NLiBITU0gd2lsbCB0cmFjayB0aGUgbGlzdCBvZiBhbGwKLSAq IG1pcnJvcnMgZm9yIGVhY2ggbW1fc3RydWN0LgotICovCi1zdHJ1Y3QgaG1tX21pcnJvciB7Ci0J c3RydWN0IGhtbQkJCSpobW07Ci0JY29uc3Qgc3RydWN0IGhtbV9taXJyb3Jfb3BzCSpvcHM7Ci0J c3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKLX07Ci0KIC8qCiAgKiBSZXRyeSBmYXVsdCBpZiBub24t YmxvY2tpbmcsIGRyb3AgbW1hcF9zZW0gYW5kIHJldHVybiAtRUFHQUlOIGluIHRoYXQgY2FzZS4K ICAqLwpAQCAtMzgxLDE1ICsyMjYsOSBAQCBzdHJ1Y3QgaG1tX21pcnJvciB7CiAjZGVmaW5lIEhN TV9GQVVMVF9TTkFQU0hPVAkJKDEgPDwgMSkKIAogI2lmZGVmIENPTkZJR19ITU1fTUlSUk9SCi1p bnQgaG1tX21pcnJvcl9yZWdpc3RlcihzdHJ1Y3QgaG1tX21pcnJvciAqbWlycm9yLCBzdHJ1Y3Qg bW1fc3RydWN0ICptbSk7Ci12b2lkIGhtbV9taXJyb3JfdW5yZWdpc3RlcihzdHJ1Y3QgaG1tX21p cnJvciAqbWlycm9yKTsKLQogLyoKICAqIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi92bS9obW0u cnN0IGZvciBob3cgdG8gdXNlIHRoZSByYW5nZSBBUEkuCiAgKi8KLWludCBobW1fcmFuZ2VfcmVn aXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHN0cnVjdCBobW1fbWlycm9yICptaXJyb3Ip Owotdm9pZCBobW1fcmFuZ2VfdW5yZWdpc3RlcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7Ci0K IGxvbmcgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCB1bnNpZ25lZCBp bnQgZmxhZ3MpOwogCiBsb25nIGhtbV9yYW5nZV9kbWFfbWFwKHN0cnVjdCBobW1fcmFuZ2UgKnJh bmdlLApAQCAtNDAxLDI0ICsyNDAsNiBAQCBsb25nIGhtbV9yYW5nZV9kbWFfdW5tYXAoc3RydWN0 IGhtbV9yYW5nZSAqcmFuZ2UsCiAJCQkgZG1hX2FkZHJfdCAqZGFkZHJzLAogCQkJIGJvb2wgZGly dHkpOwogI2Vsc2UKLWludCBobW1fbWlycm9yX3JlZ2lzdGVyKHN0cnVjdCBobW1fbWlycm9yICpt aXJyb3IsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0K LQotdm9pZCBobW1fbWlycm9yX3VucmVnaXN0ZXIoc3RydWN0IGhtbV9taXJyb3IgKm1pcnJvcikK LXsKLX0KLQotaW50IGhtbV9yYW5nZV9yZWdpc3RlcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwg c3RydWN0IGhtbV9taXJyb3IgKm1pcnJvcikKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0K LXZvaWQgaG1tX3JhbmdlX3VucmVnaXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCi17Ci19 Ci0KIHN0YXRpYyBpbmxpbmUgbG9uZyBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAq cmFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYg LS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBkMGI1MDQ2ZDlhZWZmZC4uZTM4 ZmYxZDU5NjhkYmYgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAt Njc1LDcgKzY3NSw2IEBAIGNvbmZpZyBERVZfUEFHRU1BUF9PUFMKIGNvbmZpZyBITU1fTUlSUk9S CiAJYm9vbAogCWRlcGVuZHMgb24gTU1VCi0JZGVwZW5kcyBvbiBNTVVfTk9USUZJRVIKIAogY29u ZmlnIERFVklDRV9QUklWQVRFCiAJYm9vbCAiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChH UFUgbWVtb3J5LCAuLi4pIgpkaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uYwppbmRleCAy MmFjMzU5NTc3MWZlYi4uNzVkMTVhODIwZTE4MmUgMTAwNjQ0Ci0tLSBhL21tL2htbS5jCisrKyBi L21tL2htbS5jCkBAIC0yNiwxOTMgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZp ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnlfaG90cGx1Zy5oPgogCi1zdGF0aWMgc3RydWN0 IG1tdV9ub3RpZmllciAqaG1tX2FsbG9jX25vdGlmaWVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQot ewotCXN0cnVjdCBobW0gKmhtbTsKLQotCWhtbSA9IGt6YWxsb2Moc2l6ZW9mKCpobW0pLCBHRlBf S0VSTkVMKTsKLQlpZiAoIWhtbSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlpbml0 X3dhaXRxdWV1ZV9oZWFkKCZobW0tPndxKTsKLQlJTklUX0xJU1RfSEVBRCgmaG1tLT5taXJyb3Jz KTsKLQlpbml0X3J3c2VtKCZobW0tPm1pcnJvcnNfc2VtKTsKLQlJTklUX0xJU1RfSEVBRCgmaG1t LT5yYW5nZXMpOwotCXNwaW5fbG9ja19pbml0KCZobW0tPnJhbmdlc19sb2NrKTsKLQlobW0tPm5v dGlmaWVycyA9IDA7Ci0JcmV0dXJuICZobW0tPm1tdV9ub3RpZmllcjsKLX0KLQotc3RhdGljIHZv aWQgaG1tX2ZyZWVfbm90aWZpZXIoc3RydWN0IG1tdV9ub3RpZmllciAqbW4pCi17Ci0Jc3RydWN0 IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90aWZpZXIpOwot Ci0JV0FSTl9PTighbGlzdF9lbXB0eSgmaG1tLT5yYW5nZXMpKTsKLQlXQVJOX09OKCFsaXN0X2Vt cHR5KCZobW0tPm1pcnJvcnMpKTsKLQlrZnJlZShobW0pOwotfQotCi1zdGF0aWMgdm9pZCBobW1f cmVsZWFzZShzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17 Ci0Jc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90 aWZpZXIpOwotCXN0cnVjdCBobW1fbWlycm9yICptaXJyb3I7Ci0KLQkvKgotCSAqIFNpbmNlIGht bV9yYW5nZV9yZWdpc3RlcigpIGhvbGRzIHRoZSBtbWdldCgpIGxvY2sgaG1tX3JlbGVhc2UoKSBp cwotCSAqIHByZXZlbnRlZCBhcyBsb25nIGFzIGEgcmFuZ2UgZXhpc3RzLgotCSAqLwotCVdBUk5f T04oIWxpc3RfZW1wdHlfY2FyZWZ1bCgmaG1tLT5yYW5nZXMpKTsKLQotCWRvd25fcmVhZCgmaG1t LT5taXJyb3JzX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtaXJyb3IsICZobW0tPm1pcnJv cnMsIGxpc3QpIHsKLQkJLyoKLQkJICogTm90ZTogVGhlIGRyaXZlciBpcyBub3QgYWxsb3dlZCB0 byB0cmlnZ2VyCi0JCSAqIGhtbV9taXJyb3JfdW5yZWdpc3RlcigpIGZyb20gdGhpcyB0aHJlYWQu Ci0JCSAqLwotCQlpZiAobWlycm9yLT5vcHMtPnJlbGVhc2UpCi0JCQltaXJyb3ItPm9wcy0+cmVs ZWFzZShtaXJyb3IpOwotCX0KLQl1cF9yZWFkKCZobW0tPm1pcnJvcnNfc2VtKTsKLX0KLQotc3Rh dGljIHZvaWQgbm90aWZpZXJzX2RlY3JlbWVudChzdHJ1Y3QgaG1tICpobW0pCi17Ci0JdW5zaWdu ZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBm bGFncyk7Ci0JaG1tLT5ub3RpZmllcnMtLTsKLQlpZiAoIWhtbS0+bm90aWZpZXJzKSB7Ci0JCXN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkocmFuZ2UsICZo bW0tPnJhbmdlcywgbGlzdCkgewotCQkJaWYgKHJhbmdlLT52YWxpZCkKLQkJCQljb250aW51ZTsK LQkJCXJhbmdlLT52YWxpZCA9IHRydWU7Ci0JCX0KLQkJd2FrZV91cF9hbGwoJmhtbS0+d3EpOwot CX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci19 Ci0KLXN0YXRpYyBpbnQgaG1tX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3Rp ZmllciAqbW4sCi0JCQljb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpucmFuZ2UpCi17 Ci0Jc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90 aWZpZXIpOwotCXN0cnVjdCBobW1fbWlycm9yICptaXJyb3I7Ci0Jc3RydWN0IGhtbV9yYW5nZSAq cmFuZ2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9j a19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci0JaG1tLT5ub3RpZmllcnMrKzsK LQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhbmdlLCAmaG1tLT5yYW5nZXMsIGxpc3QpIHsKLQkJaWYg KG5yYW5nZS0+ZW5kIDwgcmFuZ2UtPnN0YXJ0IHx8IG5yYW5nZS0+c3RhcnQgPj0gcmFuZ2UtPmVu ZCkKLQkJCWNvbnRpbnVlOwotCi0JCXJhbmdlLT52YWxpZCA9IGZhbHNlOwotCX0KLQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci0KLQlpZiAobW11X25v dGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShucmFuZ2UpKQotCQlkb3duX3JlYWQoJmhtbS0+bWlycm9y c19zZW0pOwotCWVsc2UgaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmaG1tLT5taXJyb3JzX3NlbSkp IHsKLQkJcmV0ID0gLUVBR0FJTjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9l bnRyeShtaXJyb3IsICZobW0tPm1pcnJvcnMsIGxpc3QpIHsKLQkJaW50IHJjOwotCi0JCXJjID0g bWlycm9yLT5vcHMtPnN5bmNfY3B1X2RldmljZV9wYWdldGFibGVzKG1pcnJvciwgbnJhbmdlKTsK LQkJaWYgKHJjKSB7Ci0JCQlpZiAoV0FSTl9PTihtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxl KG5yYW5nZSkgfHwKLQkJCSAgICByYyAhPSAtRUFHQUlOKSkKLQkJCQljb250aW51ZTsKLQkJCXJl dCA9IC1FQUdBSU47Ci0JCQlicmVhazsKLQkJfQotCX0KLQl1cF9yZWFkKCZobW0tPm1pcnJvcnNf c2VtKTsKLQotb3V0OgotCWlmIChyZXQpCi0JCW5vdGlmaWVyc19kZWNyZW1lbnQoaG1tKTsKLQly ZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBobW1faW52YWxpZGF0ZV9yYW5nZV9lbmQoc3Ry dWN0IG1tdV9ub3RpZmllciAqbW4sCi0JCQljb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3Jhbmdl ICpucmFuZ2UpCi17Ci0Jc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3Qg aG1tLCBtbXVfbm90aWZpZXIpOwotCi0Jbm90aWZpZXJzX2RlY3JlbWVudChobW0pOwotfQotCi1z dGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMgaG1tX21tdV9ub3RpZmllcl9vcHMg PSB7Ci0JLnJlbGVhc2UJCT0gaG1tX3JlbGVhc2UsCi0JLmludmFsaWRhdGVfcmFuZ2Vfc3RhcnQJ PSBobW1faW52YWxpZGF0ZV9yYW5nZV9zdGFydCwKLQkuaW52YWxpZGF0ZV9yYW5nZV9lbmQJPSBo bW1faW52YWxpZGF0ZV9yYW5nZV9lbmQsCi0JLmFsbG9jX25vdGlmaWVyCQk9IGhtbV9hbGxvY19u b3RpZmllciwKLQkuZnJlZV9ub3RpZmllcgkJPSBobW1fZnJlZV9ub3RpZmllciwKLX07Ci0KLS8q Ci0gKiBobW1fbWlycm9yX3JlZ2lzdGVyKCkgLSByZWdpc3RlciBhIG1pcnJvciBhZ2FpbnN0IGFu IG1tCi0gKgotICogQG1pcnJvcjogbmV3IG1pcnJvciBzdHJ1Y3QgdG8gcmVnaXN0ZXIKLSAqIEBt bTogbW0gdG8gcmVnaXN0ZXIgYWdhaW5zdAotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9N RU0gaWYgbm8gbWVtb3J5LCAtRUlOVkFMIGlmIGludmFsaWQgYXJndW1lbnRzCi0gKgotICogVG8g c3RhcnQgbWlycm9yaW5nIGEgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCB0aGUgZGV2aWNlIGRyaXZl ciBtdXN0IHJlZ2lzdGVyCi0gKiBhbiBITU0gbWlycm9yIHN0cnVjdC4KLSAqCi0gKiBUaGUgY2Fs bGVyIGNhbm5vdCB1bnJlZ2lzdGVyIHRoZSBobW1fbWlycm9yIHdoaWxlIGFueSByYW5nZXMgYXJl Ci0gKiByZWdpc3RlcmVkLgotICoKLSAqIENhbGxlcnMgdXNpbmcgdGhpcyBmdW5jdGlvbiBtdXN0 IHB1dCBhIGNhbGwgdG8gbW11X25vdGlmaWVyX3N5bmNocm9uaXplKCkKLSAqIGluIHRoZWlyIG1v ZHVsZSBleGl0IGZ1bmN0aW9ucy4KLSAqLwotaW50IGhtbV9taXJyb3JfcmVnaXN0ZXIoc3RydWN0 IGhtbV9taXJyb3IgKm1pcnJvciwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IG1t dV9ub3RpZmllciAqbW47Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZtbS0+bW1hcF9z ZW0pOwotCi0JLyogU2FuaXR5IGNoZWNrICovCi0JaWYgKCFtbSB8fCAhbWlycm9yIHx8ICFtaXJy b3ItPm9wcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltbiA9IG1tdV9ub3RpZmllcl9nZXRfbG9j a2VkKCZobW1fbW11X25vdGlmaWVyX29wcywgbW0pOwotCWlmIChJU19FUlIobW4pKQotCQlyZXR1 cm4gUFRSX0VSUihtbik7Ci0JbWlycm9yLT5obW0gPSBjb250YWluZXJfb2YobW4sIHN0cnVjdCBo bW0sIG1tdV9ub3RpZmllcik7Ci0KLQlkb3duX3dyaXRlKCZtaXJyb3ItPmhtbS0+bWlycm9yc19z ZW0pOwotCWxpc3RfYWRkKCZtaXJyb3ItPmxpc3QsICZtaXJyb3ItPmhtbS0+bWlycm9ycyk7Ci0J dXBfd3JpdGUoJm1pcnJvci0+aG1tLT5taXJyb3JzX3NlbSk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVY UE9SVF9TWU1CT0woaG1tX21pcnJvcl9yZWdpc3Rlcik7Ci0KLS8qCi0gKiBobW1fbWlycm9yX3Vu cmVnaXN0ZXIoKSAtIHVucmVnaXN0ZXIgYSBtaXJyb3IKLSAqCi0gKiBAbWlycm9yOiBtaXJyb3Ig c3RydWN0IHRvIHVucmVnaXN0ZXIKLSAqCi0gKiBTdG9wIG1pcnJvcmluZyBhIHByb2Nlc3MgYWRk cmVzcyBzcGFjZSwgYW5kIGNsZWFudXAuCi0gKi8KLXZvaWQgaG1tX21pcnJvcl91bnJlZ2lzdGVy KHN0cnVjdCBobW1fbWlycm9yICptaXJyb3IpCi17Ci0Jc3RydWN0IGhtbSAqaG1tID0gbWlycm9y LT5obW07Ci0KLQlkb3duX3dyaXRlKCZobW0tPm1pcnJvcnNfc2VtKTsKLQlsaXN0X2RlbCgmbWly cm9yLT5saXN0KTsKLQl1cF93cml0ZSgmaG1tLT5taXJyb3JzX3NlbSk7Ci0JbW11X25vdGlmaWVy X3B1dCgmaG1tLT5tbXVfbm90aWZpZXIpOwotfQotRVhQT1JUX1NZTUJPTChobW1fbWlycm9yX3Vu cmVnaXN0ZXIpOwotCiBzdHJ1Y3QgaG1tX3ZtYV93YWxrIHsKIAlzdHJ1Y3QgaG1tX3JhbmdlCSpy YW5nZTsKIAlzdHJ1Y3QgZGV2X3BhZ2VtYXAJKnBnbWFwOwpAQCAtNzc5LDg3ICs1OTIsNiBAQCBz dGF0aWMgdm9pZCBobW1fcGZuc19jbGVhcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwKIAkJKnBm bnMgPSByYW5nZS0+dmFsdWVzW0hNTV9QRk5fTk9ORV07CiB9CiAKLS8qCi0gKiBobW1fcmFuZ2Vf cmVnaXN0ZXIoKSAtIHN0YXJ0IHRyYWNraW5nIGNoYW5nZSB0byBDUFUgcGFnZSB0YWJsZSBvdmVy IGEgcmFuZ2UKLSAqIEByYW5nZTogcmFuZ2UKLSAqIEBtbTogdGhlIG1tIHN0cnVjdCBmb3IgdGhl IHJhbmdlIG9mIHZpcnR1YWwgYWRkcmVzcwotICoKLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAt RUZBVUxUIGlmIHRoZSBhZGRyZXNzIHNwYWNlIGlzIG5vIGxvbmdlciB2YWxpZAotICoKLSAqIFRy YWNrIHVwZGF0ZXMgdG8gdGhlIENQVSBwYWdlIHRhYmxlIHNlZSBpbmNsdWRlL2xpbnV4L2htbS5o Ci0gKi8KLWludCBobW1fcmFuZ2VfcmVnaXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHN0 cnVjdCBobW1fbWlycm9yICptaXJyb3IpCi17Ci0Jc3RydWN0IGhtbSAqaG1tID0gbWlycm9yLT5o bW07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXJhbmdlLT52YWxpZCA9IGZhbHNlOwotCXJh bmdlLT5obW0gPSBOVUxMOwotCi0JaWYgKChyYW5nZS0+c3RhcnQgJiAoUEFHRV9TSVpFIC0gMSkp IHx8IChyYW5nZS0+ZW5kICYgKFBBR0VfU0laRSAtIDEpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J aWYgKHJhbmdlLT5zdGFydCA+PSByYW5nZS0+ZW5kKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8q IFByZXZlbnQgaG1tX3JlbGVhc2UoKSBmcm9tIHJ1bm5pbmcgd2hpbGUgdGhlIHJhbmdlIGlzIHZh bGlkICovCi0JaWYgKCFtbWdldF9ub3RfemVybyhobW0tPm1tdV9ub3RpZmllci5tbSkpCi0JCXJl dHVybiAtRUZBVUxUOwotCi0JLyogSW5pdGlhbGl6ZSByYW5nZSB0byB0cmFjayBDUFUgcGFnZSB0 YWJsZSB1cGRhdGVzLiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBm bGFncyk7Ci0KLQlyYW5nZS0+aG1tID0gaG1tOwotCWxpc3RfYWRkKCZyYW5nZS0+bGlzdCwgJmht bS0+cmFuZ2VzKTsKLQotCS8qCi0JICogSWYgdGhlcmUgYXJlIGFueSBjb25jdXJyZW50IG5vdGlm aWVycyB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZW0gZm9yCi0JICogdGhlIHJhbmdlIHRvIGJlIHZh bGlkIChzZWUgaG1tX3JhbmdlX3dhaXRfdW50aWxfdmFsaWQoKSkuCi0JICovCi0JaWYgKCFobW0t Pm5vdGlmaWVycykKLQkJcmFuZ2UtPnZhbGlkID0gdHJ1ZTsKLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9T WU1CT0woaG1tX3JhbmdlX3JlZ2lzdGVyKTsKLQotLyoKLSAqIGhtbV9yYW5nZV91bnJlZ2lzdGVy KCkgLSBzdG9wIHRyYWNraW5nIGNoYW5nZSB0byBDUFUgcGFnZSB0YWJsZSBvdmVyIGEgcmFuZ2UK LSAqIEByYW5nZTogcmFuZ2UKLSAqCi0gKiBSYW5nZSBzdHJ1Y3QgaXMgdXNlZCB0byB0cmFjayB1 cGRhdGVzIHRvIHRoZSBDUFUgcGFnZSB0YWJsZSBhZnRlciBhIGNhbGwgdG8KLSAqIGhtbV9yYW5n ZV9yZWdpc3RlcigpLiBTZWUgaW5jbHVkZS9saW51eC9obW0uaCBmb3IgaG93IHRvIHVzZSBpdC4K LSAqLwotdm9pZCBobW1fcmFuZ2VfdW5yZWdpc3RlcihzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSkK LXsKLQlzdHJ1Y3QgaG1tICpobW0gPSByYW5nZS0+aG1tOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaG1tLT5yYW5nZXNfbG9jaywgZmxhZ3MpOwotCWxpc3Rf ZGVsX2luaXQoJnJhbmdlLT5saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZobW0tPnJh bmdlc19sb2NrLCBmbGFncyk7Ci0KLQkvKiBEcm9wIHJlZmVyZW5jZSB0YWtlbiBieSBobW1fcmFu Z2VfcmVnaXN0ZXIoKSAqLwotCW1tcHV0KGhtbS0+bW11X25vdGlmaWVyLm1tKTsKLQotCS8qCi0J ICogVGhlIHJhbmdlIGlzIG5vdyBpbnZhbGlkIGFuZCB0aGUgcmVmIG9uIHRoZSBobW0gaXMgZHJv cHBlZCwgc28KLQkgKiBwb2lzb24gdGhlIHBvaW50ZXIuICBMZWF2ZSBvdGhlciBmaWVsZHMgaW4g cGxhY2UsIGZvciB0aGUgY2FsbGVyJ3MKLQkgKiB1c2UuCi0JICovCi0JcmFuZ2UtPnZhbGlkID0g ZmFsc2U7Ci0JbWVtc2V0KCZyYW5nZS0+aG1tLCBQT0lTT05fSU5VU0UsIHNpemVvZihyYW5nZS0+ aG1tKSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV91bnJlZ2lzdGVyKTsKLQotc3RhdGlj IGJvb2wgbmVlZHNfcmV0cnkoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCi17Ci0JaWYgKHJhbmdl LT5ub3RpZmllcikKLQkJcmV0dXJuIG1tdV9yYW5nZV9jaGVja19yZXRyeShyYW5nZS0+bm90aWZp ZXIsCi0JCQkJCSAgICAgcmFuZ2UtPm5vdGlmaWVyX3NlcSk7Ci0JcmV0dXJuICFyYW5nZS0+dmFs aWQ7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgaG1tX3dhbGtfb3BzID0g ewogCS5wdWRfZW50cnkJPSBobW1fdm1hX3dhbGtfcHVkLAogCS5wbWRfZW50cnkJPSBobW1fdm1h X3dhbGtfcG1kLApAQCAtOTAwLDIwICs2MzIsMTUgQEAgbG9uZyBobW1fcmFuZ2VfZmF1bHQoc3Ry dWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKIAljb25zdCB1bnNpZ25l ZCBsb25nIGRldmljZV92bWEgPSBWTV9JTyB8IFZNX1BGTk1BUCB8IFZNX01JWEVETUFQOwogCXVu c2lnbmVkIGxvbmcgc3RhcnQgPSByYW5nZS0+c3RhcnQsIGVuZDsKIAlzdHJ1Y3QgaG1tX3ZtYV93 YWxrIGhtbV92bWFfd2FsazsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgbW1fc3Ry dWN0ICptbSA9IHJhbmdlLT5ub3RpZmllci0+bW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWE7CiAJaW50IHJldDsKIAotCWlmIChyYW5nZS0+bm90aWZpZXIpCi0JCW1tID0gcmFuZ2UtPm5v dGlmaWVyLT5tbTsKLQllbHNlCi0JCW1tID0gcmFuZ2UtPmhtbS0+bW11X25vdGlmaWVyLm1tOwot CiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbW0tPm1tYXBfc2VtKTsKIAogCWRvIHsKIAkJLyogSWYg cmFuZ2UgaXMgbm8gbG9uZ2VyIHZhbGlkIGZvcmNlIHJldHJ5LiAqLwotCQlpZiAobmVlZHNfcmV0 cnkocmFuZ2UpKQorCQlpZiAobW11X3JhbmdlX2NoZWNrX3JldHJ5KHJhbmdlLT5ub3RpZmllciwg cmFuZ2UtPm5vdGlmaWVyX3NlcSkpCiAJCQlyZXR1cm4gLUVCVVNZOwogCiAJCXZtYSA9IGZpbmRf dm1hKG1tLCBzdGFydCk7CkBAIC05NDYsNyArNjczLDkgQEAgbG9uZyBobW1fcmFuZ2VfZmF1bHQo c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKIAkJCXN0YXJ0ID0g aG1tX3ZtYV93YWxrLmxhc3Q7CiAKIAkJCS8qIEtlZXAgdHJ5aW5nIHdoaWxlIHRoZSByYW5nZSBp cyB2YWxpZC4gKi8KLQkJfSB3aGlsZSAocmV0ID09IC1FQlVTWSAmJiAhbmVlZHNfcmV0cnkocmFu Z2UpKTsKKwkJfSB3aGlsZSAocmV0ID09IC1FQlVTWSAmJgorCQkJICFtbXVfcmFuZ2VfY2hlY2tf cmV0cnkocmFuZ2UtPm5vdGlmaWVyLAorCQkJCQkJcmFuZ2UtPm5vdGlmaWVyX3NlcSkpOwogCiAJ CWlmIChyZXQpIHsKIAkJCXVuc2lnbmVkIGxvbmcgaTsKQEAgLTEwMDQsNyArNzMzLDggQEAgbG9u ZyBobW1fcmFuZ2VfZG1hX21hcChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgc3RydWN0IGRldmlj ZSAqZGV2aWNlLAogCQkJY29udGludWU7CiAKIAkJLyogQ2hlY2sgaWYgcmFuZ2UgaXMgYmVpbmcg aW52YWxpZGF0ZWQgKi8KLQkJaWYgKG5lZWRzX3JldHJ5KHJhbmdlKSkgeworCQlpZiAobW11X3Jh bmdlX2NoZWNrX3JldHJ5KHJhbmdlLT5ub3RpZmllciwKKwkJCQkJICByYW5nZS0+bm90aWZpZXJf c2VxKSkgewogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byB1bm1hcDsKIAkJfQotLSAKMi4yMy4w CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4 IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZng=