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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 82DAACCA47E for ; Tue, 7 Jun 2022 07:37:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237721AbiFGHhb (ORCPT ); Tue, 7 Jun 2022 03:37:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48092 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237716AbiFGHh1 (ORCPT ); Tue, 7 Jun 2022 03:37:27 -0400 Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [IPv6:2a00:1450:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8651C25EB; Tue, 7 Jun 2022 00:37:23 -0700 (PDT) Received: by mail-ej1-x62a.google.com with SMTP id s12so26185856ejx.3; Tue, 07 Jun 2022 00:37:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=kjtclTo6hwcqYED9n/ojCDRC4tEzQKbn61y6dGb/AZ0=; b=I+I7kSMOBt0Gn137kC6P4pBul8tKAqzwrPFnoqXzkuW01YPYXa1KcFF07qrY1JKLu8 u20l2+fyxbA/cB+RQYQu/ljnlX3ZEOnnlW7Y1LLUTNsa5dy69+tFZVHO7ExcJwG04tiS htbeXR+9L38o+VOkMbWKl1Y323NcB0e7aYfMV6wnZiM3qmHuWRWCbRUSCtihO8oKagKw AFoCX0Hb68mkzp11tj5Lu3FDxaF6rkU54M+71NZky0bf04z8NFyYWcRnqzof92hQdSNH DKTmjvJ4cDVIdPM4xbhrlBytMxdQ4cEX0NVvWahmGgtovnNCWPcLwRvxjLXVnvIbR/G9 Ip5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=kjtclTo6hwcqYED9n/ojCDRC4tEzQKbn61y6dGb/AZ0=; b=P7VHwWTxZI+lNflt+E1mtr0RNl71kAoGNdLD1vOf4gH8O2txaenbVQO/tJzsq2YJwk IshPg9tfZ4n0wHgkNkeJul34haVz6l2+NrUAE2vsxvma/iVZiiP5upsDYmifgaqMeS9Q xgwGW3rRpyByQM75Q9zdWcKoZ5en8CkFZpWfWGpEjxjzkC7oc/9kMXqY7+p3IRIbeSJm qpOvLD4RKT39CRtyBp/pf/M6PXfaeLtcmoDumTZUabc3RZ813Ac2AmwdgRv6OGh5T1Z4 5maLRYGEWHAJ7IpQ3j/1lZ8pExoCSmADsAXgmE6w+jRDf+Q6AxnGlFcU7gJPBVv2jx6M N9zw== X-Gm-Message-State: AOAM531Jy+dGlA4XerxrDVxUEQ4t6hEYE1alS4cLgSIJrvLdosKCUmGo hPqSFSD3dwDrhO3UIfUhAuEb1Ykz1i+Qa0A4HJ4= X-Google-Smtp-Source: ABdhPJxq7gbKI8I6h6yB4oDTIAKnbBuIrelPBSTjy52gQCtxjY6Ljn+tWqB6H/gwQOV4kqyiRfbomMke7NXsmekEV7A= X-Received: by 2002:a17:906:fb07:b0:706:ad5a:db9f with SMTP id lz7-20020a170906fb0700b00706ad5adb9fmr25843828ejb.91.1654587441384; Tue, 07 Jun 2022 00:37:21 -0700 (PDT) MIME-Version: 1.0 References: <20220518014632.922072-1-yuzhao@google.com> <20220518014632.922072-8-yuzhao@google.com> In-Reply-To: From: Barry Song <21cnbao@gmail.com> Date: Tue, 7 Jun 2022 19:37:10 +1200 Message-ID: Subject: Re: [PATCH v11 07/14] mm: multi-gen LRU: exploit locality in rmap To: Yu Zhao , Will Deacon Cc: Andrew Morton , Linux-MM , Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Peter Zijlstra , Tejun Heo , Vlastimil Babka , LAK , Linux Doc Mailing List , LKML , x86 , Kernel Page Reclaim v2 , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , =?UTF-8?Q?Holger_Hoffst=C3=A4tte?= , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain , huzhanyuan@oppo.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 6, 2022 at 9:25 PM Barry Song <21cnbao@gmail.com> wrote: > > On Wed, May 18, 2022 at 4:49 PM Yu Zhao wrote: > > > > Searching the rmap for PTEs mapping each page on an LRU list (to test > > and clear the accessed bit) can be expensive because pages from > > different VMAs (PA space) are not cache friendly to the rmap (VA > > space). For workloads mostly using mapped pages, the rmap has a high > > CPU cost in the reclaim path. > > > > This patch exploits spatial locality to reduce the trips into the > > rmap. When shrink_page_list() walks the rmap and finds a young PTE, a > > new function lru_gen_look_around() scans at most BITS_PER_LONG-1 > > adjacent PTEs. On finding another young PTE, it clears the accessed > > bit and updates the gen counter of the page mapped by this PTE to > > (max_seq%MAX_NR_GENS)+1. > > > > Server benchmark results: > > Single workload: > > fio (buffered I/O): no change > > > > Single workload: > > memcached (anon): +[5.5, 7.5]% > > Ops/sec KB/sec > > patch1-6: 1120643.70 43588.06 > > patch1-7: 1193918.93 46438.15 > > > > Configurations: > > no change > > > > Client benchmark results: > > kswapd profiles: > > patch1-6 > > 35.99% lzo1x_1_do_compress (real work) > > 19.40% page_vma_mapped_walk > > 6.31% _raw_spin_unlock_irq > > 3.95% do_raw_spin_lock > > 2.39% anon_vma_interval_tree_iter_first > > 2.25% ptep_clear_flush > > 1.92% __anon_vma_interval_tree_subtree_search > > 1.70% folio_referenced_one > > 1.68% __zram_bvec_write > > 1.43% anon_vma_interval_tree_iter_next > > > > patch1-7 > > 45.90% lzo1x_1_do_compress (real work) > > 9.14% page_vma_mapped_walk > > 6.81% _raw_spin_unlock_irq > > 2.80% ptep_clear_flush > > 2.34% __zram_bvec_write > > 2.29% do_raw_spin_lock > > 1.84% lru_gen_look_around > > 1.78% memmove > > 1.74% obj_malloc > > 1.50% free_unref_page_list > > > > Configurations: > > no change > > > > Signed-off-by: Yu Zhao > > Acked-by: Brian Geffon > > Acked-by: Jan Alexander Steffens (heftig) > > Acked-by: Oleksandr Natalenko > > Acked-by: Steven Barrett > > Acked-by: Suleiman Souhlal > > Tested-by: Daniel Byrne > > Tested-by: Donald Carr > > Tested-by: Holger Hoffst=C3=A4tte > > Tested-by: Konstantin Kharlamov > > Tested-by: Shuang Zhai > > Tested-by: Sofia Trinh > > Tested-by: Vaibhav Jain > > --- > > include/linux/memcontrol.h | 31 ++++++++ > > include/linux/mm.h | 5 ++ > > include/linux/mmzone.h | 6 ++ > > mm/internal.h | 1 + > > mm/memcontrol.c | 1 + > > mm/rmap.c | 7 ++ > > mm/swap.c | 4 +- > > mm/vmscan.c | 157 +++++++++++++++++++++++++++++++++++++ > > 8 files changed, 210 insertions(+), 2 deletions(-) > > > > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > > index 89b14729d59f..2bfdcc77648a 100644 > > --- a/include/linux/memcontrol.h > > +++ b/include/linux/memcontrol.h > > @@ -438,6 +438,7 @@ static inline struct obj_cgroup *__folio_objcg(stru= ct folio *folio) > > * - LRU isolation > > * - lock_page_memcg() > > * - exclusive reference > > + * - mem_cgroup_trylock_pages() > > * > > * For a kmem folio a caller should hold an rcu read lock to protect m= emcg > > * associated with a kmem folio from being released. > > @@ -499,6 +500,7 @@ static inline struct mem_cgroup *folio_memcg_rcu(st= ruct folio *folio) > > * - LRU isolation > > * - lock_page_memcg() > > * - exclusive reference > > + * - mem_cgroup_trylock_pages() > > * > > * For a kmem page a caller should hold an rcu read lock to protect me= mcg > > * associated with a kmem page from being released. > > @@ -948,6 +950,23 @@ void unlock_page_memcg(struct page *page); > > > > void __mod_memcg_state(struct mem_cgroup *memcg, int idx, int val); > > > > +/* try to stablize folio_memcg() for all the pages in a memcg */ > > +static inline bool mem_cgroup_trylock_pages(struct mem_cgroup *memcg) > > +{ > > + rcu_read_lock(); > > + > > + if (mem_cgroup_disabled() || !atomic_read(&memcg->moving_accoun= t)) > > + return true; > > + > > + rcu_read_unlock(); > > + return false; > > +} > > + > > +static inline void mem_cgroup_unlock_pages(void) > > +{ > > + rcu_read_unlock(); > > +} > > + > > /* idx can be of type enum memcg_stat_item or node_stat_item */ > > static inline void mod_memcg_state(struct mem_cgroup *memcg, > > int idx, int val) > > @@ -1386,6 +1405,18 @@ static inline void folio_memcg_unlock(struct fol= io *folio) > > { > > } > > > > +static inline bool mem_cgroup_trylock_pages(struct mem_cgroup *memcg) > > +{ > > + /* to match folio_memcg_rcu() */ > > + rcu_read_lock(); > > + return true; > > +} > > + > > +static inline void mem_cgroup_unlock_pages(void) > > +{ > > + rcu_read_unlock(); > > +} > > + > > static inline void mem_cgroup_handle_over_high(void) > > { > > } > > diff --git a/include/linux/mm.h b/include/linux/mm.h > > index 894c289c2c06..4e8ab4ad4473 100644 > > --- a/include/linux/mm.h > > +++ b/include/linux/mm.h > > @@ -1523,6 +1523,11 @@ static inline unsigned long folio_pfn(struct fol= io *folio) > > return page_to_pfn(&folio->page); > > } > > > > +static inline struct folio *pfn_folio(unsigned long pfn) > > +{ > > + return page_folio(pfn_to_page(pfn)); > > +} > > + > > static inline atomic_t *folio_pincount_ptr(struct folio *folio) > > { > > return &folio_page(folio, 1)->compound_pincount; > > diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h > > index 2d023d243e73..f0b980362186 100644 > > --- a/include/linux/mmzone.h > > +++ b/include/linux/mmzone.h > > @@ -374,6 +374,7 @@ enum lruvec_flags { > > #ifndef __GENERATING_BOUNDS_H > > > > struct lruvec; > > +struct page_vma_mapped_walk; > > > > #define LRU_GEN_MASK ((BIT(LRU_GEN_WIDTH) - 1) << LRU_GEN_PG= OFF) > > #define LRU_REFS_MASK ((BIT(LRU_REFS_WIDTH) - 1) << LRU_REFS_= PGOFF) > > @@ -429,6 +430,7 @@ struct lru_gen_struct { > > }; > > > > void lru_gen_init_lruvec(struct lruvec *lruvec); > > +void lru_gen_look_around(struct page_vma_mapped_walk *pvmw); > > > > #ifdef CONFIG_MEMCG > > void lru_gen_init_memcg(struct mem_cgroup *memcg); > > @@ -441,6 +443,10 @@ static inline void lru_gen_init_lruvec(struct lruv= ec *lruvec) > > { > > } > > > > +static inline void lru_gen_look_around(struct page_vma_mapped_walk *pv= mw) > > +{ > > +} > > + > > #ifdef CONFIG_MEMCG > > static inline void lru_gen_init_memcg(struct mem_cgroup *memcg) > > { > > diff --git a/mm/internal.h b/mm/internal.h > > index cf16280ce132..59d2422b647d 100644 > > --- a/mm/internal.h > > +++ b/mm/internal.h > > @@ -68,6 +68,7 @@ vm_fault_t do_swap_page(struct vm_fault *vmf); > > void folio_rotate_reclaimable(struct folio *folio); > > bool __folio_end_writeback(struct folio *folio); > > void deactivate_file_folio(struct folio *folio); > > +void folio_activate(struct folio *folio); > > > > void free_pgtables(struct mmu_gather *tlb, struct vm_area_struct *star= t_vma, > > unsigned long floor, unsigned long ceiling); > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > > index 2ee074f80e72..98aa720ac639 100644 > > --- a/mm/memcontrol.c > > +++ b/mm/memcontrol.c > > @@ -2769,6 +2769,7 @@ static void commit_charge(struct folio *folio, st= ruct mem_cgroup *memcg) > > * - LRU isolation > > * - lock_page_memcg() > > * - exclusive reference > > + * - mem_cgroup_trylock_pages() > > */ > > folio->memcg_data =3D (unsigned long)memcg; > > } > > diff --git a/mm/rmap.c b/mm/rmap.c > > index fedb82371efe..7cb7ef29088a 100644 > > --- a/mm/rmap.c > > +++ b/mm/rmap.c > > @@ -73,6 +73,7 @@ > > #include > > #include > > #include > > +#include > > > > #include > > > > @@ -821,6 +822,12 @@ static bool folio_referenced_one(struct folio *fol= io, > > } > > > > if (pvmw.pte) { > > + if (lru_gen_enabled() && pte_young(*pvmw.pte) &= & > > + !(vma->vm_flags & (VM_SEQ_READ | VM_RAND_RE= AD))) { > > + lru_gen_look_around(&pvmw); > > + referenced++; > > + } > > + > > if (ptep_clear_flush_young_notify(vma, address, > > Hello, Yu. > look_around() is calling ptep_test_and_clear_young(pvmw->vma, addr, pte += i) > only without flush and notify. for flush, there is a tlb operation for ar= m64: > static inline int ptep_clear_flush_young(struct vm_area_struct *vma, > unsigned long address, pte_t *pt= ep) > { > int young =3D ptep_test_and_clear_young(vma, address, ptep); > > if (young) { > /* > * We can elide the trailing DSB here since the worst tha= t can > * happen is that a CPU continues to use the young entry = in its > * TLB and we mistakenly reclaim the associated page. The > * window for such an event is bounded by the next > * context-switch, which provides a DSB to complete the T= LB > * invalidation. > */ > flush_tlb_page_nosync(vma, address); > } > > return young; > } > > Does it mean the current kernel is over cautious? is it > safe to call ptep_test_and_clear_young() only? I can't really explain why we are getting a random app/java vm crash in mon= key test by using ptep_test_and_clear_young() only in lru_gen_look_around() on = an armv8-a machine without hardware PTE young support. Moving to ptep_clear_flush_young() in look_around can make the random hang disappear according to zhanyuan(Cc-ed). On x86, ptep_clear_flush_young() is exactly ptep_test_and_clear_young() after 'commit b13b1d2d8692 ("x86/mm: In the PTE swapout page reclaim case clear the accessed bit instead of flushing the TLB")' But on arm64, they are different. according to Will's comments in this thread which tried to make arm64 same with x86, https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1793881.html " This is blindly copied from x86 and isn't true for us: we don't invalidate the TLB on context switch. That means our window for keeping the stale entries around is potentially much bigger and might not be a great idea. If we roll a TLB invalidation routine without the trailing DSB, what sort o= f performance does that get you? " We shouldn't think ptep_clear_flush_young() is safe enough in LRU to clear PTE young? Any comments from Will? > > btw, lru_gen_look_around() has already included 'address', are we doing > pte check for 'address' twice here? > Thanks Barry 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AA5B7C433EF for ; Tue, 7 Jun 2022 07:38:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=c9l5VQTi/Q+x77qipn2Sinc3S8p2P1lBU6ZnxyQn0/k=; b=flyvgz7gsQWtwE IcFfuxQMFtGCZ2XCziFIknbVZFf7dSkSwo8gh8YlXHZ4ElISif/bMeqUsANKf5uKB4Qqyc/3kuBco 2BejxDLd84FN0pJjKXbE10dlnClCFDzJ4osr9ohac2Pxbo/1l0jAbMYaqBvgZP/1UK0+c5KA47XwX 2TTgkoqlyvADUngXIKXyylyaBfB4/fXfxwjP/pbKoBvuBlD93tjqdqnRPtOL26iG/kejPiD4r215D yCI3mGz//egEu14VZsX9qu/JSVnSVMV6x8hJNw0knBPVVGZNpC1R/S/sileahIFRW7YHTahqtuEZt x2l7stxDUIZ95KVB7Eow==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nyTmK-005UuL-Af; Tue, 07 Jun 2022 07:37:28 +0000 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nyTmF-005UrE-40 for linux-arm-kernel@lists.infradead.org; Tue, 07 Jun 2022 07:37:26 +0000 Received: by mail-ej1-x62f.google.com with SMTP id n10so33424742ejk.5 for ; Tue, 07 Jun 2022 00:37:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=kjtclTo6hwcqYED9n/ojCDRC4tEzQKbn61y6dGb/AZ0=; b=I+I7kSMOBt0Gn137kC6P4pBul8tKAqzwrPFnoqXzkuW01YPYXa1KcFF07qrY1JKLu8 u20l2+fyxbA/cB+RQYQu/ljnlX3ZEOnnlW7Y1LLUTNsa5dy69+tFZVHO7ExcJwG04tiS htbeXR+9L38o+VOkMbWKl1Y323NcB0e7aYfMV6wnZiM3qmHuWRWCbRUSCtihO8oKagKw AFoCX0Hb68mkzp11tj5Lu3FDxaF6rkU54M+71NZky0bf04z8NFyYWcRnqzof92hQdSNH DKTmjvJ4cDVIdPM4xbhrlBytMxdQ4cEX0NVvWahmGgtovnNCWPcLwRvxjLXVnvIbR/G9 Ip5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=kjtclTo6hwcqYED9n/ojCDRC4tEzQKbn61y6dGb/AZ0=; b=flV3ljkx1nb1OiNRRrQr/kB3p+JQAs8+r9IRfi8c7rZXaqCq4LT0LGpgdXE6GyRiIW 1Cpp+3Y1MdnMdRl3/BPG+I0D9JIR2RzD50eaLyLFeif3l+vLur7nKAnX010GfaK6sdtJ /DfTlKjRNO1j0GxblMZlJSuT/OJ9tJHSA8Q9fnmpvd/ZNJWb6f7kJhpXmrFivJsjo0Oe K5dm8XCt8Rc3a48uSMe6pBOOCEHTVTeIC1Ti/qDIVeVCRuQqfu6Ik1cg6ohoeEEdbcRb bp3Kjb8mZeoVm3oEC+VzLGlDrEl0GZ0iF4L3EMSuitcnFy/DoDRmKxcdqTb3NKsiTpyy q/dQ== X-Gm-Message-State: AOAM530lfEFI/G8lfUaSBUWn4O5B5GKqRcHHZ9X/gRZppVmIaRrs8Za8 rDRIagadlehX7dVlgJjusm4bD6bPSZahS55KnpM= X-Google-Smtp-Source: ABdhPJxq7gbKI8I6h6yB4oDTIAKnbBuIrelPBSTjy52gQCtxjY6Ljn+tWqB6H/gwQOV4kqyiRfbomMke7NXsmekEV7A= X-Received: by 2002:a17:906:fb07:b0:706:ad5a:db9f with SMTP id lz7-20020a170906fb0700b00706ad5adb9fmr25843828ejb.91.1654587441384; Tue, 07 Jun 2022 00:37:21 -0700 (PDT) MIME-Version: 1.0 References: <20220518014632.922072-1-yuzhao@google.com> <20220518014632.922072-8-yuzhao@google.com> In-Reply-To: From: Barry Song <21cnbao@gmail.com> Date: Tue, 7 Jun 2022 19:37:10 +1200 Message-ID: Subject: Re: [PATCH v11 07/14] mm: multi-gen LRU: exploit locality in rmap To: Yu Zhao , Will Deacon Cc: Andrew Morton , Linux-MM , Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Peter Zijlstra , Tejun Heo , Vlastimil Babka , LAK , Linux Doc Mailing List , LKML , x86 , Kernel Page Reclaim v2 , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , =?UTF-8?Q?Holger_Hoffst=C3=A4tte?= , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain , huzhanyuan@oppo.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220607_003723_247023_F85F7FC6 X-CRM114-Status: GOOD ( 43.18 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCBKdW4gNiwgMjAyMiBhdCA5OjI1IFBNIEJhcnJ5IFNvbmcgPDIxY25iYW9AZ21haWwu Y29tPiB3cm90ZToKPgo+IE9uIFdlZCwgTWF5IDE4LCAyMDIyIGF0IDQ6NDkgUE0gWXUgWmhhbyA8 eXV6aGFvQGdvb2dsZS5jb20+IHdyb3RlOgo+ID4KPiA+IFNlYXJjaGluZyB0aGUgcm1hcCBmb3Ig UFRFcyBtYXBwaW5nIGVhY2ggcGFnZSBvbiBhbiBMUlUgbGlzdCAodG8gdGVzdAo+ID4gYW5kIGNs ZWFyIHRoZSBhY2Nlc3NlZCBiaXQpIGNhbiBiZSBleHBlbnNpdmUgYmVjYXVzZSBwYWdlcyBmcm9t Cj4gPiBkaWZmZXJlbnQgVk1BcyAoUEEgc3BhY2UpIGFyZSBub3QgY2FjaGUgZnJpZW5kbHkgdG8g dGhlIHJtYXAgKFZBCj4gPiBzcGFjZSkuIEZvciB3b3JrbG9hZHMgbW9zdGx5IHVzaW5nIG1hcHBl ZCBwYWdlcywgdGhlIHJtYXAgaGFzIGEgaGlnaAo+ID4gQ1BVIGNvc3QgaW4gdGhlIHJlY2xhaW0g cGF0aC4KPiA+Cj4gPiBUaGlzIHBhdGNoIGV4cGxvaXRzIHNwYXRpYWwgbG9jYWxpdHkgdG8gcmVk dWNlIHRoZSB0cmlwcyBpbnRvIHRoZQo+ID4gcm1hcC4gV2hlbiBzaHJpbmtfcGFnZV9saXN0KCkg d2Fsa3MgdGhlIHJtYXAgYW5kIGZpbmRzIGEgeW91bmcgUFRFLCBhCj4gPiBuZXcgZnVuY3Rpb24g bHJ1X2dlbl9sb29rX2Fyb3VuZCgpIHNjYW5zIGF0IG1vc3QgQklUU19QRVJfTE9ORy0xCj4gPiBh ZGphY2VudCBQVEVzLiBPbiBmaW5kaW5nIGFub3RoZXIgeW91bmcgUFRFLCBpdCBjbGVhcnMgdGhl IGFjY2Vzc2VkCj4gPiBiaXQgYW5kIHVwZGF0ZXMgdGhlIGdlbiBjb3VudGVyIG9mIHRoZSBwYWdl IG1hcHBlZCBieSB0aGlzIFBURSB0bwo+ID4gKG1heF9zZXElTUFYX05SX0dFTlMpKzEuCj4gPgo+ ID4gU2VydmVyIGJlbmNobWFyayByZXN1bHRzOgo+ID4gICBTaW5nbGUgd29ya2xvYWQ6Cj4gPiAg ICAgZmlvIChidWZmZXJlZCBJL08pOiBubyBjaGFuZ2UKPiA+Cj4gPiAgIFNpbmdsZSB3b3JrbG9h ZDoKPiA+ICAgICBtZW1jYWNoZWQgKGFub24pOiArWzUuNSwgNy41XSUKPiA+ICAgICAgICAgICAg ICAgICBPcHMvc2VjICAgICAgS0Ivc2VjCj4gPiAgICAgICBwYXRjaDEtNjogMTEyMDY0My43MCAg IDQzNTg4LjA2Cj4gPiAgICAgICBwYXRjaDEtNzogMTE5MzkxOC45MyAgIDQ2NDM4LjE1Cj4gPgo+ ID4gICBDb25maWd1cmF0aW9uczoKPiA+ICAgICBubyBjaGFuZ2UKPiA+Cj4gPiBDbGllbnQgYmVu Y2htYXJrIHJlc3VsdHM6Cj4gPiAgIGtzd2FwZCBwcm9maWxlczoKPiA+ICAgICBwYXRjaDEtNgo+ ID4gICAgICAgMzUuOTklICBsem8xeF8xX2RvX2NvbXByZXNzIChyZWFsIHdvcmspCj4gPiAgICAg ICAxOS40MCUgIHBhZ2Vfdm1hX21hcHBlZF93YWxrCj4gPiAgICAgICAgNi4zMSUgIF9yYXdfc3Bp bl91bmxvY2tfaXJxCj4gPiAgICAgICAgMy45NSUgIGRvX3Jhd19zcGluX2xvY2sKPiA+ICAgICAg ICAyLjM5JSAgYW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0Cj4gPiAgICAgICAgMi4y NSUgIHB0ZXBfY2xlYXJfZmx1c2gKPiA+ICAgICAgICAxLjkyJSAgX19hbm9uX3ZtYV9pbnRlcnZh bF90cmVlX3N1YnRyZWVfc2VhcmNoCj4gPiAgICAgICAgMS43MCUgIGZvbGlvX3JlZmVyZW5jZWRf b25lCj4gPiAgICAgICAgMS42OCUgIF9fenJhbV9idmVjX3dyaXRlCj4gPiAgICAgICAgMS40MyUg IGFub25fdm1hX2ludGVydmFsX3RyZWVfaXRlcl9uZXh0Cj4gPgo+ID4gICAgIHBhdGNoMS03Cj4g PiAgICAgICA0NS45MCUgIGx6bzF4XzFfZG9fY29tcHJlc3MgKHJlYWwgd29yaykKPiA+ICAgICAg ICA5LjE0JSAgcGFnZV92bWFfbWFwcGVkX3dhbGsKPiA+ICAgICAgICA2LjgxJSAgX3Jhd19zcGlu X3VubG9ja19pcnEKPiA+ICAgICAgICAyLjgwJSAgcHRlcF9jbGVhcl9mbHVzaAo+ID4gICAgICAg IDIuMzQlICBfX3pyYW1fYnZlY193cml0ZQo+ID4gICAgICAgIDIuMjklICBkb19yYXdfc3Bpbl9s b2NrCj4gPiAgICAgICAgMS44NCUgIGxydV9nZW5fbG9va19hcm91bmQKPiA+ICAgICAgICAxLjc4 JSAgbWVtbW92ZQo+ID4gICAgICAgIDEuNzQlICBvYmpfbWFsbG9jCj4gPiAgICAgICAgMS41MCUg IGZyZWVfdW5yZWZfcGFnZV9saXN0Cj4gPgo+ID4gICBDb25maWd1cmF0aW9uczoKPiA+ICAgICBu byBjaGFuZ2UKPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBZdSBaaGFvIDx5dXpoYW9AZ29vZ2xlLmNv bT4KPiA+IEFja2VkLWJ5OiBCcmlhbiBHZWZmb24gPGJnZWZmb25AZ29vZ2xlLmNvbT4KPiA+IEFj a2VkLWJ5OiBKYW4gQWxleGFuZGVyIFN0ZWZmZW5zIChoZWZ0aWcpIDxoZWZ0aWdAYXJjaGxpbnV4 Lm9yZz4KPiA+IEFja2VkLWJ5OiBPbGVrc2FuZHIgTmF0YWxlbmtvIDxvbGVrc2FuZHJAbmF0YWxl bmtvLm5hbWU+Cj4gPiBBY2tlZC1ieTogU3RldmVuIEJhcnJldHQgPHN0ZXZlbkBsaXF1b3JpeC5u ZXQ+Cj4gPiBBY2tlZC1ieTogU3VsZWltYW4gU291aGxhbCA8c3VsZWltYW5AZ29vZ2xlLmNvbT4K PiA+IFRlc3RlZC1ieTogRGFuaWVsIEJ5cm5lIDxkamJ5cm5lQG10dS5lZHU+Cj4gPiBUZXN0ZWQt Ynk6IERvbmFsZCBDYXJyIDxkQGNoYW9zLXJlaW5zLmNvbT4KPiA+IFRlc3RlZC1ieTogSG9sZ2Vy IEhvZmZzdMOkdHRlIDxob2xnZXJAYXBwbGllZC1hc3luY2hyb255LmNvbT4KPiA+IFRlc3RlZC1i eTogS29uc3RhbnRpbiBLaGFybGFtb3YgPEhpLUFuZ2VsQHlhbmRleC5ydT4KPiA+IFRlc3RlZC1i eTogU2h1YW5nIFpoYWkgPHN6aGFpMkBjcy5yb2NoZXN0ZXIuZWR1Pgo+ID4gVGVzdGVkLWJ5OiBT b2ZpYSBUcmluaCA8c29maWEudHJpbmhAZWRpLndvcmtzPgo+ID4gVGVzdGVkLWJ5OiBWYWliaGF2 IEphaW4gPHZhaWJoYXZAbGludXguaWJtLmNvbT4KPiA+IC0tLQo+ID4gIGluY2x1ZGUvbGludXgv bWVtY29udHJvbC5oIHwgIDMxICsrKysrKysrCj4gPiAgaW5jbHVkZS9saW51eC9tbS5oICAgICAg ICAgfCAgIDUgKysKPiA+ICBpbmNsdWRlL2xpbnV4L21tem9uZS5oICAgICB8ICAgNiArKwo+ID4g IG1tL2ludGVybmFsLmggICAgICAgICAgICAgIHwgICAxICsKPiA+ICBtbS9tZW1jb250cm9sLmMg ICAgICAgICAgICB8ICAgMSArCj4gPiAgbW0vcm1hcC5jICAgICAgICAgICAgICAgICAgfCAgIDcg KysKPiA+ICBtbS9zd2FwLmMgICAgICAgICAgICAgICAgICB8ICAgNCArLQo+ID4gIG1tL3Ztc2Nh bi5jICAgICAgICAgICAgICAgIHwgMTU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiA+ICA4IGZpbGVzIGNoYW5nZWQsIDIxMCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9u cygtKQo+ID4KPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2lu Y2x1ZGUvbGludXgvbWVtY29udHJvbC5oCj4gPiBpbmRleCA4OWIxNDcyOWQ1OWYuLjJiZmRjYzc3 NjQ4YSAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCj4gPiArKysg Yi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAo+ID4gQEAgLTQzOCw2ICs0MzgsNyBAQCBzdGF0 aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX2ZvbGlvX29iamNnKHN0cnVjdCBmb2xpbyAq Zm9saW8pCj4gPiAgICogLSBMUlUgaXNvbGF0aW9uCj4gPiAgICogLSBsb2NrX3BhZ2VfbWVtY2co KQo+ID4gICAqIC0gZXhjbHVzaXZlIHJlZmVyZW5jZQo+ID4gKyAqIC0gbWVtX2Nncm91cF90cnls b2NrX3BhZ2VzKCkKPiA+ICAgKgo+ID4gICAqIEZvciBhIGttZW0gZm9saW8gYSBjYWxsZXIgc2hv dWxkIGhvbGQgYW4gcmN1IHJlYWQgbG9jayB0byBwcm90ZWN0IG1lbWNnCj4gPiAgICogYXNzb2Np YXRlZCB3aXRoIGEga21lbSBmb2xpbyBmcm9tIGJlaW5nIHJlbGVhc2VkLgo+ID4gQEAgLTQ5OSw2 ICs1MDAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZ19y Y3Uoc3RydWN0IGZvbGlvICpmb2xpbykKPiA+ICAgKiAtIExSVSBpc29sYXRpb24KPiA+ICAgKiAt IGxvY2tfcGFnZV9tZW1jZygpCj4gPiAgICogLSBleGNsdXNpdmUgcmVmZXJlbmNlCj4gPiArICog LSBtZW1fY2dyb3VwX3RyeWxvY2tfcGFnZXMoKQo+ID4gICAqCj4gPiAgICogRm9yIGEga21lbSBw YWdlIGEgY2FsbGVyIHNob3VsZCBob2xkIGFuIHJjdSByZWFkIGxvY2sgdG8gcHJvdGVjdCBtZW1j Zwo+ID4gICAqIGFzc29jaWF0ZWQgd2l0aCBhIGttZW0gcGFnZSBmcm9tIGJlaW5nIHJlbGVhc2Vk Lgo+ID4gQEAgLTk0OCw2ICs5NTAsMjMgQEAgdm9pZCB1bmxvY2tfcGFnZV9tZW1jZyhzdHJ1Y3Qg cGFnZSAqcGFnZSk7Cj4gPgo+ID4gIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9j Z3JvdXAgKm1lbWNnLCBpbnQgaWR4LCBpbnQgdmFsKTsKPiA+Cj4gPiArLyogdHJ5IHRvIHN0YWJs aXplIGZvbGlvX21lbWNnKCkgZm9yIGFsbCB0aGUgcGFnZXMgaW4gYSBtZW1jZyAqLwo+ID4gK3N0 YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3RyeWxvY2tfcGFnZXMoc3RydWN0IG1lbV9jZ3Jv dXAgKm1lbWNnKQo+ID4gK3sKPiA+ICsgICAgICAgcmN1X3JlYWRfbG9jaygpOwo+ID4gKwo+ID4g KyAgICAgICBpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFhdG9taWNfcmVhZCgmbWVtY2ct Pm1vdmluZ19hY2NvdW50KSkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPiA+ICsK PiA+ICsgICAgICAgcmN1X3JlYWRfdW5sb2NrKCk7Cj4gPiArICAgICAgIHJldHVybiBmYWxzZTsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5sb2NrX3Bh Z2VzKHZvaWQpCj4gPiArewo+ID4gKyAgICAgICByY3VfcmVhZF91bmxvY2soKTsKPiA+ICt9Cj4g PiArCj4gPiAgLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5v ZGVfc3RhdF9pdGVtICovCj4gPiAgc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19zdGF0ZShz dHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBpZHgsIGludCB2YWwpCj4gPiBAQCAtMTM4Niw2ICsxNDA1LDE4IEBAIHN0YXRp YyBpbmxpbmUgdm9pZCBmb2xpb19tZW1jZ191bmxvY2soc3RydWN0IGZvbGlvICpmb2xpbykKPiA+ ICB7Cj4gPiAgfQo+ID4KPiA+ICtzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF90cnlsb2Nr X3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKPiA+ICt7Cj4gPiArICAgICAgIC8qIHRv IG1hdGNoIGZvbGlvX21lbWNnX3JjdSgpICovCj4gPiArICAgICAgIHJjdV9yZWFkX2xvY2soKTsK PiA+ICsgICAgICAgcmV0dXJuIHRydWU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUg dm9pZCBtZW1fY2dyb3VwX3VubG9ja19wYWdlcyh2b2lkKQo+ID4gK3sKPiA+ICsgICAgICAgcmN1 X3JlYWRfdW5sb2NrKCk7Cj4gPiArfQo+ID4gKwo+ID4gIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1f Y2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2godm9pZCkKPiA+ICB7Cj4gPiAgfQo+ID4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAo+ID4gaW5kZXggODk0 YzI4OWMyYzA2Li40ZThhYjRhZDQ0NzMgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L21t LmgKPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvbW0uaAo+ID4gQEAgLTE1MjMsNiArMTUyMywxMSBA QCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fcGZuKHN0cnVjdCBmb2xpbyAqZm9s aW8pCj4gPiAgICAgICAgIHJldHVybiBwYWdlX3RvX3BmbigmZm9saW8tPnBhZ2UpOwo+ID4gIH0K PiA+Cj4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnBmbl9mb2xpbyh1bnNpZ25lZCBs b25nIHBmbikKPiA+ICt7Cj4gPiArICAgICAgIHJldHVybiBwYWdlX2ZvbGlvKHBmbl90b19wYWdl KHBmbikpOwo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgaW5saW5lIGF0b21pY190ICpmb2xpb19w aW5jb3VudF9wdHIoc3RydWN0IGZvbGlvICpmb2xpbykKPiA+ICB7Cj4gPiAgICAgICAgIHJldHVy biAmZm9saW9fcGFnZShmb2xpbywgMSktPmNvbXBvdW5kX3BpbmNvdW50Owo+ID4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCj4gPiBp bmRleCAyZDAyM2QyNDNlNzMuLmYwYjk4MDM2MjE4NiAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUv bGludXgvbW16b25lLmgKPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKPiA+IEBAIC0z NzQsNiArMzc0LDcgQEAgZW51bSBscnV2ZWNfZmxhZ3Mgewo+ID4gICNpZm5kZWYgX19HRU5FUkFU SU5HX0JPVU5EU19ICj4gPgo+ID4gIHN0cnVjdCBscnV2ZWM7Cj4gPiArc3RydWN0IHBhZ2Vfdm1h X21hcHBlZF93YWxrOwo+ID4KPiA+ICAjZGVmaW5lIExSVV9HRU5fTUFTSyAgICAgICAgICAgKChC SVQoTFJVX0dFTl9XSURUSCkgLSAxKSA8PCBMUlVfR0VOX1BHT0ZGKQo+ID4gICNkZWZpbmUgTFJV X1JFRlNfTUFTSyAgICAgICAgICAoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSA8PCBMUlVfUkVG U19QR09GRikKPiA+IEBAIC00MjksNiArNDMwLDcgQEAgc3RydWN0IGxydV9nZW5fc3RydWN0IHsK PiA+ICB9Owo+ID4KPiA+ICB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAq bHJ1dmVjKTsKPiA+ICt2b2lkIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21h cHBlZF93YWxrICpwdm13KTsKPiA+Cj4gPiAgI2lmZGVmIENPTkZJR19NRU1DRwo+ID4gIHZvaWQg bHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7Cj4gPiBAQCAtNDQx LDYgKzQ0MywxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1 Y3QgbHJ1dmVjICpscnV2ZWMpCj4gPiAgewo+ID4gIH0KPiA+Cj4gPiArc3RhdGljIGlubGluZSB2 b2lkIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13 KQo+ID4gK3sKPiA+ICt9Cj4gPiArCj4gPiAgI2lmZGVmIENPTkZJR19NRU1DRwo+ID4gIHN0YXRp YyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNn KQo+ID4gIHsKPiA+IGRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAo+ ID4gaW5kZXggY2YxNjI4MGNlMTMyLi41OWQyNDIyYjY0N2QgMTAwNjQ0Cj4gPiAtLS0gYS9tbS9p bnRlcm5hbC5oCj4gPiArKysgYi9tbS9pbnRlcm5hbC5oCj4gPiBAQCAtNjgsNiArNjgsNyBAQCB2 bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7Cj4gPiAgdm9pZCBm b2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7Cj4gPiAgYm9vbCBf X2ZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbyk7Cj4gPiAgdm9pZCBkZWFj dGl2YXRlX2ZpbGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7Cj4gPiArdm9pZCBmb2xpb19h Y3RpdmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKPiA+Cj4gPiAgdm9pZCBmcmVlX3BndGFibGVz KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3RhcnRfdm1h LAo+ID4gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxvb3IsIHVuc2lnbmVkIGxvbmcg Y2VpbGluZyk7Cj4gPiBkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJv bC5jCj4gPiBpbmRleCAyZWUwNzRmODBlNzIuLjk4YWE3MjBhYzYzOSAxMDA2NDQKPiA+IC0tLSBh L21tL21lbWNvbnRyb2wuYwo+ID4gKysrIGIvbW0vbWVtY29udHJvbC5jCj4gPiBAQCAtMjc2OSw2 ICsyNzY5LDcgQEAgc3RhdGljIHZvaWQgY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlv LCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCj4gPiAgICAgICAgICAqIC0gTFJVIGlzb2xhdGlv bgo+ID4gICAgICAgICAgKiAtIGxvY2tfcGFnZV9tZW1jZygpCj4gPiAgICAgICAgICAqIC0gZXhj bHVzaXZlIHJlZmVyZW5jZQo+ID4gKyAgICAgICAgKiAtIG1lbV9jZ3JvdXBfdHJ5bG9ja19wYWdl cygpCj4gPiAgICAgICAgICAqLwo+ID4gICAgICAgICBmb2xpby0+bWVtY2dfZGF0YSA9ICh1bnNp Z25lZCBsb25nKW1lbWNnOwo+ID4gIH0KPiA+IGRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9y bWFwLmMKPiA+IGluZGV4IGZlZGI4MjM3MWVmZS4uN2NiN2VmMjkwODhhIDEwMDY0NAo+ID4gLS0t IGEvbW0vcm1hcC5jCj4gPiArKysgYi9tbS9ybWFwLmMKPiA+IEBAIC03Myw2ICs3Myw3IEBACj4g PiAgI2luY2x1ZGUgPGxpbnV4L3BhZ2VfaWRsZS5oPgo+ID4gICNpbmNsdWRlIDxsaW51eC9tZW1y ZW1hcC5oPgo+ID4gICNpbmNsdWRlIDxsaW51eC91c2VyZmF1bHRmZF9rLmg+Cj4gPiArI2luY2x1 ZGUgPGxpbnV4L21tX2lubGluZS5oPgo+ID4KPiA+ICAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+ Cj4gPgo+ID4gQEAgLTgyMSw2ICs4MjIsMTIgQEAgc3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNl ZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywKPiA+ICAgICAgICAgICAgICAgICB9Cj4gPgo+ID4g ICAgICAgICAgICAgICAgIGlmIChwdm13LnB0ZSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGxydV9nZW5fZW5hYmxlZCgpICYmIHB0ZV95b3VuZygqcHZtdy5wdGUpICYmCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgISh2bWEtPnZtX2ZsYWdzICYgKFZNX1NFUV9SRUFE IHwgVk1fUkFORF9SRUFEKSkpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bHJ1X2dlbl9sb29rX2Fyb3VuZCgmcHZtdyk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlZmVyZW5jZWQrKzsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0KPiA+ICsK PiA+ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nX25v dGlmeSh2bWEsIGFkZHJlc3MsCj4KPiBIZWxsbywgWXUuCj4gbG9va19hcm91bmQoKSBpcyBjYWxs aW5nIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcocHZtdy0+dm1hLCBhZGRyLCBwdGUgKyBpKQo+ IG9ubHkgd2l0aG91dCBmbHVzaCBhbmQgbm90aWZ5LiBmb3IgZmx1c2gsIHRoZXJlIGlzIGEgdGxi IG9wZXJhdGlvbiBmb3IgYXJtNjQ6Cj4gc3RhdGljIGlubGluZSBpbnQgcHRlcF9jbGVhcl9mbHVz aF95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAp Cj4gewo+ICAgICAgICAgaW50IHlvdW5nID0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEs IGFkZHJlc3MsIHB0ZXApOwo+Cj4gICAgICAgICBpZiAoeW91bmcpIHsKPiAgICAgICAgICAgICAg ICAgLyoKPiAgICAgICAgICAgICAgICAgICogV2UgY2FuIGVsaWRlIHRoZSB0cmFpbGluZyBEU0Ig aGVyZSBzaW5jZSB0aGUgd29yc3QgdGhhdCBjYW4KPiAgICAgICAgICAgICAgICAgICogaGFwcGVu IGlzIHRoYXQgYSBDUFUgY29udGludWVzIHRvIHVzZSB0aGUgeW91bmcgZW50cnkgaW4gaXRzCj4g ICAgICAgICAgICAgICAgICAqIFRMQiBhbmQgd2UgbWlzdGFrZW5seSByZWNsYWltIHRoZSBhc3Nv Y2lhdGVkIHBhZ2UuIFRoZQo+ICAgICAgICAgICAgICAgICAgKiB3aW5kb3cgZm9yIHN1Y2ggYW4g ZXZlbnQgaXMgYm91bmRlZCBieSB0aGUgbmV4dAo+ICAgICAgICAgICAgICAgICAgKiBjb250ZXh0 LXN3aXRjaCwgd2hpY2ggcHJvdmlkZXMgYSBEU0IgdG8gY29tcGxldGUgdGhlIFRMQgo+ICAgICAg ICAgICAgICAgICAgKiBpbnZhbGlkYXRpb24uCj4gICAgICAgICAgICAgICAgICAqLwo+ICAgICAg ICAgICAgICAgICBmbHVzaF90bGJfcGFnZV9ub3N5bmModm1hLCBhZGRyZXNzKTsKPiAgICAgICAg IH0KPgo+ICAgICAgICAgcmV0dXJuIHlvdW5nOwo+IH0KPgo+IERvZXMgaXQgbWVhbiB0aGUgY3Vy cmVudCBrZXJuZWwgaXMgb3ZlciBjYXV0aW91cz8gIGlzIGl0Cj4gc2FmZSB0byBjYWxsIHB0ZXBf dGVzdF9hbmRfY2xlYXJfeW91bmcoKSBvbmx5PwoKSSBjYW4ndCByZWFsbHkgZXhwbGFpbiB3aHkg d2UgYXJlIGdldHRpbmcgYSByYW5kb20gYXBwL2phdmEgdm0gY3Jhc2ggaW4gbW9ua2V5CnRlc3Qg YnkgdXNpbmcgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIG9ubHkgaW4gbHJ1X2dlbl9sb29r X2Fyb3VuZCgpIG9uIGFuCmFybXY4LWEgbWFjaGluZSB3aXRob3V0IGhhcmR3YXJlIFBURSB5b3Vu ZyBzdXBwb3J0LgoKTW92aW5nIHRvICBwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKCkgaW4gbG9va19h cm91bmQgY2FuIG1ha2UgdGhlIHJhbmRvbQpoYW5nIGRpc2FwcGVhciBhY2NvcmRpbmcgdG8gemhh bnl1YW4oQ2MtZWQpLgoKT24geDg2LCBwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKCkgaXMgZXhhY3Rs eSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkKYWZ0ZXIKICdjb21taXQgYjEzYjFkMmQ4Njky ICgieDg2L21tOiBJbiB0aGUgUFRFIHN3YXBvdXQgcGFnZSByZWNsYWltIGNhc2UgY2xlYXIKdGhl IGFjY2Vzc2VkIGJpdCBpbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBUTEIiKScKCkJ1dCBvbiBhcm02 NCwgdGhleSBhcmUgZGlmZmVyZW50LiBhY2NvcmRpbmcgdG8gV2lsbCdzIGNvbW1lbnRzIGluIHRo aXMKdGhyZWFkIHdoaWNoCnRyaWVkIHRvIG1ha2UgYXJtNjQgc2FtZSB3aXRoIHg4NiwKaHR0cHM6 Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9saW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnL21zZzE3 OTM4ODEuaHRtbAoKIgpUaGlzIGlzIGJsaW5kbHkgY29waWVkIGZyb20geDg2IGFuZCBpc24ndCB0 cnVlIGZvciB1czogd2UgZG9uJ3QgaW52YWxpZGF0ZQp0aGUgVExCIG9uIGNvbnRleHQgc3dpdGNo LiBUaGF0IG1lYW5zIG91ciB3aW5kb3cgZm9yIGtlZXBpbmcgdGhlIHN0YWxlCmVudHJpZXMgYXJv dW5kIGlzIHBvdGVudGlhbGx5IG11Y2ggYmlnZ2VyIGFuZCBtaWdodCBub3QgYmUgYSBncmVhdCBp ZGVhLgoKSWYgd2Ugcm9sbCBhIFRMQiBpbnZhbGlkYXRpb24gcm91dGluZSB3aXRob3V0IHRoZSB0 cmFpbGluZyBEU0IsIHdoYXQgc29ydCBvZgpwZXJmb3JtYW5jZSBkb2VzIHRoYXQgZ2V0IHlvdT8K IgpXZSBzaG91bGRuJ3QgdGhpbmsgcHRlcF9jbGVhcl9mbHVzaF95b3VuZygpIGlzIHNhZmUgZW5v dWdoIGluIExSVSB0bwpjbGVhciBQVEUgeW91bmc/IEFueSBjb21tZW50cyBmcm9tIFdpbGw/Cgo+ Cj4gYnR3LCBscnVfZ2VuX2xvb2tfYXJvdW5kKCkgaGFzIGFscmVhZHkgaW5jbHVkZWQgJ2FkZHJl c3MnLCBhcmUgd2UgZG9pbmcKPiBwdGUgY2hlY2sgZm9yICdhZGRyZXNzJyB0d2ljZSBoZXJlPwo+ CgpUaGFua3MKQmFycnkKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LWFybS1rZXJuZWwK