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 ACD5CCA9EC3 for ; Mon, 28 Oct 2019 20:10:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 67F4A21721 for ; Mon, 28 Oct 2019 20:10:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=ziepe.ca header.i=@ziepe.ca header.b="cXvTHdIK" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728446AbfJ1UKu (ORCPT ); Mon, 28 Oct 2019 16:10:50 -0400 Received: from mail-qt1-f196.google.com ([209.85.160.196]:46831 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727650AbfJ1UKu (ORCPT ); Mon, 28 Oct 2019 16:10:50 -0400 Received: by mail-qt1-f196.google.com with SMTP id u22so16472273qtq.13 for ; Mon, 28 Oct 2019 13:10:49 -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=p2sO9HeBGe55xT+CHTSwfg39F5YjFhzL8wq3LxZbe6w=; b=cXvTHdIKZK55cQQin8dGci427hTRiUockWlEy6Y0ICdq582fHBOfb30HIaxmsyyS/p VO48joMXKjHRdPQsTx7NYVCc27xyHbl0ljkVD1bnlqKgp2mbaxe+/vNwxle/N375wmN7 LLiLx61YfjoYug+9VNzD6w4Vz4EQxLAkMLyXTDa9JOOn86fAWGzlUS2JLAhQ5bmecZZ/ a5+OzqMmMbmY9WYvRiligl1TnCVrKxVwZlm0cjHkBnOrOSpHAla+MEOnGgkh4pOfoVMO 36bGxek2HKVb0rJgSusQ9TNBqCn6uiIo6I8hU9X6aLkg+2p0L2e5guBKt+QltMY6afCu /2hw== 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=p2sO9HeBGe55xT+CHTSwfg39F5YjFhzL8wq3LxZbe6w=; b=XbiXEPe4L2uK6Yu+zEa3z39aBcH1bbguZy4SGZHNvanoy0NgypG8c4TdBMoZpvRpw6 Occsx+gzNcF/MQ0gT8i1DkuSTUj9YFuW+UPDNAJdHq05VxrOByRfmiP14sZT1v4qI+mi IDLIMier2pHwfg99sjGDIfjgLShvPQn8Ng175x6JnWZsl2UVRz751bD4gSxkrF1qbG47 rAH3La2wM5j+JkdxGITcEnFvLJMnwF4RjTjAhfllnC3Enjd5mnNchUxGp6fTaTLQJ9OG K7JtmVSs87GLuAQLHV8YBtaLduIsWpiKdt3YTSj8sjC3jMSuI8Zw2VU4/kUyTe9gxP3j Ck0Q== X-Gm-Message-State: APjAAAXEZhzlGpFaZOcX9bhwNfBOwevCqov9hvKNkyU8rV3DMmtZqa62 tDD+B4OexUN2wL8WTziWrjZfiQ== X-Google-Smtp-Source: APXvYqxk4tf4YFjeg5NLxezOvsTX/rHJRfFXNqIANjhcGIKgcc8HiyI9ezh/HHJDJoeromDlsXvJEg== X-Received: by 2002:a05:6214:2aa:: with SMTP id m10mr17377906qvv.224.1572293448000; Mon, 28 Oct 2019 13:10:48 -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 t127sm6775397qkf.43.2019.10.28.13.10.43 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 28 Oct 2019 13:10:43 -0700 (PDT) Received: from jgg by mlx.ziepe.ca with local (Exim 4.90_1) (envelope-from ) id 1iPBLf-0001gS-8N; 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 05/15] RDMA/odp: Use mmu_range_notifier_insert() Date: Mon, 28 Oct 2019 17:10:22 -0300 Message-Id: <20191028201032.6352-6-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-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 Replace the internal interval tree based mmu notifier with the new common mmu_range_notifier_insert() API. This removes a lot of code and fixes a deadlock that can be triggered in ODP: zap_page_range() mmu_notifier_invalidate_range_start() [..] ib_umem_notifier_invalidate_range_start() down_read(&per_mm->umem_rwsem) unmap_single_vma() [..] __split_huge_page_pmd() mmu_notifier_invalidate_range_start() [..] ib_umem_notifier_invalidate_range_start() down_read(&per_mm->umem_rwsem) // DEADLOCK mmu_notifier_invalidate_range_end() up_read(&per_mm->umem_rwsem) mmu_notifier_invalidate_range_end() up_read(&per_mm->umem_rwsem) The umem_rwsem is held across the range_start/end as the ODP algorithm for invalidate_range_end cannot tolerate changes to the interval tree. However, due to the nested invalidation regions the second down_read() can deadlock if there are competing writers. The new core code provides an alternative scheme to solve this problem. Fixes: ca748c39ea3f ("RDMA/umem: Get rid of per_mm->notifier_count") Signed-off-by: Jason Gunthorpe --- drivers/infiniband/core/device.c | 1 - drivers/infiniband/core/umem_odp.c | 288 +++------------------------ drivers/infiniband/hw/mlx5/mlx5_ib.h | 7 +- drivers/infiniband/hw/mlx5/mr.c | 3 +- drivers/infiniband/hw/mlx5/odp.c | 50 +++-- include/rdma/ib_umem_odp.h | 65 ++---- include/rdma/ib_verbs.h | 2 - 7 files changed, 69 insertions(+), 347 deletions(-) diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c index 2dd2cfe9b56136..ac7924b3c73abe 100644 --- a/drivers/infiniband/core/device.c +++ b/drivers/infiniband/core/device.c @@ -2617,7 +2617,6 @@ void ib_set_device_ops(struct ib_device *dev, const struct ib_device_ops *ops) SET_DEVICE_OP(dev_ops, get_vf_config); SET_DEVICE_OP(dev_ops, get_vf_stats); SET_DEVICE_OP(dev_ops, init_port); - SET_DEVICE_OP(dev_ops, invalidate_range); SET_DEVICE_OP(dev_ops, iw_accept); SET_DEVICE_OP(dev_ops, iw_add_ref); SET_DEVICE_OP(dev_ops, iw_connect); diff --git a/drivers/infiniband/core/umem_odp.c b/drivers/infiniband/core/umem_odp.c index d7d5fadf0899ad..6132b8127e8435 100644 --- a/drivers/infiniband/core/umem_odp.c +++ b/drivers/infiniband/core/umem_odp.c @@ -48,197 +48,32 @@ #include "uverbs.h" -static void ib_umem_notifier_start_account(struct ib_umem_odp *umem_odp) -{ - mutex_lock(&umem_odp->umem_mutex); - if (umem_odp->notifiers_count++ == 0) - /* - * Initialize the completion object for waiting on - * notifiers. Since notifier_count is zero, no one should be - * waiting right now. - */ - reinit_completion(&umem_odp->notifier_completion); - mutex_unlock(&umem_odp->umem_mutex); -} - -static void ib_umem_notifier_end_account(struct ib_umem_odp *umem_odp) -{ - mutex_lock(&umem_odp->umem_mutex); - /* - * This sequence increase will notify the QP page fault that the page - * that is going to be mapped in the spte could have been freed. - */ - ++umem_odp->notifiers_seq; - if (--umem_odp->notifiers_count == 0) - complete_all(&umem_odp->notifier_completion); - mutex_unlock(&umem_odp->umem_mutex); -} - -static void ib_umem_notifier_release(struct mmu_notifier *mn, - struct mm_struct *mm) -{ - struct ib_ucontext_per_mm *per_mm = - container_of(mn, struct ib_ucontext_per_mm, mn); - struct rb_node *node; - - down_read(&per_mm->umem_rwsem); - if (!per_mm->mn.users) - goto out; - - for (node = rb_first_cached(&per_mm->umem_tree); node; - node = rb_next(node)) { - struct ib_umem_odp *umem_odp = - rb_entry(node, struct ib_umem_odp, interval_tree.rb); - - /* - * Increase the number of notifiers running, to prevent any - * further fault handling on this MR. - */ - ib_umem_notifier_start_account(umem_odp); - complete_all(&umem_odp->notifier_completion); - umem_odp->umem.ibdev->ops.invalidate_range( - umem_odp, ib_umem_start(umem_odp), - ib_umem_end(umem_odp)); - } - -out: - up_read(&per_mm->umem_rwsem); -} - -static int invalidate_range_start_trampoline(struct ib_umem_odp *item, - u64 start, u64 end, void *cookie) -{ - ib_umem_notifier_start_account(item); - item->umem.ibdev->ops.invalidate_range(item, start, end); - return 0; -} - -static int ib_umem_notifier_invalidate_range_start(struct mmu_notifier *mn, - const struct mmu_notifier_range *range) -{ - struct ib_ucontext_per_mm *per_mm = - container_of(mn, struct ib_ucontext_per_mm, mn); - int rc; - - if (mmu_notifier_range_blockable(range)) - down_read(&per_mm->umem_rwsem); - else if (!down_read_trylock(&per_mm->umem_rwsem)) - return -EAGAIN; - - if (!per_mm->mn.users) { - up_read(&per_mm->umem_rwsem); - /* - * At this point users is permanently zero and visible to this - * CPU without a lock, that fact is relied on to skip the unlock - * in range_end. - */ - return 0; - } - - rc = rbt_ib_umem_for_each_in_range(&per_mm->umem_tree, range->start, - range->end, - invalidate_range_start_trampoline, - mmu_notifier_range_blockable(range), - NULL); - if (rc) - up_read(&per_mm->umem_rwsem); - return rc; -} - -static int invalidate_range_end_trampoline(struct ib_umem_odp *item, u64 start, - u64 end, void *cookie) -{ - ib_umem_notifier_end_account(item); - return 0; -} - -static void ib_umem_notifier_invalidate_range_end(struct mmu_notifier *mn, - const struct mmu_notifier_range *range) -{ - struct ib_ucontext_per_mm *per_mm = - container_of(mn, struct ib_ucontext_per_mm, mn); - - if (unlikely(!per_mm->mn.users)) - return; - - rbt_ib_umem_for_each_in_range(&per_mm->umem_tree, range->start, - range->end, - invalidate_range_end_trampoline, true, NULL); - up_read(&per_mm->umem_rwsem); -} - -static struct mmu_notifier *ib_umem_alloc_notifier(struct mm_struct *mm) -{ - struct ib_ucontext_per_mm *per_mm; - - per_mm = kzalloc(sizeof(*per_mm), GFP_KERNEL); - if (!per_mm) - return ERR_PTR(-ENOMEM); - - per_mm->umem_tree = RB_ROOT_CACHED; - init_rwsem(&per_mm->umem_rwsem); - - WARN_ON(mm != current->mm); - rcu_read_lock(); - per_mm->tgid = get_task_pid(current->group_leader, PIDTYPE_PID); - rcu_read_unlock(); - return &per_mm->mn; -} - -static void ib_umem_free_notifier(struct mmu_notifier *mn) -{ - struct ib_ucontext_per_mm *per_mm = - container_of(mn, struct ib_ucontext_per_mm, mn); - - WARN_ON(!RB_EMPTY_ROOT(&per_mm->umem_tree.rb_root)); - - put_pid(per_mm->tgid); - kfree(per_mm); -} - -static const struct mmu_notifier_ops ib_umem_notifiers = { - .release = ib_umem_notifier_release, - .invalidate_range_start = ib_umem_notifier_invalidate_range_start, - .invalidate_range_end = ib_umem_notifier_invalidate_range_end, - .alloc_notifier = ib_umem_alloc_notifier, - .free_notifier = ib_umem_free_notifier, -}; - static inline int ib_init_umem_odp(struct ib_umem_odp *umem_odp) { - struct ib_ucontext_per_mm *per_mm; - struct mmu_notifier *mn; int ret; umem_odp->umem.is_odp = 1; + mutex_init(&umem_odp->umem_mutex); + if (!umem_odp->is_implicit_odp) { size_t page_size = 1UL << umem_odp->page_shift; + unsigned long start; + unsigned long end; size_t pages; - umem_odp->interval_tree.start = - ALIGN_DOWN(umem_odp->umem.address, page_size); + start = ALIGN_DOWN(umem_odp->umem.address, page_size); if (check_add_overflow(umem_odp->umem.address, (unsigned long)umem_odp->umem.length, - &umem_odp->interval_tree.last)) + &end)) return -EOVERFLOW; - umem_odp->interval_tree.last = - ALIGN(umem_odp->interval_tree.last, page_size); - if (unlikely(umem_odp->interval_tree.last < page_size)) + end = ALIGN(end, page_size); + if (unlikely(end < page_size)) return -EOVERFLOW; - pages = (umem_odp->interval_tree.last - - umem_odp->interval_tree.start) >> - umem_odp->page_shift; + pages = (end - start) >> umem_odp->page_shift; if (!pages) return -EINVAL; - /* - * Note that the representation of the intervals in the - * interval tree considers the ending point as contained in - * the interval. - */ - umem_odp->interval_tree.last--; - umem_odp->page_list = kvcalloc( pages, sizeof(*umem_odp->page_list), GFP_KERNEL); if (!umem_odp->page_list) @@ -250,26 +85,15 @@ static inline int ib_init_umem_odp(struct ib_umem_odp *umem_odp) ret = -ENOMEM; goto out_page_list; } - } - mn = mmu_notifier_get(&ib_umem_notifiers, umem_odp->umem.owning_mm); - if (IS_ERR(mn)) { - ret = PTR_ERR(mn); - goto out_dma_list; - } - umem_odp->per_mm = per_mm = - container_of(mn, struct ib_ucontext_per_mm, mn); - - mutex_init(&umem_odp->umem_mutex); - init_completion(&umem_odp->notifier_completion); + ret = mmu_range_notifier_insert(&umem_odp->notifier, start, + end - start, current->mm); + if (ret) + goto out_dma_list; - if (!umem_odp->is_implicit_odp) { - down_write(&per_mm->umem_rwsem); - interval_tree_insert(&umem_odp->interval_tree, - &per_mm->umem_tree); - up_write(&per_mm->umem_rwsem); + umem_odp->tgid = + get_task_pid(current->group_leader, PIDTYPE_PID); } - mmgrab(umem_odp->umem.owning_mm); return 0; @@ -290,8 +114,8 @@ static inline int ib_init_umem_odp(struct ib_umem_odp *umem_odp) * @udata: udata from the syscall being used to create the umem * @access: ib_reg_mr access flags */ -struct ib_umem_odp *ib_umem_odp_alloc_implicit(struct ib_udata *udata, - int access) +struct ib_umem_odp * +ib_umem_odp_alloc_implicit(struct ib_udata *udata, int access) { struct ib_ucontext *context = container_of(udata, struct uverbs_attr_bundle, driver_udata) @@ -305,8 +129,6 @@ struct ib_umem_odp *ib_umem_odp_alloc_implicit(struct ib_udata *udata, if (!context) return ERR_PTR(-EIO); - if (WARN_ON_ONCE(!context->device->ops.invalidate_range)) - return ERR_PTR(-EINVAL); umem_odp = kzalloc(sizeof(*umem_odp), GFP_KERNEL); if (!umem_odp) @@ -336,8 +158,9 @@ EXPORT_SYMBOL(ib_umem_odp_alloc_implicit); * @addr: The starting userspace VA * @size: The length of the userspace VA */ -struct ib_umem_odp *ib_umem_odp_alloc_child(struct ib_umem_odp *root, - unsigned long addr, size_t size) +struct ib_umem_odp * +ib_umem_odp_alloc_child(struct ib_umem_odp *root, unsigned long addr, + size_t size, const struct mmu_range_notifier_ops *ops) { /* * Caller must ensure that root cannot be freed during the call to @@ -360,6 +183,7 @@ struct ib_umem_odp *ib_umem_odp_alloc_child(struct ib_umem_odp *root, umem->writable = root->umem.writable; umem->owning_mm = root->umem.owning_mm; odp_data->page_shift = PAGE_SHIFT; + odp_data->notifier.ops = ops; ret = ib_init_umem_odp(odp_data); if (ret) { @@ -383,7 +207,8 @@ EXPORT_SYMBOL(ib_umem_odp_alloc_child); * conjunction with MMU notifiers. */ struct ib_umem_odp *ib_umem_odp_get(struct ib_udata *udata, unsigned long addr, - size_t size, int access) + size_t size, int access, + const struct mmu_range_notifier_ops *ops) { struct ib_umem_odp *umem_odp; struct ib_ucontext *context; @@ -398,8 +223,7 @@ struct ib_umem_odp *ib_umem_odp_get(struct ib_udata *udata, unsigned long addr, if (!context) return ERR_PTR(-EIO); - if (WARN_ON_ONCE(!(access & IB_ACCESS_ON_DEMAND)) || - WARN_ON_ONCE(!context->device->ops.invalidate_range)) + if (WARN_ON_ONCE(!(access & IB_ACCESS_ON_DEMAND))) return ERR_PTR(-EINVAL); umem_odp = kzalloc(sizeof(struct ib_umem_odp), GFP_KERNEL); @@ -411,6 +235,7 @@ struct ib_umem_odp *ib_umem_odp_get(struct ib_udata *udata, unsigned long addr, umem_odp->umem.address = addr; umem_odp->umem.writable = ib_access_writable(access); umem_odp->umem.owning_mm = mm = current->mm; + umem_odp->notifier.ops = ops; umem_odp->page_shift = PAGE_SHIFT; if (access & IB_ACCESS_HUGETLB) { @@ -442,8 +267,6 @@ EXPORT_SYMBOL(ib_umem_odp_get); void ib_umem_odp_release(struct ib_umem_odp *umem_odp) { - struct ib_ucontext_per_mm *per_mm = umem_odp->per_mm; - /* * Ensure that no more pages are mapped in the umem. * @@ -455,28 +278,11 @@ void ib_umem_odp_release(struct ib_umem_odp *umem_odp) ib_umem_odp_unmap_dma_pages(umem_odp, ib_umem_start(umem_odp), ib_umem_end(umem_odp)); mutex_unlock(&umem_odp->umem_mutex); + mmu_range_notifier_remove(&umem_odp->notifier); kvfree(umem_odp->dma_list); kvfree(umem_odp->page_list); + put_pid(umem_odp->tgid); } - - down_write(&per_mm->umem_rwsem); - if (!umem_odp->is_implicit_odp) { - interval_tree_remove(&umem_odp->interval_tree, - &per_mm->umem_tree); - complete_all(&umem_odp->notifier_completion); - } - /* - * NOTE! mmu_notifier_unregister() can happen between a start/end - * callback, resulting in a missing end, and thus an unbalanced - * lock. This doesn't really matter to us since we are about to kfree - * the memory that holds the lock, however LOCKDEP doesn't like this. - * Thus we call the mmu_notifier_put under the rwsem and test the - * internal users count to reliably see if we are past this point. - */ - mmu_notifier_put(&per_mm->mn); - up_write(&per_mm->umem_rwsem); - - mmdrop(umem_odp->umem.owning_mm); kfree(umem_odp); } EXPORT_SYMBOL(ib_umem_odp_release); @@ -501,7 +307,7 @@ EXPORT_SYMBOL(ib_umem_odp_release); */ static int ib_umem_odp_map_dma_single_page( struct ib_umem_odp *umem_odp, - int page_index, + unsigned int page_index, struct page *page, u64 access_mask, unsigned long current_seq) @@ -510,12 +316,7 @@ static int ib_umem_odp_map_dma_single_page( dma_addr_t dma_addr; int ret = 0; - /* - * Note: we avoid writing if seq is different from the initial seq, to - * handle case of a racing notifier. This check also allows us to bail - * early if we have a notifier running in parallel with us. - */ - if (ib_umem_mmu_notifier_retry(umem_odp, current_seq)) { + if (mmu_range_check_retry(&umem_odp->notifier, current_seq)) { ret = -EAGAIN; goto out; } @@ -618,7 +419,7 @@ int ib_umem_odp_map_dma_pages(struct ib_umem_odp *umem_odp, u64 user_virt, * existing beyond the lifetime of the originating process.. Presumably * mmget_not_zero will fail in this case. */ - owning_process = get_pid_task(umem_odp->per_mm->tgid, PIDTYPE_PID); + owning_process = get_pid_task(umem_odp->tgid, PIDTYPE_PID); if (!owning_process || !mmget_not_zero(owning_mm)) { ret = -EINVAL; goto out_put_task; @@ -762,32 +563,3 @@ void ib_umem_odp_unmap_dma_pages(struct ib_umem_odp *umem_odp, u64 virt, } } EXPORT_SYMBOL(ib_umem_odp_unmap_dma_pages); - -/* @last is not a part of the interval. See comment for function - * node_last. - */ -int rbt_ib_umem_for_each_in_range(struct rb_root_cached *root, - u64 start, u64 last, - umem_call_back cb, - bool blockable, - void *cookie) -{ - int ret_val = 0; - struct interval_tree_node *node, *next; - struct ib_umem_odp *umem; - - if (unlikely(start == last)) - return ret_val; - - for (node = interval_tree_iter_first(root, start, last - 1); - node; node = next) { - /* TODO move the blockable decision up to the callback */ - if (!blockable) - return -EAGAIN; - next = interval_tree_iter_next(node, start, last - 1); - umem = container_of(node, struct ib_umem_odp, interval_tree); - ret_val = cb(umem, start, last, cookie) || ret_val; - } - - return ret_val; -} diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h index f61d4005c6c379..c719f08b351670 100644 --- a/drivers/infiniband/hw/mlx5/mlx5_ib.h +++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h @@ -1263,8 +1263,6 @@ int mlx5_ib_odp_init_one(struct mlx5_ib_dev *ibdev); void mlx5_ib_odp_cleanup_one(struct mlx5_ib_dev *ibdev); int __init mlx5_ib_odp_init(void); void mlx5_ib_odp_cleanup(void); -void mlx5_ib_invalidate_range(struct ib_umem_odp *umem_odp, unsigned long start, - unsigned long end); void mlx5_odp_init_mr_cache_entry(struct mlx5_cache_ent *ent); void mlx5_odp_populate_klm(struct mlx5_klm *pklm, size_t offset, size_t nentries, struct mlx5_ib_mr *mr, int flags); @@ -1294,11 +1292,10 @@ mlx5_ib_advise_mr_prefetch(struct ib_pd *pd, { return -EOPNOTSUPP; } -static inline void mlx5_ib_invalidate_range(struct ib_umem_odp *umem_odp, - unsigned long start, - unsigned long end){}; #endif /* CONFIG_INFINIBAND_ON_DEMAND_PAGING */ +extern const struct mmu_range_notifier_ops mlx5_mn_ops; + /* Needed for rep profile */ void __mlx5_ib_remove(struct mlx5_ib_dev *dev, const struct mlx5_ib_profile *profile, diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c index 199f7959aaa510..fbe31830b22807 100644 --- a/drivers/infiniband/hw/mlx5/mr.c +++ b/drivers/infiniband/hw/mlx5/mr.c @@ -743,7 +743,8 @@ static int mr_umem_get(struct mlx5_ib_dev *dev, struct ib_udata *udata, if (access_flags & IB_ACCESS_ON_DEMAND) { struct ib_umem_odp *odp; - odp = ib_umem_odp_get(udata, start, length, access_flags); + odp = ib_umem_odp_get(udata, start, length, access_flags, + &mlx5_mn_ops); if (IS_ERR(odp)) { mlx5_ib_dbg(dev, "umem get failed (%ld)\n", PTR_ERR(odp)); diff --git a/drivers/infiniband/hw/mlx5/odp.c b/drivers/infiniband/hw/mlx5/odp.c index bcfc098466977e..f713eb82eeead4 100644 --- a/drivers/infiniband/hw/mlx5/odp.c +++ b/drivers/infiniband/hw/mlx5/odp.c @@ -241,17 +241,26 @@ static void destroy_unused_implicit_child_mr(struct mlx5_ib_mr *mr) xa_unlock(&imr->implicit_children); } -void mlx5_ib_invalidate_range(struct ib_umem_odp *umem_odp, unsigned long start, - unsigned long end) +static bool mlx5_ib_invalidate_range(struct mmu_range_notifier *mrn, + const struct mmu_notifier_range *range, + unsigned long cur_seq) { + struct ib_umem_odp *umem_odp = + container_of(mrn, struct ib_umem_odp, notifier); struct mlx5_ib_mr *mr; const u64 umr_block_mask = (MLX5_UMR_MTT_ALIGNMENT / sizeof(struct mlx5_mtt)) - 1; u64 idx = 0, blk_start_idx = 0; + unsigned long start; + unsigned long end; int in_block = 0; u64 addr; + if (!mmu_notifier_range_blockable(range)) + return false; + mutex_lock(&umem_odp->umem_mutex); + mmu_range_set_seq(mrn, cur_seq); /* * If npages is zero then umem_odp->private may not be setup yet. This * does not complete until after the first page is mapped for DMA. @@ -260,8 +269,8 @@ void mlx5_ib_invalidate_range(struct ib_umem_odp *umem_odp, unsigned long start, goto out; mr = umem_odp->private; - start = max_t(u64, ib_umem_start(umem_odp), start); - end = min_t(u64, ib_umem_end(umem_odp), end); + start = max_t(u64, ib_umem_start(umem_odp), range->start); + end = min_t(u64, ib_umem_end(umem_odp), range->end); /* * Iteration one - zap the HW's MTTs. The notifiers_count ensures that @@ -312,8 +321,13 @@ void mlx5_ib_invalidate_range(struct ib_umem_odp *umem_odp, unsigned long start, destroy_unused_implicit_child_mr(mr); out: mutex_unlock(&umem_odp->umem_mutex); + return true; } +const struct mmu_range_notifier_ops mlx5_mn_ops = { + .invalidate = mlx5_ib_invalidate_range, +}; + void mlx5_ib_internal_fill_odp_caps(struct mlx5_ib_dev *dev) { struct ib_odp_caps *caps = &dev->odp_caps; @@ -414,7 +428,7 @@ static struct mlx5_ib_mr *implicit_get_child_mr(struct mlx5_ib_mr *imr, odp = ib_umem_odp_alloc_child(to_ib_umem_odp(imr->umem), idx * MLX5_IMR_MTT_SIZE, - MLX5_IMR_MTT_SIZE); + MLX5_IMR_MTT_SIZE, &mlx5_mn_ops); if (IS_ERR(odp)) return ERR_CAST(odp); @@ -600,8 +614,9 @@ static int pagefault_real_mr(struct mlx5_ib_mr *mr, struct ib_umem_odp *odp, u64 user_va, size_t bcnt, u32 *bytes_mapped, u32 flags) { - int current_seq, page_shift, ret, np; + int page_shift, ret, np; bool downgrade = flags & MLX5_PF_FLAGS_DOWNGRADE; + unsigned long current_seq; u64 access_mask; u64 start_idx, page_mask; @@ -613,12 +628,7 @@ static int pagefault_real_mr(struct mlx5_ib_mr *mr, struct ib_umem_odp *odp, if (odp->umem.writable && !downgrade) access_mask |= ODP_WRITE_ALLOWED_BIT; - current_seq = READ_ONCE(odp->notifiers_seq); - /* - * Ensure the sequence number is valid for some time before we call - * gup. - */ - smp_rmb(); + current_seq = mmu_range_read_begin(&odp->notifier); np = ib_umem_odp_map_dma_pages(odp, user_va, bcnt, access_mask, current_seq); @@ -626,7 +636,7 @@ static int pagefault_real_mr(struct mlx5_ib_mr *mr, struct ib_umem_odp *odp, return np; mutex_lock(&odp->umem_mutex); - if (!ib_umem_mmu_notifier_retry(odp, current_seq)) { + if (!mmu_range_read_retry(&odp->notifier, current_seq)) { /* * No need to check whether the MTTs really belong to * this MR, since ib_umem_odp_map_dma_pages already @@ -656,19 +666,6 @@ static int pagefault_real_mr(struct mlx5_ib_mr *mr, struct ib_umem_odp *odp, return np << (page_shift - PAGE_SHIFT); out: - if (ret == -EAGAIN) { - unsigned long timeout = msecs_to_jiffies(MMU_NOTIFIER_TIMEOUT); - - if (!wait_for_completion_timeout(&odp->notifier_completion, - timeout)) { - mlx5_ib_warn( - mr->dev, - "timeout waiting for mmu notifier. seq %d against %d. notifiers_count=%d\n", - current_seq, odp->notifiers_seq, - odp->notifiers_count); - } - } - return ret; } @@ -1609,7 +1606,6 @@ void mlx5_odp_init_mr_cache_entry(struct mlx5_cache_ent *ent) static const struct ib_device_ops mlx5_ib_dev_odp_ops = { .advise_mr = mlx5_ib_advise_mr, - .invalidate_range = mlx5_ib_invalidate_range, }; int mlx5_ib_odp_init_one(struct mlx5_ib_dev *dev) diff --git a/include/rdma/ib_umem_odp.h b/include/rdma/ib_umem_odp.h index 09b0e4494986a9..98ed5435afccd9 100644 --- a/include/rdma/ib_umem_odp.h +++ b/include/rdma/ib_umem_odp.h @@ -35,11 +35,11 @@ #include #include -#include struct ib_umem_odp { struct ib_umem umem; - struct ib_ucontext_per_mm *per_mm; + struct mmu_range_notifier notifier; + struct pid *tgid; /* * An array of the pages included in the on-demand paging umem. @@ -62,13 +62,8 @@ struct ib_umem_odp { struct mutex umem_mutex; void *private; /* for the HW driver to use. */ - int notifiers_seq; - int notifiers_count; int npages; - /* Tree tracking */ - struct interval_tree_node interval_tree; - /* * An implicit odp umem cannot be DMA mapped, has 0 length, and serves * only as an anchor for the driver to hold onto the per_mm. FIXME: @@ -77,7 +72,6 @@ struct ib_umem_odp { */ bool is_implicit_odp; - struct completion notifier_completion; unsigned int page_shift; }; @@ -89,13 +83,13 @@ static inline struct ib_umem_odp *to_ib_umem_odp(struct ib_umem *umem) /* Returns the first page of an ODP umem. */ static inline unsigned long ib_umem_start(struct ib_umem_odp *umem_odp) { - return umem_odp->interval_tree.start; + return umem_odp->notifier.interval_tree.start; } /* Returns the address of the page after the last one of an ODP umem. */ static inline unsigned long ib_umem_end(struct ib_umem_odp *umem_odp) { - return umem_odp->interval_tree.last + 1; + return umem_odp->notifier.interval_tree.last + 1; } static inline size_t ib_umem_odp_num_pages(struct ib_umem_odp *umem_odp) @@ -119,21 +113,14 @@ static inline size_t ib_umem_odp_num_pages(struct ib_umem_odp *umem_odp) #ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING -struct ib_ucontext_per_mm { - struct mmu_notifier mn; - struct pid *tgid; - - struct rb_root_cached umem_tree; - /* Protects umem_tree */ - struct rw_semaphore umem_rwsem; -}; - struct ib_umem_odp *ib_umem_odp_get(struct ib_udata *udata, unsigned long addr, - size_t size, int access); + size_t size, int access, + const struct mmu_range_notifier_ops *ops); struct ib_umem_odp *ib_umem_odp_alloc_implicit(struct ib_udata *udata, int access); -struct ib_umem_odp *ib_umem_odp_alloc_child(struct ib_umem_odp *root_umem, - unsigned long addr, size_t size); +struct ib_umem_odp * +ib_umem_odp_alloc_child(struct ib_umem_odp *root_umem, unsigned long addr, + size_t size, const struct mmu_range_notifier_ops *ops); void ib_umem_odp_release(struct ib_umem_odp *umem_odp); int ib_umem_odp_map_dma_pages(struct ib_umem_odp *umem_odp, u64 start_offset, @@ -143,39 +130,11 @@ int ib_umem_odp_map_dma_pages(struct ib_umem_odp *umem_odp, u64 start_offset, void ib_umem_odp_unmap_dma_pages(struct ib_umem_odp *umem_odp, u64 start_offset, u64 bound); -typedef int (*umem_call_back)(struct ib_umem_odp *item, u64 start, u64 end, - void *cookie); -/* - * Call the callback on each ib_umem in the range. Returns the logical or of - * the return values of the functions called. - */ -int rbt_ib_umem_for_each_in_range(struct rb_root_cached *root, - u64 start, u64 end, - umem_call_back cb, - bool blockable, void *cookie); - -static inline int ib_umem_mmu_notifier_retry(struct ib_umem_odp *umem_odp, - unsigned long mmu_seq) -{ - /* - * This code is strongly based on the KVM code from - * mmu_notifier_retry. Should be called with - * the relevant locks taken (umem_odp->umem_mutex - * and the ucontext umem_mutex semaphore locked for read). - */ - - if (unlikely(umem_odp->notifiers_count)) - return 1; - if (umem_odp->notifiers_seq != mmu_seq) - return 1; - return 0; -} - #else /* CONFIG_INFINIBAND_ON_DEMAND_PAGING */ -static inline struct ib_umem_odp *ib_umem_odp_get(struct ib_udata *udata, - unsigned long addr, - size_t size, int access) +static inline struct ib_umem_odp * +ib_umem_odp_get(struct ib_udata *udata, unsigned long addr, size_t size, + int access, const struct mmu_range_notifier_ops *ops) { return ERR_PTR(-EINVAL); } diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 6a47ba85c54c11..2c30c859ae0d13 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -2422,8 +2422,6 @@ struct ib_device_ops { u64 iova); int (*unmap_fmr)(struct list_head *fmr_list); int (*dealloc_fmr)(struct ib_fmr *fmr); - void (*invalidate_range)(struct ib_umem_odp *umem_odp, - unsigned long start, unsigned long end); int (*attach_mcast)(struct ib_qp *qp, union ib_gid *gid, u16 lid); int (*detach_mcast)(struct ib_qp *qp, union ib_gid *gid, u16 lid); struct ib_xrcd *(*alloc_xrcd)(struct ib_device *device, -- 2.23.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Gunthorpe Subject: [PATCH v2 05/15] RDMA/odp: Use mmu_range_notifier_insert() Date: Mon, 28 Oct 2019 17:10:22 -0300 Message-ID: <20191028201032.6352-6-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 RnJvbTogSmFzb24gR3VudGhvcnBlIDxqZ2dAbWVsbGFub3guY29tPgoKUmVwbGFjZSB0aGUgaW50 ZXJuYWwgaW50ZXJ2YWwgdHJlZSBiYXNlZCBtbXUgbm90aWZpZXIgd2l0aCB0aGUgbmV3IGNvbW1v bgptbXVfcmFuZ2Vfbm90aWZpZXJfaW5zZXJ0KCkgQVBJLiBUaGlzIHJlbW92ZXMgYSBsb3Qgb2Yg Y29kZSBhbmQgZml4ZXMgYQpkZWFkbG9jayB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gT0RQOgoK IHphcF9wYWdlX3JhbmdlKCkKICBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgp CiAgIFsuLl0KICAgIGliX3VtZW1fbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgpCiAg ICAgICBkb3duX3JlYWQoJnBlcl9tbS0+dW1lbV9yd3NlbSkKICB1bm1hcF9zaW5nbGVfdm1hKCkK ICAgIFsuLl0KICAgICAgX19zcGxpdF9odWdlX3BhZ2VfcG1kKCkKICAgICAgICBtbXVfbm90aWZp ZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgpCiAgICAgICAgWy4uXQogICAgICAgICAgIGliX3Vt ZW1fbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgpCiAgICAgICAgICAgICAgZG93bl9y ZWFkKCZwZXJfbW0tPnVtZW1fcndzZW0pICAgLy8gREVBRExPQ0sKCiAgICAgICAgbW11X25vdGlm aWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkKICAgICAgICAgICB1cF9yZWFkKCZwZXJfbW0tPnVt ZW1fcndzZW0pCiAgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkKICAgICB1cF9y ZWFkKCZwZXJfbW0tPnVtZW1fcndzZW0pCgpUaGUgdW1lbV9yd3NlbSBpcyBoZWxkIGFjcm9zcyB0 aGUgcmFuZ2Vfc3RhcnQvZW5kIGFzIHRoZSBPRFAgYWxnb3JpdGhtIGZvcgppbnZhbGlkYXRlX3Jh bmdlX2VuZCBjYW5ub3QgdG9sZXJhdGUgY2hhbmdlcyB0byB0aGUgaW50ZXJ2YWwKdHJlZS4gSG93 ZXZlciwgZHVlIHRvIHRoZSBuZXN0ZWQgaW52YWxpZGF0aW9uIHJlZ2lvbnMgdGhlIHNlY29uZApk b3duX3JlYWQoKSBjYW4gZGVhZGxvY2sgaWYgdGhlcmUgYXJlIGNvbXBldGluZyB3cml0ZXJzLiBU aGUgbmV3IGNvcmUgY29kZQpwcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBzY2hlbWUgdG8gc29sdmUg dGhpcyBwcm9ibGVtLgoKRml4ZXM6IGNhNzQ4YzM5ZWEzZiAoIlJETUEvdW1lbTogR2V0IHJpZCBv ZiBwZXJfbW0tPm5vdGlmaWVyX2NvdW50IikKU2lnbmVkLW9mZi1ieTogSmFzb24gR3VudGhvcnBl IDxqZ2dAbWVsbGFub3guY29tPgotLS0KIGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5j ICAgICB8ICAgMSAtCiBkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jICAgfCAyODgg KysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9t bHg1X2liLmggfCAgIDcgKy0KIGRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMgICAgICB8 ICAgMyArLQogZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMgICAgIHwgIDUwICsrKy0t CiBpbmNsdWRlL3JkbWEvaWJfdW1lbV9vZHAuaCAgICAgICAgICAgfCAgNjUgKystLS0tCiBpbmNs dWRlL3JkbWEvaWJfdmVyYnMuaCAgICAgICAgICAgICAgfCAgIDIgLQogNyBmaWxlcyBjaGFuZ2Vk LCA2OSBpbnNlcnRpb25zKCspLCAzNDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZp Y2UuYwppbmRleCAyZGQyY2ZlOWI1NjEzNi4uYWM3OTI0YjNjNzNhYmUgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9j b3JlL2RldmljZS5jCkBAIC0yNjE3LDcgKzI2MTcsNiBAQCB2b2lkIGliX3NldF9kZXZpY2Vfb3Bz KHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGliX2RldmljZV9vcHMgKm9wcykK IAlTRVRfREVWSUNFX09QKGRldl9vcHMsIGdldF92Zl9jb25maWcpOwogCVNFVF9ERVZJQ0VfT1Ao ZGV2X29wcywgZ2V0X3ZmX3N0YXRzKTsKIAlTRVRfREVWSUNFX09QKGRldl9vcHMsIGluaXRfcG9y dCk7Ci0JU0VUX0RFVklDRV9PUChkZXZfb3BzLCBpbnZhbGlkYXRlX3JhbmdlKTsKIAlTRVRfREVW SUNFX09QKGRldl9vcHMsIGl3X2FjY2VwdCk7CiAJU0VUX0RFVklDRV9PUChkZXZfb3BzLCBpd19h ZGRfcmVmKTsKIAlTRVRfREVWSUNFX09QKGRldl9vcHMsIGl3X2Nvbm5lY3QpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYyBiL2RyaXZlcnMvaW5maW5pYmFu ZC9jb3JlL3VtZW1fb2RwLmMKaW5kZXggZDdkNWZhZGYwODk5YWQuLjYxMzJiODEyN2U4NDM1IDEw MDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jCisrKyBiL2RyaXZl cnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMKQEAgLTQ4LDE5NyArNDgsMzIgQEAKIAogI2lu Y2x1ZGUgInV2ZXJicy5oIgogCi1zdGF0aWMgdm9pZCBpYl91bWVtX25vdGlmaWVyX3N0YXJ0X2Fj Y291bnQoc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCkKLXsKLQltdXRleF9sb2NrKCZ1bWVt X29kcC0+dW1lbV9tdXRleCk7Ci0JaWYgKHVtZW1fb2RwLT5ub3RpZmllcnNfY291bnQrKyA9PSAw KQotCQkvKgotCQkgKiBJbml0aWFsaXplIHRoZSBjb21wbGV0aW9uIG9iamVjdCBmb3Igd2FpdGlu ZyBvbgotCQkgKiBub3RpZmllcnMuIFNpbmNlIG5vdGlmaWVyX2NvdW50IGlzIHplcm8sIG5vIG9u ZSBzaG91bGQgYmUKLQkJICogd2FpdGluZyByaWdodCBub3cuCi0JCSAqLwotCQlyZWluaXRfY29t cGxldGlvbigmdW1lbV9vZHAtPm5vdGlmaWVyX2NvbXBsZXRpb24pOwotCW11dGV4X3VubG9jaygm dW1lbV9vZHAtPnVtZW1fbXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCBpYl91bWVtX25vdGlmaWVy X2VuZF9hY2NvdW50KHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHApCi17Ci0JbXV0ZXhfbG9j aygmdW1lbV9vZHAtPnVtZW1fbXV0ZXgpOwotCS8qCi0JICogVGhpcyBzZXF1ZW5jZSBpbmNyZWFz ZSB3aWxsIG5vdGlmeSB0aGUgUVAgcGFnZSBmYXVsdCB0aGF0IHRoZSBwYWdlCi0JICogdGhhdCBp cyBnb2luZyB0byBiZSBtYXBwZWQgaW4gdGhlIHNwdGUgY291bGQgaGF2ZSBiZWVuIGZyZWVkLgot CSAqLwotCSsrdW1lbV9vZHAtPm5vdGlmaWVyc19zZXE7Ci0JaWYgKC0tdW1lbV9vZHAtPm5vdGlm aWVyc19jb3VudCA9PSAwKQotCQljb21wbGV0ZV9hbGwoJnVtZW1fb2RwLT5ub3RpZmllcl9jb21w bGV0aW9uKTsKLQltdXRleF91bmxvY2soJnVtZW1fb2RwLT51bWVtX211dGV4KTsKLX0KLQotc3Rh dGljIHZvaWQgaWJfdW1lbV9ub3RpZmllcl9yZWxlYXNlKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1u LAotCQkJCSAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IGliX3Vjb250ZXh0 X3Blcl9tbSAqcGVyX21tID0KLQkJY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaWJfdWNvbnRleHRf cGVyX21tLCBtbik7Ci0Jc3RydWN0IHJiX25vZGUgKm5vZGU7Ci0KLQlkb3duX3JlYWQoJnBlcl9t bS0+dW1lbV9yd3NlbSk7Ci0JaWYgKCFwZXJfbW0tPm1uLnVzZXJzKQotCQlnb3RvIG91dDsKLQot CWZvciAobm9kZSA9IHJiX2ZpcnN0X2NhY2hlZCgmcGVyX21tLT51bWVtX3RyZWUpOyBub2RlOwot CSAgICAgbm9kZSA9IHJiX25leHQobm9kZSkpIHsKLQkJc3RydWN0IGliX3VtZW1fb2RwICp1bWVt X29kcCA9Ci0JCQlyYl9lbnRyeShub2RlLCBzdHJ1Y3QgaWJfdW1lbV9vZHAsIGludGVydmFsX3Ry ZWUucmIpOwotCi0JCS8qCi0JCSAqIEluY3JlYXNlIHRoZSBudW1iZXIgb2Ygbm90aWZpZXJzIHJ1 bm5pbmcsIHRvIHByZXZlbnQgYW55Ci0JCSAqIGZ1cnRoZXIgZmF1bHQgaGFuZGxpbmcgb24gdGhp cyBNUi4KLQkJICovCi0JCWliX3VtZW1fbm90aWZpZXJfc3RhcnRfYWNjb3VudCh1bWVtX29kcCk7 Ci0JCWNvbXBsZXRlX2FsbCgmdW1lbV9vZHAtPm5vdGlmaWVyX2NvbXBsZXRpb24pOwotCQl1bWVt X29kcC0+dW1lbS5pYmRldi0+b3BzLmludmFsaWRhdGVfcmFuZ2UoCi0JCQl1bWVtX29kcCwgaWJf dW1lbV9zdGFydCh1bWVtX29kcCksCi0JCQlpYl91bWVtX2VuZCh1bWVtX29kcCkpOwotCX0KLQot b3V0OgotCXVwX3JlYWQoJnBlcl9tbS0+dW1lbV9yd3NlbSk7Ci19Ci0KLXN0YXRpYyBpbnQgaW52 YWxpZGF0ZV9yYW5nZV9zdGFydF90cmFtcG9saW5lKHN0cnVjdCBpYl91bWVtX29kcCAqaXRlbSwK LQkJCQkJICAgICB1NjQgc3RhcnQsIHU2NCBlbmQsIHZvaWQgKmNvb2tpZSkKLXsKLQlpYl91bWVt X25vdGlmaWVyX3N0YXJ0X2FjY291bnQoaXRlbSk7Ci0JaXRlbS0+dW1lbS5pYmRldi0+b3BzLmlu dmFsaWRhdGVfcmFuZ2UoaXRlbSwgc3RhcnQsIGVuZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyBpbnQgaWJfdW1lbV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVf bm90aWZpZXIgKm1uLAotCQkJCWNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdl KQotewotCXN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0gKnBlcl9tbSA9Ci0JCWNvbnRhaW5lcl9v Zihtbiwgc3RydWN0IGliX3Vjb250ZXh0X3Blcl9tbSwgbW4pOwotCWludCByYzsKLQotCWlmICht bXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSkKLQkJZG93bl9yZWFkKCZwZXJfbW0t PnVtZW1fcndzZW0pOwotCWVsc2UgaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmcGVyX21tLT51bWVt X3J3c2VtKSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlpZiAoIXBlcl9tbS0+bW4udXNlcnMpIHsK LQkJdXBfcmVhZCgmcGVyX21tLT51bWVtX3J3c2VtKTsKLQkJLyoKLQkJICogQXQgdGhpcyBwb2lu dCB1c2VycyBpcyBwZXJtYW5lbnRseSB6ZXJvIGFuZCB2aXNpYmxlIHRvIHRoaXMKLQkJICogQ1BV IHdpdGhvdXQgYSBsb2NrLCB0aGF0IGZhY3QgaXMgcmVsaWVkIG9uIHRvIHNraXAgdGhlIHVubG9j awotCQkgKiBpbiByYW5nZV9lbmQuCi0JCSAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyYyA9IHJi dF9pYl91bWVtX2Zvcl9lYWNoX2luX3JhbmdlKCZwZXJfbW0tPnVtZW1fdHJlZSwgcmFuZ2UtPnN0 YXJ0LAotCQkJCQkgICByYW5nZS0+ZW5kLAotCQkJCQkgICBpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0 X3RyYW1wb2xpbmUsCi0JCQkJCSAgIG1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2Up LAotCQkJCQkgICBOVUxMKTsKLQlpZiAocmMpCi0JCXVwX3JlYWQoJnBlcl9tbS0+dW1lbV9yd3Nl bSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGludmFsaWRhdGVfcmFuZ2VfZW5kX3Ry YW1wb2xpbmUoc3RydWN0IGliX3VtZW1fb2RwICppdGVtLCB1NjQgc3RhcnQsCi0JCQkJCSAgIHU2 NCBlbmQsIHZvaWQgKmNvb2tpZSkKLXsKLQlpYl91bWVtX25vdGlmaWVyX2VuZF9hY2NvdW50KGl0 ZW0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpYl91bWVtX25vdGlmaWVyX2ludmFs aWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAotCQkJCWNvbnN0IHN0cnVj dCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKQotewotCXN0cnVjdCBpYl91Y29udGV4dF9wZXJf bW0gKnBlcl9tbSA9Ci0JCWNvbnRhaW5lcl9vZihtbiwgc3RydWN0IGliX3Vjb250ZXh0X3Blcl9t bSwgbW4pOwotCi0JaWYgKHVubGlrZWx5KCFwZXJfbW0tPm1uLnVzZXJzKSkKLQkJcmV0dXJuOwot Ci0JcmJ0X2liX3VtZW1fZm9yX2VhY2hfaW5fcmFuZ2UoJnBlcl9tbS0+dW1lbV90cmVlLCByYW5n ZS0+c3RhcnQsCi0JCQkJICAgICAgcmFuZ2UtPmVuZCwKLQkJCQkgICAgICBpbnZhbGlkYXRlX3Jh bmdlX2VuZF90cmFtcG9saW5lLCB0cnVlLCBOVUxMKTsKLQl1cF9yZWFkKCZwZXJfbW0tPnVtZW1f cndzZW0pOwotfQotCi1zdGF0aWMgc3RydWN0IG1tdV9ub3RpZmllciAqaWJfdW1lbV9hbGxvY19u b3RpZmllcihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlzdHJ1Y3QgaWJfdWNvbnRleHRfcGVy X21tICpwZXJfbW07Ci0KLQlwZXJfbW0gPSBremFsbG9jKHNpemVvZigqcGVyX21tKSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFwZXJfbW0pCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JcGVy X21tLT51bWVtX3RyZWUgPSBSQl9ST09UX0NBQ0hFRDsKLQlpbml0X3J3c2VtKCZwZXJfbW0tPnVt ZW1fcndzZW0pOwotCi0JV0FSTl9PTihtbSAhPSBjdXJyZW50LT5tbSk7Ci0JcmN1X3JlYWRfbG9j aygpOwotCXBlcl9tbS0+dGdpZCA9IGdldF90YXNrX3BpZChjdXJyZW50LT5ncm91cF9sZWFkZXIs IFBJRFRZUEVfUElEKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gJnBlcl9tbS0+bW47 Ci19Ci0KLXN0YXRpYyB2b2lkIGliX3VtZW1fZnJlZV9ub3RpZmllcihzdHJ1Y3QgbW11X25vdGlm aWVyICptbikKLXsKLQlzdHJ1Y3QgaWJfdWNvbnRleHRfcGVyX21tICpwZXJfbW0gPQotCQljb250 YWluZXJfb2YobW4sIHN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0sIG1uKTsKLQotCVdBUk5fT04o IVJCX0VNUFRZX1JPT1QoJnBlcl9tbS0+dW1lbV90cmVlLnJiX3Jvb3QpKTsKLQotCXB1dF9waWQo cGVyX21tLT50Z2lkKTsKLQlrZnJlZShwZXJfbW0pOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IG1tdV9ub3RpZmllcl9vcHMgaWJfdW1lbV9ub3RpZmllcnMgPSB7Ci0JLnJlbGVhc2UgICAgICAg ICAgICAgICAgICAgID0gaWJfdW1lbV9ub3RpZmllcl9yZWxlYXNlLAotCS5pbnZhbGlkYXRlX3Jh bmdlX3N0YXJ0ICAgICA9IGliX3VtZW1fbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCwK LQkuaW52YWxpZGF0ZV9yYW5nZV9lbmQgICAgICAgPSBpYl91bWVtX25vdGlmaWVyX2ludmFsaWRh dGVfcmFuZ2VfZW5kLAotCS5hbGxvY19ub3RpZmllcgkJICAgID0gaWJfdW1lbV9hbGxvY19ub3Rp ZmllciwKLQkuZnJlZV9ub3RpZmllcgkJICAgID0gaWJfdW1lbV9mcmVlX25vdGlmaWVyLAotfTsK LQogc3RhdGljIGlubGluZSBpbnQgaWJfaW5pdF91bWVtX29kcChzdHJ1Y3QgaWJfdW1lbV9vZHAg KnVtZW1fb2RwKQogewotCXN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0gKnBlcl9tbTsKLQlzdHJ1 Y3QgbW11X25vdGlmaWVyICptbjsKIAlpbnQgcmV0OwogCiAJdW1lbV9vZHAtPnVtZW0uaXNfb2Rw ID0gMTsKKwltdXRleF9pbml0KCZ1bWVtX29kcC0+dW1lbV9tdXRleCk7CisKIAlpZiAoIXVtZW1f b2RwLT5pc19pbXBsaWNpdF9vZHApIHsKIAkJc2l6ZV90IHBhZ2Vfc2l6ZSA9IDFVTCA8PCB1bWVt X29kcC0+cGFnZV9zaGlmdDsKKwkJdW5zaWduZWQgbG9uZyBzdGFydDsKKwkJdW5zaWduZWQgbG9u ZyBlbmQ7CiAJCXNpemVfdCBwYWdlczsKIAotCQl1bWVtX29kcC0+aW50ZXJ2YWxfdHJlZS5zdGFy dCA9Ci0JCQlBTElHTl9ET1dOKHVtZW1fb2RwLT51bWVtLmFkZHJlc3MsIHBhZ2Vfc2l6ZSk7CisJ CXN0YXJ0ID0gQUxJR05fRE9XTih1bWVtX29kcC0+dW1lbS5hZGRyZXNzLCBwYWdlX3NpemUpOwog CQlpZiAoY2hlY2tfYWRkX292ZXJmbG93KHVtZW1fb2RwLT51bWVtLmFkZHJlc3MsCiAJCQkJICAg ICAgICh1bnNpZ25lZCBsb25nKXVtZW1fb2RwLT51bWVtLmxlbmd0aCwKLQkJCQkgICAgICAgJnVt ZW1fb2RwLT5pbnRlcnZhbF90cmVlLmxhc3QpKQorCQkJCSAgICAgICAmZW5kKSkKIAkJCXJldHVy biAtRU9WRVJGTE9XOwotCQl1bWVtX29kcC0+aW50ZXJ2YWxfdHJlZS5sYXN0ID0KLQkJCUFMSUdO KHVtZW1fb2RwLT5pbnRlcnZhbF90cmVlLmxhc3QsIHBhZ2Vfc2l6ZSk7Ci0JCWlmICh1bmxpa2Vs eSh1bWVtX29kcC0+aW50ZXJ2YWxfdHJlZS5sYXN0IDwgcGFnZV9zaXplKSkKKwkJZW5kID0gQUxJ R04oZW5kLCBwYWdlX3NpemUpOworCQlpZiAodW5saWtlbHkoZW5kIDwgcGFnZV9zaXplKSkKIAkJ CXJldHVybiAtRU9WRVJGTE9XOwogCi0JCXBhZ2VzID0gKHVtZW1fb2RwLT5pbnRlcnZhbF90cmVl Lmxhc3QgLQotCQkJIHVtZW1fb2RwLT5pbnRlcnZhbF90cmVlLnN0YXJ0KSA+PgotCQkJdW1lbV9v ZHAtPnBhZ2Vfc2hpZnQ7CisJCXBhZ2VzID0gKGVuZCAtIHN0YXJ0KSA+PiB1bWVtX29kcC0+cGFn ZV9zaGlmdDsKIAkJaWYgKCFwYWdlcykKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qCi0JCSAq IE5vdGUgdGhhdCB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVydmFscyBpbiB0aGUKLQkJ ICogaW50ZXJ2YWwgdHJlZSBjb25zaWRlcnMgdGhlIGVuZGluZyBwb2ludCBhcyBjb250YWluZWQg aW4KLQkJICogdGhlIGludGVydmFsLgotCQkgKi8KLQkJdW1lbV9vZHAtPmludGVydmFsX3RyZWUu bGFzdC0tOwotCiAJCXVtZW1fb2RwLT5wYWdlX2xpc3QgPSBrdmNhbGxvYygKIAkJCXBhZ2VzLCBz aXplb2YoKnVtZW1fb2RwLT5wYWdlX2xpc3QpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF1bWVtX29k cC0+cGFnZV9saXN0KQpAQCAtMjUwLDI2ICs4NSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBpYl9p bml0X3VtZW1fb2RwKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHApCiAJCQlyZXQgPSAtRU5P TUVNOwogCQkJZ290byBvdXRfcGFnZV9saXN0OwogCQl9Ci0JfQogCi0JbW4gPSBtbXVfbm90aWZp ZXJfZ2V0KCZpYl91bWVtX25vdGlmaWVycywgdW1lbV9vZHAtPnVtZW0ub3duaW5nX21tKTsKLQlp ZiAoSVNfRVJSKG1uKSkgewotCQlyZXQgPSBQVFJfRVJSKG1uKTsKLQkJZ290byBvdXRfZG1hX2xp c3Q7Ci0JfQotCXVtZW1fb2RwLT5wZXJfbW0gPSBwZXJfbW0gPQotCQljb250YWluZXJfb2YobW4s IHN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0sIG1uKTsKLQotCW11dGV4X2luaXQoJnVtZW1fb2Rw LT51bWVtX211dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJnVtZW1fb2RwLT5ub3RpZmllcl9jb21w bGV0aW9uKTsKKwkJcmV0ID0gbW11X3JhbmdlX25vdGlmaWVyX2luc2VydCgmdW1lbV9vZHAtPm5v dGlmaWVyLCBzdGFydCwKKwkJCQkJCWVuZCAtIHN0YXJ0LCBjdXJyZW50LT5tbSk7CisJCWlmIChy ZXQpCisJCQlnb3RvIG91dF9kbWFfbGlzdDsKIAotCWlmICghdW1lbV9vZHAtPmlzX2ltcGxpY2l0 X29kcCkgewotCQlkb3duX3dyaXRlKCZwZXJfbW0tPnVtZW1fcndzZW0pOwotCQlpbnRlcnZhbF90 cmVlX2luc2VydCgmdW1lbV9vZHAtPmludGVydmFsX3RyZWUsCi0JCQkJICAgICAmcGVyX21tLT51 bWVtX3RyZWUpOwotCQl1cF93cml0ZSgmcGVyX21tLT51bWVtX3J3c2VtKTsKKwkJdW1lbV9vZHAt PnRnaWQgPQorCQkJZ2V0X3Rhc2tfcGlkKGN1cnJlbnQtPmdyb3VwX2xlYWRlciwgUElEVFlQRV9Q SUQpOwogCX0KLQltbWdyYWIodW1lbV9vZHAtPnVtZW0ub3duaW5nX21tKTsKIAogCXJldHVybiAw OwogCkBAIC0yOTAsOCArMTE0LDggQEAgc3RhdGljIGlubGluZSBpbnQgaWJfaW5pdF91bWVtX29k cChzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwKQogICogQHVkYXRhOiB1ZGF0YSBmcm9tIHRo ZSBzeXNjYWxsIGJlaW5nIHVzZWQgdG8gY3JlYXRlIHRoZSB1bWVtCiAgKiBAYWNjZXNzOiBpYl9y ZWdfbXIgYWNjZXNzIGZsYWdzCiAgKi8KLXN0cnVjdCBpYl91bWVtX29kcCAqaWJfdW1lbV9vZHBf YWxsb2NfaW1wbGljaXQoc3RydWN0IGliX3VkYXRhICp1ZGF0YSwKLQkJCQkJICAgICAgIGludCBh Y2Nlc3MpCitzdHJ1Y3QgaWJfdW1lbV9vZHAgKgoraWJfdW1lbV9vZHBfYWxsb2NfaW1wbGljaXQo c3RydWN0IGliX3VkYXRhICp1ZGF0YSwgaW50IGFjY2VzcykKIHsKIAlzdHJ1Y3QgaWJfdWNvbnRl eHQgKmNvbnRleHQgPQogCQljb250YWluZXJfb2YodWRhdGEsIHN0cnVjdCB1dmVyYnNfYXR0cl9i dW5kbGUsIGRyaXZlcl91ZGF0YSkKQEAgLTMwNSw4ICsxMjksNiBAQCBzdHJ1Y3QgaWJfdW1lbV9v ZHAgKmliX3VtZW1fb2RwX2FsbG9jX2ltcGxpY2l0KHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEsCiAK IAlpZiAoIWNvbnRleHQpCiAJCXJldHVybiBFUlJfUFRSKC1FSU8pOwotCWlmIChXQVJOX09OX09O Q0UoIWNvbnRleHQtPmRldmljZS0+b3BzLmludmFsaWRhdGVfcmFuZ2UpKQotCQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKIAogCXVtZW1fb2RwID0ga3phbGxvYyhzaXplb2YoKnVtZW1fb2RwKSwg R0ZQX0tFUk5FTCk7CiAJaWYgKCF1bWVtX29kcCkKQEAgLTMzNiw4ICsxNTgsOSBAQCBFWFBPUlRf U1lNQk9MKGliX3VtZW1fb2RwX2FsbG9jX2ltcGxpY2l0KTsKICAqIEBhZGRyOiBUaGUgc3RhcnRp bmcgdXNlcnNwYWNlIFZBCiAgKiBAc2l6ZTogVGhlIGxlbmd0aCBvZiB0aGUgdXNlcnNwYWNlIFZB CiAgKi8KLXN0cnVjdCBpYl91bWVtX29kcCAqaWJfdW1lbV9vZHBfYWxsb2NfY2hpbGQoc3RydWN0 IGliX3VtZW1fb2RwICpyb290LAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qg c2l6ZSkKK3N0cnVjdCBpYl91bWVtX29kcCAqCitpYl91bWVtX29kcF9hbGxvY19jaGlsZChzdHJ1 Y3QgaWJfdW1lbV9vZHAgKnJvb3QsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCXNpemVfdCBzaXpl LCBjb25zdCBzdHJ1Y3QgbW11X3JhbmdlX25vdGlmaWVyX29wcyAqb3BzKQogewogCS8qCiAJICog Q2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgcm9vdCBjYW5ub3QgYmUgZnJlZWQgZHVyaW5nIHRoZSBj YWxsIHRvCkBAIC0zNjAsNiArMTgzLDcgQEAgc3RydWN0IGliX3VtZW1fb2RwICppYl91bWVtX29k cF9hbGxvY19jaGlsZChzdHJ1Y3QgaWJfdW1lbV9vZHAgKnJvb3QsCiAJdW1lbS0+d3JpdGFibGUg ICA9IHJvb3QtPnVtZW0ud3JpdGFibGU7CiAJdW1lbS0+b3duaW5nX21tICA9IHJvb3QtPnVtZW0u b3duaW5nX21tOwogCW9kcF9kYXRhLT5wYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDsKKwlvZHBfZGF0 YS0+bm90aWZpZXIub3BzID0gb3BzOwogCiAJcmV0ID0gaWJfaW5pdF91bWVtX29kcChvZHBfZGF0 YSk7CiAJaWYgKHJldCkgewpAQCAtMzgzLDcgKzIwNyw4IEBAIEVYUE9SVF9TWU1CT0woaWJfdW1l bV9vZHBfYWxsb2NfY2hpbGQpOwogICogY29uanVuY3Rpb24gd2l0aCBNTVUgbm90aWZpZXJzLgog ICovCiBzdHJ1Y3QgaWJfdW1lbV9vZHAgKmliX3VtZW1fb2RwX2dldChzdHJ1Y3QgaWJfdWRhdGEg KnVkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgIHNpemVfdCBzaXplLCBpbnQgYWNj ZXNzKQorCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGFjY2VzcywKKwkJCQkgICAgY29uc3Qgc3Ry dWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgaWJfdW1lbV9vZHAg KnVtZW1fb2RwOwogCXN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dDsKQEAgLTM5OCw4ICsyMjMs NyBAQCBzdHJ1Y3QgaWJfdW1lbV9vZHAgKmliX3VtZW1fb2RwX2dldChzdHJ1Y3QgaWJfdWRhdGEg KnVkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFjb250ZXh0KQogCQlyZXR1cm4gRVJS X1BUUigtRUlPKTsKIAotCWlmIChXQVJOX09OX09OQ0UoIShhY2Nlc3MgJiBJQl9BQ0NFU1NfT05f REVNQU5EKSkgfHwKLQkgICAgV0FSTl9PTl9PTkNFKCFjb250ZXh0LT5kZXZpY2UtPm9wcy5pbnZh bGlkYXRlX3JhbmdlKSkKKwlpZiAoV0FSTl9PTl9PTkNFKCEoYWNjZXNzICYgSUJfQUNDRVNTX09O X0RFTUFORCkpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCXVtZW1fb2RwID0ga3ph bGxvYyhzaXplb2Yoc3RydWN0IGliX3VtZW1fb2RwKSwgR0ZQX0tFUk5FTCk7CkBAIC00MTEsNiAr MjM1LDcgQEAgc3RydWN0IGliX3VtZW1fb2RwICppYl91bWVtX29kcF9nZXQoc3RydWN0IGliX3Vk YXRhICp1ZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXVtZW1fb2RwLT51bWVtLmFkZHJlc3Mg PSBhZGRyOwogCXVtZW1fb2RwLT51bWVtLndyaXRhYmxlID0gaWJfYWNjZXNzX3dyaXRhYmxlKGFj Y2Vzcyk7CiAJdW1lbV9vZHAtPnVtZW0ub3duaW5nX21tID0gbW0gPSBjdXJyZW50LT5tbTsKKwl1 bWVtX29kcC0+bm90aWZpZXIub3BzID0gb3BzOwogCiAJdW1lbV9vZHAtPnBhZ2Vfc2hpZnQgPSBQ QUdFX1NISUZUOwogCWlmIChhY2Nlc3MgJiBJQl9BQ0NFU1NfSFVHRVRMQikgewpAQCAtNDQyLDgg KzI2Nyw2IEBAIEVYUE9SVF9TWU1CT0woaWJfdW1lbV9vZHBfZ2V0KTsKIAogdm9pZCBpYl91bWVt X29kcF9yZWxlYXNlKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHApCiB7Ci0Jc3RydWN0IGli X3Vjb250ZXh0X3Blcl9tbSAqcGVyX21tID0gdW1lbV9vZHAtPnBlcl9tbTsKLQogCS8qCiAJICog RW5zdXJlIHRoYXQgbm8gbW9yZSBwYWdlcyBhcmUgbWFwcGVkIGluIHRoZSB1bWVtLgogCSAqCkBA IC00NTUsMjggKzI3OCwxMSBAQCB2b2lkIGliX3VtZW1fb2RwX3JlbGVhc2Uoc3RydWN0IGliX3Vt ZW1fb2RwICp1bWVtX29kcCkKIAkJaWJfdW1lbV9vZHBfdW5tYXBfZG1hX3BhZ2VzKHVtZW1fb2Rw LCBpYl91bWVtX3N0YXJ0KHVtZW1fb2RwKSwKIAkJCQkJICAgIGliX3VtZW1fZW5kKHVtZW1fb2Rw KSk7CiAJCW11dGV4X3VubG9jaygmdW1lbV9vZHAtPnVtZW1fbXV0ZXgpOworCQltbXVfcmFuZ2Vf bm90aWZpZXJfcmVtb3ZlKCZ1bWVtX29kcC0+bm90aWZpZXIpOwogCQlrdmZyZWUodW1lbV9vZHAt PmRtYV9saXN0KTsKIAkJa3ZmcmVlKHVtZW1fb2RwLT5wYWdlX2xpc3QpOworCQlwdXRfcGlkKHVt ZW1fb2RwLT50Z2lkKTsKIAl9Ci0KLQlkb3duX3dyaXRlKCZwZXJfbW0tPnVtZW1fcndzZW0pOwot CWlmICghdW1lbV9vZHAtPmlzX2ltcGxpY2l0X29kcCkgewotCQlpbnRlcnZhbF90cmVlX3JlbW92 ZSgmdW1lbV9vZHAtPmludGVydmFsX3RyZWUsCi0JCQkJICAgICAmcGVyX21tLT51bWVtX3RyZWUp OwotCQljb21wbGV0ZV9hbGwoJnVtZW1fb2RwLT5ub3RpZmllcl9jb21wbGV0aW9uKTsKLQl9Ci0J LyoKLQkgKiBOT1RFISBtbXVfbm90aWZpZXJfdW5yZWdpc3RlcigpIGNhbiBoYXBwZW4gYmV0d2Vl biBhIHN0YXJ0L2VuZAotCSAqIGNhbGxiYWNrLCByZXN1bHRpbmcgaW4gYSBtaXNzaW5nIGVuZCwg YW5kIHRodXMgYW4gdW5iYWxhbmNlZAotCSAqIGxvY2suIFRoaXMgZG9lc24ndCByZWFsbHkgbWF0 dGVyIHRvIHVzIHNpbmNlIHdlIGFyZSBhYm91dCB0byBrZnJlZQotCSAqIHRoZSBtZW1vcnkgdGhh dCBob2xkcyB0aGUgbG9jaywgaG93ZXZlciBMT0NLREVQIGRvZXNuJ3QgbGlrZSB0aGlzLgotCSAq IFRodXMgd2UgY2FsbCB0aGUgbW11X25vdGlmaWVyX3B1dCB1bmRlciB0aGUgcndzZW0gYW5kIHRl c3QgdGhlCi0JICogaW50ZXJuYWwgdXNlcnMgY291bnQgdG8gcmVsaWFibHkgc2VlIGlmIHdlIGFy ZSBwYXN0IHRoaXMgcG9pbnQuCi0JICovCi0JbW11X25vdGlmaWVyX3B1dCgmcGVyX21tLT5tbik7 Ci0JdXBfd3JpdGUoJnBlcl9tbS0+dW1lbV9yd3NlbSk7Ci0KLQltbWRyb3AodW1lbV9vZHAtPnVt ZW0ub3duaW5nX21tKTsKIAlrZnJlZSh1bWVtX29kcCk7CiB9CiBFWFBPUlRfU1lNQk9MKGliX3Vt ZW1fb2RwX3JlbGVhc2UpOwpAQCAtNTAxLDcgKzMwNyw3IEBAIEVYUE9SVF9TWU1CT0woaWJfdW1l bV9vZHBfcmVsZWFzZSk7CiAgKi8KIHN0YXRpYyBpbnQgaWJfdW1lbV9vZHBfbWFwX2RtYV9zaW5n bGVfcGFnZSgKIAkJc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCwKLQkJaW50IHBhZ2VfaW5k ZXgsCisJCXVuc2lnbmVkIGludCBwYWdlX2luZGV4LAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJ dTY0IGFjY2Vzc19tYXNrLAogCQl1bnNpZ25lZCBsb25nIGN1cnJlbnRfc2VxKQpAQCAtNTEwLDEy ICszMTYsNyBAQCBzdGF0aWMgaW50IGliX3VtZW1fb2RwX21hcF9kbWFfc2luZ2xlX3BhZ2UoCiAJ ZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAlpbnQgcmV0ID0gMDsKIAotCS8qCi0JICogTm90ZTogd2Ug YXZvaWQgd3JpdGluZyBpZiBzZXEgaXMgZGlmZmVyZW50IGZyb20gdGhlIGluaXRpYWwgc2VxLCB0 bwotCSAqIGhhbmRsZSBjYXNlIG9mIGEgcmFjaW5nIG5vdGlmaWVyLiBUaGlzIGNoZWNrIGFsc28g YWxsb3dzIHVzIHRvIGJhaWwKLQkgKiBlYXJseSBpZiB3ZSBoYXZlIGEgbm90aWZpZXIgcnVubmlu ZyBpbiBwYXJhbGxlbCB3aXRoIHVzLgotCSAqLwotCWlmIChpYl91bWVtX21tdV9ub3RpZmllcl9y ZXRyeSh1bWVtX29kcCwgY3VycmVudF9zZXEpKSB7CisJaWYgKG1tdV9yYW5nZV9jaGVja19yZXRy eSgmdW1lbV9vZHAtPm5vdGlmaWVyLCBjdXJyZW50X3NlcSkpIHsKIAkJcmV0ID0gLUVBR0FJTjsK IAkJZ290byBvdXQ7CiAJfQpAQCAtNjE4LDcgKzQxOSw3IEBAIGludCBpYl91bWVtX29kcF9tYXBf ZG1hX3BhZ2VzKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsCiAJ ICogZXhpc3RpbmcgYmV5b25kIHRoZSBsaWZldGltZSBvZiB0aGUgb3JpZ2luYXRpbmcgcHJvY2Vz cy4uIFByZXN1bWFibHkKIAkgKiBtbWdldF9ub3RfemVybyB3aWxsIGZhaWwgaW4gdGhpcyBjYXNl LgogCSAqLwotCW93bmluZ19wcm9jZXNzID0gZ2V0X3BpZF90YXNrKHVtZW1fb2RwLT5wZXJfbW0t PnRnaWQsIFBJRFRZUEVfUElEKTsKKwlvd25pbmdfcHJvY2VzcyA9IGdldF9waWRfdGFzayh1bWVt X29kcC0+dGdpZCwgUElEVFlQRV9QSUQpOwogCWlmICghb3duaW5nX3Byb2Nlc3MgfHwgIW1tZ2V0 X25vdF96ZXJvKG93bmluZ19tbSkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfcHV0 X3Rhc2s7CkBAIC03NjIsMzIgKzU2MywzIEBAIHZvaWQgaWJfdW1lbV9vZHBfdW5tYXBfZG1hX3Bh Z2VzKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB2aXJ0LAogCX0KIH0KIEVYUE9S VF9TWU1CT0woaWJfdW1lbV9vZHBfdW5tYXBfZG1hX3BhZ2VzKTsKLQotLyogQGxhc3QgaXMgbm90 IGEgcGFydCBvZiB0aGUgaW50ZXJ2YWwuIFNlZSBjb21tZW50IGZvciBmdW5jdGlvbgotICogbm9k ZV9sYXN0LgotICovCi1pbnQgcmJ0X2liX3VtZW1fZm9yX2VhY2hfaW5fcmFuZ2Uoc3RydWN0IHJi X3Jvb3RfY2FjaGVkICpyb290LAotCQkJCSAgdTY0IHN0YXJ0LCB1NjQgbGFzdCwKLQkJCQkgIHVt ZW1fY2FsbF9iYWNrIGNiLAotCQkJCSAgYm9vbCBibG9ja2FibGUsCi0JCQkJICB2b2lkICpjb29r aWUpCi17Ci0JaW50IHJldF92YWwgPSAwOwotCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKm5v ZGUsICpuZXh0OwotCXN0cnVjdCBpYl91bWVtX29kcCAqdW1lbTsKLQotCWlmICh1bmxpa2VseShz dGFydCA9PSBsYXN0KSkKLQkJcmV0dXJuIHJldF92YWw7Ci0KLQlmb3IgKG5vZGUgPSBpbnRlcnZh bF90cmVlX2l0ZXJfZmlyc3Qocm9vdCwgc3RhcnQsIGxhc3QgLSAxKTsKLQkJCW5vZGU7IG5vZGUg PSBuZXh0KSB7Ci0JCS8qIFRPRE8gbW92ZSB0aGUgYmxvY2thYmxlIGRlY2lzaW9uIHVwIHRvIHRo ZSBjYWxsYmFjayAqLwotCQlpZiAoIWJsb2NrYWJsZSkKLQkJCXJldHVybiAtRUFHQUlOOwotCQlu ZXh0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX25leHQobm9kZSwgc3RhcnQsIGxhc3QgLSAxKTsKLQkJ dW1lbSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaWJfdW1lbV9vZHAsIGludGVydmFsX3Ry ZWUpOwotCQlyZXRfdmFsID0gY2IodW1lbSwgc3RhcnQsIGxhc3QsIGNvb2tpZSkgfHwgcmV0X3Zh bDsKLQl9Ci0KLQlyZXR1cm4gcmV0X3ZhbDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5p YmFuZC9ody9tbHg1L21seDVfaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVf aWIuaAppbmRleCBmNjFkNDAwNWM2YzM3OS4uYzcxOWYwOGIzNTE2NzAgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVfaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJh bmQvaHcvbWx4NS9tbHg1X2liLmgKQEAgLTEyNjMsOCArMTI2Myw2IEBAIGludCBtbHg1X2liX29k cF9pbml0X29uZShzdHJ1Y3QgbWx4NV9pYl9kZXYgKmliZGV2KTsKIHZvaWQgbWx4NV9pYl9vZHBf Y2xlYW51cF9vbmUoc3RydWN0IG1seDVfaWJfZGV2ICppYmRldik7CiBpbnQgX19pbml0IG1seDVf aWJfb2RwX2luaXQodm9pZCk7CiB2b2lkIG1seDVfaWJfb2RwX2NsZWFudXAodm9pZCk7Ci12b2lk IG1seDVfaWJfaW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1 bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpOwogdm9pZCBt bHg1X29kcF9pbml0X21yX2NhY2hlX2VudHJ5KHN0cnVjdCBtbHg1X2NhY2hlX2VudCAqZW50KTsK IHZvaWQgbWx4NV9vZHBfcG9wdWxhdGVfa2xtKHN0cnVjdCBtbHg1X2tsbSAqcGtsbSwgc2l6ZV90 IG9mZnNldCwKIAkJCSAgIHNpemVfdCBuZW50cmllcywgc3RydWN0IG1seDVfaWJfbXIgKm1yLCBp bnQgZmxhZ3MpOwpAQCAtMTI5NCwxMSArMTI5MiwxMCBAQCBtbHg1X2liX2FkdmlzZV9tcl9wcmVm ZXRjaChzdHJ1Y3QgaWJfcGQgKnBkLAogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KLXN0YXRp YyBpbmxpbmUgdm9pZCBtbHg1X2liX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGliX3VtZW1fb2Rw ICp1bWVtX29kcCwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCSAgICB1bnNp Z25lZCBsb25nIGVuZCl7fTsKICNlbmRpZiAvKiBDT05GSUdfSU5GSU5JQkFORF9PTl9ERU1BTkRf UEFHSU5HICovCiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbW11X3JhbmdlX25vdGlmaWVyX29wcyBt bHg1X21uX29wczsKKwogLyogTmVlZGVkIGZvciByZXAgcHJvZmlsZSAqLwogdm9pZCBfX21seDVf aWJfcmVtb3ZlKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LAogCQkgICAgICBjb25zdCBzdHJ1Y3Qg bWx4NV9pYl9wcm9maWxlICpwcm9maWxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5k L2h3L21seDUvbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMKaW5kZXggMTk5 Zjc5NTlhYWE1MTAuLmZiZTMxODMwYjIyODA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJh bmQvaHcvbWx4NS9tci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMKQEAg LTc0Myw3ICs3NDMsOCBAQCBzdGF0aWMgaW50IG1yX3VtZW1fZ2V0KHN0cnVjdCBtbHg1X2liX2Rl diAqZGV2LCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhLAogCWlmIChhY2Nlc3NfZmxhZ3MgJiBJQl9B Q0NFU1NfT05fREVNQU5EKSB7CiAJCXN0cnVjdCBpYl91bWVtX29kcCAqb2RwOwogCi0JCW9kcCA9 IGliX3VtZW1fb2RwX2dldCh1ZGF0YSwgc3RhcnQsIGxlbmd0aCwgYWNjZXNzX2ZsYWdzKTsKKwkJ b2RwID0gaWJfdW1lbV9vZHBfZ2V0KHVkYXRhLCBzdGFydCwgbGVuZ3RoLCBhY2Nlc3NfZmxhZ3Ms CisJCQkJICAgICAgJm1seDVfbW5fb3BzKTsKIAkJaWYgKElTX0VSUihvZHApKSB7CiAJCQltbHg1 X2liX2RiZyhkZXYsICJ1bWVtIGdldCBmYWlsZWQgKCVsZClcbiIsCiAJCQkJICAgIFBUUl9FUlIo b2RwKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuYyBiL2Ry aXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jCmluZGV4IGJjZmMwOTg0NjY5NzdlLi5mNzEz ZWI4MmVlZWFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMK KysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMKQEAgLTI0MSwxNyArMjQxLDI2 IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdW51c2VkX2ltcGxpY2l0X2NoaWxkX21yKHN0cnVjdCBt bHg1X2liX21yICptcikKIAl4YV91bmxvY2soJmltci0+aW1wbGljaXRfY2hpbGRyZW4pOwogfQog Ci12b2lkIG1seDVfaWJfaW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1f b2RwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpCitz dGF0aWMgYm9vbCBtbHg1X2liX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IG1tdV9yYW5nZV9ub3Rp ZmllciAqbXJuLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFu Z2UsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGN1cl9zZXEpCiB7CisJc3RydWN0IGliX3VtZW1f b2RwICp1bWVtX29kcCA9CisJCWNvbnRhaW5lcl9vZihtcm4sIHN0cnVjdCBpYl91bWVtX29kcCwg bm90aWZpZXIpOwogCXN0cnVjdCBtbHg1X2liX21yICptcjsKIAljb25zdCB1NjQgdW1yX2Jsb2Nr X21hc2sgPSAoTUxYNV9VTVJfTVRUX0FMSUdOTUVOVCAvCiAJCQkJICAgIHNpemVvZihzdHJ1Y3Qg bWx4NV9tdHQpKSAtIDE7CiAJdTY0IGlkeCA9IDAsIGJsa19zdGFydF9pZHggPSAwOworCXVuc2ln bmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7CiAJaW50IGluX2Jsb2NrID0gMDsK IAl1NjQgYWRkcjsKIAorCWlmICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkp CisJCXJldHVybiBmYWxzZTsKKwogCW11dGV4X2xvY2soJnVtZW1fb2RwLT51bWVtX211dGV4KTsK KwltbXVfcmFuZ2Vfc2V0X3NlcShtcm4sIGN1cl9zZXEpOwogCS8qCiAJICogSWYgbnBhZ2VzIGlz IHplcm8gdGhlbiB1bWVtX29kcC0+cHJpdmF0ZSBtYXkgbm90IGJlIHNldHVwIHlldC4gVGhpcwog CSAqIGRvZXMgbm90IGNvbXBsZXRlIHVudGlsIGFmdGVyIHRoZSBmaXJzdCBwYWdlIGlzIG1hcHBl ZCBmb3IgRE1BLgpAQCAtMjYwLDggKzI2OSw4IEBAIHZvaWQgbWx4NV9pYl9pbnZhbGlkYXRlX3Jh bmdlKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJ CWdvdG8gb3V0OwogCW1yID0gdW1lbV9vZHAtPnByaXZhdGU7CiAKLQlzdGFydCA9IG1heF90KHU2 NCwgaWJfdW1lbV9zdGFydCh1bWVtX29kcCksIHN0YXJ0KTsKLQllbmQgPSBtaW5fdCh1NjQsIGli X3VtZW1fZW5kKHVtZW1fb2RwKSwgZW5kKTsKKwlzdGFydCA9IG1heF90KHU2NCwgaWJfdW1lbV9z dGFydCh1bWVtX29kcCksIHJhbmdlLT5zdGFydCk7CisJZW5kID0gbWluX3QodTY0LCBpYl91bWVt X2VuZCh1bWVtX29kcCksIHJhbmdlLT5lbmQpOwogCiAJLyoKIAkgKiBJdGVyYXRpb24gb25lIC0g emFwIHRoZSBIVydzIE1UVHMuIFRoZSBub3RpZmllcnNfY291bnQgZW5zdXJlcyB0aGF0CkBAIC0z MTIsOCArMzIxLDEzIEBAIHZvaWQgbWx4NV9pYl9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBpYl91 bWVtX29kcCAqdW1lbV9vZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCWRlc3Ryb3lfdW51c2Vk X2ltcGxpY2l0X2NoaWxkX21yKG1yKTsKIG91dDoKIAltdXRleF91bmxvY2soJnVtZW1fb2RwLT51 bWVtX211dGV4KTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAorY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllcl9vcHMgbWx4NV9tbl9vcHMgPSB7CisJLmludmFsaWRhdGUgPSBtbHg1X2liX2ludmFs aWRhdGVfcmFuZ2UsCit9OworCiB2b2lkIG1seDVfaWJfaW50ZXJuYWxfZmlsbF9vZHBfY2Fwcyhz dHJ1Y3QgbWx4NV9pYl9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWJfb2RwX2NhcHMgKmNhcHMgPSAm ZGV2LT5vZHBfY2FwczsKQEAgLTQxNCw3ICs0MjgsNyBAQCBzdGF0aWMgc3RydWN0IG1seDVfaWJf bXIgKmltcGxpY2l0X2dldF9jaGlsZF9tcihzdHJ1Y3QgbWx4NV9pYl9tciAqaW1yLAogCiAJb2Rw ID0gaWJfdW1lbV9vZHBfYWxsb2NfY2hpbGQodG9faWJfdW1lbV9vZHAoaW1yLT51bWVtKSwKIAkJ CQkgICAgICBpZHggKiBNTFg1X0lNUl9NVFRfU0laRSwKLQkJCQkgICAgICBNTFg1X0lNUl9NVFRf U0laRSk7CisJCQkJICAgICAgTUxYNV9JTVJfTVRUX1NJWkUsICZtbHg1X21uX29wcyk7CiAJaWYg KElTX0VSUihvZHApKQogCQlyZXR1cm4gRVJSX0NBU1Qob2RwKTsKIApAQCAtNjAwLDggKzYxNCw5 IEBAIHN0YXRpYyBpbnQgcGFnZWZhdWx0X3JlYWxfbXIoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBz dHJ1Y3QgaWJfdW1lbV9vZHAgKm9kcCwKIAkJCSAgICAgdTY0IHVzZXJfdmEsIHNpemVfdCBiY250 LCB1MzIgKmJ5dGVzX21hcHBlZCwKIAkJCSAgICAgdTMyIGZsYWdzKQogewotCWludCBjdXJyZW50 X3NlcSwgcGFnZV9zaGlmdCwgcmV0LCBucDsKKwlpbnQgcGFnZV9zaGlmdCwgcmV0LCBucDsKIAli b29sIGRvd25ncmFkZSA9IGZsYWdzICYgTUxYNV9QRl9GTEFHU19ET1dOR1JBREU7CisJdW5zaWdu ZWQgbG9uZyBjdXJyZW50X3NlcTsKIAl1NjQgYWNjZXNzX21hc2s7CiAJdTY0IHN0YXJ0X2lkeCwg cGFnZV9tYXNrOwogCkBAIC02MTMsMTIgKzYyOCw3IEBAIHN0YXRpYyBpbnQgcGFnZWZhdWx0X3Jl YWxfbXIoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBzdHJ1Y3QgaWJfdW1lbV9vZHAgKm9kcCwKIAlp ZiAob2RwLT51bWVtLndyaXRhYmxlICYmICFkb3duZ3JhZGUpCiAJCWFjY2Vzc19tYXNrIHw9IE9E UF9XUklURV9BTExPV0VEX0JJVDsKIAotCWN1cnJlbnRfc2VxID0gUkVBRF9PTkNFKG9kcC0+bm90 aWZpZXJzX3NlcSk7Ci0JLyoKLQkgKiBFbnN1cmUgdGhlIHNlcXVlbmNlIG51bWJlciBpcyB2YWxp ZCBmb3Igc29tZSB0aW1lIGJlZm9yZSB3ZSBjYWxsCi0JICogZ3VwLgotCSAqLwotCXNtcF9ybWIo KTsKKwljdXJyZW50X3NlcSA9IG1tdV9yYW5nZV9yZWFkX2JlZ2luKCZvZHAtPm5vdGlmaWVyKTsK IAogCW5wID0gaWJfdW1lbV9vZHBfbWFwX2RtYV9wYWdlcyhvZHAsIHVzZXJfdmEsIGJjbnQsIGFj Y2Vzc19tYXNrLAogCQkJCSAgICAgICBjdXJyZW50X3NlcSk7CkBAIC02MjYsNyArNjM2LDcgQEAg c3RhdGljIGludCBwYWdlZmF1bHRfcmVhbF9tcihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIsIHN0cnVj dCBpYl91bWVtX29kcCAqb2RwLAogCQlyZXR1cm4gbnA7CiAKIAltdXRleF9sb2NrKCZvZHAtPnVt ZW1fbXV0ZXgpOwotCWlmICghaWJfdW1lbV9tbXVfbm90aWZpZXJfcmV0cnkob2RwLCBjdXJyZW50 X3NlcSkpIHsKKwlpZiAoIW1tdV9yYW5nZV9yZWFkX3JldHJ5KCZvZHAtPm5vdGlmaWVyLCBjdXJy ZW50X3NlcSkpIHsKIAkJLyoKIAkJICogTm8gbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBNVFRz IHJlYWxseSBiZWxvbmcgdG8KIAkJICogdGhpcyBNUiwgc2luY2UgaWJfdW1lbV9vZHBfbWFwX2Rt YV9wYWdlcyBhbHJlYWR5CkBAIC02NTYsMTkgKzY2Niw2IEBAIHN0YXRpYyBpbnQgcGFnZWZhdWx0 X3JlYWxfbXIoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBzdHJ1Y3QgaWJfdW1lbV9vZHAgKm9kcCwK IAlyZXR1cm4gbnAgPDwgKHBhZ2Vfc2hpZnQgLSBQQUdFX1NISUZUKTsKIAogb3V0OgotCWlmIChy ZXQgPT0gLUVBR0FJTikgewotCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZm aWVzKE1NVV9OT1RJRklFUl9USU1FT1VUKTsKLQotCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25f dGltZW91dCgmb2RwLT5ub3RpZmllcl9jb21wbGV0aW9uLAotCQkJCQkJIHRpbWVvdXQpKSB7Ci0J CQltbHg1X2liX3dhcm4oCi0JCQkJbXItPmRldiwKLQkJCQkidGltZW91dCB3YWl0aW5nIGZvciBt bXUgbm90aWZpZXIuIHNlcSAlZCBhZ2FpbnN0ICVkLiBub3RpZmllcnNfY291bnQ9JWRcbiIsCi0J CQkJY3VycmVudF9zZXEsIG9kcC0+bm90aWZpZXJzX3NlcSwKLQkJCQlvZHAtPm5vdGlmaWVyc19j b3VudCk7Ci0JCX0KLQl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNjA5LDcgKzE2MDYsNiBA QCB2b2lkIG1seDVfb2RwX2luaXRfbXJfY2FjaGVfZW50cnkoc3RydWN0IG1seDVfY2FjaGVfZW50 ICplbnQpCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyBtbHg1X2liX2Rldl9v ZHBfb3BzID0gewogCS5hZHZpc2VfbXIgPSBtbHg1X2liX2FkdmlzZV9tciwKLQkuaW52YWxpZGF0 ZV9yYW5nZSA9IG1seDVfaWJfaW52YWxpZGF0ZV9yYW5nZSwKIH07CiAKIGludCBtbHg1X2liX29k cF9pbml0X29uZShzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2luY2x1ZGUv cmRtYS9pYl91bWVtX29kcC5oIGIvaW5jbHVkZS9yZG1hL2liX3VtZW1fb2RwLmgKaW5kZXggMDli MGU0NDk0OTg2YTkuLjk4ZWQ1NDM1YWZjY2Q5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJf dW1lbV9vZHAuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdW1lbV9vZHAuaApAQCAtMzUsMTEgKzM1 LDExIEBACiAKICNpbmNsdWRlIDxyZG1hL2liX3VtZW0uaD4KICNpbmNsdWRlIDxyZG1hL2liX3Zl cmJzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJ2YWxfdHJlZS5oPgogCiBzdHJ1Y3QgaWJfdW1l bV9vZHAgewogCXN0cnVjdCBpYl91bWVtIHVtZW07Ci0Jc3RydWN0IGliX3Vjb250ZXh0X3Blcl9t bSAqcGVyX21tOworCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgbm90aWZpZXI7CisJc3RydWN0 IHBpZCAqdGdpZDsKIAogCS8qCiAJICogQW4gYXJyYXkgb2YgdGhlIHBhZ2VzIGluY2x1ZGVkIGlu IHRoZSBvbi1kZW1hbmQgcGFnaW5nIHVtZW0uCkBAIC02MiwxMyArNjIsOCBAQCBzdHJ1Y3QgaWJf dW1lbV9vZHAgewogCXN0cnVjdCBtdXRleAkJdW1lbV9tdXRleDsKIAl2b2lkCQkJKnByaXZhdGU7 IC8qIGZvciB0aGUgSFcgZHJpdmVyIHRvIHVzZS4gKi8KIAotCWludCBub3RpZmllcnNfc2VxOwot CWludCBub3RpZmllcnNfY291bnQ7CiAJaW50IG5wYWdlczsKIAotCS8qIFRyZWUgdHJhY2tpbmcg Ki8KLQlzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlIGludGVydmFsX3RyZWU7Ci0KIAkvKgogCSAq IEFuIGltcGxpY2l0IG9kcCB1bWVtIGNhbm5vdCBiZSBETUEgbWFwcGVkLCBoYXMgMCBsZW5ndGgs IGFuZCBzZXJ2ZXMKIAkgKiBvbmx5IGFzIGFuIGFuY2hvciBmb3IgdGhlIGRyaXZlciB0byBob2xk IG9udG8gdGhlIHBlcl9tbS4gRklYTUU6CkBAIC03Nyw3ICs3Miw2IEBAIHN0cnVjdCBpYl91bWVt X29kcCB7CiAJICovCiAJYm9vbCBpc19pbXBsaWNpdF9vZHA7CiAKLQlzdHJ1Y3QgY29tcGxldGlv bglub3RpZmllcl9jb21wbGV0aW9uOwogCXVuc2lnbmVkIGludAkJcGFnZV9zaGlmdDsKIH07CiAK QEAgLTg5LDEzICs4MywxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl91bWVtX29kcCAqdG9f aWJfdW1lbV9vZHAoc3RydWN0IGliX3VtZW0gKnVtZW0pCiAvKiBSZXR1cm5zIHRoZSBmaXJzdCBw YWdlIG9mIGFuIE9EUCB1bWVtLiAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGliX3Vt ZW1fc3RhcnQoc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCkKIHsKLQlyZXR1cm4gdW1lbV9v ZHAtPmludGVydmFsX3RyZWUuc3RhcnQ7CisJcmV0dXJuIHVtZW1fb2RwLT5ub3RpZmllci5pbnRl cnZhbF90cmVlLnN0YXJ0OwogfQogCiAvKiBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwYWdl IGFmdGVyIHRoZSBsYXN0IG9uZSBvZiBhbiBPRFAgdW1lbS4gKi8KIHN0YXRpYyBpbmxpbmUgdW5z aWduZWQgbG9uZyBpYl91bWVtX2VuZChzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwKQogewot CXJldHVybiB1bWVtX29kcC0+aW50ZXJ2YWxfdHJlZS5sYXN0ICsgMTsKKwlyZXR1cm4gdW1lbV9v ZHAtPm5vdGlmaWVyLmludGVydmFsX3RyZWUubGFzdCArIDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUg c2l6ZV90IGliX3VtZW1fb2RwX251bV9wYWdlcyhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2Rw KQpAQCAtMTE5LDIxICsxMTMsMTQgQEAgc3RhdGljIGlubGluZSBzaXplX3QgaWJfdW1lbV9vZHBf bnVtX3BhZ2VzKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHApCiAKICNpZmRlZiBDT05GSUdf SU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HCiAKLXN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0g ewotCXN0cnVjdCBtbXVfbm90aWZpZXIgbW47Ci0Jc3RydWN0IHBpZCAqdGdpZDsKLQotCXN0cnVj dCByYl9yb290X2NhY2hlZCB1bWVtX3RyZWU7Ci0JLyogUHJvdGVjdHMgdW1lbV90cmVlICovCi0J c3RydWN0IHJ3X3NlbWFwaG9yZSB1bWVtX3J3c2VtOwotfTsKLQogc3RydWN0IGliX3VtZW1fb2Rw ICppYl91bWVtX29kcF9nZXQoc3RydWN0IGliX3VkYXRhICp1ZGF0YSwgdW5zaWduZWQgbG9uZyBh ZGRyLAotCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGFjY2Vzcyk7CisJCQkJICAgIHNpemVfdCBz aXplLCBpbnQgYWNjZXNzLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgbW11X3JhbmdlX25vdGlmaWVy X29wcyAqb3BzKTsKIHN0cnVjdCBpYl91bWVtX29kcCAqaWJfdW1lbV9vZHBfYWxsb2NfaW1wbGlj aXQoc3RydWN0IGliX3VkYXRhICp1ZGF0YSwKIAkJCQkJICAgICAgIGludCBhY2Nlc3MpOwotc3Ry dWN0IGliX3VtZW1fb2RwICppYl91bWVtX29kcF9hbGxvY19jaGlsZChzdHJ1Y3QgaWJfdW1lbV9v ZHAgKnJvb3RfdW1lbSwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IHNpemUp Oworc3RydWN0IGliX3VtZW1fb2RwICoKK2liX3VtZW1fb2RwX2FsbG9jX2NoaWxkKHN0cnVjdCBp Yl91bWVtX29kcCAqcm9vdF91bWVtLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQlzaXplX3Qgc2l6 ZSwgY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMgKm9wcyk7CiB2b2lkIGliX3Vt ZW1fb2RwX3JlbGVhc2Uoc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCk7CiAKIGludCBpYl91 bWVtX29kcF9tYXBfZG1hX3BhZ2VzKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCBz dGFydF9vZmZzZXQsCkBAIC0xNDMsMzkgKzEzMCwxMSBAQCBpbnQgaWJfdW1lbV9vZHBfbWFwX2Rt YV9wYWdlcyhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1NjQgc3RhcnRfb2Zmc2V0LAog dm9pZCBpYl91bWVtX29kcF91bm1hcF9kbWFfcGFnZXMoc3RydWN0IGliX3VtZW1fb2RwICp1bWVt X29kcCwgdTY0IHN0YXJ0X29mZnNldCwKIAkJCQkgdTY0IGJvdW5kKTsKIAotdHlwZWRlZiBpbnQg KCp1bWVtX2NhbGxfYmFjaykoc3RydWN0IGliX3VtZW1fb2RwICppdGVtLCB1NjQgc3RhcnQsIHU2 NCBlbmQsCi0JCQkgICAgICB2b2lkICpjb29raWUpOwotLyoKLSAqIENhbGwgdGhlIGNhbGxiYWNr IG9uIGVhY2ggaWJfdW1lbSBpbiB0aGUgcmFuZ2UuIFJldHVybnMgdGhlIGxvZ2ljYWwgb3Igb2YK LSAqIHRoZSByZXR1cm4gdmFsdWVzIG9mIHRoZSBmdW5jdGlvbnMgY2FsbGVkLgotICovCi1pbnQg cmJ0X2liX3VtZW1fZm9yX2VhY2hfaW5fcmFuZ2Uoc3RydWN0IHJiX3Jvb3RfY2FjaGVkICpyb290 LAotCQkJCSAgdTY0IHN0YXJ0LCB1NjQgZW5kLAotCQkJCSAgdW1lbV9jYWxsX2JhY2sgY2IsCi0J CQkJICBib29sIGJsb2NrYWJsZSwgdm9pZCAqY29va2llKTsKLQotc3RhdGljIGlubGluZSBpbnQg aWJfdW1lbV9tbXVfbm90aWZpZXJfcmV0cnkoc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCwK LQkJCQkJICAgICB1bnNpZ25lZCBsb25nIG1tdV9zZXEpCi17Ci0JLyoKLQkgKiBUaGlzIGNvZGUg aXMgc3Ryb25nbHkgYmFzZWQgb24gdGhlIEtWTSBjb2RlIGZyb20KLQkgKiBtbXVfbm90aWZpZXJf cmV0cnkuIFNob3VsZCBiZSBjYWxsZWQgd2l0aAotCSAqIHRoZSByZWxldmFudCBsb2NrcyB0YWtl biAodW1lbV9vZHAtPnVtZW1fbXV0ZXgKLQkgKiBhbmQgdGhlIHVjb250ZXh0IHVtZW1fbXV0ZXgg c2VtYXBob3JlIGxvY2tlZCBmb3IgcmVhZCkuCi0JICovCi0KLQlpZiAodW5saWtlbHkodW1lbV9v ZHAtPm5vdGlmaWVyc19jb3VudCkpCi0JCXJldHVybiAxOwotCWlmICh1bWVtX29kcC0+bm90aWZp ZXJzX3NlcSAhPSBtbXVfc2VxKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogI2Vsc2Ug LyogQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lORyAqLwogCi1zdGF0aWMgaW5saW5l IHN0cnVjdCBpYl91bWVtX29kcCAqaWJfdW1lbV9vZHBfZ2V0KHN0cnVjdCBpYl91ZGF0YSAqdWRh dGEsCi0JCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJCSAgc2l6ZV90IHNpemUsIGlu dCBhY2Nlc3MpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl91bWVtX29kcCAqCitpYl91bWVtX29k cF9nZXQoc3RydWN0IGliX3VkYXRhICp1ZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qg c2l6ZSwKKwkJaW50IGFjY2VzcywgY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMg Km9wcykKIHsKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1 ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggNmE0N2Jh ODVjNTRjMTEuLjJjMzBjODU5YWUwZDEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVy YnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtMjQyMiw4ICsyNDIyLDYgQEAg c3RydWN0IGliX2RldmljZV9vcHMgewogCQkJICAgIHU2NCBpb3ZhKTsKIAlpbnQgKCp1bm1hcF9m bXIpKHN0cnVjdCBsaXN0X2hlYWQgKmZtcl9saXN0KTsKIAlpbnQgKCpkZWFsbG9jX2Ztcikoc3Ry dWN0IGliX2ZtciAqZm1yKTsKLQl2b2lkICgqaW52YWxpZGF0ZV9yYW5nZSkoc3RydWN0IGliX3Vt ZW1fb2RwICp1bWVtX29kcCwKLQkJCQkgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9u ZyBlbmQpOwogCWludCAoKmF0dGFjaF9tY2FzdCkoc3RydWN0IGliX3FwICpxcCwgdW5pb24gaWJf Z2lkICpnaWQsIHUxNiBsaWQpOwogCWludCAoKmRldGFjaF9tY2FzdCkoc3RydWN0IGliX3FwICpx cCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpOwogCXN0cnVjdCBpYl94cmNkICooKmFsbG9j X3hyY2QpKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKLS0gCjIuMjMuMAoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxp c3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj dC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw= 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 712F1CA9EC2 for ; Mon, 28 Oct 2019 20:11:51 +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 3CFFA208C0 for ; Mon, 28 Oct 2019 20:11:51 +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="cXvTHdIK" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3CFFA208C0 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 1iPBMW-0001ox-MI; Mon, 28 Oct 2019 20:11:36 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iPBMV-0001oQ-OX for xen-devel@lists.xenproject.org; Mon, 28 Oct 2019 20:11:35 +0000 X-Inumbo-ID: 0887c8a8-f9bf-11e9-beca-bc764e2007e4 Received: from mail-qt1-x842.google.com (unknown [2607:f8b0:4864:20::842]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 0887c8a8-f9bf-11e9-beca-bc764e2007e4; Mon, 28 Oct 2019 20:10:48 +0000 (UTC) Received: by mail-qt1-x842.google.com with SMTP id z17so9895511qts.9 for ; Mon, 28 Oct 2019 13:10:48 -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=p2sO9HeBGe55xT+CHTSwfg39F5YjFhzL8wq3LxZbe6w=; b=cXvTHdIKZK55cQQin8dGci427hTRiUockWlEy6Y0ICdq582fHBOfb30HIaxmsyyS/p VO48joMXKjHRdPQsTx7NYVCc27xyHbl0ljkVD1bnlqKgp2mbaxe+/vNwxle/N375wmN7 LLiLx61YfjoYug+9VNzD6w4Vz4EQxLAkMLyXTDa9JOOn86fAWGzlUS2JLAhQ5bmecZZ/ a5+OzqMmMbmY9WYvRiligl1TnCVrKxVwZlm0cjHkBnOrOSpHAla+MEOnGgkh4pOfoVMO 36bGxek2HKVb0rJgSusQ9TNBqCn6uiIo6I8hU9X6aLkg+2p0L2e5guBKt+QltMY6afCu /2hw== 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=p2sO9HeBGe55xT+CHTSwfg39F5YjFhzL8wq3LxZbe6w=; b=toYWwIeUBKeRB3qanxCnOEpbjO2FgvLdOV5LW3n6X+nAQrD1prfaQW+3XCjxl2Lx1H /Yz9KbYXzHKDmSHrxHHTBSxNTTLU0veue8vp4QqCNjE7FX82nWQfKBK7PRqXs7EfSsWH 5NlW8O2rgZxg5gIzo0U/tH9Wy6uRsgXrl14VXiaYLobnx10swfgI6Ws7K8+iIjJ9qaaL eh+GuhONt7XzJNCyx2j18oz8Eg8YcKZZCU9L721KeLGg1vaPJCT5DSVedZ2VZ5wIOwIT 3Q72zfSIaGJBqUcaIWfiyrS/BLepfOUEp6dIGJuvMNuRMeHGIi11k4wewAwX0S9vTh9A WNdw== X-Gm-Message-State: APjAAAXbWw8ysE1uLe6rFVFsiX0U2Iotvd11foYEJvrT4m+1+Y3PO9M1 FLOMpUg2RrLgWE15/gM1sqSL6w== X-Google-Smtp-Source: APXvYqxk4tf4YFjeg5NLxezOvsTX/rHJRfFXNqIANjhcGIKgcc8HiyI9ezh/HHJDJoeromDlsXvJEg== X-Received: by 2002:a05:6214:2aa:: with SMTP id m10mr17377906qvv.224.1572293448000; Mon, 28 Oct 2019 13:10:48 -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 t127sm6775397qkf.43.2019.10.28.13.10.43 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 28 Oct 2019 13:10:43 -0700 (PDT) Received: from jgg by mlx.ziepe.ca with local (Exim 4.90_1) (envelope-from ) id 1iPBLf-0001gS-8N; 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:22 -0300 Message-Id: <20191028201032.6352-6-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 05/15] RDMA/odp: Use mmu_range_notifier_insert() 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" RnJvbTogSmFzb24gR3VudGhvcnBlIDxqZ2dAbWVsbGFub3guY29tPgoKUmVwbGFjZSB0aGUgaW50 ZXJuYWwgaW50ZXJ2YWwgdHJlZSBiYXNlZCBtbXUgbm90aWZpZXIgd2l0aCB0aGUgbmV3IGNvbW1v bgptbXVfcmFuZ2Vfbm90aWZpZXJfaW5zZXJ0KCkgQVBJLiBUaGlzIHJlbW92ZXMgYSBsb3Qgb2Yg Y29kZSBhbmQgZml4ZXMgYQpkZWFkbG9jayB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gT0RQOgoK IHphcF9wYWdlX3JhbmdlKCkKICBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgp CiAgIFsuLl0KICAgIGliX3VtZW1fbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgpCiAg ICAgICBkb3duX3JlYWQoJnBlcl9tbS0+dW1lbV9yd3NlbSkKICB1bm1hcF9zaW5nbGVfdm1hKCkK ICAgIFsuLl0KICAgICAgX19zcGxpdF9odWdlX3BhZ2VfcG1kKCkKICAgICAgICBtbXVfbm90aWZp ZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgpCiAgICAgICAgWy4uXQogICAgICAgICAgIGliX3Vt ZW1fbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgpCiAgICAgICAgICAgICAgZG93bl9y ZWFkKCZwZXJfbW0tPnVtZW1fcndzZW0pICAgLy8gREVBRExPQ0sKCiAgICAgICAgbW11X25vdGlm aWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkKICAgICAgICAgICB1cF9yZWFkKCZwZXJfbW0tPnVt ZW1fcndzZW0pCiAgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkKICAgICB1cF9y ZWFkKCZwZXJfbW0tPnVtZW1fcndzZW0pCgpUaGUgdW1lbV9yd3NlbSBpcyBoZWxkIGFjcm9zcyB0 aGUgcmFuZ2Vfc3RhcnQvZW5kIGFzIHRoZSBPRFAgYWxnb3JpdGhtIGZvcgppbnZhbGlkYXRlX3Jh bmdlX2VuZCBjYW5ub3QgdG9sZXJhdGUgY2hhbmdlcyB0byB0aGUgaW50ZXJ2YWwKdHJlZS4gSG93 ZXZlciwgZHVlIHRvIHRoZSBuZXN0ZWQgaW52YWxpZGF0aW9uIHJlZ2lvbnMgdGhlIHNlY29uZApk b3duX3JlYWQoKSBjYW4gZGVhZGxvY2sgaWYgdGhlcmUgYXJlIGNvbXBldGluZyB3cml0ZXJzLiBU aGUgbmV3IGNvcmUgY29kZQpwcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBzY2hlbWUgdG8gc29sdmUg dGhpcyBwcm9ibGVtLgoKRml4ZXM6IGNhNzQ4YzM5ZWEzZiAoIlJETUEvdW1lbTogR2V0IHJpZCBv ZiBwZXJfbW0tPm5vdGlmaWVyX2NvdW50IikKU2lnbmVkLW9mZi1ieTogSmFzb24gR3VudGhvcnBl IDxqZ2dAbWVsbGFub3guY29tPgotLS0KIGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5j ICAgICB8ICAgMSAtCiBkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jICAgfCAyODgg KysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9t bHg1X2liLmggfCAgIDcgKy0KIGRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMgICAgICB8 ICAgMyArLQogZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMgICAgIHwgIDUwICsrKy0t CiBpbmNsdWRlL3JkbWEvaWJfdW1lbV9vZHAuaCAgICAgICAgICAgfCAgNjUgKystLS0tCiBpbmNs dWRlL3JkbWEvaWJfdmVyYnMuaCAgICAgICAgICAgICAgfCAgIDIgLQogNyBmaWxlcyBjaGFuZ2Vk LCA2OSBpbnNlcnRpb25zKCspLCAzNDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZp Y2UuYwppbmRleCAyZGQyY2ZlOWI1NjEzNi4uYWM3OTI0YjNjNzNhYmUgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9j b3JlL2RldmljZS5jCkBAIC0yNjE3LDcgKzI2MTcsNiBAQCB2b2lkIGliX3NldF9kZXZpY2Vfb3Bz KHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGliX2RldmljZV9vcHMgKm9wcykK IAlTRVRfREVWSUNFX09QKGRldl9vcHMsIGdldF92Zl9jb25maWcpOwogCVNFVF9ERVZJQ0VfT1Ao ZGV2X29wcywgZ2V0X3ZmX3N0YXRzKTsKIAlTRVRfREVWSUNFX09QKGRldl9vcHMsIGluaXRfcG9y dCk7Ci0JU0VUX0RFVklDRV9PUChkZXZfb3BzLCBpbnZhbGlkYXRlX3JhbmdlKTsKIAlTRVRfREVW SUNFX09QKGRldl9vcHMsIGl3X2FjY2VwdCk7CiAJU0VUX0RFVklDRV9PUChkZXZfb3BzLCBpd19h ZGRfcmVmKTsKIAlTRVRfREVWSUNFX09QKGRldl9vcHMsIGl3X2Nvbm5lY3QpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYyBiL2RyaXZlcnMvaW5maW5pYmFu ZC9jb3JlL3VtZW1fb2RwLmMKaW5kZXggZDdkNWZhZGYwODk5YWQuLjYxMzJiODEyN2U4NDM1IDEw MDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jCisrKyBiL2RyaXZl cnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMKQEAgLTQ4LDE5NyArNDgsMzIgQEAKIAogI2lu Y2x1ZGUgInV2ZXJicy5oIgogCi1zdGF0aWMgdm9pZCBpYl91bWVtX25vdGlmaWVyX3N0YXJ0X2Fj Y291bnQoc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCkKLXsKLQltdXRleF9sb2NrKCZ1bWVt X29kcC0+dW1lbV9tdXRleCk7Ci0JaWYgKHVtZW1fb2RwLT5ub3RpZmllcnNfY291bnQrKyA9PSAw KQotCQkvKgotCQkgKiBJbml0aWFsaXplIHRoZSBjb21wbGV0aW9uIG9iamVjdCBmb3Igd2FpdGlu ZyBvbgotCQkgKiBub3RpZmllcnMuIFNpbmNlIG5vdGlmaWVyX2NvdW50IGlzIHplcm8sIG5vIG9u ZSBzaG91bGQgYmUKLQkJICogd2FpdGluZyByaWdodCBub3cuCi0JCSAqLwotCQlyZWluaXRfY29t cGxldGlvbigmdW1lbV9vZHAtPm5vdGlmaWVyX2NvbXBsZXRpb24pOwotCW11dGV4X3VubG9jaygm dW1lbV9vZHAtPnVtZW1fbXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCBpYl91bWVtX25vdGlmaWVy X2VuZF9hY2NvdW50KHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHApCi17Ci0JbXV0ZXhfbG9j aygmdW1lbV9vZHAtPnVtZW1fbXV0ZXgpOwotCS8qCi0JICogVGhpcyBzZXF1ZW5jZSBpbmNyZWFz ZSB3aWxsIG5vdGlmeSB0aGUgUVAgcGFnZSBmYXVsdCB0aGF0IHRoZSBwYWdlCi0JICogdGhhdCBp cyBnb2luZyB0byBiZSBtYXBwZWQgaW4gdGhlIHNwdGUgY291bGQgaGF2ZSBiZWVuIGZyZWVkLgot CSAqLwotCSsrdW1lbV9vZHAtPm5vdGlmaWVyc19zZXE7Ci0JaWYgKC0tdW1lbV9vZHAtPm5vdGlm aWVyc19jb3VudCA9PSAwKQotCQljb21wbGV0ZV9hbGwoJnVtZW1fb2RwLT5ub3RpZmllcl9jb21w bGV0aW9uKTsKLQltdXRleF91bmxvY2soJnVtZW1fb2RwLT51bWVtX211dGV4KTsKLX0KLQotc3Rh dGljIHZvaWQgaWJfdW1lbV9ub3RpZmllcl9yZWxlYXNlKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1u LAotCQkJCSAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IGliX3Vjb250ZXh0 X3Blcl9tbSAqcGVyX21tID0KLQkJY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaWJfdWNvbnRleHRf cGVyX21tLCBtbik7Ci0Jc3RydWN0IHJiX25vZGUgKm5vZGU7Ci0KLQlkb3duX3JlYWQoJnBlcl9t bS0+dW1lbV9yd3NlbSk7Ci0JaWYgKCFwZXJfbW0tPm1uLnVzZXJzKQotCQlnb3RvIG91dDsKLQot CWZvciAobm9kZSA9IHJiX2ZpcnN0X2NhY2hlZCgmcGVyX21tLT51bWVtX3RyZWUpOyBub2RlOwot CSAgICAgbm9kZSA9IHJiX25leHQobm9kZSkpIHsKLQkJc3RydWN0IGliX3VtZW1fb2RwICp1bWVt X29kcCA9Ci0JCQlyYl9lbnRyeShub2RlLCBzdHJ1Y3QgaWJfdW1lbV9vZHAsIGludGVydmFsX3Ry ZWUucmIpOwotCi0JCS8qCi0JCSAqIEluY3JlYXNlIHRoZSBudW1iZXIgb2Ygbm90aWZpZXJzIHJ1 bm5pbmcsIHRvIHByZXZlbnQgYW55Ci0JCSAqIGZ1cnRoZXIgZmF1bHQgaGFuZGxpbmcgb24gdGhp cyBNUi4KLQkJICovCi0JCWliX3VtZW1fbm90aWZpZXJfc3RhcnRfYWNjb3VudCh1bWVtX29kcCk7 Ci0JCWNvbXBsZXRlX2FsbCgmdW1lbV9vZHAtPm5vdGlmaWVyX2NvbXBsZXRpb24pOwotCQl1bWVt X29kcC0+dW1lbS5pYmRldi0+b3BzLmludmFsaWRhdGVfcmFuZ2UoCi0JCQl1bWVtX29kcCwgaWJf dW1lbV9zdGFydCh1bWVtX29kcCksCi0JCQlpYl91bWVtX2VuZCh1bWVtX29kcCkpOwotCX0KLQot b3V0OgotCXVwX3JlYWQoJnBlcl9tbS0+dW1lbV9yd3NlbSk7Ci19Ci0KLXN0YXRpYyBpbnQgaW52 YWxpZGF0ZV9yYW5nZV9zdGFydF90cmFtcG9saW5lKHN0cnVjdCBpYl91bWVtX29kcCAqaXRlbSwK LQkJCQkJICAgICB1NjQgc3RhcnQsIHU2NCBlbmQsIHZvaWQgKmNvb2tpZSkKLXsKLQlpYl91bWVt X25vdGlmaWVyX3N0YXJ0X2FjY291bnQoaXRlbSk7Ci0JaXRlbS0+dW1lbS5pYmRldi0+b3BzLmlu dmFsaWRhdGVfcmFuZ2UoaXRlbSwgc3RhcnQsIGVuZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyBpbnQgaWJfdW1lbV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVf bm90aWZpZXIgKm1uLAotCQkJCWNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdl KQotewotCXN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0gKnBlcl9tbSA9Ci0JCWNvbnRhaW5lcl9v Zihtbiwgc3RydWN0IGliX3Vjb250ZXh0X3Blcl9tbSwgbW4pOwotCWludCByYzsKLQotCWlmICht bXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSkKLQkJZG93bl9yZWFkKCZwZXJfbW0t PnVtZW1fcndzZW0pOwotCWVsc2UgaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmcGVyX21tLT51bWVt X3J3c2VtKSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlpZiAoIXBlcl9tbS0+bW4udXNlcnMpIHsK LQkJdXBfcmVhZCgmcGVyX21tLT51bWVtX3J3c2VtKTsKLQkJLyoKLQkJICogQXQgdGhpcyBwb2lu dCB1c2VycyBpcyBwZXJtYW5lbnRseSB6ZXJvIGFuZCB2aXNpYmxlIHRvIHRoaXMKLQkJICogQ1BV IHdpdGhvdXQgYSBsb2NrLCB0aGF0IGZhY3QgaXMgcmVsaWVkIG9uIHRvIHNraXAgdGhlIHVubG9j awotCQkgKiBpbiByYW5nZV9lbmQuCi0JCSAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyYyA9IHJi dF9pYl91bWVtX2Zvcl9lYWNoX2luX3JhbmdlKCZwZXJfbW0tPnVtZW1fdHJlZSwgcmFuZ2UtPnN0 YXJ0LAotCQkJCQkgICByYW5nZS0+ZW5kLAotCQkJCQkgICBpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0 X3RyYW1wb2xpbmUsCi0JCQkJCSAgIG1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2Up LAotCQkJCQkgICBOVUxMKTsKLQlpZiAocmMpCi0JCXVwX3JlYWQoJnBlcl9tbS0+dW1lbV9yd3Nl bSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGludmFsaWRhdGVfcmFuZ2VfZW5kX3Ry YW1wb2xpbmUoc3RydWN0IGliX3VtZW1fb2RwICppdGVtLCB1NjQgc3RhcnQsCi0JCQkJCSAgIHU2 NCBlbmQsIHZvaWQgKmNvb2tpZSkKLXsKLQlpYl91bWVtX25vdGlmaWVyX2VuZF9hY2NvdW50KGl0 ZW0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpYl91bWVtX25vdGlmaWVyX2ludmFs aWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAotCQkJCWNvbnN0IHN0cnVj dCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKQotewotCXN0cnVjdCBpYl91Y29udGV4dF9wZXJf bW0gKnBlcl9tbSA9Ci0JCWNvbnRhaW5lcl9vZihtbiwgc3RydWN0IGliX3Vjb250ZXh0X3Blcl9t bSwgbW4pOwotCi0JaWYgKHVubGlrZWx5KCFwZXJfbW0tPm1uLnVzZXJzKSkKLQkJcmV0dXJuOwot Ci0JcmJ0X2liX3VtZW1fZm9yX2VhY2hfaW5fcmFuZ2UoJnBlcl9tbS0+dW1lbV90cmVlLCByYW5n ZS0+c3RhcnQsCi0JCQkJICAgICAgcmFuZ2UtPmVuZCwKLQkJCQkgICAgICBpbnZhbGlkYXRlX3Jh bmdlX2VuZF90cmFtcG9saW5lLCB0cnVlLCBOVUxMKTsKLQl1cF9yZWFkKCZwZXJfbW0tPnVtZW1f cndzZW0pOwotfQotCi1zdGF0aWMgc3RydWN0IG1tdV9ub3RpZmllciAqaWJfdW1lbV9hbGxvY19u b3RpZmllcihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlzdHJ1Y3QgaWJfdWNvbnRleHRfcGVy X21tICpwZXJfbW07Ci0KLQlwZXJfbW0gPSBremFsbG9jKHNpemVvZigqcGVyX21tKSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFwZXJfbW0pCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JcGVy X21tLT51bWVtX3RyZWUgPSBSQl9ST09UX0NBQ0hFRDsKLQlpbml0X3J3c2VtKCZwZXJfbW0tPnVt ZW1fcndzZW0pOwotCi0JV0FSTl9PTihtbSAhPSBjdXJyZW50LT5tbSk7Ci0JcmN1X3JlYWRfbG9j aygpOwotCXBlcl9tbS0+dGdpZCA9IGdldF90YXNrX3BpZChjdXJyZW50LT5ncm91cF9sZWFkZXIs IFBJRFRZUEVfUElEKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gJnBlcl9tbS0+bW47 Ci19Ci0KLXN0YXRpYyB2b2lkIGliX3VtZW1fZnJlZV9ub3RpZmllcihzdHJ1Y3QgbW11X25vdGlm aWVyICptbikKLXsKLQlzdHJ1Y3QgaWJfdWNvbnRleHRfcGVyX21tICpwZXJfbW0gPQotCQljb250 YWluZXJfb2YobW4sIHN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0sIG1uKTsKLQotCVdBUk5fT04o IVJCX0VNUFRZX1JPT1QoJnBlcl9tbS0+dW1lbV90cmVlLnJiX3Jvb3QpKTsKLQotCXB1dF9waWQo cGVyX21tLT50Z2lkKTsKLQlrZnJlZShwZXJfbW0pOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IG1tdV9ub3RpZmllcl9vcHMgaWJfdW1lbV9ub3RpZmllcnMgPSB7Ci0JLnJlbGVhc2UgICAgICAg ICAgICAgICAgICAgID0gaWJfdW1lbV9ub3RpZmllcl9yZWxlYXNlLAotCS5pbnZhbGlkYXRlX3Jh bmdlX3N0YXJ0ICAgICA9IGliX3VtZW1fbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCwK LQkuaW52YWxpZGF0ZV9yYW5nZV9lbmQgICAgICAgPSBpYl91bWVtX25vdGlmaWVyX2ludmFsaWRh dGVfcmFuZ2VfZW5kLAotCS5hbGxvY19ub3RpZmllcgkJICAgID0gaWJfdW1lbV9hbGxvY19ub3Rp ZmllciwKLQkuZnJlZV9ub3RpZmllcgkJICAgID0gaWJfdW1lbV9mcmVlX25vdGlmaWVyLAotfTsK LQogc3RhdGljIGlubGluZSBpbnQgaWJfaW5pdF91bWVtX29kcChzdHJ1Y3QgaWJfdW1lbV9vZHAg KnVtZW1fb2RwKQogewotCXN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0gKnBlcl9tbTsKLQlzdHJ1 Y3QgbW11X25vdGlmaWVyICptbjsKIAlpbnQgcmV0OwogCiAJdW1lbV9vZHAtPnVtZW0uaXNfb2Rw ID0gMTsKKwltdXRleF9pbml0KCZ1bWVtX29kcC0+dW1lbV9tdXRleCk7CisKIAlpZiAoIXVtZW1f b2RwLT5pc19pbXBsaWNpdF9vZHApIHsKIAkJc2l6ZV90IHBhZ2Vfc2l6ZSA9IDFVTCA8PCB1bWVt X29kcC0+cGFnZV9zaGlmdDsKKwkJdW5zaWduZWQgbG9uZyBzdGFydDsKKwkJdW5zaWduZWQgbG9u ZyBlbmQ7CiAJCXNpemVfdCBwYWdlczsKIAotCQl1bWVtX29kcC0+aW50ZXJ2YWxfdHJlZS5zdGFy dCA9Ci0JCQlBTElHTl9ET1dOKHVtZW1fb2RwLT51bWVtLmFkZHJlc3MsIHBhZ2Vfc2l6ZSk7CisJ CXN0YXJ0ID0gQUxJR05fRE9XTih1bWVtX29kcC0+dW1lbS5hZGRyZXNzLCBwYWdlX3NpemUpOwog CQlpZiAoY2hlY2tfYWRkX292ZXJmbG93KHVtZW1fb2RwLT51bWVtLmFkZHJlc3MsCiAJCQkJICAg ICAgICh1bnNpZ25lZCBsb25nKXVtZW1fb2RwLT51bWVtLmxlbmd0aCwKLQkJCQkgICAgICAgJnVt ZW1fb2RwLT5pbnRlcnZhbF90cmVlLmxhc3QpKQorCQkJCSAgICAgICAmZW5kKSkKIAkJCXJldHVy biAtRU9WRVJGTE9XOwotCQl1bWVtX29kcC0+aW50ZXJ2YWxfdHJlZS5sYXN0ID0KLQkJCUFMSUdO KHVtZW1fb2RwLT5pbnRlcnZhbF90cmVlLmxhc3QsIHBhZ2Vfc2l6ZSk7Ci0JCWlmICh1bmxpa2Vs eSh1bWVtX29kcC0+aW50ZXJ2YWxfdHJlZS5sYXN0IDwgcGFnZV9zaXplKSkKKwkJZW5kID0gQUxJ R04oZW5kLCBwYWdlX3NpemUpOworCQlpZiAodW5saWtlbHkoZW5kIDwgcGFnZV9zaXplKSkKIAkJ CXJldHVybiAtRU9WRVJGTE9XOwogCi0JCXBhZ2VzID0gKHVtZW1fb2RwLT5pbnRlcnZhbF90cmVl Lmxhc3QgLQotCQkJIHVtZW1fb2RwLT5pbnRlcnZhbF90cmVlLnN0YXJ0KSA+PgotCQkJdW1lbV9v ZHAtPnBhZ2Vfc2hpZnQ7CisJCXBhZ2VzID0gKGVuZCAtIHN0YXJ0KSA+PiB1bWVtX29kcC0+cGFn ZV9zaGlmdDsKIAkJaWYgKCFwYWdlcykKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qCi0JCSAq IE5vdGUgdGhhdCB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVydmFscyBpbiB0aGUKLQkJ ICogaW50ZXJ2YWwgdHJlZSBjb25zaWRlcnMgdGhlIGVuZGluZyBwb2ludCBhcyBjb250YWluZWQg aW4KLQkJICogdGhlIGludGVydmFsLgotCQkgKi8KLQkJdW1lbV9vZHAtPmludGVydmFsX3RyZWUu bGFzdC0tOwotCiAJCXVtZW1fb2RwLT5wYWdlX2xpc3QgPSBrdmNhbGxvYygKIAkJCXBhZ2VzLCBz aXplb2YoKnVtZW1fb2RwLT5wYWdlX2xpc3QpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF1bWVtX29k cC0+cGFnZV9saXN0KQpAQCAtMjUwLDI2ICs4NSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBpYl9p bml0X3VtZW1fb2RwKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHApCiAJCQlyZXQgPSAtRU5P TUVNOwogCQkJZ290byBvdXRfcGFnZV9saXN0OwogCQl9Ci0JfQogCi0JbW4gPSBtbXVfbm90aWZp ZXJfZ2V0KCZpYl91bWVtX25vdGlmaWVycywgdW1lbV9vZHAtPnVtZW0ub3duaW5nX21tKTsKLQlp ZiAoSVNfRVJSKG1uKSkgewotCQlyZXQgPSBQVFJfRVJSKG1uKTsKLQkJZ290byBvdXRfZG1hX2xp c3Q7Ci0JfQotCXVtZW1fb2RwLT5wZXJfbW0gPSBwZXJfbW0gPQotCQljb250YWluZXJfb2YobW4s IHN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0sIG1uKTsKLQotCW11dGV4X2luaXQoJnVtZW1fb2Rw LT51bWVtX211dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJnVtZW1fb2RwLT5ub3RpZmllcl9jb21w bGV0aW9uKTsKKwkJcmV0ID0gbW11X3JhbmdlX25vdGlmaWVyX2luc2VydCgmdW1lbV9vZHAtPm5v dGlmaWVyLCBzdGFydCwKKwkJCQkJCWVuZCAtIHN0YXJ0LCBjdXJyZW50LT5tbSk7CisJCWlmIChy ZXQpCisJCQlnb3RvIG91dF9kbWFfbGlzdDsKIAotCWlmICghdW1lbV9vZHAtPmlzX2ltcGxpY2l0 X29kcCkgewotCQlkb3duX3dyaXRlKCZwZXJfbW0tPnVtZW1fcndzZW0pOwotCQlpbnRlcnZhbF90 cmVlX2luc2VydCgmdW1lbV9vZHAtPmludGVydmFsX3RyZWUsCi0JCQkJICAgICAmcGVyX21tLT51 bWVtX3RyZWUpOwotCQl1cF93cml0ZSgmcGVyX21tLT51bWVtX3J3c2VtKTsKKwkJdW1lbV9vZHAt PnRnaWQgPQorCQkJZ2V0X3Rhc2tfcGlkKGN1cnJlbnQtPmdyb3VwX2xlYWRlciwgUElEVFlQRV9Q SUQpOwogCX0KLQltbWdyYWIodW1lbV9vZHAtPnVtZW0ub3duaW5nX21tKTsKIAogCXJldHVybiAw OwogCkBAIC0yOTAsOCArMTE0LDggQEAgc3RhdGljIGlubGluZSBpbnQgaWJfaW5pdF91bWVtX29k cChzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwKQogICogQHVkYXRhOiB1ZGF0YSBmcm9tIHRo ZSBzeXNjYWxsIGJlaW5nIHVzZWQgdG8gY3JlYXRlIHRoZSB1bWVtCiAgKiBAYWNjZXNzOiBpYl9y ZWdfbXIgYWNjZXNzIGZsYWdzCiAgKi8KLXN0cnVjdCBpYl91bWVtX29kcCAqaWJfdW1lbV9vZHBf YWxsb2NfaW1wbGljaXQoc3RydWN0IGliX3VkYXRhICp1ZGF0YSwKLQkJCQkJICAgICAgIGludCBh Y2Nlc3MpCitzdHJ1Y3QgaWJfdW1lbV9vZHAgKgoraWJfdW1lbV9vZHBfYWxsb2NfaW1wbGljaXQo c3RydWN0IGliX3VkYXRhICp1ZGF0YSwgaW50IGFjY2VzcykKIHsKIAlzdHJ1Y3QgaWJfdWNvbnRl eHQgKmNvbnRleHQgPQogCQljb250YWluZXJfb2YodWRhdGEsIHN0cnVjdCB1dmVyYnNfYXR0cl9i dW5kbGUsIGRyaXZlcl91ZGF0YSkKQEAgLTMwNSw4ICsxMjksNiBAQCBzdHJ1Y3QgaWJfdW1lbV9v ZHAgKmliX3VtZW1fb2RwX2FsbG9jX2ltcGxpY2l0KHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEsCiAK IAlpZiAoIWNvbnRleHQpCiAJCXJldHVybiBFUlJfUFRSKC1FSU8pOwotCWlmIChXQVJOX09OX09O Q0UoIWNvbnRleHQtPmRldmljZS0+b3BzLmludmFsaWRhdGVfcmFuZ2UpKQotCQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKIAogCXVtZW1fb2RwID0ga3phbGxvYyhzaXplb2YoKnVtZW1fb2RwKSwg R0ZQX0tFUk5FTCk7CiAJaWYgKCF1bWVtX29kcCkKQEAgLTMzNiw4ICsxNTgsOSBAQCBFWFBPUlRf U1lNQk9MKGliX3VtZW1fb2RwX2FsbG9jX2ltcGxpY2l0KTsKICAqIEBhZGRyOiBUaGUgc3RhcnRp bmcgdXNlcnNwYWNlIFZBCiAgKiBAc2l6ZTogVGhlIGxlbmd0aCBvZiB0aGUgdXNlcnNwYWNlIFZB CiAgKi8KLXN0cnVjdCBpYl91bWVtX29kcCAqaWJfdW1lbV9vZHBfYWxsb2NfY2hpbGQoc3RydWN0 IGliX3VtZW1fb2RwICpyb290LAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qg c2l6ZSkKK3N0cnVjdCBpYl91bWVtX29kcCAqCitpYl91bWVtX29kcF9hbGxvY19jaGlsZChzdHJ1 Y3QgaWJfdW1lbV9vZHAgKnJvb3QsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCXNpemVfdCBzaXpl LCBjb25zdCBzdHJ1Y3QgbW11X3JhbmdlX25vdGlmaWVyX29wcyAqb3BzKQogewogCS8qCiAJICog Q2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgcm9vdCBjYW5ub3QgYmUgZnJlZWQgZHVyaW5nIHRoZSBj YWxsIHRvCkBAIC0zNjAsNiArMTgzLDcgQEAgc3RydWN0IGliX3VtZW1fb2RwICppYl91bWVtX29k cF9hbGxvY19jaGlsZChzdHJ1Y3QgaWJfdW1lbV9vZHAgKnJvb3QsCiAJdW1lbS0+d3JpdGFibGUg ICA9IHJvb3QtPnVtZW0ud3JpdGFibGU7CiAJdW1lbS0+b3duaW5nX21tICA9IHJvb3QtPnVtZW0u b3duaW5nX21tOwogCW9kcF9kYXRhLT5wYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDsKKwlvZHBfZGF0 YS0+bm90aWZpZXIub3BzID0gb3BzOwogCiAJcmV0ID0gaWJfaW5pdF91bWVtX29kcChvZHBfZGF0 YSk7CiAJaWYgKHJldCkgewpAQCAtMzgzLDcgKzIwNyw4IEBAIEVYUE9SVF9TWU1CT0woaWJfdW1l bV9vZHBfYWxsb2NfY2hpbGQpOwogICogY29uanVuY3Rpb24gd2l0aCBNTVUgbm90aWZpZXJzLgog ICovCiBzdHJ1Y3QgaWJfdW1lbV9vZHAgKmliX3VtZW1fb2RwX2dldChzdHJ1Y3QgaWJfdWRhdGEg KnVkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgIHNpemVfdCBzaXplLCBpbnQgYWNj ZXNzKQorCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGFjY2VzcywKKwkJCQkgICAgY29uc3Qgc3Ry dWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgaWJfdW1lbV9vZHAg KnVtZW1fb2RwOwogCXN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dDsKQEAgLTM5OCw4ICsyMjMs NyBAQCBzdHJ1Y3QgaWJfdW1lbV9vZHAgKmliX3VtZW1fb2RwX2dldChzdHJ1Y3QgaWJfdWRhdGEg KnVkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFjb250ZXh0KQogCQlyZXR1cm4gRVJS X1BUUigtRUlPKTsKIAotCWlmIChXQVJOX09OX09OQ0UoIShhY2Nlc3MgJiBJQl9BQ0NFU1NfT05f REVNQU5EKSkgfHwKLQkgICAgV0FSTl9PTl9PTkNFKCFjb250ZXh0LT5kZXZpY2UtPm9wcy5pbnZh bGlkYXRlX3JhbmdlKSkKKwlpZiAoV0FSTl9PTl9PTkNFKCEoYWNjZXNzICYgSUJfQUNDRVNTX09O X0RFTUFORCkpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCXVtZW1fb2RwID0ga3ph bGxvYyhzaXplb2Yoc3RydWN0IGliX3VtZW1fb2RwKSwgR0ZQX0tFUk5FTCk7CkBAIC00MTEsNiAr MjM1LDcgQEAgc3RydWN0IGliX3VtZW1fb2RwICppYl91bWVtX29kcF9nZXQoc3RydWN0IGliX3Vk YXRhICp1ZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXVtZW1fb2RwLT51bWVtLmFkZHJlc3Mg PSBhZGRyOwogCXVtZW1fb2RwLT51bWVtLndyaXRhYmxlID0gaWJfYWNjZXNzX3dyaXRhYmxlKGFj Y2Vzcyk7CiAJdW1lbV9vZHAtPnVtZW0ub3duaW5nX21tID0gbW0gPSBjdXJyZW50LT5tbTsKKwl1 bWVtX29kcC0+bm90aWZpZXIub3BzID0gb3BzOwogCiAJdW1lbV9vZHAtPnBhZ2Vfc2hpZnQgPSBQ QUdFX1NISUZUOwogCWlmIChhY2Nlc3MgJiBJQl9BQ0NFU1NfSFVHRVRMQikgewpAQCAtNDQyLDgg KzI2Nyw2IEBAIEVYUE9SVF9TWU1CT0woaWJfdW1lbV9vZHBfZ2V0KTsKIAogdm9pZCBpYl91bWVt X29kcF9yZWxlYXNlKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHApCiB7Ci0Jc3RydWN0IGli X3Vjb250ZXh0X3Blcl9tbSAqcGVyX21tID0gdW1lbV9vZHAtPnBlcl9tbTsKLQogCS8qCiAJICog RW5zdXJlIHRoYXQgbm8gbW9yZSBwYWdlcyBhcmUgbWFwcGVkIGluIHRoZSB1bWVtLgogCSAqCkBA IC00NTUsMjggKzI3OCwxMSBAQCB2b2lkIGliX3VtZW1fb2RwX3JlbGVhc2Uoc3RydWN0IGliX3Vt ZW1fb2RwICp1bWVtX29kcCkKIAkJaWJfdW1lbV9vZHBfdW5tYXBfZG1hX3BhZ2VzKHVtZW1fb2Rw LCBpYl91bWVtX3N0YXJ0KHVtZW1fb2RwKSwKIAkJCQkJICAgIGliX3VtZW1fZW5kKHVtZW1fb2Rw KSk7CiAJCW11dGV4X3VubG9jaygmdW1lbV9vZHAtPnVtZW1fbXV0ZXgpOworCQltbXVfcmFuZ2Vf bm90aWZpZXJfcmVtb3ZlKCZ1bWVtX29kcC0+bm90aWZpZXIpOwogCQlrdmZyZWUodW1lbV9vZHAt PmRtYV9saXN0KTsKIAkJa3ZmcmVlKHVtZW1fb2RwLT5wYWdlX2xpc3QpOworCQlwdXRfcGlkKHVt ZW1fb2RwLT50Z2lkKTsKIAl9Ci0KLQlkb3duX3dyaXRlKCZwZXJfbW0tPnVtZW1fcndzZW0pOwot CWlmICghdW1lbV9vZHAtPmlzX2ltcGxpY2l0X29kcCkgewotCQlpbnRlcnZhbF90cmVlX3JlbW92 ZSgmdW1lbV9vZHAtPmludGVydmFsX3RyZWUsCi0JCQkJICAgICAmcGVyX21tLT51bWVtX3RyZWUp OwotCQljb21wbGV0ZV9hbGwoJnVtZW1fb2RwLT5ub3RpZmllcl9jb21wbGV0aW9uKTsKLQl9Ci0J LyoKLQkgKiBOT1RFISBtbXVfbm90aWZpZXJfdW5yZWdpc3RlcigpIGNhbiBoYXBwZW4gYmV0d2Vl biBhIHN0YXJ0L2VuZAotCSAqIGNhbGxiYWNrLCByZXN1bHRpbmcgaW4gYSBtaXNzaW5nIGVuZCwg YW5kIHRodXMgYW4gdW5iYWxhbmNlZAotCSAqIGxvY2suIFRoaXMgZG9lc24ndCByZWFsbHkgbWF0 dGVyIHRvIHVzIHNpbmNlIHdlIGFyZSBhYm91dCB0byBrZnJlZQotCSAqIHRoZSBtZW1vcnkgdGhh dCBob2xkcyB0aGUgbG9jaywgaG93ZXZlciBMT0NLREVQIGRvZXNuJ3QgbGlrZSB0aGlzLgotCSAq IFRodXMgd2UgY2FsbCB0aGUgbW11X25vdGlmaWVyX3B1dCB1bmRlciB0aGUgcndzZW0gYW5kIHRl c3QgdGhlCi0JICogaW50ZXJuYWwgdXNlcnMgY291bnQgdG8gcmVsaWFibHkgc2VlIGlmIHdlIGFy ZSBwYXN0IHRoaXMgcG9pbnQuCi0JICovCi0JbW11X25vdGlmaWVyX3B1dCgmcGVyX21tLT5tbik7 Ci0JdXBfd3JpdGUoJnBlcl9tbS0+dW1lbV9yd3NlbSk7Ci0KLQltbWRyb3AodW1lbV9vZHAtPnVt ZW0ub3duaW5nX21tKTsKIAlrZnJlZSh1bWVtX29kcCk7CiB9CiBFWFBPUlRfU1lNQk9MKGliX3Vt ZW1fb2RwX3JlbGVhc2UpOwpAQCAtNTAxLDcgKzMwNyw3IEBAIEVYUE9SVF9TWU1CT0woaWJfdW1l bV9vZHBfcmVsZWFzZSk7CiAgKi8KIHN0YXRpYyBpbnQgaWJfdW1lbV9vZHBfbWFwX2RtYV9zaW5n bGVfcGFnZSgKIAkJc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCwKLQkJaW50IHBhZ2VfaW5k ZXgsCisJCXVuc2lnbmVkIGludCBwYWdlX2luZGV4LAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJ dTY0IGFjY2Vzc19tYXNrLAogCQl1bnNpZ25lZCBsb25nIGN1cnJlbnRfc2VxKQpAQCAtNTEwLDEy ICszMTYsNyBAQCBzdGF0aWMgaW50IGliX3VtZW1fb2RwX21hcF9kbWFfc2luZ2xlX3BhZ2UoCiAJ ZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAlpbnQgcmV0ID0gMDsKIAotCS8qCi0JICogTm90ZTogd2Ug YXZvaWQgd3JpdGluZyBpZiBzZXEgaXMgZGlmZmVyZW50IGZyb20gdGhlIGluaXRpYWwgc2VxLCB0 bwotCSAqIGhhbmRsZSBjYXNlIG9mIGEgcmFjaW5nIG5vdGlmaWVyLiBUaGlzIGNoZWNrIGFsc28g YWxsb3dzIHVzIHRvIGJhaWwKLQkgKiBlYXJseSBpZiB3ZSBoYXZlIGEgbm90aWZpZXIgcnVubmlu ZyBpbiBwYXJhbGxlbCB3aXRoIHVzLgotCSAqLwotCWlmIChpYl91bWVtX21tdV9ub3RpZmllcl9y ZXRyeSh1bWVtX29kcCwgY3VycmVudF9zZXEpKSB7CisJaWYgKG1tdV9yYW5nZV9jaGVja19yZXRy eSgmdW1lbV9vZHAtPm5vdGlmaWVyLCBjdXJyZW50X3NlcSkpIHsKIAkJcmV0ID0gLUVBR0FJTjsK IAkJZ290byBvdXQ7CiAJfQpAQCAtNjE4LDcgKzQxOSw3IEBAIGludCBpYl91bWVtX29kcF9tYXBf ZG1hX3BhZ2VzKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsCiAJ ICogZXhpc3RpbmcgYmV5b25kIHRoZSBsaWZldGltZSBvZiB0aGUgb3JpZ2luYXRpbmcgcHJvY2Vz cy4uIFByZXN1bWFibHkKIAkgKiBtbWdldF9ub3RfemVybyB3aWxsIGZhaWwgaW4gdGhpcyBjYXNl LgogCSAqLwotCW93bmluZ19wcm9jZXNzID0gZ2V0X3BpZF90YXNrKHVtZW1fb2RwLT5wZXJfbW0t PnRnaWQsIFBJRFRZUEVfUElEKTsKKwlvd25pbmdfcHJvY2VzcyA9IGdldF9waWRfdGFzayh1bWVt X29kcC0+dGdpZCwgUElEVFlQRV9QSUQpOwogCWlmICghb3duaW5nX3Byb2Nlc3MgfHwgIW1tZ2V0 X25vdF96ZXJvKG93bmluZ19tbSkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfcHV0 X3Rhc2s7CkBAIC03NjIsMzIgKzU2MywzIEBAIHZvaWQgaWJfdW1lbV9vZHBfdW5tYXBfZG1hX3Bh Z2VzKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB2aXJ0LAogCX0KIH0KIEVYUE9S VF9TWU1CT0woaWJfdW1lbV9vZHBfdW5tYXBfZG1hX3BhZ2VzKTsKLQotLyogQGxhc3QgaXMgbm90 IGEgcGFydCBvZiB0aGUgaW50ZXJ2YWwuIFNlZSBjb21tZW50IGZvciBmdW5jdGlvbgotICogbm9k ZV9sYXN0LgotICovCi1pbnQgcmJ0X2liX3VtZW1fZm9yX2VhY2hfaW5fcmFuZ2Uoc3RydWN0IHJi X3Jvb3RfY2FjaGVkICpyb290LAotCQkJCSAgdTY0IHN0YXJ0LCB1NjQgbGFzdCwKLQkJCQkgIHVt ZW1fY2FsbF9iYWNrIGNiLAotCQkJCSAgYm9vbCBibG9ja2FibGUsCi0JCQkJICB2b2lkICpjb29r aWUpCi17Ci0JaW50IHJldF92YWwgPSAwOwotCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKm5v ZGUsICpuZXh0OwotCXN0cnVjdCBpYl91bWVtX29kcCAqdW1lbTsKLQotCWlmICh1bmxpa2VseShz dGFydCA9PSBsYXN0KSkKLQkJcmV0dXJuIHJldF92YWw7Ci0KLQlmb3IgKG5vZGUgPSBpbnRlcnZh bF90cmVlX2l0ZXJfZmlyc3Qocm9vdCwgc3RhcnQsIGxhc3QgLSAxKTsKLQkJCW5vZGU7IG5vZGUg PSBuZXh0KSB7Ci0JCS8qIFRPRE8gbW92ZSB0aGUgYmxvY2thYmxlIGRlY2lzaW9uIHVwIHRvIHRo ZSBjYWxsYmFjayAqLwotCQlpZiAoIWJsb2NrYWJsZSkKLQkJCXJldHVybiAtRUFHQUlOOwotCQlu ZXh0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX25leHQobm9kZSwgc3RhcnQsIGxhc3QgLSAxKTsKLQkJ dW1lbSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaWJfdW1lbV9vZHAsIGludGVydmFsX3Ry ZWUpOwotCQlyZXRfdmFsID0gY2IodW1lbSwgc3RhcnQsIGxhc3QsIGNvb2tpZSkgfHwgcmV0X3Zh bDsKLQl9Ci0KLQlyZXR1cm4gcmV0X3ZhbDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5p YmFuZC9ody9tbHg1L21seDVfaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVf aWIuaAppbmRleCBmNjFkNDAwNWM2YzM3OS4uYzcxOWYwOGIzNTE2NzAgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVfaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJh bmQvaHcvbWx4NS9tbHg1X2liLmgKQEAgLTEyNjMsOCArMTI2Myw2IEBAIGludCBtbHg1X2liX29k cF9pbml0X29uZShzdHJ1Y3QgbWx4NV9pYl9kZXYgKmliZGV2KTsKIHZvaWQgbWx4NV9pYl9vZHBf Y2xlYW51cF9vbmUoc3RydWN0IG1seDVfaWJfZGV2ICppYmRldik7CiBpbnQgX19pbml0IG1seDVf aWJfb2RwX2luaXQodm9pZCk7CiB2b2lkIG1seDVfaWJfb2RwX2NsZWFudXAodm9pZCk7Ci12b2lk IG1seDVfaWJfaW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1 bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpOwogdm9pZCBt bHg1X29kcF9pbml0X21yX2NhY2hlX2VudHJ5KHN0cnVjdCBtbHg1X2NhY2hlX2VudCAqZW50KTsK IHZvaWQgbWx4NV9vZHBfcG9wdWxhdGVfa2xtKHN0cnVjdCBtbHg1X2tsbSAqcGtsbSwgc2l6ZV90 IG9mZnNldCwKIAkJCSAgIHNpemVfdCBuZW50cmllcywgc3RydWN0IG1seDVfaWJfbXIgKm1yLCBp bnQgZmxhZ3MpOwpAQCAtMTI5NCwxMSArMTI5MiwxMCBAQCBtbHg1X2liX2FkdmlzZV9tcl9wcmVm ZXRjaChzdHJ1Y3QgaWJfcGQgKnBkLAogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KLXN0YXRp YyBpbmxpbmUgdm9pZCBtbHg1X2liX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGliX3VtZW1fb2Rw ICp1bWVtX29kcCwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCSAgICB1bnNp Z25lZCBsb25nIGVuZCl7fTsKICNlbmRpZiAvKiBDT05GSUdfSU5GSU5JQkFORF9PTl9ERU1BTkRf UEFHSU5HICovCiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbW11X3JhbmdlX25vdGlmaWVyX29wcyBt bHg1X21uX29wczsKKwogLyogTmVlZGVkIGZvciByZXAgcHJvZmlsZSAqLwogdm9pZCBfX21seDVf aWJfcmVtb3ZlKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LAogCQkgICAgICBjb25zdCBzdHJ1Y3Qg bWx4NV9pYl9wcm9maWxlICpwcm9maWxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5k L2h3L21seDUvbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMKaW5kZXggMTk5 Zjc5NTlhYWE1MTAuLmZiZTMxODMwYjIyODA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJh bmQvaHcvbWx4NS9tci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMKQEAg LTc0Myw3ICs3NDMsOCBAQCBzdGF0aWMgaW50IG1yX3VtZW1fZ2V0KHN0cnVjdCBtbHg1X2liX2Rl diAqZGV2LCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhLAogCWlmIChhY2Nlc3NfZmxhZ3MgJiBJQl9B Q0NFU1NfT05fREVNQU5EKSB7CiAJCXN0cnVjdCBpYl91bWVtX29kcCAqb2RwOwogCi0JCW9kcCA9 IGliX3VtZW1fb2RwX2dldCh1ZGF0YSwgc3RhcnQsIGxlbmd0aCwgYWNjZXNzX2ZsYWdzKTsKKwkJ b2RwID0gaWJfdW1lbV9vZHBfZ2V0KHVkYXRhLCBzdGFydCwgbGVuZ3RoLCBhY2Nlc3NfZmxhZ3Ms CisJCQkJICAgICAgJm1seDVfbW5fb3BzKTsKIAkJaWYgKElTX0VSUihvZHApKSB7CiAJCQltbHg1 X2liX2RiZyhkZXYsICJ1bWVtIGdldCBmYWlsZWQgKCVsZClcbiIsCiAJCQkJICAgIFBUUl9FUlIo b2RwKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuYyBiL2Ry aXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jCmluZGV4IGJjZmMwOTg0NjY5NzdlLi5mNzEz ZWI4MmVlZWFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMK KysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMKQEAgLTI0MSwxNyArMjQxLDI2 IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdW51c2VkX2ltcGxpY2l0X2NoaWxkX21yKHN0cnVjdCBt bHg1X2liX21yICptcikKIAl4YV91bmxvY2soJmltci0+aW1wbGljaXRfY2hpbGRyZW4pOwogfQog Ci12b2lkIG1seDVfaWJfaW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1f b2RwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpCitz dGF0aWMgYm9vbCBtbHg1X2liX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IG1tdV9yYW5nZV9ub3Rp ZmllciAqbXJuLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFu Z2UsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGN1cl9zZXEpCiB7CisJc3RydWN0IGliX3VtZW1f b2RwICp1bWVtX29kcCA9CisJCWNvbnRhaW5lcl9vZihtcm4sIHN0cnVjdCBpYl91bWVtX29kcCwg bm90aWZpZXIpOwogCXN0cnVjdCBtbHg1X2liX21yICptcjsKIAljb25zdCB1NjQgdW1yX2Jsb2Nr X21hc2sgPSAoTUxYNV9VTVJfTVRUX0FMSUdOTUVOVCAvCiAJCQkJICAgIHNpemVvZihzdHJ1Y3Qg bWx4NV9tdHQpKSAtIDE7CiAJdTY0IGlkeCA9IDAsIGJsa19zdGFydF9pZHggPSAwOworCXVuc2ln bmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7CiAJaW50IGluX2Jsb2NrID0gMDsK IAl1NjQgYWRkcjsKIAorCWlmICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkp CisJCXJldHVybiBmYWxzZTsKKwogCW11dGV4X2xvY2soJnVtZW1fb2RwLT51bWVtX211dGV4KTsK KwltbXVfcmFuZ2Vfc2V0X3NlcShtcm4sIGN1cl9zZXEpOwogCS8qCiAJICogSWYgbnBhZ2VzIGlz IHplcm8gdGhlbiB1bWVtX29kcC0+cHJpdmF0ZSBtYXkgbm90IGJlIHNldHVwIHlldC4gVGhpcwog CSAqIGRvZXMgbm90IGNvbXBsZXRlIHVudGlsIGFmdGVyIHRoZSBmaXJzdCBwYWdlIGlzIG1hcHBl ZCBmb3IgRE1BLgpAQCAtMjYwLDggKzI2OSw4IEBAIHZvaWQgbWx4NV9pYl9pbnZhbGlkYXRlX3Jh bmdlKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJ CWdvdG8gb3V0OwogCW1yID0gdW1lbV9vZHAtPnByaXZhdGU7CiAKLQlzdGFydCA9IG1heF90KHU2 NCwgaWJfdW1lbV9zdGFydCh1bWVtX29kcCksIHN0YXJ0KTsKLQllbmQgPSBtaW5fdCh1NjQsIGli X3VtZW1fZW5kKHVtZW1fb2RwKSwgZW5kKTsKKwlzdGFydCA9IG1heF90KHU2NCwgaWJfdW1lbV9z dGFydCh1bWVtX29kcCksIHJhbmdlLT5zdGFydCk7CisJZW5kID0gbWluX3QodTY0LCBpYl91bWVt X2VuZCh1bWVtX29kcCksIHJhbmdlLT5lbmQpOwogCiAJLyoKIAkgKiBJdGVyYXRpb24gb25lIC0g emFwIHRoZSBIVydzIE1UVHMuIFRoZSBub3RpZmllcnNfY291bnQgZW5zdXJlcyB0aGF0CkBAIC0z MTIsOCArMzIxLDEzIEBAIHZvaWQgbWx4NV9pYl9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBpYl91 bWVtX29kcCAqdW1lbV9vZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCWRlc3Ryb3lfdW51c2Vk X2ltcGxpY2l0X2NoaWxkX21yKG1yKTsKIG91dDoKIAltdXRleF91bmxvY2soJnVtZW1fb2RwLT51 bWVtX211dGV4KTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAorY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllcl9vcHMgbWx4NV9tbl9vcHMgPSB7CisJLmludmFsaWRhdGUgPSBtbHg1X2liX2ludmFs aWRhdGVfcmFuZ2UsCit9OworCiB2b2lkIG1seDVfaWJfaW50ZXJuYWxfZmlsbF9vZHBfY2Fwcyhz dHJ1Y3QgbWx4NV9pYl9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWJfb2RwX2NhcHMgKmNhcHMgPSAm ZGV2LT5vZHBfY2FwczsKQEAgLTQxNCw3ICs0MjgsNyBAQCBzdGF0aWMgc3RydWN0IG1seDVfaWJf bXIgKmltcGxpY2l0X2dldF9jaGlsZF9tcihzdHJ1Y3QgbWx4NV9pYl9tciAqaW1yLAogCiAJb2Rw ID0gaWJfdW1lbV9vZHBfYWxsb2NfY2hpbGQodG9faWJfdW1lbV9vZHAoaW1yLT51bWVtKSwKIAkJ CQkgICAgICBpZHggKiBNTFg1X0lNUl9NVFRfU0laRSwKLQkJCQkgICAgICBNTFg1X0lNUl9NVFRf U0laRSk7CisJCQkJICAgICAgTUxYNV9JTVJfTVRUX1NJWkUsICZtbHg1X21uX29wcyk7CiAJaWYg KElTX0VSUihvZHApKQogCQlyZXR1cm4gRVJSX0NBU1Qob2RwKTsKIApAQCAtNjAwLDggKzYxNCw5 IEBAIHN0YXRpYyBpbnQgcGFnZWZhdWx0X3JlYWxfbXIoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBz dHJ1Y3QgaWJfdW1lbV9vZHAgKm9kcCwKIAkJCSAgICAgdTY0IHVzZXJfdmEsIHNpemVfdCBiY250 LCB1MzIgKmJ5dGVzX21hcHBlZCwKIAkJCSAgICAgdTMyIGZsYWdzKQogewotCWludCBjdXJyZW50 X3NlcSwgcGFnZV9zaGlmdCwgcmV0LCBucDsKKwlpbnQgcGFnZV9zaGlmdCwgcmV0LCBucDsKIAli b29sIGRvd25ncmFkZSA9IGZsYWdzICYgTUxYNV9QRl9GTEFHU19ET1dOR1JBREU7CisJdW5zaWdu ZWQgbG9uZyBjdXJyZW50X3NlcTsKIAl1NjQgYWNjZXNzX21hc2s7CiAJdTY0IHN0YXJ0X2lkeCwg cGFnZV9tYXNrOwogCkBAIC02MTMsMTIgKzYyOCw3IEBAIHN0YXRpYyBpbnQgcGFnZWZhdWx0X3Jl YWxfbXIoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBzdHJ1Y3QgaWJfdW1lbV9vZHAgKm9kcCwKIAlp ZiAob2RwLT51bWVtLndyaXRhYmxlICYmICFkb3duZ3JhZGUpCiAJCWFjY2Vzc19tYXNrIHw9IE9E UF9XUklURV9BTExPV0VEX0JJVDsKIAotCWN1cnJlbnRfc2VxID0gUkVBRF9PTkNFKG9kcC0+bm90 aWZpZXJzX3NlcSk7Ci0JLyoKLQkgKiBFbnN1cmUgdGhlIHNlcXVlbmNlIG51bWJlciBpcyB2YWxp ZCBmb3Igc29tZSB0aW1lIGJlZm9yZSB3ZSBjYWxsCi0JICogZ3VwLgotCSAqLwotCXNtcF9ybWIo KTsKKwljdXJyZW50X3NlcSA9IG1tdV9yYW5nZV9yZWFkX2JlZ2luKCZvZHAtPm5vdGlmaWVyKTsK IAogCW5wID0gaWJfdW1lbV9vZHBfbWFwX2RtYV9wYWdlcyhvZHAsIHVzZXJfdmEsIGJjbnQsIGFj Y2Vzc19tYXNrLAogCQkJCSAgICAgICBjdXJyZW50X3NlcSk7CkBAIC02MjYsNyArNjM2LDcgQEAg c3RhdGljIGludCBwYWdlZmF1bHRfcmVhbF9tcihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIsIHN0cnVj dCBpYl91bWVtX29kcCAqb2RwLAogCQlyZXR1cm4gbnA7CiAKIAltdXRleF9sb2NrKCZvZHAtPnVt ZW1fbXV0ZXgpOwotCWlmICghaWJfdW1lbV9tbXVfbm90aWZpZXJfcmV0cnkob2RwLCBjdXJyZW50 X3NlcSkpIHsKKwlpZiAoIW1tdV9yYW5nZV9yZWFkX3JldHJ5KCZvZHAtPm5vdGlmaWVyLCBjdXJy ZW50X3NlcSkpIHsKIAkJLyoKIAkJICogTm8gbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBNVFRz IHJlYWxseSBiZWxvbmcgdG8KIAkJICogdGhpcyBNUiwgc2luY2UgaWJfdW1lbV9vZHBfbWFwX2Rt YV9wYWdlcyBhbHJlYWR5CkBAIC02NTYsMTkgKzY2Niw2IEBAIHN0YXRpYyBpbnQgcGFnZWZhdWx0 X3JlYWxfbXIoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBzdHJ1Y3QgaWJfdW1lbV9vZHAgKm9kcCwK IAlyZXR1cm4gbnAgPDwgKHBhZ2Vfc2hpZnQgLSBQQUdFX1NISUZUKTsKIAogb3V0OgotCWlmIChy ZXQgPT0gLUVBR0FJTikgewotCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZm aWVzKE1NVV9OT1RJRklFUl9USU1FT1VUKTsKLQotCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25f dGltZW91dCgmb2RwLT5ub3RpZmllcl9jb21wbGV0aW9uLAotCQkJCQkJIHRpbWVvdXQpKSB7Ci0J CQltbHg1X2liX3dhcm4oCi0JCQkJbXItPmRldiwKLQkJCQkidGltZW91dCB3YWl0aW5nIGZvciBt bXUgbm90aWZpZXIuIHNlcSAlZCBhZ2FpbnN0ICVkLiBub3RpZmllcnNfY291bnQ9JWRcbiIsCi0J CQkJY3VycmVudF9zZXEsIG9kcC0+bm90aWZpZXJzX3NlcSwKLQkJCQlvZHAtPm5vdGlmaWVyc19j b3VudCk7Ci0JCX0KLQl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNjA5LDcgKzE2MDYsNiBA QCB2b2lkIG1seDVfb2RwX2luaXRfbXJfY2FjaGVfZW50cnkoc3RydWN0IG1seDVfY2FjaGVfZW50 ICplbnQpCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyBtbHg1X2liX2Rldl9v ZHBfb3BzID0gewogCS5hZHZpc2VfbXIgPSBtbHg1X2liX2FkdmlzZV9tciwKLQkuaW52YWxpZGF0 ZV9yYW5nZSA9IG1seDVfaWJfaW52YWxpZGF0ZV9yYW5nZSwKIH07CiAKIGludCBtbHg1X2liX29k cF9pbml0X29uZShzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2luY2x1ZGUv cmRtYS9pYl91bWVtX29kcC5oIGIvaW5jbHVkZS9yZG1hL2liX3VtZW1fb2RwLmgKaW5kZXggMDli MGU0NDk0OTg2YTkuLjk4ZWQ1NDM1YWZjY2Q5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJf dW1lbV9vZHAuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdW1lbV9vZHAuaApAQCAtMzUsMTEgKzM1 LDExIEBACiAKICNpbmNsdWRlIDxyZG1hL2liX3VtZW0uaD4KICNpbmNsdWRlIDxyZG1hL2liX3Zl cmJzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJ2YWxfdHJlZS5oPgogCiBzdHJ1Y3QgaWJfdW1l bV9vZHAgewogCXN0cnVjdCBpYl91bWVtIHVtZW07Ci0Jc3RydWN0IGliX3Vjb250ZXh0X3Blcl9t bSAqcGVyX21tOworCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgbm90aWZpZXI7CisJc3RydWN0 IHBpZCAqdGdpZDsKIAogCS8qCiAJICogQW4gYXJyYXkgb2YgdGhlIHBhZ2VzIGluY2x1ZGVkIGlu IHRoZSBvbi1kZW1hbmQgcGFnaW5nIHVtZW0uCkBAIC02MiwxMyArNjIsOCBAQCBzdHJ1Y3QgaWJf dW1lbV9vZHAgewogCXN0cnVjdCBtdXRleAkJdW1lbV9tdXRleDsKIAl2b2lkCQkJKnByaXZhdGU7 IC8qIGZvciB0aGUgSFcgZHJpdmVyIHRvIHVzZS4gKi8KIAotCWludCBub3RpZmllcnNfc2VxOwot CWludCBub3RpZmllcnNfY291bnQ7CiAJaW50IG5wYWdlczsKIAotCS8qIFRyZWUgdHJhY2tpbmcg Ki8KLQlzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlIGludGVydmFsX3RyZWU7Ci0KIAkvKgogCSAq IEFuIGltcGxpY2l0IG9kcCB1bWVtIGNhbm5vdCBiZSBETUEgbWFwcGVkLCBoYXMgMCBsZW5ndGgs IGFuZCBzZXJ2ZXMKIAkgKiBvbmx5IGFzIGFuIGFuY2hvciBmb3IgdGhlIGRyaXZlciB0byBob2xk IG9udG8gdGhlIHBlcl9tbS4gRklYTUU6CkBAIC03Nyw3ICs3Miw2IEBAIHN0cnVjdCBpYl91bWVt X29kcCB7CiAJICovCiAJYm9vbCBpc19pbXBsaWNpdF9vZHA7CiAKLQlzdHJ1Y3QgY29tcGxldGlv bglub3RpZmllcl9jb21wbGV0aW9uOwogCXVuc2lnbmVkIGludAkJcGFnZV9zaGlmdDsKIH07CiAK QEAgLTg5LDEzICs4MywxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl91bWVtX29kcCAqdG9f aWJfdW1lbV9vZHAoc3RydWN0IGliX3VtZW0gKnVtZW0pCiAvKiBSZXR1cm5zIHRoZSBmaXJzdCBw YWdlIG9mIGFuIE9EUCB1bWVtLiAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGliX3Vt ZW1fc3RhcnQoc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCkKIHsKLQlyZXR1cm4gdW1lbV9v ZHAtPmludGVydmFsX3RyZWUuc3RhcnQ7CisJcmV0dXJuIHVtZW1fb2RwLT5ub3RpZmllci5pbnRl cnZhbF90cmVlLnN0YXJ0OwogfQogCiAvKiBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwYWdl IGFmdGVyIHRoZSBsYXN0IG9uZSBvZiBhbiBPRFAgdW1lbS4gKi8KIHN0YXRpYyBpbmxpbmUgdW5z aWduZWQgbG9uZyBpYl91bWVtX2VuZChzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwKQogewot CXJldHVybiB1bWVtX29kcC0+aW50ZXJ2YWxfdHJlZS5sYXN0ICsgMTsKKwlyZXR1cm4gdW1lbV9v ZHAtPm5vdGlmaWVyLmludGVydmFsX3RyZWUubGFzdCArIDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUg c2l6ZV90IGliX3VtZW1fb2RwX251bV9wYWdlcyhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2Rw KQpAQCAtMTE5LDIxICsxMTMsMTQgQEAgc3RhdGljIGlubGluZSBzaXplX3QgaWJfdW1lbV9vZHBf bnVtX3BhZ2VzKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHApCiAKICNpZmRlZiBDT05GSUdf SU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HCiAKLXN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0g ewotCXN0cnVjdCBtbXVfbm90aWZpZXIgbW47Ci0Jc3RydWN0IHBpZCAqdGdpZDsKLQotCXN0cnVj dCByYl9yb290X2NhY2hlZCB1bWVtX3RyZWU7Ci0JLyogUHJvdGVjdHMgdW1lbV90cmVlICovCi0J c3RydWN0IHJ3X3NlbWFwaG9yZSB1bWVtX3J3c2VtOwotfTsKLQogc3RydWN0IGliX3VtZW1fb2Rw ICppYl91bWVtX29kcF9nZXQoc3RydWN0IGliX3VkYXRhICp1ZGF0YSwgdW5zaWduZWQgbG9uZyBh ZGRyLAotCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGFjY2Vzcyk7CisJCQkJICAgIHNpemVfdCBz aXplLCBpbnQgYWNjZXNzLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgbW11X3JhbmdlX25vdGlmaWVy X29wcyAqb3BzKTsKIHN0cnVjdCBpYl91bWVtX29kcCAqaWJfdW1lbV9vZHBfYWxsb2NfaW1wbGlj aXQoc3RydWN0IGliX3VkYXRhICp1ZGF0YSwKIAkJCQkJICAgICAgIGludCBhY2Nlc3MpOwotc3Ry dWN0IGliX3VtZW1fb2RwICppYl91bWVtX29kcF9hbGxvY19jaGlsZChzdHJ1Y3QgaWJfdW1lbV9v ZHAgKnJvb3RfdW1lbSwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IHNpemUp Oworc3RydWN0IGliX3VtZW1fb2RwICoKK2liX3VtZW1fb2RwX2FsbG9jX2NoaWxkKHN0cnVjdCBp Yl91bWVtX29kcCAqcm9vdF91bWVtLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQlzaXplX3Qgc2l6 ZSwgY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMgKm9wcyk7CiB2b2lkIGliX3Vt ZW1fb2RwX3JlbGVhc2Uoc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCk7CiAKIGludCBpYl91 bWVtX29kcF9tYXBfZG1hX3BhZ2VzKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCBz dGFydF9vZmZzZXQsCkBAIC0xNDMsMzkgKzEzMCwxMSBAQCBpbnQgaWJfdW1lbV9vZHBfbWFwX2Rt YV9wYWdlcyhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1NjQgc3RhcnRfb2Zmc2V0LAog dm9pZCBpYl91bWVtX29kcF91bm1hcF9kbWFfcGFnZXMoc3RydWN0IGliX3VtZW1fb2RwICp1bWVt X29kcCwgdTY0IHN0YXJ0X29mZnNldCwKIAkJCQkgdTY0IGJvdW5kKTsKIAotdHlwZWRlZiBpbnQg KCp1bWVtX2NhbGxfYmFjaykoc3RydWN0IGliX3VtZW1fb2RwICppdGVtLCB1NjQgc3RhcnQsIHU2 NCBlbmQsCi0JCQkgICAgICB2b2lkICpjb29raWUpOwotLyoKLSAqIENhbGwgdGhlIGNhbGxiYWNr IG9uIGVhY2ggaWJfdW1lbSBpbiB0aGUgcmFuZ2UuIFJldHVybnMgdGhlIGxvZ2ljYWwgb3Igb2YK LSAqIHRoZSByZXR1cm4gdmFsdWVzIG9mIHRoZSBmdW5jdGlvbnMgY2FsbGVkLgotICovCi1pbnQg cmJ0X2liX3VtZW1fZm9yX2VhY2hfaW5fcmFuZ2Uoc3RydWN0IHJiX3Jvb3RfY2FjaGVkICpyb290 LAotCQkJCSAgdTY0IHN0YXJ0LCB1NjQgZW5kLAotCQkJCSAgdW1lbV9jYWxsX2JhY2sgY2IsCi0J CQkJICBib29sIGJsb2NrYWJsZSwgdm9pZCAqY29va2llKTsKLQotc3RhdGljIGlubGluZSBpbnQg aWJfdW1lbV9tbXVfbm90aWZpZXJfcmV0cnkoc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCwK LQkJCQkJICAgICB1bnNpZ25lZCBsb25nIG1tdV9zZXEpCi17Ci0JLyoKLQkgKiBUaGlzIGNvZGUg aXMgc3Ryb25nbHkgYmFzZWQgb24gdGhlIEtWTSBjb2RlIGZyb20KLQkgKiBtbXVfbm90aWZpZXJf cmV0cnkuIFNob3VsZCBiZSBjYWxsZWQgd2l0aAotCSAqIHRoZSByZWxldmFudCBsb2NrcyB0YWtl biAodW1lbV9vZHAtPnVtZW1fbXV0ZXgKLQkgKiBhbmQgdGhlIHVjb250ZXh0IHVtZW1fbXV0ZXgg c2VtYXBob3JlIGxvY2tlZCBmb3IgcmVhZCkuCi0JICovCi0KLQlpZiAodW5saWtlbHkodW1lbV9v ZHAtPm5vdGlmaWVyc19jb3VudCkpCi0JCXJldHVybiAxOwotCWlmICh1bWVtX29kcC0+bm90aWZp ZXJzX3NlcSAhPSBtbXVfc2VxKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogI2Vsc2Ug LyogQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lORyAqLwogCi1zdGF0aWMgaW5saW5l IHN0cnVjdCBpYl91bWVtX29kcCAqaWJfdW1lbV9vZHBfZ2V0KHN0cnVjdCBpYl91ZGF0YSAqdWRh dGEsCi0JCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJCSAgc2l6ZV90IHNpemUsIGlu dCBhY2Nlc3MpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl91bWVtX29kcCAqCitpYl91bWVtX29k cF9nZXQoc3RydWN0IGliX3VkYXRhICp1ZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qg c2l6ZSwKKwkJaW50IGFjY2VzcywgY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMg Km9wcykKIHsKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1 ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggNmE0N2Jh ODVjNTRjMTEuLjJjMzBjODU5YWUwZDEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVy YnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtMjQyMiw4ICsyNDIyLDYgQEAg c3RydWN0IGliX2RldmljZV9vcHMgewogCQkJICAgIHU2NCBpb3ZhKTsKIAlpbnQgKCp1bm1hcF9m bXIpKHN0cnVjdCBsaXN0X2hlYWQgKmZtcl9saXN0KTsKIAlpbnQgKCpkZWFsbG9jX2Ztcikoc3Ry dWN0IGliX2ZtciAqZm1yKTsKLQl2b2lkICgqaW52YWxpZGF0ZV9yYW5nZSkoc3RydWN0IGliX3Vt ZW1fb2RwICp1bWVtX29kcCwKLQkJCQkgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9u ZyBlbmQpOwogCWludCAoKmF0dGFjaF9tY2FzdCkoc3RydWN0IGliX3FwICpxcCwgdW5pb24gaWJf Z2lkICpnaWQsIHUxNiBsaWQpOwogCWludCAoKmRldGFjaF9tY2FzdCkoc3RydWN0IGliX3FwICpx cCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpOwogCXN0cnVjdCBpYl94cmNkICooKmFsbG9j X3hyY2QpKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKLS0gCjIuMjMuMAoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxp c3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj dC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw= 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 0BD93CA9EC0 for ; Mon, 28 Oct 2019 20:17:25 +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 E44BC21721 for ; Mon, 28 Oct 2019 20:17:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E44BC21721 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 D07EC6EA14; Mon, 28 Oct 2019 20:17:18 +0000 (UTC) Received: from mail-qt1-x841.google.com (mail-qt1-x841.google.com [IPv6:2607:f8b0:4864:20::841]) by gabe.freedesktop.org (Postfix) with ESMTPS id 774F089DE6 for ; Mon, 28 Oct 2019 20:10:49 +0000 (UTC) Received: by mail-qt1-x841.google.com with SMTP id o49so16510956qta.7 for ; Mon, 28 Oct 2019 13:10:49 -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=p2sO9HeBGe55xT+CHTSwfg39F5YjFhzL8wq3LxZbe6w=; b=JzyMubKX1gqn8rphYw4RgvUVtJyerpQkUap1nWRqCOVIpWVlv3rjyHjI0VZlulioS3 XHjZZInlIBbjnkoO/pAPonJpZnsfu9fEVPCHC4J6GFjh/XofVUB2UsSqnG+ke0Q0Ia+h 2P5V9mt6aWwqu05VU5xlKZlTmVsK7eFQkVyVsF2sZMSsXDoYsk/I/pfVRYuxC4AIIrLs iAcamOCzTrtULh+7vuDHfu1cGGWwd3dgiuSQuevl8j+GhPVeH9xPCPZdD/uCO130IdRm qnFH3XtAB1SKP1YvX1+Opt33VsEryJ+CunVrjXX/tPY4CYFq/UiQ/IhKiX0cVc7sl3M0 r+UA== X-Gm-Message-State: APjAAAVJJWkeNWdUo0PFINy9ksyFWRDvoS5cVjfuJ7BkQwwcP1Y8XENP +mmCqsfeuB+D44An7zM105+0iyl0fgc= X-Google-Smtp-Source: APXvYqxk4tf4YFjeg5NLxezOvsTX/rHJRfFXNqIANjhcGIKgcc8HiyI9ezh/HHJDJoeromDlsXvJEg== X-Received: by 2002:a05:6214:2aa:: with SMTP id m10mr17377906qvv.224.1572293448000; Mon, 28 Oct 2019 13:10:48 -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 t127sm6775397qkf.43.2019.10.28.13.10.43 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 28 Oct 2019 13:10:43 -0700 (PDT) Received: from jgg by mlx.ziepe.ca with local (Exim 4.90_1) (envelope-from ) id 1iPBLf-0001gS-8N; 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 05/15] RDMA/odp: Use mmu_range_notifier_insert() Date: Mon, 28 Oct 2019 17:10:22 -0300 Message-Id: <20191028201032.6352-6-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=p2sO9HeBGe55xT+CHTSwfg39F5YjFhzL8wq3LxZbe6w=; b=cXvTHdIKZK55cQQin8dGci427hTRiUockWlEy6Y0ICdq582fHBOfb30HIaxmsyyS/p VO48joMXKjHRdPQsTx7NYVCc27xyHbl0ljkVD1bnlqKgp2mbaxe+/vNwxle/N375wmN7 LLiLx61YfjoYug+9VNzD6w4Vz4EQxLAkMLyXTDa9JOOn86fAWGzlUS2JLAhQ5bmecZZ/ a5+OzqMmMbmY9WYvRiligl1TnCVrKxVwZlm0cjHkBnOrOSpHAla+MEOnGgkh4pOfoVMO 36bGxek2HKVb0rJgSusQ9TNBqCn6uiIo6I8hU9X6aLkg+2p0L2e5guBKt+QltMY6afCu /2hw== 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: <20191028201022.vVAgMA7No0dOYT2BAuSMDNUP-sFyF6BPQD91SKEJl8s@z> RnJvbTogSmFzb24gR3VudGhvcnBlIDxqZ2dAbWVsbGFub3guY29tPgoKUmVwbGFjZSB0aGUgaW50 ZXJuYWwgaW50ZXJ2YWwgdHJlZSBiYXNlZCBtbXUgbm90aWZpZXIgd2l0aCB0aGUgbmV3IGNvbW1v bgptbXVfcmFuZ2Vfbm90aWZpZXJfaW5zZXJ0KCkgQVBJLiBUaGlzIHJlbW92ZXMgYSBsb3Qgb2Yg Y29kZSBhbmQgZml4ZXMgYQpkZWFkbG9jayB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gT0RQOgoK IHphcF9wYWdlX3JhbmdlKCkKICBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgp CiAgIFsuLl0KICAgIGliX3VtZW1fbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgpCiAg ICAgICBkb3duX3JlYWQoJnBlcl9tbS0+dW1lbV9yd3NlbSkKICB1bm1hcF9zaW5nbGVfdm1hKCkK ICAgIFsuLl0KICAgICAgX19zcGxpdF9odWdlX3BhZ2VfcG1kKCkKICAgICAgICBtbXVfbm90aWZp ZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgpCiAgICAgICAgWy4uXQogICAgICAgICAgIGliX3Vt ZW1fbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgpCiAgICAgICAgICAgICAgZG93bl9y ZWFkKCZwZXJfbW0tPnVtZW1fcndzZW0pICAgLy8gREVBRExPQ0sKCiAgICAgICAgbW11X25vdGlm aWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkKICAgICAgICAgICB1cF9yZWFkKCZwZXJfbW0tPnVt ZW1fcndzZW0pCiAgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkKICAgICB1cF9y ZWFkKCZwZXJfbW0tPnVtZW1fcndzZW0pCgpUaGUgdW1lbV9yd3NlbSBpcyBoZWxkIGFjcm9zcyB0 aGUgcmFuZ2Vfc3RhcnQvZW5kIGFzIHRoZSBPRFAgYWxnb3JpdGhtIGZvcgppbnZhbGlkYXRlX3Jh bmdlX2VuZCBjYW5ub3QgdG9sZXJhdGUgY2hhbmdlcyB0byB0aGUgaW50ZXJ2YWwKdHJlZS4gSG93 ZXZlciwgZHVlIHRvIHRoZSBuZXN0ZWQgaW52YWxpZGF0aW9uIHJlZ2lvbnMgdGhlIHNlY29uZApk b3duX3JlYWQoKSBjYW4gZGVhZGxvY2sgaWYgdGhlcmUgYXJlIGNvbXBldGluZyB3cml0ZXJzLiBU aGUgbmV3IGNvcmUgY29kZQpwcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBzY2hlbWUgdG8gc29sdmUg dGhpcyBwcm9ibGVtLgoKRml4ZXM6IGNhNzQ4YzM5ZWEzZiAoIlJETUEvdW1lbTogR2V0IHJpZCBv ZiBwZXJfbW0tPm5vdGlmaWVyX2NvdW50IikKU2lnbmVkLW9mZi1ieTogSmFzb24gR3VudGhvcnBl IDxqZ2dAbWVsbGFub3guY29tPgotLS0KIGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5j ICAgICB8ICAgMSAtCiBkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jICAgfCAyODgg KysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9t bHg1X2liLmggfCAgIDcgKy0KIGRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMgICAgICB8 ICAgMyArLQogZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMgICAgIHwgIDUwICsrKy0t CiBpbmNsdWRlL3JkbWEvaWJfdW1lbV9vZHAuaCAgICAgICAgICAgfCAgNjUgKystLS0tCiBpbmNs dWRlL3JkbWEvaWJfdmVyYnMuaCAgICAgICAgICAgICAgfCAgIDIgLQogNyBmaWxlcyBjaGFuZ2Vk LCA2OSBpbnNlcnRpb25zKCspLCAzNDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZp Y2UuYwppbmRleCAyZGQyY2ZlOWI1NjEzNi4uYWM3OTI0YjNjNzNhYmUgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9j b3JlL2RldmljZS5jCkBAIC0yNjE3LDcgKzI2MTcsNiBAQCB2b2lkIGliX3NldF9kZXZpY2Vfb3Bz KHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGliX2RldmljZV9vcHMgKm9wcykK IAlTRVRfREVWSUNFX09QKGRldl9vcHMsIGdldF92Zl9jb25maWcpOwogCVNFVF9ERVZJQ0VfT1Ao ZGV2X29wcywgZ2V0X3ZmX3N0YXRzKTsKIAlTRVRfREVWSUNFX09QKGRldl9vcHMsIGluaXRfcG9y dCk7Ci0JU0VUX0RFVklDRV9PUChkZXZfb3BzLCBpbnZhbGlkYXRlX3JhbmdlKTsKIAlTRVRfREVW SUNFX09QKGRldl9vcHMsIGl3X2FjY2VwdCk7CiAJU0VUX0RFVklDRV9PUChkZXZfb3BzLCBpd19h ZGRfcmVmKTsKIAlTRVRfREVWSUNFX09QKGRldl9vcHMsIGl3X2Nvbm5lY3QpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYyBiL2RyaXZlcnMvaW5maW5pYmFu ZC9jb3JlL3VtZW1fb2RwLmMKaW5kZXggZDdkNWZhZGYwODk5YWQuLjYxMzJiODEyN2U4NDM1IDEw MDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jCisrKyBiL2RyaXZl cnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMKQEAgLTQ4LDE5NyArNDgsMzIgQEAKIAogI2lu Y2x1ZGUgInV2ZXJicy5oIgogCi1zdGF0aWMgdm9pZCBpYl91bWVtX25vdGlmaWVyX3N0YXJ0X2Fj Y291bnQoc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCkKLXsKLQltdXRleF9sb2NrKCZ1bWVt X29kcC0+dW1lbV9tdXRleCk7Ci0JaWYgKHVtZW1fb2RwLT5ub3RpZmllcnNfY291bnQrKyA9PSAw KQotCQkvKgotCQkgKiBJbml0aWFsaXplIHRoZSBjb21wbGV0aW9uIG9iamVjdCBmb3Igd2FpdGlu ZyBvbgotCQkgKiBub3RpZmllcnMuIFNpbmNlIG5vdGlmaWVyX2NvdW50IGlzIHplcm8sIG5vIG9u ZSBzaG91bGQgYmUKLQkJICogd2FpdGluZyByaWdodCBub3cuCi0JCSAqLwotCQlyZWluaXRfY29t cGxldGlvbigmdW1lbV9vZHAtPm5vdGlmaWVyX2NvbXBsZXRpb24pOwotCW11dGV4X3VubG9jaygm dW1lbV9vZHAtPnVtZW1fbXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCBpYl91bWVtX25vdGlmaWVy X2VuZF9hY2NvdW50KHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHApCi17Ci0JbXV0ZXhfbG9j aygmdW1lbV9vZHAtPnVtZW1fbXV0ZXgpOwotCS8qCi0JICogVGhpcyBzZXF1ZW5jZSBpbmNyZWFz ZSB3aWxsIG5vdGlmeSB0aGUgUVAgcGFnZSBmYXVsdCB0aGF0IHRoZSBwYWdlCi0JICogdGhhdCBp cyBnb2luZyB0byBiZSBtYXBwZWQgaW4gdGhlIHNwdGUgY291bGQgaGF2ZSBiZWVuIGZyZWVkLgot CSAqLwotCSsrdW1lbV9vZHAtPm5vdGlmaWVyc19zZXE7Ci0JaWYgKC0tdW1lbV9vZHAtPm5vdGlm aWVyc19jb3VudCA9PSAwKQotCQljb21wbGV0ZV9hbGwoJnVtZW1fb2RwLT5ub3RpZmllcl9jb21w bGV0aW9uKTsKLQltdXRleF91bmxvY2soJnVtZW1fb2RwLT51bWVtX211dGV4KTsKLX0KLQotc3Rh dGljIHZvaWQgaWJfdW1lbV9ub3RpZmllcl9yZWxlYXNlKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1u LAotCQkJCSAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IGliX3Vjb250ZXh0 X3Blcl9tbSAqcGVyX21tID0KLQkJY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaWJfdWNvbnRleHRf cGVyX21tLCBtbik7Ci0Jc3RydWN0IHJiX25vZGUgKm5vZGU7Ci0KLQlkb3duX3JlYWQoJnBlcl9t bS0+dW1lbV9yd3NlbSk7Ci0JaWYgKCFwZXJfbW0tPm1uLnVzZXJzKQotCQlnb3RvIG91dDsKLQot CWZvciAobm9kZSA9IHJiX2ZpcnN0X2NhY2hlZCgmcGVyX21tLT51bWVtX3RyZWUpOyBub2RlOwot CSAgICAgbm9kZSA9IHJiX25leHQobm9kZSkpIHsKLQkJc3RydWN0IGliX3VtZW1fb2RwICp1bWVt X29kcCA9Ci0JCQlyYl9lbnRyeShub2RlLCBzdHJ1Y3QgaWJfdW1lbV9vZHAsIGludGVydmFsX3Ry ZWUucmIpOwotCi0JCS8qCi0JCSAqIEluY3JlYXNlIHRoZSBudW1iZXIgb2Ygbm90aWZpZXJzIHJ1 bm5pbmcsIHRvIHByZXZlbnQgYW55Ci0JCSAqIGZ1cnRoZXIgZmF1bHQgaGFuZGxpbmcgb24gdGhp cyBNUi4KLQkJICovCi0JCWliX3VtZW1fbm90aWZpZXJfc3RhcnRfYWNjb3VudCh1bWVtX29kcCk7 Ci0JCWNvbXBsZXRlX2FsbCgmdW1lbV9vZHAtPm5vdGlmaWVyX2NvbXBsZXRpb24pOwotCQl1bWVt X29kcC0+dW1lbS5pYmRldi0+b3BzLmludmFsaWRhdGVfcmFuZ2UoCi0JCQl1bWVtX29kcCwgaWJf dW1lbV9zdGFydCh1bWVtX29kcCksCi0JCQlpYl91bWVtX2VuZCh1bWVtX29kcCkpOwotCX0KLQot b3V0OgotCXVwX3JlYWQoJnBlcl9tbS0+dW1lbV9yd3NlbSk7Ci19Ci0KLXN0YXRpYyBpbnQgaW52 YWxpZGF0ZV9yYW5nZV9zdGFydF90cmFtcG9saW5lKHN0cnVjdCBpYl91bWVtX29kcCAqaXRlbSwK LQkJCQkJICAgICB1NjQgc3RhcnQsIHU2NCBlbmQsIHZvaWQgKmNvb2tpZSkKLXsKLQlpYl91bWVt X25vdGlmaWVyX3N0YXJ0X2FjY291bnQoaXRlbSk7Ci0JaXRlbS0+dW1lbS5pYmRldi0+b3BzLmlu dmFsaWRhdGVfcmFuZ2UoaXRlbSwgc3RhcnQsIGVuZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyBpbnQgaWJfdW1lbV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVf bm90aWZpZXIgKm1uLAotCQkJCWNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdl KQotewotCXN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0gKnBlcl9tbSA9Ci0JCWNvbnRhaW5lcl9v Zihtbiwgc3RydWN0IGliX3Vjb250ZXh0X3Blcl9tbSwgbW4pOwotCWludCByYzsKLQotCWlmICht bXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSkKLQkJZG93bl9yZWFkKCZwZXJfbW0t PnVtZW1fcndzZW0pOwotCWVsc2UgaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmcGVyX21tLT51bWVt X3J3c2VtKSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlpZiAoIXBlcl9tbS0+bW4udXNlcnMpIHsK LQkJdXBfcmVhZCgmcGVyX21tLT51bWVtX3J3c2VtKTsKLQkJLyoKLQkJICogQXQgdGhpcyBwb2lu dCB1c2VycyBpcyBwZXJtYW5lbnRseSB6ZXJvIGFuZCB2aXNpYmxlIHRvIHRoaXMKLQkJICogQ1BV IHdpdGhvdXQgYSBsb2NrLCB0aGF0IGZhY3QgaXMgcmVsaWVkIG9uIHRvIHNraXAgdGhlIHVubG9j awotCQkgKiBpbiByYW5nZV9lbmQuCi0JCSAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyYyA9IHJi dF9pYl91bWVtX2Zvcl9lYWNoX2luX3JhbmdlKCZwZXJfbW0tPnVtZW1fdHJlZSwgcmFuZ2UtPnN0 YXJ0LAotCQkJCQkgICByYW5nZS0+ZW5kLAotCQkJCQkgICBpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0 X3RyYW1wb2xpbmUsCi0JCQkJCSAgIG1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2Up LAotCQkJCQkgICBOVUxMKTsKLQlpZiAocmMpCi0JCXVwX3JlYWQoJnBlcl9tbS0+dW1lbV9yd3Nl bSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGludmFsaWRhdGVfcmFuZ2VfZW5kX3Ry YW1wb2xpbmUoc3RydWN0IGliX3VtZW1fb2RwICppdGVtLCB1NjQgc3RhcnQsCi0JCQkJCSAgIHU2 NCBlbmQsIHZvaWQgKmNvb2tpZSkKLXsKLQlpYl91bWVtX25vdGlmaWVyX2VuZF9hY2NvdW50KGl0 ZW0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpYl91bWVtX25vdGlmaWVyX2ludmFs aWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAotCQkJCWNvbnN0IHN0cnVj dCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKQotewotCXN0cnVjdCBpYl91Y29udGV4dF9wZXJf bW0gKnBlcl9tbSA9Ci0JCWNvbnRhaW5lcl9vZihtbiwgc3RydWN0IGliX3Vjb250ZXh0X3Blcl9t bSwgbW4pOwotCi0JaWYgKHVubGlrZWx5KCFwZXJfbW0tPm1uLnVzZXJzKSkKLQkJcmV0dXJuOwot Ci0JcmJ0X2liX3VtZW1fZm9yX2VhY2hfaW5fcmFuZ2UoJnBlcl9tbS0+dW1lbV90cmVlLCByYW5n ZS0+c3RhcnQsCi0JCQkJICAgICAgcmFuZ2UtPmVuZCwKLQkJCQkgICAgICBpbnZhbGlkYXRlX3Jh bmdlX2VuZF90cmFtcG9saW5lLCB0cnVlLCBOVUxMKTsKLQl1cF9yZWFkKCZwZXJfbW0tPnVtZW1f cndzZW0pOwotfQotCi1zdGF0aWMgc3RydWN0IG1tdV9ub3RpZmllciAqaWJfdW1lbV9hbGxvY19u b3RpZmllcihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlzdHJ1Y3QgaWJfdWNvbnRleHRfcGVy X21tICpwZXJfbW07Ci0KLQlwZXJfbW0gPSBremFsbG9jKHNpemVvZigqcGVyX21tKSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFwZXJfbW0pCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JcGVy X21tLT51bWVtX3RyZWUgPSBSQl9ST09UX0NBQ0hFRDsKLQlpbml0X3J3c2VtKCZwZXJfbW0tPnVt ZW1fcndzZW0pOwotCi0JV0FSTl9PTihtbSAhPSBjdXJyZW50LT5tbSk7Ci0JcmN1X3JlYWRfbG9j aygpOwotCXBlcl9tbS0+dGdpZCA9IGdldF90YXNrX3BpZChjdXJyZW50LT5ncm91cF9sZWFkZXIs IFBJRFRZUEVfUElEKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gJnBlcl9tbS0+bW47 Ci19Ci0KLXN0YXRpYyB2b2lkIGliX3VtZW1fZnJlZV9ub3RpZmllcihzdHJ1Y3QgbW11X25vdGlm aWVyICptbikKLXsKLQlzdHJ1Y3QgaWJfdWNvbnRleHRfcGVyX21tICpwZXJfbW0gPQotCQljb250 YWluZXJfb2YobW4sIHN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0sIG1uKTsKLQotCVdBUk5fT04o IVJCX0VNUFRZX1JPT1QoJnBlcl9tbS0+dW1lbV90cmVlLnJiX3Jvb3QpKTsKLQotCXB1dF9waWQo cGVyX21tLT50Z2lkKTsKLQlrZnJlZShwZXJfbW0pOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IG1tdV9ub3RpZmllcl9vcHMgaWJfdW1lbV9ub3RpZmllcnMgPSB7Ci0JLnJlbGVhc2UgICAgICAg ICAgICAgICAgICAgID0gaWJfdW1lbV9ub3RpZmllcl9yZWxlYXNlLAotCS5pbnZhbGlkYXRlX3Jh bmdlX3N0YXJ0ICAgICA9IGliX3VtZW1fbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCwK LQkuaW52YWxpZGF0ZV9yYW5nZV9lbmQgICAgICAgPSBpYl91bWVtX25vdGlmaWVyX2ludmFsaWRh dGVfcmFuZ2VfZW5kLAotCS5hbGxvY19ub3RpZmllcgkJICAgID0gaWJfdW1lbV9hbGxvY19ub3Rp ZmllciwKLQkuZnJlZV9ub3RpZmllcgkJICAgID0gaWJfdW1lbV9mcmVlX25vdGlmaWVyLAotfTsK LQogc3RhdGljIGlubGluZSBpbnQgaWJfaW5pdF91bWVtX29kcChzdHJ1Y3QgaWJfdW1lbV9vZHAg KnVtZW1fb2RwKQogewotCXN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0gKnBlcl9tbTsKLQlzdHJ1 Y3QgbW11X25vdGlmaWVyICptbjsKIAlpbnQgcmV0OwogCiAJdW1lbV9vZHAtPnVtZW0uaXNfb2Rw ID0gMTsKKwltdXRleF9pbml0KCZ1bWVtX29kcC0+dW1lbV9tdXRleCk7CisKIAlpZiAoIXVtZW1f b2RwLT5pc19pbXBsaWNpdF9vZHApIHsKIAkJc2l6ZV90IHBhZ2Vfc2l6ZSA9IDFVTCA8PCB1bWVt X29kcC0+cGFnZV9zaGlmdDsKKwkJdW5zaWduZWQgbG9uZyBzdGFydDsKKwkJdW5zaWduZWQgbG9u ZyBlbmQ7CiAJCXNpemVfdCBwYWdlczsKIAotCQl1bWVtX29kcC0+aW50ZXJ2YWxfdHJlZS5zdGFy dCA9Ci0JCQlBTElHTl9ET1dOKHVtZW1fb2RwLT51bWVtLmFkZHJlc3MsIHBhZ2Vfc2l6ZSk7CisJ CXN0YXJ0ID0gQUxJR05fRE9XTih1bWVtX29kcC0+dW1lbS5hZGRyZXNzLCBwYWdlX3NpemUpOwog CQlpZiAoY2hlY2tfYWRkX292ZXJmbG93KHVtZW1fb2RwLT51bWVtLmFkZHJlc3MsCiAJCQkJICAg ICAgICh1bnNpZ25lZCBsb25nKXVtZW1fb2RwLT51bWVtLmxlbmd0aCwKLQkJCQkgICAgICAgJnVt ZW1fb2RwLT5pbnRlcnZhbF90cmVlLmxhc3QpKQorCQkJCSAgICAgICAmZW5kKSkKIAkJCXJldHVy biAtRU9WRVJGTE9XOwotCQl1bWVtX29kcC0+aW50ZXJ2YWxfdHJlZS5sYXN0ID0KLQkJCUFMSUdO KHVtZW1fb2RwLT5pbnRlcnZhbF90cmVlLmxhc3QsIHBhZ2Vfc2l6ZSk7Ci0JCWlmICh1bmxpa2Vs eSh1bWVtX29kcC0+aW50ZXJ2YWxfdHJlZS5sYXN0IDwgcGFnZV9zaXplKSkKKwkJZW5kID0gQUxJ R04oZW5kLCBwYWdlX3NpemUpOworCQlpZiAodW5saWtlbHkoZW5kIDwgcGFnZV9zaXplKSkKIAkJ CXJldHVybiAtRU9WRVJGTE9XOwogCi0JCXBhZ2VzID0gKHVtZW1fb2RwLT5pbnRlcnZhbF90cmVl Lmxhc3QgLQotCQkJIHVtZW1fb2RwLT5pbnRlcnZhbF90cmVlLnN0YXJ0KSA+PgotCQkJdW1lbV9v ZHAtPnBhZ2Vfc2hpZnQ7CisJCXBhZ2VzID0gKGVuZCAtIHN0YXJ0KSA+PiB1bWVtX29kcC0+cGFn ZV9zaGlmdDsKIAkJaWYgKCFwYWdlcykKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qCi0JCSAq IE5vdGUgdGhhdCB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVydmFscyBpbiB0aGUKLQkJ ICogaW50ZXJ2YWwgdHJlZSBjb25zaWRlcnMgdGhlIGVuZGluZyBwb2ludCBhcyBjb250YWluZWQg aW4KLQkJICogdGhlIGludGVydmFsLgotCQkgKi8KLQkJdW1lbV9vZHAtPmludGVydmFsX3RyZWUu bGFzdC0tOwotCiAJCXVtZW1fb2RwLT5wYWdlX2xpc3QgPSBrdmNhbGxvYygKIAkJCXBhZ2VzLCBz aXplb2YoKnVtZW1fb2RwLT5wYWdlX2xpc3QpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF1bWVtX29k cC0+cGFnZV9saXN0KQpAQCAtMjUwLDI2ICs4NSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBpYl9p bml0X3VtZW1fb2RwKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHApCiAJCQlyZXQgPSAtRU5P TUVNOwogCQkJZ290byBvdXRfcGFnZV9saXN0OwogCQl9Ci0JfQogCi0JbW4gPSBtbXVfbm90aWZp ZXJfZ2V0KCZpYl91bWVtX25vdGlmaWVycywgdW1lbV9vZHAtPnVtZW0ub3duaW5nX21tKTsKLQlp ZiAoSVNfRVJSKG1uKSkgewotCQlyZXQgPSBQVFJfRVJSKG1uKTsKLQkJZ290byBvdXRfZG1hX2xp c3Q7Ci0JfQotCXVtZW1fb2RwLT5wZXJfbW0gPSBwZXJfbW0gPQotCQljb250YWluZXJfb2YobW4s IHN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0sIG1uKTsKLQotCW11dGV4X2luaXQoJnVtZW1fb2Rw LT51bWVtX211dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJnVtZW1fb2RwLT5ub3RpZmllcl9jb21w bGV0aW9uKTsKKwkJcmV0ID0gbW11X3JhbmdlX25vdGlmaWVyX2luc2VydCgmdW1lbV9vZHAtPm5v dGlmaWVyLCBzdGFydCwKKwkJCQkJCWVuZCAtIHN0YXJ0LCBjdXJyZW50LT5tbSk7CisJCWlmIChy ZXQpCisJCQlnb3RvIG91dF9kbWFfbGlzdDsKIAotCWlmICghdW1lbV9vZHAtPmlzX2ltcGxpY2l0 X29kcCkgewotCQlkb3duX3dyaXRlKCZwZXJfbW0tPnVtZW1fcndzZW0pOwotCQlpbnRlcnZhbF90 cmVlX2luc2VydCgmdW1lbV9vZHAtPmludGVydmFsX3RyZWUsCi0JCQkJICAgICAmcGVyX21tLT51 bWVtX3RyZWUpOwotCQl1cF93cml0ZSgmcGVyX21tLT51bWVtX3J3c2VtKTsKKwkJdW1lbV9vZHAt PnRnaWQgPQorCQkJZ2V0X3Rhc2tfcGlkKGN1cnJlbnQtPmdyb3VwX2xlYWRlciwgUElEVFlQRV9Q SUQpOwogCX0KLQltbWdyYWIodW1lbV9vZHAtPnVtZW0ub3duaW5nX21tKTsKIAogCXJldHVybiAw OwogCkBAIC0yOTAsOCArMTE0LDggQEAgc3RhdGljIGlubGluZSBpbnQgaWJfaW5pdF91bWVtX29k cChzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwKQogICogQHVkYXRhOiB1ZGF0YSBmcm9tIHRo ZSBzeXNjYWxsIGJlaW5nIHVzZWQgdG8gY3JlYXRlIHRoZSB1bWVtCiAgKiBAYWNjZXNzOiBpYl9y ZWdfbXIgYWNjZXNzIGZsYWdzCiAgKi8KLXN0cnVjdCBpYl91bWVtX29kcCAqaWJfdW1lbV9vZHBf YWxsb2NfaW1wbGljaXQoc3RydWN0IGliX3VkYXRhICp1ZGF0YSwKLQkJCQkJICAgICAgIGludCBh Y2Nlc3MpCitzdHJ1Y3QgaWJfdW1lbV9vZHAgKgoraWJfdW1lbV9vZHBfYWxsb2NfaW1wbGljaXQo c3RydWN0IGliX3VkYXRhICp1ZGF0YSwgaW50IGFjY2VzcykKIHsKIAlzdHJ1Y3QgaWJfdWNvbnRl eHQgKmNvbnRleHQgPQogCQljb250YWluZXJfb2YodWRhdGEsIHN0cnVjdCB1dmVyYnNfYXR0cl9i dW5kbGUsIGRyaXZlcl91ZGF0YSkKQEAgLTMwNSw4ICsxMjksNiBAQCBzdHJ1Y3QgaWJfdW1lbV9v ZHAgKmliX3VtZW1fb2RwX2FsbG9jX2ltcGxpY2l0KHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEsCiAK IAlpZiAoIWNvbnRleHQpCiAJCXJldHVybiBFUlJfUFRSKC1FSU8pOwotCWlmIChXQVJOX09OX09O Q0UoIWNvbnRleHQtPmRldmljZS0+b3BzLmludmFsaWRhdGVfcmFuZ2UpKQotCQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKIAogCXVtZW1fb2RwID0ga3phbGxvYyhzaXplb2YoKnVtZW1fb2RwKSwg R0ZQX0tFUk5FTCk7CiAJaWYgKCF1bWVtX29kcCkKQEAgLTMzNiw4ICsxNTgsOSBAQCBFWFBPUlRf U1lNQk9MKGliX3VtZW1fb2RwX2FsbG9jX2ltcGxpY2l0KTsKICAqIEBhZGRyOiBUaGUgc3RhcnRp bmcgdXNlcnNwYWNlIFZBCiAgKiBAc2l6ZTogVGhlIGxlbmd0aCBvZiB0aGUgdXNlcnNwYWNlIFZB CiAgKi8KLXN0cnVjdCBpYl91bWVtX29kcCAqaWJfdW1lbV9vZHBfYWxsb2NfY2hpbGQoc3RydWN0 IGliX3VtZW1fb2RwICpyb290LAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qg c2l6ZSkKK3N0cnVjdCBpYl91bWVtX29kcCAqCitpYl91bWVtX29kcF9hbGxvY19jaGlsZChzdHJ1 Y3QgaWJfdW1lbV9vZHAgKnJvb3QsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCXNpemVfdCBzaXpl LCBjb25zdCBzdHJ1Y3QgbW11X3JhbmdlX25vdGlmaWVyX29wcyAqb3BzKQogewogCS8qCiAJICog Q2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgcm9vdCBjYW5ub3QgYmUgZnJlZWQgZHVyaW5nIHRoZSBj YWxsIHRvCkBAIC0zNjAsNiArMTgzLDcgQEAgc3RydWN0IGliX3VtZW1fb2RwICppYl91bWVtX29k cF9hbGxvY19jaGlsZChzdHJ1Y3QgaWJfdW1lbV9vZHAgKnJvb3QsCiAJdW1lbS0+d3JpdGFibGUg ICA9IHJvb3QtPnVtZW0ud3JpdGFibGU7CiAJdW1lbS0+b3duaW5nX21tICA9IHJvb3QtPnVtZW0u b3duaW5nX21tOwogCW9kcF9kYXRhLT5wYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDsKKwlvZHBfZGF0 YS0+bm90aWZpZXIub3BzID0gb3BzOwogCiAJcmV0ID0gaWJfaW5pdF91bWVtX29kcChvZHBfZGF0 YSk7CiAJaWYgKHJldCkgewpAQCAtMzgzLDcgKzIwNyw4IEBAIEVYUE9SVF9TWU1CT0woaWJfdW1l bV9vZHBfYWxsb2NfY2hpbGQpOwogICogY29uanVuY3Rpb24gd2l0aCBNTVUgbm90aWZpZXJzLgog ICovCiBzdHJ1Y3QgaWJfdW1lbV9vZHAgKmliX3VtZW1fb2RwX2dldChzdHJ1Y3QgaWJfdWRhdGEg KnVkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgIHNpemVfdCBzaXplLCBpbnQgYWNj ZXNzKQorCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGFjY2VzcywKKwkJCQkgICAgY29uc3Qgc3Ry dWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgaWJfdW1lbV9vZHAg KnVtZW1fb2RwOwogCXN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dDsKQEAgLTM5OCw4ICsyMjMs NyBAQCBzdHJ1Y3QgaWJfdW1lbV9vZHAgKmliX3VtZW1fb2RwX2dldChzdHJ1Y3QgaWJfdWRhdGEg KnVkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFjb250ZXh0KQogCQlyZXR1cm4gRVJS X1BUUigtRUlPKTsKIAotCWlmIChXQVJOX09OX09OQ0UoIShhY2Nlc3MgJiBJQl9BQ0NFU1NfT05f REVNQU5EKSkgfHwKLQkgICAgV0FSTl9PTl9PTkNFKCFjb250ZXh0LT5kZXZpY2UtPm9wcy5pbnZh bGlkYXRlX3JhbmdlKSkKKwlpZiAoV0FSTl9PTl9PTkNFKCEoYWNjZXNzICYgSUJfQUNDRVNTX09O X0RFTUFORCkpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCXVtZW1fb2RwID0ga3ph bGxvYyhzaXplb2Yoc3RydWN0IGliX3VtZW1fb2RwKSwgR0ZQX0tFUk5FTCk7CkBAIC00MTEsNiAr MjM1LDcgQEAgc3RydWN0IGliX3VtZW1fb2RwICppYl91bWVtX29kcF9nZXQoc3RydWN0IGliX3Vk YXRhICp1ZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXVtZW1fb2RwLT51bWVtLmFkZHJlc3Mg PSBhZGRyOwogCXVtZW1fb2RwLT51bWVtLndyaXRhYmxlID0gaWJfYWNjZXNzX3dyaXRhYmxlKGFj Y2Vzcyk7CiAJdW1lbV9vZHAtPnVtZW0ub3duaW5nX21tID0gbW0gPSBjdXJyZW50LT5tbTsKKwl1 bWVtX29kcC0+bm90aWZpZXIub3BzID0gb3BzOwogCiAJdW1lbV9vZHAtPnBhZ2Vfc2hpZnQgPSBQ QUdFX1NISUZUOwogCWlmIChhY2Nlc3MgJiBJQl9BQ0NFU1NfSFVHRVRMQikgewpAQCAtNDQyLDgg KzI2Nyw2IEBAIEVYUE9SVF9TWU1CT0woaWJfdW1lbV9vZHBfZ2V0KTsKIAogdm9pZCBpYl91bWVt X29kcF9yZWxlYXNlKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHApCiB7Ci0Jc3RydWN0IGli X3Vjb250ZXh0X3Blcl9tbSAqcGVyX21tID0gdW1lbV9vZHAtPnBlcl9tbTsKLQogCS8qCiAJICog RW5zdXJlIHRoYXQgbm8gbW9yZSBwYWdlcyBhcmUgbWFwcGVkIGluIHRoZSB1bWVtLgogCSAqCkBA IC00NTUsMjggKzI3OCwxMSBAQCB2b2lkIGliX3VtZW1fb2RwX3JlbGVhc2Uoc3RydWN0IGliX3Vt ZW1fb2RwICp1bWVtX29kcCkKIAkJaWJfdW1lbV9vZHBfdW5tYXBfZG1hX3BhZ2VzKHVtZW1fb2Rw LCBpYl91bWVtX3N0YXJ0KHVtZW1fb2RwKSwKIAkJCQkJICAgIGliX3VtZW1fZW5kKHVtZW1fb2Rw KSk7CiAJCW11dGV4X3VubG9jaygmdW1lbV9vZHAtPnVtZW1fbXV0ZXgpOworCQltbXVfcmFuZ2Vf bm90aWZpZXJfcmVtb3ZlKCZ1bWVtX29kcC0+bm90aWZpZXIpOwogCQlrdmZyZWUodW1lbV9vZHAt PmRtYV9saXN0KTsKIAkJa3ZmcmVlKHVtZW1fb2RwLT5wYWdlX2xpc3QpOworCQlwdXRfcGlkKHVt ZW1fb2RwLT50Z2lkKTsKIAl9Ci0KLQlkb3duX3dyaXRlKCZwZXJfbW0tPnVtZW1fcndzZW0pOwot CWlmICghdW1lbV9vZHAtPmlzX2ltcGxpY2l0X29kcCkgewotCQlpbnRlcnZhbF90cmVlX3JlbW92 ZSgmdW1lbV9vZHAtPmludGVydmFsX3RyZWUsCi0JCQkJICAgICAmcGVyX21tLT51bWVtX3RyZWUp OwotCQljb21wbGV0ZV9hbGwoJnVtZW1fb2RwLT5ub3RpZmllcl9jb21wbGV0aW9uKTsKLQl9Ci0J LyoKLQkgKiBOT1RFISBtbXVfbm90aWZpZXJfdW5yZWdpc3RlcigpIGNhbiBoYXBwZW4gYmV0d2Vl biBhIHN0YXJ0L2VuZAotCSAqIGNhbGxiYWNrLCByZXN1bHRpbmcgaW4gYSBtaXNzaW5nIGVuZCwg YW5kIHRodXMgYW4gdW5iYWxhbmNlZAotCSAqIGxvY2suIFRoaXMgZG9lc24ndCByZWFsbHkgbWF0 dGVyIHRvIHVzIHNpbmNlIHdlIGFyZSBhYm91dCB0byBrZnJlZQotCSAqIHRoZSBtZW1vcnkgdGhh dCBob2xkcyB0aGUgbG9jaywgaG93ZXZlciBMT0NLREVQIGRvZXNuJ3QgbGlrZSB0aGlzLgotCSAq IFRodXMgd2UgY2FsbCB0aGUgbW11X25vdGlmaWVyX3B1dCB1bmRlciB0aGUgcndzZW0gYW5kIHRl c3QgdGhlCi0JICogaW50ZXJuYWwgdXNlcnMgY291bnQgdG8gcmVsaWFibHkgc2VlIGlmIHdlIGFy ZSBwYXN0IHRoaXMgcG9pbnQuCi0JICovCi0JbW11X25vdGlmaWVyX3B1dCgmcGVyX21tLT5tbik7 Ci0JdXBfd3JpdGUoJnBlcl9tbS0+dW1lbV9yd3NlbSk7Ci0KLQltbWRyb3AodW1lbV9vZHAtPnVt ZW0ub3duaW5nX21tKTsKIAlrZnJlZSh1bWVtX29kcCk7CiB9CiBFWFBPUlRfU1lNQk9MKGliX3Vt ZW1fb2RwX3JlbGVhc2UpOwpAQCAtNTAxLDcgKzMwNyw3IEBAIEVYUE9SVF9TWU1CT0woaWJfdW1l bV9vZHBfcmVsZWFzZSk7CiAgKi8KIHN0YXRpYyBpbnQgaWJfdW1lbV9vZHBfbWFwX2RtYV9zaW5n bGVfcGFnZSgKIAkJc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCwKLQkJaW50IHBhZ2VfaW5k ZXgsCisJCXVuc2lnbmVkIGludCBwYWdlX2luZGV4LAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJ dTY0IGFjY2Vzc19tYXNrLAogCQl1bnNpZ25lZCBsb25nIGN1cnJlbnRfc2VxKQpAQCAtNTEwLDEy ICszMTYsNyBAQCBzdGF0aWMgaW50IGliX3VtZW1fb2RwX21hcF9kbWFfc2luZ2xlX3BhZ2UoCiAJ ZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAlpbnQgcmV0ID0gMDsKIAotCS8qCi0JICogTm90ZTogd2Ug YXZvaWQgd3JpdGluZyBpZiBzZXEgaXMgZGlmZmVyZW50IGZyb20gdGhlIGluaXRpYWwgc2VxLCB0 bwotCSAqIGhhbmRsZSBjYXNlIG9mIGEgcmFjaW5nIG5vdGlmaWVyLiBUaGlzIGNoZWNrIGFsc28g YWxsb3dzIHVzIHRvIGJhaWwKLQkgKiBlYXJseSBpZiB3ZSBoYXZlIGEgbm90aWZpZXIgcnVubmlu ZyBpbiBwYXJhbGxlbCB3aXRoIHVzLgotCSAqLwotCWlmIChpYl91bWVtX21tdV9ub3RpZmllcl9y ZXRyeSh1bWVtX29kcCwgY3VycmVudF9zZXEpKSB7CisJaWYgKG1tdV9yYW5nZV9jaGVja19yZXRy eSgmdW1lbV9vZHAtPm5vdGlmaWVyLCBjdXJyZW50X3NlcSkpIHsKIAkJcmV0ID0gLUVBR0FJTjsK IAkJZ290byBvdXQ7CiAJfQpAQCAtNjE4LDcgKzQxOSw3IEBAIGludCBpYl91bWVtX29kcF9tYXBf ZG1hX3BhZ2VzKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsCiAJ ICogZXhpc3RpbmcgYmV5b25kIHRoZSBsaWZldGltZSBvZiB0aGUgb3JpZ2luYXRpbmcgcHJvY2Vz cy4uIFByZXN1bWFibHkKIAkgKiBtbWdldF9ub3RfemVybyB3aWxsIGZhaWwgaW4gdGhpcyBjYXNl LgogCSAqLwotCW93bmluZ19wcm9jZXNzID0gZ2V0X3BpZF90YXNrKHVtZW1fb2RwLT5wZXJfbW0t PnRnaWQsIFBJRFRZUEVfUElEKTsKKwlvd25pbmdfcHJvY2VzcyA9IGdldF9waWRfdGFzayh1bWVt X29kcC0+dGdpZCwgUElEVFlQRV9QSUQpOwogCWlmICghb3duaW5nX3Byb2Nlc3MgfHwgIW1tZ2V0 X25vdF96ZXJvKG93bmluZ19tbSkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfcHV0 X3Rhc2s7CkBAIC03NjIsMzIgKzU2MywzIEBAIHZvaWQgaWJfdW1lbV9vZHBfdW5tYXBfZG1hX3Bh Z2VzKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB2aXJ0LAogCX0KIH0KIEVYUE9S VF9TWU1CT0woaWJfdW1lbV9vZHBfdW5tYXBfZG1hX3BhZ2VzKTsKLQotLyogQGxhc3QgaXMgbm90 IGEgcGFydCBvZiB0aGUgaW50ZXJ2YWwuIFNlZSBjb21tZW50IGZvciBmdW5jdGlvbgotICogbm9k ZV9sYXN0LgotICovCi1pbnQgcmJ0X2liX3VtZW1fZm9yX2VhY2hfaW5fcmFuZ2Uoc3RydWN0IHJi X3Jvb3RfY2FjaGVkICpyb290LAotCQkJCSAgdTY0IHN0YXJ0LCB1NjQgbGFzdCwKLQkJCQkgIHVt ZW1fY2FsbF9iYWNrIGNiLAotCQkJCSAgYm9vbCBibG9ja2FibGUsCi0JCQkJICB2b2lkICpjb29r aWUpCi17Ci0JaW50IHJldF92YWwgPSAwOwotCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKm5v ZGUsICpuZXh0OwotCXN0cnVjdCBpYl91bWVtX29kcCAqdW1lbTsKLQotCWlmICh1bmxpa2VseShz dGFydCA9PSBsYXN0KSkKLQkJcmV0dXJuIHJldF92YWw7Ci0KLQlmb3IgKG5vZGUgPSBpbnRlcnZh bF90cmVlX2l0ZXJfZmlyc3Qocm9vdCwgc3RhcnQsIGxhc3QgLSAxKTsKLQkJCW5vZGU7IG5vZGUg PSBuZXh0KSB7Ci0JCS8qIFRPRE8gbW92ZSB0aGUgYmxvY2thYmxlIGRlY2lzaW9uIHVwIHRvIHRo ZSBjYWxsYmFjayAqLwotCQlpZiAoIWJsb2NrYWJsZSkKLQkJCXJldHVybiAtRUFHQUlOOwotCQlu ZXh0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX25leHQobm9kZSwgc3RhcnQsIGxhc3QgLSAxKTsKLQkJ dW1lbSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaWJfdW1lbV9vZHAsIGludGVydmFsX3Ry ZWUpOwotCQlyZXRfdmFsID0gY2IodW1lbSwgc3RhcnQsIGxhc3QsIGNvb2tpZSkgfHwgcmV0X3Zh bDsKLQl9Ci0KLQlyZXR1cm4gcmV0X3ZhbDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5p YmFuZC9ody9tbHg1L21seDVfaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVf aWIuaAppbmRleCBmNjFkNDAwNWM2YzM3OS4uYzcxOWYwOGIzNTE2NzAgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVfaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJh bmQvaHcvbWx4NS9tbHg1X2liLmgKQEAgLTEyNjMsOCArMTI2Myw2IEBAIGludCBtbHg1X2liX29k cF9pbml0X29uZShzdHJ1Y3QgbWx4NV9pYl9kZXYgKmliZGV2KTsKIHZvaWQgbWx4NV9pYl9vZHBf Y2xlYW51cF9vbmUoc3RydWN0IG1seDVfaWJfZGV2ICppYmRldik7CiBpbnQgX19pbml0IG1seDVf aWJfb2RwX2luaXQodm9pZCk7CiB2b2lkIG1seDVfaWJfb2RwX2NsZWFudXAodm9pZCk7Ci12b2lk IG1seDVfaWJfaW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1 bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpOwogdm9pZCBt bHg1X29kcF9pbml0X21yX2NhY2hlX2VudHJ5KHN0cnVjdCBtbHg1X2NhY2hlX2VudCAqZW50KTsK IHZvaWQgbWx4NV9vZHBfcG9wdWxhdGVfa2xtKHN0cnVjdCBtbHg1X2tsbSAqcGtsbSwgc2l6ZV90 IG9mZnNldCwKIAkJCSAgIHNpemVfdCBuZW50cmllcywgc3RydWN0IG1seDVfaWJfbXIgKm1yLCBp bnQgZmxhZ3MpOwpAQCAtMTI5NCwxMSArMTI5MiwxMCBAQCBtbHg1X2liX2FkdmlzZV9tcl9wcmVm ZXRjaChzdHJ1Y3QgaWJfcGQgKnBkLAogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KLXN0YXRp YyBpbmxpbmUgdm9pZCBtbHg1X2liX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGliX3VtZW1fb2Rw ICp1bWVtX29kcCwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCSAgICB1bnNp Z25lZCBsb25nIGVuZCl7fTsKICNlbmRpZiAvKiBDT05GSUdfSU5GSU5JQkFORF9PTl9ERU1BTkRf UEFHSU5HICovCiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbW11X3JhbmdlX25vdGlmaWVyX29wcyBt bHg1X21uX29wczsKKwogLyogTmVlZGVkIGZvciByZXAgcHJvZmlsZSAqLwogdm9pZCBfX21seDVf aWJfcmVtb3ZlKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LAogCQkgICAgICBjb25zdCBzdHJ1Y3Qg bWx4NV9pYl9wcm9maWxlICpwcm9maWxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5k L2h3L21seDUvbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMKaW5kZXggMTk5 Zjc5NTlhYWE1MTAuLmZiZTMxODMwYjIyODA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJh bmQvaHcvbWx4NS9tci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMKQEAg LTc0Myw3ICs3NDMsOCBAQCBzdGF0aWMgaW50IG1yX3VtZW1fZ2V0KHN0cnVjdCBtbHg1X2liX2Rl diAqZGV2LCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhLAogCWlmIChhY2Nlc3NfZmxhZ3MgJiBJQl9B Q0NFU1NfT05fREVNQU5EKSB7CiAJCXN0cnVjdCBpYl91bWVtX29kcCAqb2RwOwogCi0JCW9kcCA9 IGliX3VtZW1fb2RwX2dldCh1ZGF0YSwgc3RhcnQsIGxlbmd0aCwgYWNjZXNzX2ZsYWdzKTsKKwkJ b2RwID0gaWJfdW1lbV9vZHBfZ2V0KHVkYXRhLCBzdGFydCwgbGVuZ3RoLCBhY2Nlc3NfZmxhZ3Ms CisJCQkJICAgICAgJm1seDVfbW5fb3BzKTsKIAkJaWYgKElTX0VSUihvZHApKSB7CiAJCQltbHg1 X2liX2RiZyhkZXYsICJ1bWVtIGdldCBmYWlsZWQgKCVsZClcbiIsCiAJCQkJICAgIFBUUl9FUlIo b2RwKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuYyBiL2Ry aXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jCmluZGV4IGJjZmMwOTg0NjY5NzdlLi5mNzEz ZWI4MmVlZWFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMK KysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMKQEAgLTI0MSwxNyArMjQxLDI2 IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdW51c2VkX2ltcGxpY2l0X2NoaWxkX21yKHN0cnVjdCBt bHg1X2liX21yICptcikKIAl4YV91bmxvY2soJmltci0+aW1wbGljaXRfY2hpbGRyZW4pOwogfQog Ci12b2lkIG1seDVfaWJfaW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1f b2RwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpCitz dGF0aWMgYm9vbCBtbHg1X2liX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IG1tdV9yYW5nZV9ub3Rp ZmllciAqbXJuLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFu Z2UsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGN1cl9zZXEpCiB7CisJc3RydWN0IGliX3VtZW1f b2RwICp1bWVtX29kcCA9CisJCWNvbnRhaW5lcl9vZihtcm4sIHN0cnVjdCBpYl91bWVtX29kcCwg bm90aWZpZXIpOwogCXN0cnVjdCBtbHg1X2liX21yICptcjsKIAljb25zdCB1NjQgdW1yX2Jsb2Nr X21hc2sgPSAoTUxYNV9VTVJfTVRUX0FMSUdOTUVOVCAvCiAJCQkJICAgIHNpemVvZihzdHJ1Y3Qg bWx4NV9tdHQpKSAtIDE7CiAJdTY0IGlkeCA9IDAsIGJsa19zdGFydF9pZHggPSAwOworCXVuc2ln bmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7CiAJaW50IGluX2Jsb2NrID0gMDsK IAl1NjQgYWRkcjsKIAorCWlmICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkp CisJCXJldHVybiBmYWxzZTsKKwogCW11dGV4X2xvY2soJnVtZW1fb2RwLT51bWVtX211dGV4KTsK KwltbXVfcmFuZ2Vfc2V0X3NlcShtcm4sIGN1cl9zZXEpOwogCS8qCiAJICogSWYgbnBhZ2VzIGlz IHplcm8gdGhlbiB1bWVtX29kcC0+cHJpdmF0ZSBtYXkgbm90IGJlIHNldHVwIHlldC4gVGhpcwog CSAqIGRvZXMgbm90IGNvbXBsZXRlIHVudGlsIGFmdGVyIHRoZSBmaXJzdCBwYWdlIGlzIG1hcHBl ZCBmb3IgRE1BLgpAQCAtMjYwLDggKzI2OSw4IEBAIHZvaWQgbWx4NV9pYl9pbnZhbGlkYXRlX3Jh bmdlKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJ CWdvdG8gb3V0OwogCW1yID0gdW1lbV9vZHAtPnByaXZhdGU7CiAKLQlzdGFydCA9IG1heF90KHU2 NCwgaWJfdW1lbV9zdGFydCh1bWVtX29kcCksIHN0YXJ0KTsKLQllbmQgPSBtaW5fdCh1NjQsIGli X3VtZW1fZW5kKHVtZW1fb2RwKSwgZW5kKTsKKwlzdGFydCA9IG1heF90KHU2NCwgaWJfdW1lbV9z dGFydCh1bWVtX29kcCksIHJhbmdlLT5zdGFydCk7CisJZW5kID0gbWluX3QodTY0LCBpYl91bWVt X2VuZCh1bWVtX29kcCksIHJhbmdlLT5lbmQpOwogCiAJLyoKIAkgKiBJdGVyYXRpb24gb25lIC0g emFwIHRoZSBIVydzIE1UVHMuIFRoZSBub3RpZmllcnNfY291bnQgZW5zdXJlcyB0aGF0CkBAIC0z MTIsOCArMzIxLDEzIEBAIHZvaWQgbWx4NV9pYl9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBpYl91 bWVtX29kcCAqdW1lbV9vZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCWRlc3Ryb3lfdW51c2Vk X2ltcGxpY2l0X2NoaWxkX21yKG1yKTsKIG91dDoKIAltdXRleF91bmxvY2soJnVtZW1fb2RwLT51 bWVtX211dGV4KTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAorY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllcl9vcHMgbWx4NV9tbl9vcHMgPSB7CisJLmludmFsaWRhdGUgPSBtbHg1X2liX2ludmFs aWRhdGVfcmFuZ2UsCit9OworCiB2b2lkIG1seDVfaWJfaW50ZXJuYWxfZmlsbF9vZHBfY2Fwcyhz dHJ1Y3QgbWx4NV9pYl9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWJfb2RwX2NhcHMgKmNhcHMgPSAm ZGV2LT5vZHBfY2FwczsKQEAgLTQxNCw3ICs0MjgsNyBAQCBzdGF0aWMgc3RydWN0IG1seDVfaWJf bXIgKmltcGxpY2l0X2dldF9jaGlsZF9tcihzdHJ1Y3QgbWx4NV9pYl9tciAqaW1yLAogCiAJb2Rw ID0gaWJfdW1lbV9vZHBfYWxsb2NfY2hpbGQodG9faWJfdW1lbV9vZHAoaW1yLT51bWVtKSwKIAkJ CQkgICAgICBpZHggKiBNTFg1X0lNUl9NVFRfU0laRSwKLQkJCQkgICAgICBNTFg1X0lNUl9NVFRf U0laRSk7CisJCQkJICAgICAgTUxYNV9JTVJfTVRUX1NJWkUsICZtbHg1X21uX29wcyk7CiAJaWYg KElTX0VSUihvZHApKQogCQlyZXR1cm4gRVJSX0NBU1Qob2RwKTsKIApAQCAtNjAwLDggKzYxNCw5 IEBAIHN0YXRpYyBpbnQgcGFnZWZhdWx0X3JlYWxfbXIoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBz dHJ1Y3QgaWJfdW1lbV9vZHAgKm9kcCwKIAkJCSAgICAgdTY0IHVzZXJfdmEsIHNpemVfdCBiY250 LCB1MzIgKmJ5dGVzX21hcHBlZCwKIAkJCSAgICAgdTMyIGZsYWdzKQogewotCWludCBjdXJyZW50 X3NlcSwgcGFnZV9zaGlmdCwgcmV0LCBucDsKKwlpbnQgcGFnZV9zaGlmdCwgcmV0LCBucDsKIAli b29sIGRvd25ncmFkZSA9IGZsYWdzICYgTUxYNV9QRl9GTEFHU19ET1dOR1JBREU7CisJdW5zaWdu ZWQgbG9uZyBjdXJyZW50X3NlcTsKIAl1NjQgYWNjZXNzX21hc2s7CiAJdTY0IHN0YXJ0X2lkeCwg cGFnZV9tYXNrOwogCkBAIC02MTMsMTIgKzYyOCw3IEBAIHN0YXRpYyBpbnQgcGFnZWZhdWx0X3Jl YWxfbXIoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBzdHJ1Y3QgaWJfdW1lbV9vZHAgKm9kcCwKIAlp ZiAob2RwLT51bWVtLndyaXRhYmxlICYmICFkb3duZ3JhZGUpCiAJCWFjY2Vzc19tYXNrIHw9IE9E UF9XUklURV9BTExPV0VEX0JJVDsKIAotCWN1cnJlbnRfc2VxID0gUkVBRF9PTkNFKG9kcC0+bm90 aWZpZXJzX3NlcSk7Ci0JLyoKLQkgKiBFbnN1cmUgdGhlIHNlcXVlbmNlIG51bWJlciBpcyB2YWxp ZCBmb3Igc29tZSB0aW1lIGJlZm9yZSB3ZSBjYWxsCi0JICogZ3VwLgotCSAqLwotCXNtcF9ybWIo KTsKKwljdXJyZW50X3NlcSA9IG1tdV9yYW5nZV9yZWFkX2JlZ2luKCZvZHAtPm5vdGlmaWVyKTsK IAogCW5wID0gaWJfdW1lbV9vZHBfbWFwX2RtYV9wYWdlcyhvZHAsIHVzZXJfdmEsIGJjbnQsIGFj Y2Vzc19tYXNrLAogCQkJCSAgICAgICBjdXJyZW50X3NlcSk7CkBAIC02MjYsNyArNjM2LDcgQEAg c3RhdGljIGludCBwYWdlZmF1bHRfcmVhbF9tcihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIsIHN0cnVj dCBpYl91bWVtX29kcCAqb2RwLAogCQlyZXR1cm4gbnA7CiAKIAltdXRleF9sb2NrKCZvZHAtPnVt ZW1fbXV0ZXgpOwotCWlmICghaWJfdW1lbV9tbXVfbm90aWZpZXJfcmV0cnkob2RwLCBjdXJyZW50 X3NlcSkpIHsKKwlpZiAoIW1tdV9yYW5nZV9yZWFkX3JldHJ5KCZvZHAtPm5vdGlmaWVyLCBjdXJy ZW50X3NlcSkpIHsKIAkJLyoKIAkJICogTm8gbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBNVFRz IHJlYWxseSBiZWxvbmcgdG8KIAkJICogdGhpcyBNUiwgc2luY2UgaWJfdW1lbV9vZHBfbWFwX2Rt YV9wYWdlcyBhbHJlYWR5CkBAIC02NTYsMTkgKzY2Niw2IEBAIHN0YXRpYyBpbnQgcGFnZWZhdWx0 X3JlYWxfbXIoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBzdHJ1Y3QgaWJfdW1lbV9vZHAgKm9kcCwK IAlyZXR1cm4gbnAgPDwgKHBhZ2Vfc2hpZnQgLSBQQUdFX1NISUZUKTsKIAogb3V0OgotCWlmIChy ZXQgPT0gLUVBR0FJTikgewotCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZm aWVzKE1NVV9OT1RJRklFUl9USU1FT1VUKTsKLQotCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25f dGltZW91dCgmb2RwLT5ub3RpZmllcl9jb21wbGV0aW9uLAotCQkJCQkJIHRpbWVvdXQpKSB7Ci0J CQltbHg1X2liX3dhcm4oCi0JCQkJbXItPmRldiwKLQkJCQkidGltZW91dCB3YWl0aW5nIGZvciBt bXUgbm90aWZpZXIuIHNlcSAlZCBhZ2FpbnN0ICVkLiBub3RpZmllcnNfY291bnQ9JWRcbiIsCi0J CQkJY3VycmVudF9zZXEsIG9kcC0+bm90aWZpZXJzX3NlcSwKLQkJCQlvZHAtPm5vdGlmaWVyc19j b3VudCk7Ci0JCX0KLQl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNjA5LDcgKzE2MDYsNiBA QCB2b2lkIG1seDVfb2RwX2luaXRfbXJfY2FjaGVfZW50cnkoc3RydWN0IG1seDVfY2FjaGVfZW50 ICplbnQpCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyBtbHg1X2liX2Rldl9v ZHBfb3BzID0gewogCS5hZHZpc2VfbXIgPSBtbHg1X2liX2FkdmlzZV9tciwKLQkuaW52YWxpZGF0 ZV9yYW5nZSA9IG1seDVfaWJfaW52YWxpZGF0ZV9yYW5nZSwKIH07CiAKIGludCBtbHg1X2liX29k cF9pbml0X29uZShzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2luY2x1ZGUv cmRtYS9pYl91bWVtX29kcC5oIGIvaW5jbHVkZS9yZG1hL2liX3VtZW1fb2RwLmgKaW5kZXggMDli MGU0NDk0OTg2YTkuLjk4ZWQ1NDM1YWZjY2Q5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJf dW1lbV9vZHAuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdW1lbV9vZHAuaApAQCAtMzUsMTEgKzM1 LDExIEBACiAKICNpbmNsdWRlIDxyZG1hL2liX3VtZW0uaD4KICNpbmNsdWRlIDxyZG1hL2liX3Zl cmJzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJ2YWxfdHJlZS5oPgogCiBzdHJ1Y3QgaWJfdW1l bV9vZHAgewogCXN0cnVjdCBpYl91bWVtIHVtZW07Ci0Jc3RydWN0IGliX3Vjb250ZXh0X3Blcl9t bSAqcGVyX21tOworCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgbm90aWZpZXI7CisJc3RydWN0 IHBpZCAqdGdpZDsKIAogCS8qCiAJICogQW4gYXJyYXkgb2YgdGhlIHBhZ2VzIGluY2x1ZGVkIGlu IHRoZSBvbi1kZW1hbmQgcGFnaW5nIHVtZW0uCkBAIC02MiwxMyArNjIsOCBAQCBzdHJ1Y3QgaWJf dW1lbV9vZHAgewogCXN0cnVjdCBtdXRleAkJdW1lbV9tdXRleDsKIAl2b2lkCQkJKnByaXZhdGU7 IC8qIGZvciB0aGUgSFcgZHJpdmVyIHRvIHVzZS4gKi8KIAotCWludCBub3RpZmllcnNfc2VxOwot CWludCBub3RpZmllcnNfY291bnQ7CiAJaW50IG5wYWdlczsKIAotCS8qIFRyZWUgdHJhY2tpbmcg Ki8KLQlzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlIGludGVydmFsX3RyZWU7Ci0KIAkvKgogCSAq IEFuIGltcGxpY2l0IG9kcCB1bWVtIGNhbm5vdCBiZSBETUEgbWFwcGVkLCBoYXMgMCBsZW5ndGgs IGFuZCBzZXJ2ZXMKIAkgKiBvbmx5IGFzIGFuIGFuY2hvciBmb3IgdGhlIGRyaXZlciB0byBob2xk IG9udG8gdGhlIHBlcl9tbS4gRklYTUU6CkBAIC03Nyw3ICs3Miw2IEBAIHN0cnVjdCBpYl91bWVt X29kcCB7CiAJICovCiAJYm9vbCBpc19pbXBsaWNpdF9vZHA7CiAKLQlzdHJ1Y3QgY29tcGxldGlv bglub3RpZmllcl9jb21wbGV0aW9uOwogCXVuc2lnbmVkIGludAkJcGFnZV9zaGlmdDsKIH07CiAK QEAgLTg5LDEzICs4MywxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl91bWVtX29kcCAqdG9f aWJfdW1lbV9vZHAoc3RydWN0IGliX3VtZW0gKnVtZW0pCiAvKiBSZXR1cm5zIHRoZSBmaXJzdCBw YWdlIG9mIGFuIE9EUCB1bWVtLiAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGliX3Vt ZW1fc3RhcnQoc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCkKIHsKLQlyZXR1cm4gdW1lbV9v ZHAtPmludGVydmFsX3RyZWUuc3RhcnQ7CisJcmV0dXJuIHVtZW1fb2RwLT5ub3RpZmllci5pbnRl cnZhbF90cmVlLnN0YXJ0OwogfQogCiAvKiBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwYWdl IGFmdGVyIHRoZSBsYXN0IG9uZSBvZiBhbiBPRFAgdW1lbS4gKi8KIHN0YXRpYyBpbmxpbmUgdW5z aWduZWQgbG9uZyBpYl91bWVtX2VuZChzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwKQogewot CXJldHVybiB1bWVtX29kcC0+aW50ZXJ2YWxfdHJlZS5sYXN0ICsgMTsKKwlyZXR1cm4gdW1lbV9v ZHAtPm5vdGlmaWVyLmludGVydmFsX3RyZWUubGFzdCArIDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUg c2l6ZV90IGliX3VtZW1fb2RwX251bV9wYWdlcyhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2Rw KQpAQCAtMTE5LDIxICsxMTMsMTQgQEAgc3RhdGljIGlubGluZSBzaXplX3QgaWJfdW1lbV9vZHBf bnVtX3BhZ2VzKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHApCiAKICNpZmRlZiBDT05GSUdf SU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HCiAKLXN0cnVjdCBpYl91Y29udGV4dF9wZXJfbW0g ewotCXN0cnVjdCBtbXVfbm90aWZpZXIgbW47Ci0Jc3RydWN0IHBpZCAqdGdpZDsKLQotCXN0cnVj dCByYl9yb290X2NhY2hlZCB1bWVtX3RyZWU7Ci0JLyogUHJvdGVjdHMgdW1lbV90cmVlICovCi0J c3RydWN0IHJ3X3NlbWFwaG9yZSB1bWVtX3J3c2VtOwotfTsKLQogc3RydWN0IGliX3VtZW1fb2Rw ICppYl91bWVtX29kcF9nZXQoc3RydWN0IGliX3VkYXRhICp1ZGF0YSwgdW5zaWduZWQgbG9uZyBh ZGRyLAotCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGFjY2Vzcyk7CisJCQkJICAgIHNpemVfdCBz aXplLCBpbnQgYWNjZXNzLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgbW11X3JhbmdlX25vdGlmaWVy X29wcyAqb3BzKTsKIHN0cnVjdCBpYl91bWVtX29kcCAqaWJfdW1lbV9vZHBfYWxsb2NfaW1wbGlj aXQoc3RydWN0IGliX3VkYXRhICp1ZGF0YSwKIAkJCQkJICAgICAgIGludCBhY2Nlc3MpOwotc3Ry dWN0IGliX3VtZW1fb2RwICppYl91bWVtX29kcF9hbGxvY19jaGlsZChzdHJ1Y3QgaWJfdW1lbV9v ZHAgKnJvb3RfdW1lbSwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IHNpemUp Oworc3RydWN0IGliX3VtZW1fb2RwICoKK2liX3VtZW1fb2RwX2FsbG9jX2NoaWxkKHN0cnVjdCBp Yl91bWVtX29kcCAqcm9vdF91bWVtLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQlzaXplX3Qgc2l6 ZSwgY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMgKm9wcyk7CiB2b2lkIGliX3Vt ZW1fb2RwX3JlbGVhc2Uoc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCk7CiAKIGludCBpYl91 bWVtX29kcF9tYXBfZG1hX3BhZ2VzKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCBz dGFydF9vZmZzZXQsCkBAIC0xNDMsMzkgKzEzMCwxMSBAQCBpbnQgaWJfdW1lbV9vZHBfbWFwX2Rt YV9wYWdlcyhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1NjQgc3RhcnRfb2Zmc2V0LAog dm9pZCBpYl91bWVtX29kcF91bm1hcF9kbWFfcGFnZXMoc3RydWN0IGliX3VtZW1fb2RwICp1bWVt X29kcCwgdTY0IHN0YXJ0X29mZnNldCwKIAkJCQkgdTY0IGJvdW5kKTsKIAotdHlwZWRlZiBpbnQg KCp1bWVtX2NhbGxfYmFjaykoc3RydWN0IGliX3VtZW1fb2RwICppdGVtLCB1NjQgc3RhcnQsIHU2 NCBlbmQsCi0JCQkgICAgICB2b2lkICpjb29raWUpOwotLyoKLSAqIENhbGwgdGhlIGNhbGxiYWNr IG9uIGVhY2ggaWJfdW1lbSBpbiB0aGUgcmFuZ2UuIFJldHVybnMgdGhlIGxvZ2ljYWwgb3Igb2YK LSAqIHRoZSByZXR1cm4gdmFsdWVzIG9mIHRoZSBmdW5jdGlvbnMgY2FsbGVkLgotICovCi1pbnQg cmJ0X2liX3VtZW1fZm9yX2VhY2hfaW5fcmFuZ2Uoc3RydWN0IHJiX3Jvb3RfY2FjaGVkICpyb290 LAotCQkJCSAgdTY0IHN0YXJ0LCB1NjQgZW5kLAotCQkJCSAgdW1lbV9jYWxsX2JhY2sgY2IsCi0J CQkJICBib29sIGJsb2NrYWJsZSwgdm9pZCAqY29va2llKTsKLQotc3RhdGljIGlubGluZSBpbnQg aWJfdW1lbV9tbXVfbm90aWZpZXJfcmV0cnkoc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCwK LQkJCQkJICAgICB1bnNpZ25lZCBsb25nIG1tdV9zZXEpCi17Ci0JLyoKLQkgKiBUaGlzIGNvZGUg aXMgc3Ryb25nbHkgYmFzZWQgb24gdGhlIEtWTSBjb2RlIGZyb20KLQkgKiBtbXVfbm90aWZpZXJf cmV0cnkuIFNob3VsZCBiZSBjYWxsZWQgd2l0aAotCSAqIHRoZSByZWxldmFudCBsb2NrcyB0YWtl biAodW1lbV9vZHAtPnVtZW1fbXV0ZXgKLQkgKiBhbmQgdGhlIHVjb250ZXh0IHVtZW1fbXV0ZXgg c2VtYXBob3JlIGxvY2tlZCBmb3IgcmVhZCkuCi0JICovCi0KLQlpZiAodW5saWtlbHkodW1lbV9v ZHAtPm5vdGlmaWVyc19jb3VudCkpCi0JCXJldHVybiAxOwotCWlmICh1bWVtX29kcC0+bm90aWZp ZXJzX3NlcSAhPSBtbXVfc2VxKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogI2Vsc2Ug LyogQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lORyAqLwogCi1zdGF0aWMgaW5saW5l IHN0cnVjdCBpYl91bWVtX29kcCAqaWJfdW1lbV9vZHBfZ2V0KHN0cnVjdCBpYl91ZGF0YSAqdWRh dGEsCi0JCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJCSAgc2l6ZV90IHNpemUsIGlu dCBhY2Nlc3MpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl91bWVtX29kcCAqCitpYl91bWVtX29k cF9nZXQoc3RydWN0IGliX3VkYXRhICp1ZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qg c2l6ZSwKKwkJaW50IGFjY2VzcywgY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMg Km9wcykKIHsKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1 ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggNmE0N2Jh ODVjNTRjMTEuLjJjMzBjODU5YWUwZDEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVy YnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtMjQyMiw4ICsyNDIyLDYgQEAg c3RydWN0IGliX2RldmljZV9vcHMgewogCQkJICAgIHU2NCBpb3ZhKTsKIAlpbnQgKCp1bm1hcF9m bXIpKHN0cnVjdCBsaXN0X2hlYWQgKmZtcl9saXN0KTsKIAlpbnQgKCpkZWFsbG9jX2Ztcikoc3Ry dWN0IGliX2ZtciAqZm1yKTsKLQl2b2lkICgqaW52YWxpZGF0ZV9yYW5nZSkoc3RydWN0IGliX3Vt ZW1fb2RwICp1bWVtX29kcCwKLQkJCQkgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9u ZyBlbmQpOwogCWludCAoKmF0dGFjaF9tY2FzdCkoc3RydWN0IGliX3FwICpxcCwgdW5pb24gaWJf Z2lkICpnaWQsIHUxNiBsaWQpOwogCWludCAoKmRldGFjaF9tY2FzdCkoc3RydWN0IGliX3FwICpx cCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpOwogCXN0cnVjdCBpYl94cmNkICooKmFsbG9j X3hyY2QpKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKLS0gCjIuMjMuMAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QK YW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4