From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0E7C1C3B for ; Thu, 27 Oct 2022 12:55:37 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 231D3C433B5; Thu, 27 Oct 2022 12:55:31 +0000 (UTC) From: Huacai Chen To: Arnd Bergmann , Huacai Chen , Thomas Bogendoerfer , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Catalin Marinas , Will Deacon , Dinh Nguyen Cc: loongarch@lists.linux.dev, linux-arch@vger.kernel.org, Xuefeng Li , Guo Ren , Xuerui Wang , Jiaxun Yang , Andrew Morton , linux-mm@kvack.org, linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Feiyang Chen , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Huacai Chen Subject: [PATCH V14 1/4] MIPS&LoongArch&NIOS2: Adjust prototypes of p?d_init() Date: Thu, 27 Oct 2022 20:52:50 +0800 Message-Id: <20221027125253.3458989-2-chenhuacai@loongson.cn> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20221027125253.3458989-1-chenhuacai@loongson.cn> References: <20221027125253.3458989-1-chenhuacai@loongson.cn> Precedence: bulk X-Mailing-List: loongarch@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Feiyang Chen We are preparing to add sparse vmemmap support to LoongArch. MIPS and LoongArch need to call pgd_init()/pud_init()/pmd_init() when populating page tables, so adjust their prototypes to make generic helpers can call them. NIOS2 declares pmd_init() but doesn't use, just remove it to avoid build errors. Reviewed-by: Jiaxun Yang Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Feiyang Chen Signed-off-by: Huacai Chen --- arch/loongarch/include/asm/pgalloc.h | 13 ++----------- arch/loongarch/include/asm/pgtable.h | 8 ++++---- arch/loongarch/kernel/numa.c | 4 ++-- arch/loongarch/mm/pgtable.c | 23 +++++++++++++---------- arch/mips/include/asm/pgalloc.h | 10 +++++----- arch/mips/include/asm/pgtable-64.h | 8 ++++---- arch/mips/kvm/mmu.c | 3 +-- arch/mips/mm/pgtable-32.c | 9 ++++----- arch/mips/mm/pgtable-64.c | 18 ++++++++++-------- arch/mips/mm/pgtable.c | 2 +- arch/nios2/include/asm/pgalloc.h | 5 ----- 11 files changed, 46 insertions(+), 57 deletions(-) diff --git a/arch/loongarch/include/asm/pgalloc.h b/arch/loongarch/include/asm/pgalloc.h index 4bfeb3c9c9ac..af1d1e4a6965 100644 --- a/arch/loongarch/include/asm/pgalloc.h +++ b/arch/loongarch/include/asm/pgalloc.h @@ -42,15 +42,6 @@ static inline void p4d_populate(struct mm_struct *mm, p4d_t *p4d, pud_t *pud) extern void pagetable_init(void); -/* - * Initialize a new pmd table with invalid pointers. - */ -extern void pmd_init(unsigned long page, unsigned long pagetable); - -/* - * Initialize a new pgd / pmd table with invalid pointers. - */ -extern void pgd_init(unsigned long page); extern pgd_t *pgd_alloc(struct mm_struct *mm); #define __pte_free_tlb(tlb, pte, address) \ @@ -76,7 +67,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) } pmd = (pmd_t *)page_address(pg); - pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table); + pmd_init(pmd); return pmd; } @@ -92,7 +83,7 @@ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address) pud = (pud_t *) __get_free_page(GFP_KERNEL); if (pud) - pud_init((unsigned long)pud, (unsigned long)invalid_pmd_table); + pud_init(pud); return pud; } diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/asm/pgtable.h index 946704bee599..72eb8bc352fb 100644 --- a/arch/loongarch/include/asm/pgtable.h +++ b/arch/loongarch/include/asm/pgtable.h @@ -237,11 +237,11 @@ extern void set_pmd_at(struct mm_struct *mm, unsigned long addr, pmd_t *pmdp, pm #define pfn_pmd(pfn, prot) __pmd(((pfn) << _PFN_SHIFT) | pgprot_val(prot)) /* - * Initialize a new pgd / pmd table with invalid pointers. + * Initialize a new pgd / pud / pmd table with invalid pointers. */ -extern void pgd_init(unsigned long page); -extern void pud_init(unsigned long page, unsigned long pagetable); -extern void pmd_init(unsigned long page, unsigned long pagetable); +extern void pgd_init(void *addr); +extern void pud_init(void *addr); +extern void pmd_init(void *addr); /* * Non-present pages: high 40 bits are offset, next 8 bits type, diff --git a/arch/loongarch/kernel/numa.c b/arch/loongarch/kernel/numa.c index a13f92593cfd..eb5d3a4c8a7a 100644 --- a/arch/loongarch/kernel/numa.c +++ b/arch/loongarch/kernel/numa.c @@ -78,7 +78,7 @@ void __init pcpu_populate_pte(unsigned long addr) new = memblock_alloc(PAGE_SIZE, PAGE_SIZE); pgd_populate(&init_mm, pgd, new); #ifndef __PAGETABLE_PUD_FOLDED - pud_init((unsigned long)new, (unsigned long)invalid_pmd_table); + pud_init(new); #endif } @@ -89,7 +89,7 @@ void __init pcpu_populate_pte(unsigned long addr) new = memblock_alloc(PAGE_SIZE, PAGE_SIZE); pud_populate(&init_mm, pud, new); #ifndef __PAGETABLE_PMD_FOLDED - pmd_init((unsigned long)new, (unsigned long)invalid_pte_table); + pmd_init(new); #endif } diff --git a/arch/loongarch/mm/pgtable.c b/arch/loongarch/mm/pgtable.c index ee179ccd3e3f..36a6dc0148ae 100644 --- a/arch/loongarch/mm/pgtable.c +++ b/arch/loongarch/mm/pgtable.c @@ -16,7 +16,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm) ret = (pgd_t *) __get_free_page(GFP_KERNEL); if (ret) { init = pgd_offset(&init_mm, 0UL); - pgd_init((unsigned long)ret); + pgd_init(ret); memcpy(ret + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD, (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); } @@ -25,7 +25,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm) } EXPORT_SYMBOL_GPL(pgd_alloc); -void pgd_init(unsigned long page) +void pgd_init(void *addr) { unsigned long *p, *end; unsigned long entry; @@ -38,7 +38,7 @@ void pgd_init(unsigned long page) entry = (unsigned long)invalid_pte_table; #endif - p = (unsigned long *) page; + p = (unsigned long *)addr; end = p + PTRS_PER_PGD; do { @@ -56,11 +56,12 @@ void pgd_init(unsigned long page) EXPORT_SYMBOL_GPL(pgd_init); #ifndef __PAGETABLE_PMD_FOLDED -void pmd_init(unsigned long addr, unsigned long pagetable) +void pmd_init(void *addr) { unsigned long *p, *end; + unsigned long pagetable = (unsigned long)invalid_pte_table; - p = (unsigned long *) addr; + p = (unsigned long *)addr; end = p + PTRS_PER_PMD; do { @@ -79,9 +80,10 @@ EXPORT_SYMBOL_GPL(pmd_init); #endif #ifndef __PAGETABLE_PUD_FOLDED -void pud_init(unsigned long addr, unsigned long pagetable) +void pud_init(void *addr) { unsigned long *p, *end; + unsigned long pagetable = (unsigned long)invalid_pmd_table; p = (unsigned long *)addr; end = p + PTRS_PER_PUD; @@ -98,6 +100,7 @@ void pud_init(unsigned long addr, unsigned long pagetable) p[-1] = pagetable; } while (p != end); } +EXPORT_SYMBOL_GPL(pud_init); #endif pmd_t mk_pmd(struct page *page, pgprot_t prot) @@ -119,12 +122,12 @@ void set_pmd_at(struct mm_struct *mm, unsigned long addr, void __init pagetable_init(void) { /* Initialize the entire pgd. */ - pgd_init((unsigned long)swapper_pg_dir); - pgd_init((unsigned long)invalid_pg_dir); + pgd_init(swapper_pg_dir); + pgd_init(invalid_pg_dir); #ifndef __PAGETABLE_PUD_FOLDED - pud_init((unsigned long)invalid_pud_table, (unsigned long)invalid_pmd_table); + pud_init(invalid_pud_table); #endif #ifndef __PAGETABLE_PMD_FOLDED - pmd_init((unsigned long)invalid_pmd_table, (unsigned long)invalid_pte_table); + pmd_init(invalid_pmd_table); #endif } diff --git a/arch/mips/include/asm/pgalloc.h b/arch/mips/include/asm/pgalloc.h index 796035784c73..f72e737dda21 100644 --- a/arch/mips/include/asm/pgalloc.h +++ b/arch/mips/include/asm/pgalloc.h @@ -33,7 +33,7 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, /* * Initialize a new pmd table with invalid pointers. */ -extern void pmd_init(unsigned long page, unsigned long pagetable); +extern void pmd_init(void *addr); #ifndef __PAGETABLE_PMD_FOLDED @@ -44,9 +44,9 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) #endif /* - * Initialize a new pgd / pmd table with invalid pointers. + * Initialize a new pgd table with invalid pointers. */ -extern void pgd_init(unsigned long page); +extern void pgd_init(void *addr); extern pgd_t *pgd_alloc(struct mm_struct *mm); static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) @@ -77,7 +77,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) } pmd = (pmd_t *)page_address(pg); - pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table); + pmd_init(pmd); return pmd; } @@ -93,7 +93,7 @@ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address) pud = (pud_t *) __get_free_pages(GFP_KERNEL, PUD_TABLE_ORDER); if (pud) - pud_init((unsigned long)pud, (unsigned long)invalid_pmd_table); + pud_init(pud); return pud; } diff --git a/arch/mips/include/asm/pgtable-64.h b/arch/mips/include/asm/pgtable-64.h index 436c29d698fa..c6310192b654 100644 --- a/arch/mips/include/asm/pgtable-64.h +++ b/arch/mips/include/asm/pgtable-64.h @@ -313,11 +313,11 @@ static inline pmd_t *pud_pgtable(pud_t pud) #endif /* - * Initialize a new pgd / pmd table with invalid pointers. + * Initialize a new pgd / pud / pmd table with invalid pointers. */ -extern void pgd_init(unsigned long page); -extern void pud_init(unsigned long page, unsigned long pagetable); -extern void pmd_init(unsigned long page, unsigned long pagetable); +extern void pgd_init(void *addr); +extern void pud_init(void *addr); +extern void pmd_init(void *addr); /* * Non-present pages: high 40 bits are offset, next 8 bits type, diff --git a/arch/mips/kvm/mmu.c b/arch/mips/kvm/mmu.c index 74cd64a24d05..e8c08988ed37 100644 --- a/arch/mips/kvm/mmu.c +++ b/arch/mips/kvm/mmu.c @@ -122,8 +122,7 @@ static pte_t *kvm_mips_walk_pgd(pgd_t *pgd, struct kvm_mmu_memory_cache *cache, if (!cache) return NULL; new_pmd = kvm_mmu_memory_cache_alloc(cache); - pmd_init((unsigned long)new_pmd, - (unsigned long)invalid_pte_table); + pmd_init(new_pmd); pud_populate(NULL, pud, new_pmd); } pmd = pmd_offset(pud, addr); diff --git a/arch/mips/mm/pgtable-32.c b/arch/mips/mm/pgtable-32.c index 61891af25019..f57fb69472f8 100644 --- a/arch/mips/mm/pgtable-32.c +++ b/arch/mips/mm/pgtable-32.c @@ -13,9 +13,9 @@ #include #include -void pgd_init(unsigned long page) +void pgd_init(void *addr) { - unsigned long *p = (unsigned long *) page; + unsigned long *p = (unsigned long *)addr; int i; for (i = 0; i < USER_PTRS_PER_PGD; i+=8) { @@ -61,9 +61,8 @@ void __init pagetable_init(void) #endif /* Initialize the entire pgd. */ - pgd_init((unsigned long)swapper_pg_dir); - pgd_init((unsigned long)swapper_pg_dir - + sizeof(pgd_t) * USER_PTRS_PER_PGD); + pgd_init(swapper_pg_dir); + pgd_init(&swapper_pg_dir[USER_PTRS_PER_PGD]); pgd_base = swapper_pg_dir; diff --git a/arch/mips/mm/pgtable-64.c b/arch/mips/mm/pgtable-64.c index 7536f7804c44..b4386a0e2ef8 100644 --- a/arch/mips/mm/pgtable-64.c +++ b/arch/mips/mm/pgtable-64.c @@ -13,7 +13,7 @@ #include #include -void pgd_init(unsigned long page) +void pgd_init(void *addr) { unsigned long *p, *end; unsigned long entry; @@ -26,7 +26,7 @@ void pgd_init(unsigned long page) entry = (unsigned long)invalid_pte_table; #endif - p = (unsigned long *) page; + p = (unsigned long *) addr; end = p + PTRS_PER_PGD; do { @@ -43,11 +43,12 @@ void pgd_init(unsigned long page) } #ifndef __PAGETABLE_PMD_FOLDED -void pmd_init(unsigned long addr, unsigned long pagetable) +void pmd_init(void *addr) { unsigned long *p, *end; + unsigned long pagetable = (unsigned long)invalid_pte_table; - p = (unsigned long *) addr; + p = (unsigned long *)addr; end = p + PTRS_PER_PMD; do { @@ -66,9 +67,10 @@ EXPORT_SYMBOL_GPL(pmd_init); #endif #ifndef __PAGETABLE_PUD_FOLDED -void pud_init(unsigned long addr, unsigned long pagetable) +void pud_init(void *addr) { unsigned long *p, *end; + unsigned long pagetable = (unsigned long)invalid_pmd_table; p = (unsigned long *)addr; end = p + PTRS_PER_PUD; @@ -108,12 +110,12 @@ void __init pagetable_init(void) pgd_t *pgd_base; /* Initialize the entire pgd. */ - pgd_init((unsigned long)swapper_pg_dir); + pgd_init(swapper_pg_dir); #ifndef __PAGETABLE_PUD_FOLDED - pud_init((unsigned long)invalid_pud_table, (unsigned long)invalid_pmd_table); + pud_init(invalid_pud_table); #endif #ifndef __PAGETABLE_PMD_FOLDED - pmd_init((unsigned long)invalid_pmd_table, (unsigned long)invalid_pte_table); + pmd_init(invalid_pmd_table); #endif pgd_base = swapper_pg_dir; /* diff --git a/arch/mips/mm/pgtable.c b/arch/mips/mm/pgtable.c index 3b7590660a04..b13314be5d0e 100644 --- a/arch/mips/mm/pgtable.c +++ b/arch/mips/mm/pgtable.c @@ -15,7 +15,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm) ret = (pgd_t *) __get_free_pages(GFP_KERNEL, PGD_TABLE_ORDER); if (ret) { init = pgd_offset(&init_mm, 0UL); - pgd_init((unsigned long)ret); + pgd_init(ret); memcpy(ret + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD, (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); } diff --git a/arch/nios2/include/asm/pgalloc.h b/arch/nios2/include/asm/pgalloc.h index 3c4ae74d5798..ecd1657bb2ce 100644 --- a/arch/nios2/include/asm/pgalloc.h +++ b/arch/nios2/include/asm/pgalloc.h @@ -26,11 +26,6 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, set_pmd(pmd, __pmd((unsigned long)page_address(pte))); } -/* - * Initialize a new pmd table with invalid pointers. - */ -extern void pmd_init(unsigned long page, unsigned long pagetable); - extern pgd_t *pgd_alloc(struct mm_struct *mm); #define __pte_free_tlb(tlb, pte, addr) \ -- 2.31.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 9BE97FA3740 for ; Thu, 27 Oct 2022 12:58:21 +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:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zgUF6QJGJMqPOpEHNy+6jxB5BIbKn24+Fnf9P+fTDyM=; b=0dqMlh/dhCj2jl 5OJ9F1PAwzmadMnls4QVkrCMCASNEbZtL7OLBGob9my0JM+fSJ7MupDNcvmT37c/1fLBMg9uvjdoO zVfA1LM5qD6Xgn7oVQr6s1gh2q1VfaLnSuxuXGIOPfRYXu+FvojwNRKC70ik9R0nt4gezc4QOqQr3 Q1k80MOMxw5LJp1WPCiTkVjNe3rhz5zq6EO+EXOZGkw6TOdUAPa6CTKfblCTdV5sFcnIEUxW9Nxvn ExAna7lToD9WHseXl6Ng/kCq57jfx6YKeCiDft3sDltxo3YFBYE7/pEZ8eYXnXFnMLdIlwe551lA0 bsXU07MJ/r55eTE6wGSw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oo2RY-00DGm8-Qo; Thu, 27 Oct 2022 12:57:09 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oo2QC-00DG82-FH for linux-arm-kernel@lists.infradead.org; Thu, 27 Oct 2022 12:55:48 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id 13B92CE265D; Thu, 27 Oct 2022 12:55:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 231D3C433B5; Thu, 27 Oct 2022 12:55:31 +0000 (UTC) From: Huacai Chen To: Arnd Bergmann , Huacai Chen , Thomas Bogendoerfer , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Catalin Marinas , Will Deacon , Dinh Nguyen Cc: loongarch@lists.linux.dev, linux-arch@vger.kernel.org, Xuefeng Li , Guo Ren , Xuerui Wang , Jiaxun Yang , Andrew Morton , linux-mm@kvack.org, linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Feiyang Chen , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Huacai Chen Subject: [PATCH V14 1/4] MIPS&LoongArch&NIOS2: Adjust prototypes of p?d_init() Date: Thu, 27 Oct 2022 20:52:50 +0800 Message-Id: <20221027125253.3458989-2-chenhuacai@loongson.cn> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20221027125253.3458989-1-chenhuacai@loongson.cn> References: <20221027125253.3458989-1-chenhuacai@loongson.cn> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221027_055546_216290_078E6937 X-CRM114-Status: GOOD ( 19.44 ) 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 RnJvbTogRmVpeWFuZyBDaGVuIDxjaGVuZmVpeWFuZ0Bsb29uZ3Nvbi5jbj4KCldlIGFyZSBwcmVw YXJpbmcgdG8gYWRkIHNwYXJzZSB2bWVtbWFwIHN1cHBvcnQgdG8gTG9vbmdBcmNoLiBNSVBTIGFu ZApMb29uZ0FyY2ggbmVlZCB0byBjYWxsIHBnZF9pbml0KCkvcHVkX2luaXQoKS9wbWRfaW5pdCgp IHdoZW4gcG9wdWxhdGluZwpwYWdlIHRhYmxlcywgc28gYWRqdXN0IHRoZWlyIHByb3RvdHlwZXMg dG8gbWFrZSBnZW5lcmljIGhlbHBlcnMgY2FuIGNhbGwKdGhlbS4KCk5JT1MyIGRlY2xhcmVzIHBt ZF9pbml0KCkgYnV0IGRvZXNuJ3QgdXNlLCBqdXN0IHJlbW92ZSBpdCB0byBhdm9pZCBidWlsZApl cnJvcnMuCgpSZXZpZXdlZC1ieTogSmlheHVuIFlhbmcgPGppYXh1bi55YW5nQGZseWdvYXQuY29t PgpSZXZpZXdlZC1ieTogUGhpbGlwcGUgTWF0aGlldS1EYXVkw6kgPHBoaWxtZEBsaW5hcm8ub3Jn PgpTaWduZWQtb2ZmLWJ5OiBGZWl5YW5nIENoZW4gPGNoZW5mZWl5YW5nQGxvb25nc29uLmNuPgpT aWduZWQtb2ZmLWJ5OiBIdWFjYWkgQ2hlbiA8Y2hlbmh1YWNhaUBsb29uZ3Nvbi5jbj4KLS0tCiBh cmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggfCAxMyArKy0tLS0tLS0tLS0tCiBh cmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggfCAgOCArKysrLS0tLQogYXJjaC9s b29uZ2FyY2gva2VybmVsL251bWEuYyAgICAgICAgIHwgIDQgKystLQogYXJjaC9sb29uZ2FyY2gv bW0vcGd0YWJsZS5jICAgICAgICAgIHwgMjMgKysrKysrKysrKysrKy0tLS0tLS0tLS0KIGFyY2gv bWlwcy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggICAgICB8IDEwICsrKysrLS0tLS0KIGFyY2gvbWlw cy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0LmggICB8ICA4ICsrKystLS0tCiBhcmNoL21pcHMva3Zt L21tdS5jICAgICAgICAgICAgICAgICAgfCAgMyArLS0KIGFyY2gvbWlwcy9tbS9wZ3RhYmxlLTMy LmMgICAgICAgICAgICB8ICA5ICsrKystLS0tLQogYXJjaC9taXBzL21tL3BndGFibGUtNjQuYyAg ICAgICAgICAgIHwgMTggKysrKysrKysrKy0tLS0tLS0tCiBhcmNoL21pcHMvbW0vcGd0YWJsZS5j ICAgICAgICAgICAgICAgfCAgMiArLQogYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgg ICAgIHwgIDUgLS0tLS0KIDExIGZpbGVzIGNoYW5nZWQsIDQ2IGluc2VydGlvbnMoKyksIDU3IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BnYWxs b2MuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCA0YmZlYjNj OWM5YWMuLmFmMWQxZTRhNjk2NSAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9h c20vcGdhbGxvYy5oCisrKyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApA QCAtNDIsMTUgKzQyLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHA0ZF9wb3B1bGF0ZShzdHJ1Y3Qg bW1fc3RydWN0ICptbSwgcDRkX3QgKnA0ZCwgcHVkX3QgKnB1ZCkKIAogZXh0ZXJuIHZvaWQgcGFn ZXRhYmxlX2luaXQodm9pZCk7CiAKLS8qCi0gKiBJbml0aWFsaXplIGEgbmV3IHBtZCB0YWJsZSB3 aXRoIGludmFsaWQgcG9pbnRlcnMuCi0gKi8KLWV4dGVybiB2b2lkIHBtZF9pbml0KHVuc2lnbmVk IGxvbmcgcGFnZSwgdW5zaWduZWQgbG9uZyBwYWdldGFibGUpOwotCi0vKgotICogSW5pdGlhbGl6 ZSBhIG5ldyBwZ2QgLyBwbWQgdGFibGUgd2l0aCBpbnZhbGlkIHBvaW50ZXJzLgotICovCi1leHRl cm4gdm9pZCBwZ2RfaW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UpOwogZXh0ZXJuIHBnZF90ICpwZ2Rf YWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCiAjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRs YiwgcHRlLCBhZGRyZXNzKQkJCVwKQEAgLTc2LDcgKzY3LDcgQEAgc3RhdGljIGlubGluZSBwbWRf dCAqcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRy ZXNzKQogCX0KIAogCXBtZCA9IChwbWRfdCAqKXBhZ2VfYWRkcmVzcyhwZyk7Ci0JcG1kX2luaXQo KHVuc2lnbmVkIGxvbmcpcG1kLCAodW5zaWduZWQgbG9uZylpbnZhbGlkX3B0ZV90YWJsZSk7CisJ cG1kX2luaXQocG1kKTsKIAlyZXR1cm4gcG1kOwogfQogCkBAIC05Miw3ICs4Myw3IEBAIHN0YXRp YyBpbmxpbmUgcHVkX3QgKnB1ZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2ln bmVkIGxvbmcgYWRkcmVzcykKIAogCXB1ZCA9IChwdWRfdCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQ X0tFUk5FTCk7CiAJaWYgKHB1ZCkKLQkJcHVkX2luaXQoKHVuc2lnbmVkIGxvbmcpcHVkLCAodW5z aWduZWQgbG9uZylpbnZhbGlkX3BtZF90YWJsZSk7CisJCXB1ZF9pbml0KHB1ZCk7CiAJcmV0dXJu IHB1ZDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJs ZS5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDk0NjcwNGJl ZTU5OS4uNzJlYjhiYzM1MmZiIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2Fz bS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBA IC0yMzcsMTEgKzIzNywxMSBAQCBleHRlcm4gdm9pZCBzZXRfcG1kX2F0KHN0cnVjdCBtbV9zdHJ1 Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwLCBwbQogI2RlZmluZSBwZm5f cG1kKHBmbiwgcHJvdCkJX19wbWQoKChwZm4pIDw8IF9QRk5fU0hJRlQpIHwgcGdwcm90X3ZhbChw cm90KSkKIAogLyoKLSAqIEluaXRpYWxpemUgYSBuZXcgcGdkIC8gcG1kIHRhYmxlIHdpdGggaW52 YWxpZCBwb2ludGVycy4KKyAqIEluaXRpYWxpemUgYSBuZXcgcGdkIC8gcHVkIC8gcG1kIHRhYmxl IHdpdGggaW52YWxpZCBwb2ludGVycy4KICAqLwotZXh0ZXJuIHZvaWQgcGdkX2luaXQodW5zaWdu ZWQgbG9uZyBwYWdlKTsKLWV4dGVybiB2b2lkIHB1ZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSwg dW5zaWduZWQgbG9uZyBwYWdldGFibGUpOwotZXh0ZXJuIHZvaWQgcG1kX2luaXQodW5zaWduZWQg bG9uZyBwYWdlLCB1bnNpZ25lZCBsb25nIHBhZ2V0YWJsZSk7CitleHRlcm4gdm9pZCBwZ2RfaW5p dCh2b2lkICphZGRyKTsKK2V4dGVybiB2b2lkIHB1ZF9pbml0KHZvaWQgKmFkZHIpOworZXh0ZXJu IHZvaWQgcG1kX2luaXQodm9pZCAqYWRkcik7CiAKIC8qCiAgKiBOb24tcHJlc2VudCBwYWdlczog IGhpZ2ggNDAgYml0cyBhcmUgb2Zmc2V0LCBuZXh0IDggYml0cyB0eXBlLApkaWZmIC0tZ2l0IGEv YXJjaC9sb29uZ2FyY2gva2VybmVsL251bWEuYyBiL2FyY2gvbG9vbmdhcmNoL2tlcm5lbC9udW1h LmMKaW5kZXggYTEzZjkyNTkzY2ZkLi5lYjVkM2E0YzhhN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9v bmdhcmNoL2tlcm5lbC9udW1hLmMKKysrIGIvYXJjaC9sb29uZ2FyY2gva2VybmVsL251bWEuYwpA QCAtNzgsNyArNzgsNyBAQCB2b2lkIF9faW5pdCBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBs b25nIGFkZHIpCiAJCW5ldyA9IG1lbWJsb2NrX2FsbG9jKFBBR0VfU0laRSwgUEFHRV9TSVpFKTsK IAkJcGdkX3BvcHVsYXRlKCZpbml0X21tLCBwZ2QsIG5ldyk7CiAjaWZuZGVmIF9fUEFHRVRBQkxF X1BVRF9GT0xERUQKLQkJcHVkX2luaXQoKHVuc2lnbmVkIGxvbmcpbmV3LCAodW5zaWduZWQgbG9u ZylpbnZhbGlkX3BtZF90YWJsZSk7CisJCXB1ZF9pbml0KG5ldyk7CiAjZW5kaWYKIAl9CiAKQEAg LTg5LDcgKzg5LDcgQEAgdm9pZCBfX2luaXQgcGNwdV9wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9u ZyBhZGRyKQogCQluZXcgPSBtZW1ibG9ja19hbGxvYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7CiAJ CXB1ZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcHVkLCBuZXcpOwogI2lmbmRlZiBfX1BBR0VUQUJMRV9Q TURfRk9MREVECi0JCXBtZF9pbml0KCh1bnNpZ25lZCBsb25nKW5ldywgKHVuc2lnbmVkIGxvbmcp aW52YWxpZF9wdGVfdGFibGUpOworCQlwbWRfaW5pdChuZXcpOwogI2VuZGlmCiAJfQogCmRpZmYg LS1naXQgYS9hcmNoL2xvb25nYXJjaC9tbS9wZ3RhYmxlLmMgYi9hcmNoL2xvb25nYXJjaC9tbS9w Z3RhYmxlLmMKaW5kZXggZWUxNzljY2QzZTNmLi4zNmE2ZGMwMTQ4YWUgMTAwNjQ0Ci0tLSBhL2Fy Y2gvbG9vbmdhcmNoL21tL3BndGFibGUuYworKysgYi9hcmNoL2xvb25nYXJjaC9tbS9wZ3RhYmxl LmMKQEAgLTE2LDcgKzE2LDcgQEAgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICpt bSkKIAlyZXQgPSAocGdkX3QgKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwogCWlmIChy ZXQpIHsKIAkJaW5pdCA9IHBnZF9vZmZzZXQoJmluaXRfbW0sIDBVTCk7Ci0JCXBnZF9pbml0KCh1 bnNpZ25lZCBsb25nKXJldCk7CisJCXBnZF9pbml0KHJldCk7CiAJCW1lbWNweShyZXQgKyBVU0VS X1BUUlNfUEVSX1BHRCwgaW5pdCArIFVTRVJfUFRSU19QRVJfUEdELAogCQkgICAgICAgKFBUUlNf UEVSX1BHRCAtIFVTRVJfUFRSU19QRVJfUEdEKSAqIHNpemVvZihwZ2RfdCkpOwogCX0KQEAgLTI1 LDcgKzI1LDcgQEAgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIH0KIEVY UE9SVF9TWU1CT0xfR1BMKHBnZF9hbGxvYyk7CiAKLXZvaWQgcGdkX2luaXQodW5zaWduZWQgbG9u ZyBwYWdlKQordm9pZCBwZ2RfaW5pdCh2b2lkICphZGRyKQogewogCXVuc2lnbmVkIGxvbmcgKnAs ICplbmQ7CiAJdW5zaWduZWQgbG9uZyBlbnRyeTsKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBwZ2Rf aW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UpCiAJZW50cnkgPSAodW5zaWduZWQgbG9uZylpbnZhbGlk X3B0ZV90YWJsZTsKICNlbmRpZgogCi0JcCA9ICh1bnNpZ25lZCBsb25nICopIHBhZ2U7CisJcCA9 ICh1bnNpZ25lZCBsb25nICopYWRkcjsKIAllbmQgPSBwICsgUFRSU19QRVJfUEdEOwogCiAJZG8g ewpAQCAtNTYsMTEgKzU2LDEyIEBAIHZvaWQgcGdkX2luaXQodW5zaWduZWQgbG9uZyBwYWdlKQog RVhQT1JUX1NZTUJPTF9HUEwocGdkX2luaXQpOwogCiAjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9G T0xERUQKLXZvaWQgcG1kX2luaXQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBh Z2V0YWJsZSkKK3ZvaWQgcG1kX2luaXQodm9pZCAqYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nICpw LCAqZW5kOworCXVuc2lnbmVkIGxvbmcgcGFnZXRhYmxlID0gKHVuc2lnbmVkIGxvbmcpaW52YWxp ZF9wdGVfdGFibGU7CiAKLQlwID0gKHVuc2lnbmVkIGxvbmcgKikgYWRkcjsKKwlwID0gKHVuc2ln bmVkIGxvbmcgKilhZGRyOwogCWVuZCA9IHAgKyBQVFJTX1BFUl9QTUQ7CiAKIAlkbyB7CkBAIC03 OSw5ICs4MCwxMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChwbWRfaW5pdCk7CiAjZW5kaWYKIAogI2lm bmRlZiBfX1BBR0VUQUJMRV9QVURfRk9MREVECi12b2lkIHB1ZF9pbml0KHVuc2lnbmVkIGxvbmcg YWRkciwgdW5zaWduZWQgbG9uZyBwYWdldGFibGUpCit2b2lkIHB1ZF9pbml0KHZvaWQgKmFkZHIp CiB7CiAJdW5zaWduZWQgbG9uZyAqcCwgKmVuZDsKKwl1bnNpZ25lZCBsb25nIHBhZ2V0YWJsZSA9 ICh1bnNpZ25lZCBsb25nKWludmFsaWRfcG1kX3RhYmxlOwogCiAJcCA9ICh1bnNpZ25lZCBsb25n ICopYWRkcjsKIAllbmQgPSBwICsgUFRSU19QRVJfUFVEOwpAQCAtOTgsNiArMTAwLDcgQEAgdm9p ZCBwdWRfaW5pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGFnZXRhYmxlKQog CQlwWy0xXSA9IHBhZ2V0YWJsZTsKIAl9IHdoaWxlIChwICE9IGVuZCk7CiB9CitFWFBPUlRfU1lN Qk9MX0dQTChwdWRfaW5pdCk7CiAjZW5kaWYKIAogcG1kX3QgbWtfcG1kKHN0cnVjdCBwYWdlICpw YWdlLCBwZ3Byb3RfdCBwcm90KQpAQCAtMTE5LDEyICsxMjIsMTIgQEAgdm9pZCBzZXRfcG1kX2F0 KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiB2b2lkIF9faW5pdCBw YWdldGFibGVfaW5pdCh2b2lkKQogewogCS8qIEluaXRpYWxpemUgdGhlIGVudGlyZSBwZ2QuICAq LwotCXBnZF9pbml0KCh1bnNpZ25lZCBsb25nKXN3YXBwZXJfcGdfZGlyKTsKLQlwZ2RfaW5pdCgo dW5zaWduZWQgbG9uZylpbnZhbGlkX3BnX2Rpcik7CisJcGdkX2luaXQoc3dhcHBlcl9wZ19kaXIp OworCXBnZF9pbml0KGludmFsaWRfcGdfZGlyKTsKICNpZm5kZWYgX19QQUdFVEFCTEVfUFVEX0ZP TERFRAotCXB1ZF9pbml0KCh1bnNpZ25lZCBsb25nKWludmFsaWRfcHVkX3RhYmxlLCAodW5zaWdu ZWQgbG9uZylpbnZhbGlkX3BtZF90YWJsZSk7CisJcHVkX2luaXQoaW52YWxpZF9wdWRfdGFibGUp OwogI2VuZGlmCiAjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKLQlwbWRfaW5pdCgodW5z aWduZWQgbG9uZylpbnZhbGlkX3BtZF90YWJsZSwgKHVuc2lnbmVkIGxvbmcpaW52YWxpZF9wdGVf dGFibGUpOworCXBtZF9pbml0KGludmFsaWRfcG1kX3RhYmxlKTsKICNlbmRpZgogfQpkaWZmIC0t Z2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvbWlwcy9pbmNsdWRl L2FzbS9wZ2FsbG9jLmgKaW5kZXggNzk2MDM1Nzg0YzczLi5mNzJlNzM3ZGRhMjEgMTAwNjQ0Ci0t LSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9taXBzL2luY2x1 ZGUvYXNtL3BnYWxsb2MuaApAQCAtMzMsNyArMzMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcG1k X3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogLyoKICAqIEluaXRp YWxpemUgYSBuZXcgcG1kIHRhYmxlIHdpdGggaW52YWxpZCBwb2ludGVycy4KICAqLwotZXh0ZXJu IHZvaWQgcG1kX2luaXQodW5zaWduZWQgbG9uZyBwYWdlLCB1bnNpZ25lZCBsb25nIHBhZ2V0YWJs ZSk7CitleHRlcm4gdm9pZCBwbWRfaW5pdCh2b2lkICphZGRyKTsKIAogI2lmbmRlZiBfX1BBR0VU QUJMRV9QTURfRk9MREVECiAKQEAgLTQ0LDkgKzQ0LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1 ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCwgcG1kX3QgKnBtZCkK ICNlbmRpZgogCiAvKgotICogSW5pdGlhbGl6ZSBhIG5ldyBwZ2QgLyBwbWQgdGFibGUgd2l0aCBp bnZhbGlkIHBvaW50ZXJzLgorICogSW5pdGlhbGl6ZSBhIG5ldyBwZ2QgdGFibGUgd2l0aCBpbnZh bGlkIHBvaW50ZXJzLgogICovCi1leHRlcm4gdm9pZCBwZ2RfaW5pdCh1bnNpZ25lZCBsb25nIHBh Z2UpOworZXh0ZXJuIHZvaWQgcGdkX2luaXQodm9pZCAqYWRkcik7CiBleHRlcm4gcGdkX3QgKnBn ZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZ2Rf ZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKQEAgLTc3LDcgKzc3LDcgQEAg c3RhdGljIGlubGluZSBwbWRfdCAqcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwg dW5zaWduZWQgbG9uZyBhZGRyZXNzKQogCX0KIAogCXBtZCA9IChwbWRfdCAqKXBhZ2VfYWRkcmVz cyhwZyk7Ci0JcG1kX2luaXQoKHVuc2lnbmVkIGxvbmcpcG1kLCAodW5zaWduZWQgbG9uZylpbnZh bGlkX3B0ZV90YWJsZSk7CisJcG1kX2luaXQocG1kKTsKIAlyZXR1cm4gcG1kOwogfQogCkBAIC05 Myw3ICs5Myw3IEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgKnB1ZF9hbGxvY19vbmUoc3RydWN0IG1t X3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIAogCXB1ZCA9IChwdWRfdCAqKSBf X2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIFBVRF9UQUJMRV9PUkRFUik7CiAJaWYgKHB1ZCkK LQkJcHVkX2luaXQoKHVuc2lnbmVkIGxvbmcpcHVkLCAodW5zaWduZWQgbG9uZylpbnZhbGlkX3Bt ZF90YWJsZSk7CisJCXB1ZF9pbml0KHB1ZCk7CiAJcmV0dXJuIHB1ZDsKIH0KIApkaWZmIC0tZ2l0 IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtNjQuaCBiL2FyY2gvbWlwcy9pbmNsdWRl L2FzbS9wZ3RhYmxlLTY0LmgKaW5kZXggNDM2YzI5ZDY5OGZhLi5jNjMxMDE5MmI2NTQgMTAwNjQ0 Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0LmgKKysrIGIvYXJjaC9taXBz L2luY2x1ZGUvYXNtL3BndGFibGUtNjQuaApAQCAtMzEzLDExICszMTMsMTEgQEAgc3RhdGljIGlu bGluZSBwbWRfdCAqcHVkX3BndGFibGUocHVkX3QgcHVkKQogI2VuZGlmCiAKIC8qCi0gKiBJbml0 aWFsaXplIGEgbmV3IHBnZCAvIHBtZCB0YWJsZSB3aXRoIGludmFsaWQgcG9pbnRlcnMuCisgKiBJ bml0aWFsaXplIGEgbmV3IHBnZCAvIHB1ZCAvIHBtZCB0YWJsZSB3aXRoIGludmFsaWQgcG9pbnRl cnMuCiAgKi8KLWV4dGVybiB2b2lkIHBnZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSk7Ci1leHRl cm4gdm9pZCBwdWRfaW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UsIHVuc2lnbmVkIGxvbmcgcGFnZXRh YmxlKTsKLWV4dGVybiB2b2lkIHBtZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSwgdW5zaWduZWQg bG9uZyBwYWdldGFibGUpOworZXh0ZXJuIHZvaWQgcGdkX2luaXQodm9pZCAqYWRkcik7CitleHRl cm4gdm9pZCBwdWRfaW5pdCh2b2lkICphZGRyKTsKK2V4dGVybiB2b2lkIHBtZF9pbml0KHZvaWQg KmFkZHIpOwogCiAvKgogICogTm9uLXByZXNlbnQgcGFnZXM6ICBoaWdoIDQwIGJpdHMgYXJlIG9m ZnNldCwgbmV4dCA4IGJpdHMgdHlwZSwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rdm0vbW11LmMg Yi9hcmNoL21pcHMva3ZtL21tdS5jCmluZGV4IDc0Y2Q2NGEyNGQwNS4uZThjMDg5ODhlZDM3IDEw MDY0NAotLS0gYS9hcmNoL21pcHMva3ZtL21tdS5jCisrKyBiL2FyY2gvbWlwcy9rdm0vbW11LmMK QEAgLTEyMiw4ICsxMjIsNyBAQCBzdGF0aWMgcHRlX3QgKmt2bV9taXBzX3dhbGtfcGdkKHBnZF90 ICpwZ2QsIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqY2FjaGUsCiAJCWlmICghY2FjaGUp CiAJCQlyZXR1cm4gTlVMTDsKIAkJbmV3X3BtZCA9IGt2bV9tbXVfbWVtb3J5X2NhY2hlX2FsbG9j KGNhY2hlKTsKLQkJcG1kX2luaXQoKHVuc2lnbmVkIGxvbmcpbmV3X3BtZCwKLQkJCSAodW5zaWdu ZWQgbG9uZylpbnZhbGlkX3B0ZV90YWJsZSk7CisJCXBtZF9pbml0KG5ld19wbWQpOwogCQlwdWRf cG9wdWxhdGUoTlVMTCwgcHVkLCBuZXdfcG1kKTsKIAl9CiAJcG1kID0gcG1kX29mZnNldChwdWQs IGFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3BndGFibGUtMzIuYyBiL2FyY2gvbWlw cy9tbS9wZ3RhYmxlLTMyLmMKaW5kZXggNjE4OTFhZjI1MDE5Li5mNTdmYjY5NDcyZjggMTAwNjQ0 Ci0tLSBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTMyLmMKKysrIGIvYXJjaC9taXBzL21tL3BndGFi bGUtMzIuYwpAQCAtMTMsOSArMTMsOSBAQAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5j bHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKLXZvaWQgcGdkX2luaXQodW5zaWduZWQgbG9uZyBwYWdl KQordm9pZCBwZ2RfaW5pdCh2b2lkICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgKnAgPSAodW5z aWduZWQgbG9uZyAqKSBwYWdlOworCXVuc2lnbmVkIGxvbmcgKnAgPSAodW5zaWduZWQgbG9uZyAq KWFkZHI7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVVNFUl9QVFJTX1BFUl9QR0Q7IGkr PTgpIHsKQEAgLTYxLDkgKzYxLDggQEAgdm9pZCBfX2luaXQgcGFnZXRhYmxlX2luaXQodm9pZCkK ICNlbmRpZgogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZW50aXJlIHBnZC4gICovCi0JcGdkX2luaXQo KHVuc2lnbmVkIGxvbmcpc3dhcHBlcl9wZ19kaXIpOwotCXBnZF9pbml0KCh1bnNpZ25lZCBsb25n KXN3YXBwZXJfcGdfZGlyCi0JCSArIHNpemVvZihwZ2RfdCkgKiBVU0VSX1BUUlNfUEVSX1BHRCk7 CisJcGdkX2luaXQoc3dhcHBlcl9wZ19kaXIpOworCXBnZF9pbml0KCZzd2FwcGVyX3BnX2RpcltV U0VSX1BUUlNfUEVSX1BHRF0pOwogCiAJcGdkX2Jhc2UgPSBzd2FwcGVyX3BnX2RpcjsKIApkaWZm IC0tZ2l0IGEvYXJjaC9taXBzL21tL3BndGFibGUtNjQuYyBiL2FyY2gvbWlwcy9tbS9wZ3RhYmxl LTY0LmMKaW5kZXggNzUzNmY3ODA0YzQ0Li5iNDM4NmEwZTJlZjggMTAwNjQ0Ci0tLSBhL2FyY2gv bWlwcy9tbS9wZ3RhYmxlLTY0LmMKKysrIGIvYXJjaC9taXBzL21tL3BndGFibGUtNjQuYwpAQCAt MTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3Rs YmZsdXNoLmg+CiAKLXZvaWQgcGdkX2luaXQodW5zaWduZWQgbG9uZyBwYWdlKQordm9pZCBwZ2Rf aW5pdCh2b2lkICphZGRyKQogewogCXVuc2lnbmVkIGxvbmcgKnAsICplbmQ7CiAJdW5zaWduZWQg bG9uZyBlbnRyeTsKQEAgLTI2LDcgKzI2LDcgQEAgdm9pZCBwZ2RfaW5pdCh1bnNpZ25lZCBsb25n IHBhZ2UpCiAJZW50cnkgPSAodW5zaWduZWQgbG9uZylpbnZhbGlkX3B0ZV90YWJsZTsKICNlbmRp ZgogCi0JcCA9ICh1bnNpZ25lZCBsb25nICopIHBhZ2U7CisJcCA9ICh1bnNpZ25lZCBsb25nICop IGFkZHI7CiAJZW5kID0gcCArIFBUUlNfUEVSX1BHRDsKIAogCWRvIHsKQEAgLTQzLDExICs0Mywx MiBAQCB2b2lkIHBnZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSkKIH0KIAogI2lmbmRlZiBfX1BB R0VUQUJMRV9QTURfRk9MREVECi12b2lkIHBtZF9pbml0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5z aWduZWQgbG9uZyBwYWdldGFibGUpCit2b2lkIHBtZF9pbml0KHZvaWQgKmFkZHIpCiB7CiAJdW5z aWduZWQgbG9uZyAqcCwgKmVuZDsKKwl1bnNpZ25lZCBsb25nIHBhZ2V0YWJsZSA9ICh1bnNpZ25l ZCBsb25nKWludmFsaWRfcHRlX3RhYmxlOwogCi0JcCA9ICh1bnNpZ25lZCBsb25nICopIGFkZHI7 CisJcCA9ICh1bnNpZ25lZCBsb25nICopYWRkcjsKIAllbmQgPSBwICsgUFRSU19QRVJfUE1EOwog CiAJZG8gewpAQCAtNjYsOSArNjcsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwocG1kX2luaXQpOwog I2VuZGlmCiAKICNpZm5kZWYgX19QQUdFVEFCTEVfUFVEX0ZPTERFRAotdm9pZCBwdWRfaW5pdCh1 bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGFnZXRhYmxlKQordm9pZCBwdWRfaW5p dCh2b2lkICphZGRyKQogewogCXVuc2lnbmVkIGxvbmcgKnAsICplbmQ7CisJdW5zaWduZWQgbG9u ZyBwYWdldGFibGUgPSAodW5zaWduZWQgbG9uZylpbnZhbGlkX3BtZF90YWJsZTsKIAogCXAgPSAo dW5zaWduZWQgbG9uZyAqKWFkZHI7CiAJZW5kID0gcCArIFBUUlNfUEVSX1BVRDsKQEAgLTEwOCwx MiArMTEwLDEyIEBAIHZvaWQgX19pbml0IHBhZ2V0YWJsZV9pbml0KHZvaWQpCiAJcGdkX3QgKnBn ZF9iYXNlOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZW50aXJlIHBnZC4gICovCi0JcGdkX2luaXQo KHVuc2lnbmVkIGxvbmcpc3dhcHBlcl9wZ19kaXIpOworCXBnZF9pbml0KHN3YXBwZXJfcGdfZGly KTsKICNpZm5kZWYgX19QQUdFVEFCTEVfUFVEX0ZPTERFRAotCXB1ZF9pbml0KCh1bnNpZ25lZCBs b25nKWludmFsaWRfcHVkX3RhYmxlLCAodW5zaWduZWQgbG9uZylpbnZhbGlkX3BtZF90YWJsZSk7 CisJcHVkX2luaXQoaW52YWxpZF9wdWRfdGFibGUpOwogI2VuZGlmCiAjaWZuZGVmIF9fUEFHRVRB QkxFX1BNRF9GT0xERUQKLQlwbWRfaW5pdCgodW5zaWduZWQgbG9uZylpbnZhbGlkX3BtZF90YWJs ZSwgKHVuc2lnbmVkIGxvbmcpaW52YWxpZF9wdGVfdGFibGUpOworCXBtZF9pbml0KGludmFsaWRf cG1kX3RhYmxlKTsKICNlbmRpZgogCXBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CiAJLyoKZGlm ZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLmMgYi9hcmNoL21pcHMvbW0vcGd0YWJsZS5j CmluZGV4IDNiNzU5MDY2MGEwNC4uYjEzMzE0YmU1ZDBlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMv bW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLmMKQEAgLTE1LDcgKzE1LDcg QEAgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAlyZXQgPSAocGdkX3Qg KikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBQR0RfVEFCTEVfT1JERVIpOwogCWlmIChy ZXQpIHsKIAkJaW5pdCA9IHBnZF9vZmZzZXQoJmluaXRfbW0sIDBVTCk7Ci0JCXBnZF9pbml0KCh1 bnNpZ25lZCBsb25nKXJldCk7CisJCXBnZF9pbml0KHJldCk7CiAJCW1lbWNweShyZXQgKyBVU0VS X1BUUlNfUEVSX1BHRCwgaW5pdCArIFVTRVJfUFRSU19QRVJfUEdELAogCQkgICAgICAgKFBUUlNf UEVSX1BHRCAtIFVTRVJfUFRSU19QRVJfUEdEKSAqIHNpemVvZihwZ2RfdCkpOwogCX0KZGlmZiAt LWdpdCBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9uaW9zMi9pbmNs dWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggM2M0YWU3NGQ1Nzk4Li5lY2QxNjU3YmIyY2UgMTAwNjQ0 Ci0tLSBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvbmlvczIv aW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0yNiwxMSArMjYsNiBAQCBzdGF0aWMgaW5saW5lIHZv aWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogCXNldF9w bWQocG1kLCBfX3BtZCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocHRlKSkpOwogfQogCi0v KgotICogSW5pdGlhbGl6ZSBhIG5ldyBwbWQgdGFibGUgd2l0aCBpbnZhbGlkIHBvaW50ZXJzLgot ICovCi1leHRlcm4gdm9pZCBwbWRfaW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UsIHVuc2lnbmVkIGxv bmcgcGFnZXRhYmxlKTsKLQogZXh0ZXJuIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVj dCAqbW0pOwogCiAjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKQkJCQlcCi0t IAoyLjMxLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==