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=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 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 18301C43461 for ; Wed, 7 Apr 2021 15:31:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E855D61382 for ; Wed, 7 Apr 2021 15:31:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353613AbhDGPbZ (ORCPT ); Wed, 7 Apr 2021 11:31:25 -0400 Received: from foss.arm.com ([217.140.110.172]:59262 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245513AbhDGPbN (ORCPT ); Wed, 7 Apr 2021 11:31:13 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4E3521424; Wed, 7 Apr 2021 08:31:03 -0700 (PDT) Received: from [192.168.0.110] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 415C73F792; Wed, 7 Apr 2021 08:31:01 -0700 (PDT) Subject: Re: [RFC PATCH v3 1/2] KVM: arm64: Move CMOs from user_mem_abort to the fault handlers To: Yanan Wang , Marc Zyngier , Will Deacon , Catalin Marinas , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: James Morse , Julien Thierry , Suzuki K Poulose , Gavin Shan , Quentin Perret , wanghaibin.wang@huawei.com, zhukeqian1@huawei.com, yuzenghui@huawei.com References: <20210326031654.3716-1-wangyanan55@huawei.com> <20210326031654.3716-2-wangyanan55@huawei.com> From: Alexandru Elisei Message-ID: Date: Wed, 7 Apr 2021 16:31:31 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: <20210326031654.3716-2-wangyanan55@huawei.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Yanan, On 3/26/21 3:16 AM, Yanan Wang wrote: > We currently uniformly permorm CMOs of D-cache and I-cache in function > user_mem_abort before calling the fault handlers. If we get concurrent > guest faults(e.g. translation faults, permission faults) or some really > unnecessary guest faults caused by BBM, CMOs for the first vcpu are I can't figure out what BBM means. > necessary while the others later are not. > > By moving CMOs to the fault handlers, we can easily identify conditions > where they are really needed and avoid the unnecessary ones. As it's a > time consuming process to perform CMOs especially when flushing a block > range, so this solution reduces much load of kvm and improve efficiency > of the page table code. > > So let's move both clean of D-cache and invalidation of I-cache to the > map path and move only invalidation of I-cache to the permission path. > Since the original APIs for CMOs in mmu.c are only called in function > user_mem_abort, we now also move them to pgtable.c. > > Signed-off-by: Yanan Wang > --- > arch/arm64/include/asm/kvm_mmu.h | 31 --------------- > arch/arm64/kvm/hyp/pgtable.c | 68 +++++++++++++++++++++++++------- > arch/arm64/kvm/mmu.c | 23 ++--------- > 3 files changed, 57 insertions(+), 65 deletions(-) > > diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h > index 90873851f677..c31f88306d4e 100644 > --- a/arch/arm64/include/asm/kvm_mmu.h > +++ b/arch/arm64/include/asm/kvm_mmu.h > @@ -177,37 +177,6 @@ static inline bool vcpu_has_cache_enabled(struct kvm_vcpu *vcpu) > return (vcpu_read_sys_reg(vcpu, SCTLR_EL1) & 0b101) == 0b101; > } > > -static inline void __clean_dcache_guest_page(kvm_pfn_t pfn, unsigned long size) > -{ > - void *va = page_address(pfn_to_page(pfn)); > - > - /* > - * With FWB, we ensure that the guest always accesses memory using > - * cacheable attributes, and we don't have to clean to PoC when > - * faulting in pages. Furthermore, FWB implies IDC, so cleaning to > - * PoU is not required either in this case. > - */ > - if (cpus_have_const_cap(ARM64_HAS_STAGE2_FWB)) > - return; > - > - kvm_flush_dcache_to_poc(va, size); > -} > - > -static inline void __invalidate_icache_guest_page(kvm_pfn_t pfn, > - unsigned long size) > -{ > - if (icache_is_aliasing()) { > - /* any kind of VIPT cache */ > - __flush_icache_all(); > - } else if (is_kernel_in_hyp_mode() || !icache_is_vpipt()) { > - /* PIPT or VPIPT at EL2 (see comment in __kvm_tlb_flush_vmid_ipa) */ > - void *va = page_address(pfn_to_page(pfn)); > - > - invalidate_icache_range((unsigned long)va, > - (unsigned long)va + size); > - } > -} > - > void kvm_set_way_flush(struct kvm_vcpu *vcpu); > void kvm_toggle_cache(struct kvm_vcpu *vcpu, bool was_enabled); > > diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c > index 4d177ce1d536..829a34eea526 100644 > --- a/arch/arm64/kvm/hyp/pgtable.c > +++ b/arch/arm64/kvm/hyp/pgtable.c > @@ -464,6 +464,43 @@ static int stage2_map_set_prot_attr(enum kvm_pgtable_prot prot, > return 0; > } > > +static bool stage2_pte_cacheable(kvm_pte_t pte) > +{ > + u64 memattr = pte & KVM_PTE_LEAF_ATTR_LO_S2_MEMATTR; > + return memattr == PAGE_S2_MEMATTR(NORMAL); > +} > + > +static bool stage2_pte_executable(kvm_pte_t pte) > +{ > + return !(pte & KVM_PTE_LEAF_ATTR_HI_S2_XN); > +} > + > +static void stage2_flush_dcache(void *addr, u64 size) > +{ > + /* > + * With FWB, we ensure that the guest always accesses memory using > + * cacheable attributes, and we don't have to clean to PoC when > + * faulting in pages. Furthermore, FWB implies IDC, so cleaning to > + * PoU is not required either in this case. > + */ > + if (cpus_have_const_cap(ARM64_HAS_STAGE2_FWB)) > + return; > + > + __flush_dcache_area(addr, size); > +} > + > +static void stage2_invalidate_icache(void *addr, u64 size) > +{ > + if (icache_is_aliasing()) { > + /* Flush any kind of VIPT icache */ > + __flush_icache_all(); > + } else if (is_kernel_in_hyp_mode() || !icache_is_vpipt()) { > + /* PIPT or VPIPT at EL2 */ > + invalidate_icache_range((unsigned long)addr, > + (unsigned long)addr + size); > + } > +} > + > static int stage2_map_walker_try_leaf(u64 addr, u64 end, u32 level, > kvm_pte_t *ptep, > struct stage2_map_data *data) > @@ -495,6 +532,13 @@ static int stage2_map_walker_try_leaf(u64 addr, u64 end, u32 level, > put_page(page); > } > > + /* Perform CMOs before installation of the new PTE */ > + if (!kvm_pte_valid(old) || stage2_pte_cacheable(old)) I'm not sure why the stage2_pte_cacheable(old) condition is needed. kvm_handle_guest_abort() handles three types of stage 2 data or instruction aborts: translation faults (fault_status == FSC_FAULT), access faults (fault_status == FSC_ACCESS) and permission faults (fault_status == FSC_PERM). Access faults are handled in handle_access_fault(), which means user_mem_abort() handles translation and permission faults. The original code did the dcache clean + inval when not a permission fault, which means the CMO was done only on a translation fault. Translation faults mean that the IPA was not mapped, so the old entry will always be invalid. Even if we're coalescing multiple last level leaf entries int oa  block mapping, the table entry which is replaced is invalid because it's marked as such in stage2_map_walk_table_pre(). Is there something I'm missing? > + stage2_flush_dcache(__va(phys), granule); > + > + if (stage2_pte_executable(new)) > + stage2_invalidate_icache(__va(phys), granule); This, together with the stage2_attr_walker() changes below, look identical to the current code in user_mem_abort(). The executable permission is set on an exec fault (instruction abort not on a stage 2 translation table walk), and as a result of the fault we either need to map a new page here, or relax permissions in kvm_pgtable_stage2_relax_perms() -> stage2_attr_walker() below. Thanks, Alex > + > smp_store_release(ptep, new); > get_page(page); > data->phys += granule; > @@ -651,20 +695,6 @@ int kvm_pgtable_stage2_map(struct kvm_pgtable *pgt, u64 addr, u64 size, > return ret; > } > > -static void stage2_flush_dcache(void *addr, u64 size) > -{ > - if (cpus_have_const_cap(ARM64_HAS_STAGE2_FWB)) > - return; > - > - __flush_dcache_area(addr, size); > -} > - > -static bool stage2_pte_cacheable(kvm_pte_t pte) > -{ > - u64 memattr = pte & KVM_PTE_LEAF_ATTR_LO_S2_MEMATTR; > - return memattr == PAGE_S2_MEMATTR(NORMAL); > -} > - > static int stage2_unmap_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep, > enum kvm_pgtable_walk_flags flag, > void * const arg) > @@ -743,8 +773,16 @@ static int stage2_attr_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep, > * but worst-case the access flag update gets lost and will be > * set on the next access instead. > */ > - if (data->pte != pte) > + if (data->pte != pte) { > + /* > + * Invalidate the instruction cache before updating > + * if we are going to add the executable permission. > + */ > + if (!stage2_pte_executable(*ptep) && stage2_pte_executable(pte)) > + stage2_invalidate_icache(kvm_pte_follow(pte), > + kvm_granule_size(level)); > WRITE_ONCE(*ptep, pte); > + } > > return 0; > } > diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c > index 77cb2d28f2a4..1eec9f63bc6f 100644 > --- a/arch/arm64/kvm/mmu.c > +++ b/arch/arm64/kvm/mmu.c > @@ -609,16 +609,6 @@ void kvm_arch_mmu_enable_log_dirty_pt_masked(struct kvm *kvm, > kvm_mmu_write_protect_pt_masked(kvm, slot, gfn_offset, mask); > } > > -static void clean_dcache_guest_page(kvm_pfn_t pfn, unsigned long size) > -{ > - __clean_dcache_guest_page(pfn, size); > -} > - > -static void invalidate_icache_guest_page(kvm_pfn_t pfn, unsigned long size) > -{ > - __invalidate_icache_guest_page(pfn, size); > -} > - > static void kvm_send_hwpoison_signal(unsigned long address, short lsb) > { > send_sig_mceerr(BUS_MCEERR_AR, (void __user *)address, lsb, current); > @@ -882,13 +872,8 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, > if (writable) > prot |= KVM_PGTABLE_PROT_W; > > - if (fault_status != FSC_PERM && !device) > - clean_dcache_guest_page(pfn, vma_pagesize); > - > - if (exec_fault) { > + if (exec_fault) > prot |= KVM_PGTABLE_PROT_X; > - invalidate_icache_guest_page(pfn, vma_pagesize); > - } > > if (device) > prot |= KVM_PGTABLE_PROT_DEVICE; > @@ -1144,10 +1129,10 @@ int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte) > trace_kvm_set_spte_hva(hva); > > /* > - * We've moved a page around, probably through CoW, so let's treat it > - * just like a translation fault and clean the cache to the PoC. > + * We've moved a page around, probably through CoW, so let's treat > + * it just like a translation fault and the map handler will clean > + * the cache to the PoC. > */ > - clean_dcache_guest_page(pfn, PAGE_SIZE); > handle_hva_to_gpa(kvm, hva, end, &kvm_set_spte_handler, &pfn); > return 0; > } 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=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 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 DFA32C433B4 for ; Wed, 7 Apr 2021 15:31:08 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 5A90E6139B for ; Wed, 7 Apr 2021 15:31:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5A90E6139B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id ECB474B93D; Wed, 7 Apr 2021 11:31:07 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id iQNefHfDPam9; Wed, 7 Apr 2021 11:31:06 -0400 (EDT) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 507514B93E; Wed, 7 Apr 2021 11:31:06 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id A91524B93C for ; Wed, 7 Apr 2021 11:31:05 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id UV03xvlOqdoK for ; Wed, 7 Apr 2021 11:31:03 -0400 (EDT) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mm01.cs.columbia.edu (Postfix) with ESMTP id D9A4D4B902 for ; Wed, 7 Apr 2021 11:31:03 -0400 (EDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4E3521424; Wed, 7 Apr 2021 08:31:03 -0700 (PDT) Received: from [192.168.0.110] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 415C73F792; Wed, 7 Apr 2021 08:31:01 -0700 (PDT) Subject: Re: [RFC PATCH v3 1/2] KVM: arm64: Move CMOs from user_mem_abort to the fault handlers To: Yanan Wang , Marc Zyngier , Will Deacon , Catalin Marinas , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org References: <20210326031654.3716-1-wangyanan55@huawei.com> <20210326031654.3716-2-wangyanan55@huawei.com> From: Alexandru Elisei Message-ID: Date: Wed, 7 Apr 2021 16:31:31 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: <20210326031654.3716-2-wangyanan55@huawei.com> Content-Language: en-US X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu SGkgWWFuYW4sCgpPbiAzLzI2LzIxIDM6MTYgQU0sIFlhbmFuIFdhbmcgd3JvdGU6Cj4gV2UgY3Vy cmVudGx5IHVuaWZvcm1seSBwZXJtb3JtIENNT3Mgb2YgRC1jYWNoZSBhbmQgSS1jYWNoZSBpbiBm dW5jdGlvbgo+IHVzZXJfbWVtX2Fib3J0IGJlZm9yZSBjYWxsaW5nIHRoZSBmYXVsdCBoYW5kbGVy cy4gSWYgd2UgZ2V0IGNvbmN1cnJlbnQKPiBndWVzdCBmYXVsdHMoZS5nLiB0cmFuc2xhdGlvbiBm YXVsdHMsIHBlcm1pc3Npb24gZmF1bHRzKSBvciBzb21lIHJlYWxseQo+IHVubmVjZXNzYXJ5IGd1 ZXN0IGZhdWx0cyBjYXVzZWQgYnkgQkJNLCBDTU9zIGZvciB0aGUgZmlyc3QgdmNwdSBhcmUKCkkg Y2FuJ3QgZmlndXJlIG91dCB3aGF0IEJCTSBtZWFucy4KCj4gbmVjZXNzYXJ5IHdoaWxlIHRoZSBv dGhlcnMgbGF0ZXIgYXJlIG5vdC4KPgo+IEJ5IG1vdmluZyBDTU9zIHRvIHRoZSBmYXVsdCBoYW5k bGVycywgd2UgY2FuIGVhc2lseSBpZGVudGlmeSBjb25kaXRpb25zCj4gd2hlcmUgdGhleSBhcmUg cmVhbGx5IG5lZWRlZCBhbmQgYXZvaWQgdGhlIHVubmVjZXNzYXJ5IG9uZXMuIEFzIGl0J3MgYQo+ IHRpbWUgY29uc3VtaW5nIHByb2Nlc3MgdG8gcGVyZm9ybSBDTU9zIGVzcGVjaWFsbHkgd2hlbiBm bHVzaGluZyBhIGJsb2NrCj4gcmFuZ2UsIHNvIHRoaXMgc29sdXRpb24gcmVkdWNlcyBtdWNoIGxv YWQgb2Yga3ZtIGFuZCBpbXByb3ZlIGVmZmljaWVuY3kKPiBvZiB0aGUgcGFnZSB0YWJsZSBjb2Rl Lgo+Cj4gU28gbGV0J3MgbW92ZSBib3RoIGNsZWFuIG9mIEQtY2FjaGUgYW5kIGludmFsaWRhdGlv biBvZiBJLWNhY2hlIHRvIHRoZQo+IG1hcCBwYXRoIGFuZCBtb3ZlIG9ubHkgaW52YWxpZGF0aW9u IG9mIEktY2FjaGUgdG8gdGhlIHBlcm1pc3Npb24gcGF0aC4KPiBTaW5jZSB0aGUgb3JpZ2luYWwg QVBJcyBmb3IgQ01PcyBpbiBtbXUuYyBhcmUgb25seSBjYWxsZWQgaW4gZnVuY3Rpb24KPiB1c2Vy X21lbV9hYm9ydCwgd2Ugbm93IGFsc28gbW92ZSB0aGVtIHRvIHBndGFibGUuYy4KPgo+IFNpZ25l ZC1vZmYtYnk6IFlhbmFuIFdhbmcgPHdhbmd5YW5hbjU1QGh1YXdlaS5jb20+Cj4gLS0tCj4gIGFy Y2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oIHwgMzEgLS0tLS0tLS0tLS0tLS0tCj4gIGFy Y2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMgICAgIHwgNjggKysrKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0KPiAgYXJjaC9hcm02NC9rdm0vbW11LmMgICAgICAgICAgICAgfCAyMyArKy0t LS0tLS0tLQo+ICAzIGZpbGVzIGNoYW5nZWQsIDU3IGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9u cygtKQo+Cj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oIGIv YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbW11LmgKPiBpbmRleCA5MDg3Mzg1MWY2NzcuLmMz MWY4ODMwNmQ0ZSAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUu aAo+ICsrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oCj4gQEAgLTE3NywzNyAr MTc3LDYgQEAgc3RhdGljIGlubGluZSBib29sIHZjcHVfaGFzX2NhY2hlX2VuYWJsZWQoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1KQo+ICAJcmV0dXJuICh2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBTQ1RM Ul9FTDEpICYgMGIxMDEpID09IDBiMTAxOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5lIHZvaWQg X19jbGVhbl9kY2FjaGVfZ3Vlc3RfcGFnZShrdm1fcGZuX3QgcGZuLCB1bnNpZ25lZCBsb25nIHNp emUpCj4gLXsKPiAtCXZvaWQgKnZhID0gcGFnZV9hZGRyZXNzKHBmbl90b19wYWdlKHBmbikpOwo+ IC0KPiAtCS8qCj4gLQkgKiBXaXRoIEZXQiwgd2UgZW5zdXJlIHRoYXQgdGhlIGd1ZXN0IGFsd2F5 cyBhY2Nlc3NlcyBtZW1vcnkgdXNpbmcKPiAtCSAqIGNhY2hlYWJsZSBhdHRyaWJ1dGVzLCBhbmQg d2UgZG9uJ3QgaGF2ZSB0byBjbGVhbiB0byBQb0Mgd2hlbgo+IC0JICogZmF1bHRpbmcgaW4gcGFn ZXMuIEZ1cnRoZXJtb3JlLCBGV0IgaW1wbGllcyBJREMsIHNvIGNsZWFuaW5nIHRvCj4gLQkgKiBQ b1UgaXMgbm90IHJlcXVpcmVkIGVpdGhlciBpbiB0aGlzIGNhc2UuCj4gLQkgKi8KPiAtCWlmIChj cHVzX2hhdmVfY29uc3RfY2FwKEFSTTY0X0hBU19TVEFHRTJfRldCKSkKPiAtCQlyZXR1cm47Cj4g LQo+IC0Ja3ZtX2ZsdXNoX2RjYWNoZV90b19wb2ModmEsIHNpemUpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW5saW5lIHZvaWQgX19pbnZhbGlkYXRlX2ljYWNoZV9ndWVzdF9wYWdlKGt2bV9wZm5fdCBw Zm4sCj4gLQkJCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplKQo+IC17Cj4gLQlpZiAoaWNhY2hlX2lz X2FsaWFzaW5nKCkpIHsKPiAtCQkvKiBhbnkga2luZCBvZiBWSVBUIGNhY2hlICovCj4gLQkJX19m bHVzaF9pY2FjaGVfYWxsKCk7Cj4gLQl9IGVsc2UgaWYgKGlzX2tlcm5lbF9pbl9oeXBfbW9kZSgp IHx8ICFpY2FjaGVfaXNfdnBpcHQoKSkgewo+IC0JCS8qIFBJUFQgb3IgVlBJUFQgYXQgRUwyIChz ZWUgY29tbWVudCBpbiBfX2t2bV90bGJfZmx1c2hfdm1pZF9pcGEpICovCj4gLQkJdm9pZCAqdmEg PSBwYWdlX2FkZHJlc3MocGZuX3RvX3BhZ2UocGZuKSk7Cj4gLQo+IC0JCWludmFsaWRhdGVfaWNh Y2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXZhLAo+IC0JCQkJCSh1bnNpZ25lZCBsb25nKXZhICsg c2l6ZSk7Cj4gLQl9Cj4gLX0KPiAtCj4gIHZvaWQga3ZtX3NldF93YXlfZmx1c2goc3RydWN0IGt2 bV92Y3B1ICp2Y3B1KTsKPiAgdm9pZCBrdm1fdG9nZ2xlX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAq dmNwdSwgYm9vbCB3YXNfZW5hYmxlZCk7Cj4gIAo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2 bS9oeXAvcGd0YWJsZS5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYwo+IGluZGV4IDRk MTc3Y2UxZDUzNi4uODI5YTM0ZWVhNTI2IDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5 cC9wZ3RhYmxlLmMKPiArKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jCj4gQEAgLTQ2 NCw2ICs0NjQsNDMgQEAgc3RhdGljIGludCBzdGFnZTJfbWFwX3NldF9wcm90X2F0dHIoZW51bSBr dm1fcGd0YWJsZV9wcm90IHByb3QsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiArc3RhdGljIGJv b2wgc3RhZ2UyX3B0ZV9jYWNoZWFibGUoa3ZtX3B0ZV90IHB0ZSkKPiArewo+ICsJdTY0IG1lbWF0 dHIgPSBwdGUgJiBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9NRU1BVFRSOwo+ICsJcmV0dXJuIG1l bWF0dHIgPT0gUEFHRV9TMl9NRU1BVFRSKE5PUk1BTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29s IHN0YWdlMl9wdGVfZXhlY3V0YWJsZShrdm1fcHRlX3QgcHRlKQo+ICt7Cj4gKwlyZXR1cm4gIShw dGUgJiBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9YTik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHN0YWdlMl9mbHVzaF9kY2FjaGUodm9pZCAqYWRkciwgdTY0IHNpemUpCj4gK3sKPiArCS8qCj4g KwkgKiBXaXRoIEZXQiwgd2UgZW5zdXJlIHRoYXQgdGhlIGd1ZXN0IGFsd2F5cyBhY2Nlc3NlcyBt ZW1vcnkgdXNpbmcKPiArCSAqIGNhY2hlYWJsZSBhdHRyaWJ1dGVzLCBhbmQgd2UgZG9uJ3QgaGF2 ZSB0byBjbGVhbiB0byBQb0Mgd2hlbgo+ICsJICogZmF1bHRpbmcgaW4gcGFnZXMuIEZ1cnRoZXJt b3JlLCBGV0IgaW1wbGllcyBJREMsIHNvIGNsZWFuaW5nIHRvCj4gKwkgKiBQb1UgaXMgbm90IHJl cXVpcmVkIGVpdGhlciBpbiB0aGlzIGNhc2UuCj4gKwkgKi8KPiArCWlmIChjcHVzX2hhdmVfY29u c3RfY2FwKEFSTTY0X0hBU19TVEFHRTJfRldCKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJX19mbHVz aF9kY2FjaGVfYXJlYShhZGRyLCBzaXplKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3RhZ2Uy X2ludmFsaWRhdGVfaWNhY2hlKHZvaWQgKmFkZHIsIHU2NCBzaXplKQo+ICt7Cj4gKwlpZiAoaWNh Y2hlX2lzX2FsaWFzaW5nKCkpIHsKPiArCQkvKiBGbHVzaCBhbnkga2luZCBvZiBWSVBUIGljYWNo ZSAqLwo+ICsJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwo+ICsJfSBlbHNlIGlmIChpc19rZXJuZWxf aW5faHlwX21vZGUoKSB8fCAhaWNhY2hlX2lzX3ZwaXB0KCkpIHsKPiArCQkvKiBQSVBUIG9yIFZQ SVBUIGF0IEVMMiAqLwo+ICsJCWludmFsaWRhdGVfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25n KWFkZHIsCj4gKwkJCQkJKHVuc2lnbmVkIGxvbmcpYWRkciArIHNpemUpOwo+ICsJfQo+ICt9Cj4g Kwo+ICBzdGF0aWMgaW50IHN0YWdlMl9tYXBfd2Fsa2VyX3RyeV9sZWFmKHU2NCBhZGRyLCB1NjQg ZW5kLCB1MzIgbGV2ZWwsCj4gIAkJCQkgICAgICBrdm1fcHRlX3QgKnB0ZXAsCj4gIAkJCQkgICAg ICBzdHJ1Y3Qgc3RhZ2UyX21hcF9kYXRhICpkYXRhKQo+IEBAIC00OTUsNiArNTMyLDEzIEBAIHN0 YXRpYyBpbnQgc3RhZ2UyX21hcF93YWxrZXJfdHJ5X2xlYWYodTY0IGFkZHIsIHU2NCBlbmQsIHUz MiBsZXZlbCwKPiAgCQlwdXRfcGFnZShwYWdlKTsKPiAgCX0KPiAgCj4gKwkvKiBQZXJmb3JtIENN T3MgYmVmb3JlIGluc3RhbGxhdGlvbiBvZiB0aGUgbmV3IFBURSAqLwo+ICsJaWYgKCFrdm1fcHRl X3ZhbGlkKG9sZCkgfHwgc3RhZ2UyX3B0ZV9jYWNoZWFibGUob2xkKSkKCkknbSBub3Qgc3VyZSB3 aHkgdGhlIHN0YWdlMl9wdGVfY2FjaGVhYmxlKG9sZCkgY29uZGl0aW9uIGlzIG5lZWRlZC4KCmt2 bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoKSBoYW5kbGVzIHRocmVlIHR5cGVzIG9mIHN0YWdlIDIgZGF0 YSBvciBpbnN0cnVjdGlvbgphYm9ydHM6IHRyYW5zbGF0aW9uIGZhdWx0cyAoZmF1bHRfc3RhdHVz ID09IEZTQ19GQVVMVCksIGFjY2VzcyBmYXVsdHMKKGZhdWx0X3N0YXR1cyA9PSBGU0NfQUNDRVNT KSBhbmQgcGVybWlzc2lvbiBmYXVsdHMgKGZhdWx0X3N0YXR1cyA9PSBGU0NfUEVSTSkuCgpBY2Nl c3MgZmF1bHRzIGFyZSBoYW5kbGVkIGluIGhhbmRsZV9hY2Nlc3NfZmF1bHQoKSwgd2hpY2ggbWVh bnMgdXNlcl9tZW1fYWJvcnQoKQpoYW5kbGVzIHRyYW5zbGF0aW9uIGFuZCBwZXJtaXNzaW9uIGZh dWx0cy4gVGhlIG9yaWdpbmFsIGNvZGUgZGlkIHRoZSBkY2FjaGUgY2xlYW4KKyBpbnZhbCB3aGVu IG5vdCBhIHBlcm1pc3Npb24gZmF1bHQsIHdoaWNoIG1lYW5zIHRoZSBDTU8gd2FzIGRvbmUgb25s eSBvbiBhCnRyYW5zbGF0aW9uIGZhdWx0LiBUcmFuc2xhdGlvbiBmYXVsdHMgbWVhbiB0aGF0IHRo ZSBJUEEgd2FzIG5vdCBtYXBwZWQsIHNvIHRoZSBvbGQKZW50cnkgd2lsbCBhbHdheXMgYmUgaW52 YWxpZC4gRXZlbiBpZiB3ZSdyZSBjb2FsZXNjaW5nIG11bHRpcGxlIGxhc3QgbGV2ZWwgbGVhZgpl bnRyaWVzIGludCBvYcKgIGJsb2NrIG1hcHBpbmcsIHRoZSB0YWJsZSBlbnRyeSB3aGljaCBpcyBy ZXBsYWNlZCBpcyBpbnZhbGlkCmJlY2F1c2UgaXQncyBtYXJrZWQgYXMgc3VjaCBpbiBzdGFnZTJf bWFwX3dhbGtfdGFibGVfcHJlKCkuCgpJcyB0aGVyZSBzb21ldGhpbmcgSSdtIG1pc3Npbmc/Cgo+ ICsJCXN0YWdlMl9mbHVzaF9kY2FjaGUoX192YShwaHlzKSwgZ3JhbnVsZSk7Cj4gKwo+ICsJaWYg KHN0YWdlMl9wdGVfZXhlY3V0YWJsZShuZXcpKQo+ICsJCXN0YWdlMl9pbnZhbGlkYXRlX2ljYWNo ZShfX3ZhKHBoeXMpLCBncmFudWxlKTsKClRoaXMsIHRvZ2V0aGVyIHdpdGggdGhlIHN0YWdlMl9h dHRyX3dhbGtlcigpIGNoYW5nZXMgYmVsb3csIGxvb2sgaWRlbnRpY2FsIHRvIHRoZQpjdXJyZW50 IGNvZGUgaW4gdXNlcl9tZW1fYWJvcnQoKS4gVGhlIGV4ZWN1dGFibGUgcGVybWlzc2lvbiBpcyBz ZXQgb24gYW4gZXhlYwpmYXVsdCAoaW5zdHJ1Y3Rpb24gYWJvcnQgbm90IG9uIGEgc3RhZ2UgMiB0 cmFuc2xhdGlvbiB0YWJsZSB3YWxrKSwgYW5kIGFzIGEgcmVzdWx0Cm9mIHRoZSBmYXVsdCB3ZSBl aXRoZXIgbmVlZCB0byBtYXAgYSBuZXcgcGFnZSBoZXJlLCBvciByZWxheCBwZXJtaXNzaW9ucyBp bgprdm1fcGd0YWJsZV9zdGFnZTJfcmVsYXhfcGVybXMoKSAtPiBzdGFnZTJfYXR0cl93YWxrZXIo KSBiZWxvdy4KClRoYW5rcywKCkFsZXgKCj4gKwo+ICAJc21wX3N0b3JlX3JlbGVhc2UocHRlcCwg bmV3KTsKPiAgCWdldF9wYWdlKHBhZ2UpOwo+ICAJZGF0YS0+cGh5cyArPSBncmFudWxlOwo+IEBA IC02NTEsMjAgKzY5NSw2IEBAIGludCBrdm1fcGd0YWJsZV9zdGFnZTJfbWFwKHN0cnVjdCBrdm1f cGd0YWJsZSAqcGd0LCB1NjQgYWRkciwgdTY0IHNpemUsCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4g IAo+IC1zdGF0aWMgdm9pZCBzdGFnZTJfZmx1c2hfZGNhY2hlKHZvaWQgKmFkZHIsIHU2NCBzaXpl KQo+IC17Cj4gLQlpZiAoY3B1c19oYXZlX2NvbnN0X2NhcChBUk02NF9IQVNfU1RBR0UyX0ZXQikp Cj4gLQkJcmV0dXJuOwo+IC0KPiAtCV9fZmx1c2hfZGNhY2hlX2FyZWEoYWRkciwgc2l6ZSk7Cj4g LX0KPiAtCj4gLXN0YXRpYyBib29sIHN0YWdlMl9wdGVfY2FjaGVhYmxlKGt2bV9wdGVfdCBwdGUp Cj4gLXsKPiAtCXU2NCBtZW1hdHRyID0gcHRlICYgS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfTUVN QVRUUjsKPiAtCXJldHVybiBtZW1hdHRyID09IFBBR0VfUzJfTUVNQVRUUihOT1JNQUwpOwo+IC19 Cj4gLQo+ICBzdGF0aWMgaW50IHN0YWdlMl91bm1hcF93YWxrZXIodTY0IGFkZHIsIHU2NCBlbmQs IHUzMiBsZXZlbCwga3ZtX3B0ZV90ICpwdGVwLAo+ICAJCQkgICAgICAgZW51bSBrdm1fcGd0YWJs ZV93YWxrX2ZsYWdzIGZsYWcsCj4gIAkJCSAgICAgICB2b2lkICogY29uc3QgYXJnKQo+IEBAIC03 NDMsOCArNzczLDE2IEBAIHN0YXRpYyBpbnQgc3RhZ2UyX2F0dHJfd2Fsa2VyKHU2NCBhZGRyLCB1 NjQgZW5kLCB1MzIgbGV2ZWwsIGt2bV9wdGVfdCAqcHRlcCwKPiAgCSAqIGJ1dCB3b3JzdC1jYXNl IHRoZSBhY2Nlc3MgZmxhZyB1cGRhdGUgZ2V0cyBsb3N0IGFuZCB3aWxsIGJlCj4gIAkgKiBzZXQg b24gdGhlIG5leHQgYWNjZXNzIGluc3RlYWQuCj4gIAkgKi8KPiAtCWlmIChkYXRhLT5wdGUgIT0g cHRlKQo+ICsJaWYgKGRhdGEtPnB0ZSAhPSBwdGUpIHsKPiArCQkvKgo+ICsJCSAqIEludmFsaWRh dGUgdGhlIGluc3RydWN0aW9uIGNhY2hlIGJlZm9yZSB1cGRhdGluZwo+ICsJCSAqIGlmIHdlIGFy ZSBnb2luZyB0byBhZGQgdGhlIGV4ZWN1dGFibGUgcGVybWlzc2lvbi4KPiArCQkgKi8KPiArCQlp ZiAoIXN0YWdlMl9wdGVfZXhlY3V0YWJsZSgqcHRlcCkgJiYgc3RhZ2UyX3B0ZV9leGVjdXRhYmxl KHB0ZSkpCj4gKwkJCXN0YWdlMl9pbnZhbGlkYXRlX2ljYWNoZShrdm1fcHRlX2ZvbGxvdyhwdGUp LAo+ICsJCQkJCQkga3ZtX2dyYW51bGVfc2l6ZShsZXZlbCkpOwo+ICAJCVdSSVRFX09OQ0UoKnB0 ZXAsIHB0ZSk7Cj4gKwl9Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvYXJj aC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwo+IGluZGV4IDc3Y2IyZDI4 ZjJhNC4uMWVlYzlmNjNiYzZmIDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jCj4g KysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKPiBAQCAtNjA5LDE2ICs2MDksNiBAQCB2b2lkIGt2 bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChzdHJ1Y3Qga3ZtICprdm0sCj4g IAlrdm1fbW11X3dyaXRlX3Byb3RlY3RfcHRfbWFza2VkKGt2bSwgc2xvdCwgZ2ZuX29mZnNldCwg bWFzayk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGNsZWFuX2RjYWNoZV9ndWVzdF9wYWdlKGt2 bV9wZm5fdCBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKPiAtewo+IC0JX19jbGVhbl9kY2FjaGVf Z3Vlc3RfcGFnZShwZm4sIHNpemUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpbnZhbGlkYXRl X2ljYWNoZV9ndWVzdF9wYWdlKGt2bV9wZm5fdCBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKPiAt ewo+IC0JX19pbnZhbGlkYXRlX2ljYWNoZV9ndWVzdF9wYWdlKHBmbiwgc2l6ZSk7Cj4gLX0KPiAt Cj4gIHN0YXRpYyB2b2lkIGt2bV9zZW5kX2h3cG9pc29uX3NpZ25hbCh1bnNpZ25lZCBsb25nIGFk ZHJlc3MsIHNob3J0IGxzYikKPiAgewo+ICAJc2VuZF9zaWdfbWNlZXJyKEJVU19NQ0VFUlJfQVIs ICh2b2lkIF9fdXNlciAqKWFkZHJlc3MsIGxzYiwgY3VycmVudCk7Cj4gQEAgLTg4MiwxMyArODcy LDggQEAgc3RhdGljIGludCB1c2VyX21lbV9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBo eXNfYWRkcl90IGZhdWx0X2lwYSwKPiAgCWlmICh3cml0YWJsZSkKPiAgCQlwcm90IHw9IEtWTV9Q R1RBQkxFX1BST1RfVzsKPiAgCj4gLQlpZiAoZmF1bHRfc3RhdHVzICE9IEZTQ19QRVJNICYmICFk ZXZpY2UpCj4gLQkJY2xlYW5fZGNhY2hlX2d1ZXN0X3BhZ2UocGZuLCB2bWFfcGFnZXNpemUpOwo+ IC0KPiAtCWlmIChleGVjX2ZhdWx0KSB7Cj4gKwlpZiAoZXhlY19mYXVsdCkKPiAgCQlwcm90IHw9 IEtWTV9QR1RBQkxFX1BST1RfWDsKPiAtCQlpbnZhbGlkYXRlX2ljYWNoZV9ndWVzdF9wYWdlKHBm biwgdm1hX3BhZ2VzaXplKTsKPiAtCX0KPiAgCj4gIAlpZiAoZGV2aWNlKQo+ICAJCXByb3QgfD0g S1ZNX1BHVEFCTEVfUFJPVF9ERVZJQ0U7Cj4gQEAgLTExNDQsMTAgKzExMjksMTAgQEAgaW50IGt2 bV9zZXRfc3B0ZV9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSwgcHRlX3Qg cHRlKQo+ICAJdHJhY2Vfa3ZtX3NldF9zcHRlX2h2YShodmEpOwo+ICAKPiAgCS8qCj4gLQkgKiBX ZSd2ZSBtb3ZlZCBhIHBhZ2UgYXJvdW5kLCBwcm9iYWJseSB0aHJvdWdoIENvVywgc28gbGV0J3Mg dHJlYXQgaXQKPiAtCSAqIGp1c3QgbGlrZSBhIHRyYW5zbGF0aW9uIGZhdWx0IGFuZCBjbGVhbiB0 aGUgY2FjaGUgdG8gdGhlIFBvQy4KPiArCSAqIFdlJ3ZlIG1vdmVkIGEgcGFnZSBhcm91bmQsIHBy b2JhYmx5IHRocm91Z2ggQ29XLCBzbyBsZXQncyB0cmVhdAo+ICsJICogaXQganVzdCBsaWtlIGEg dHJhbnNsYXRpb24gZmF1bHQgYW5kIHRoZSBtYXAgaGFuZGxlciB3aWxsIGNsZWFuCj4gKwkgKiB0 aGUgY2FjaGUgdG8gdGhlIFBvQy4KPiAgCSAqLwo+IC0JY2xlYW5fZGNhY2hlX2d1ZXN0X3BhZ2Uo cGZuLCBQQUdFX1NJWkUpOwo+ICAJaGFuZGxlX2h2YV90b19ncGEoa3ZtLCBodmEsIGVuZCwgJmt2 bV9zZXRfc3B0ZV9oYW5kbGVyLCAmcGZuKTsKPiAgCXJldHVybiAwOwo+ICB9Cl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmt2bWFybSBtYWlsaW5nIGxpc3QK a3ZtYXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRwczovL2xpc3RzLmNzLmNvbHVtYmlhLmVk dS9tYWlsbWFuL2xpc3RpbmZvL2t2bWFybQo= 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=-15.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 2D859C433ED for ; Wed, 7 Apr 2021 15:33:20 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 9D4DE6112F for ; Wed, 7 Apr 2021 15:33:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9D4DE6112F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=XQWGF8uGJkordA6XKq2wUqrgwhiXoYhdIiUVYnLjHTA=; b=GAKoSMr2XBTuq6//sUP8pyMrY hCsgmeswNTnMP5z5qtt+Dkf5q8mJ/v/cqFTsaMdud7aXyXdhmobOW71SZuoVCBG3WR+EJsCwoXc/K jfHM09O0uJ2yQznmJdUk0FitVahOZy8mQle1CTVGh3r4jBiJn5V0e7Niuhs1kyAgN8vt2aNDw3y8E UICYyhXpQEapMCvS5fRvg6HqPnRKDkuZO9hast/dZ//k/GxvJR8FPOBJjWbSDnrCtGcf9/6Gyv/8s 268GZrQ8wa0WJOlae5QSkm8+DZiDo8F95TJtYA8WQjbTKBkLvi+fUjmJTVSok5TRBXxRCUVXFbXe7 f5qBny4hg==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lUA9C-005HMY-4M; Wed, 07 Apr 2021 15:31:14 +0000 Received: from foss.arm.com ([217.140.110.172]) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lUA95-005HLA-8Q for linux-arm-kernel@lists.infradead.org; Wed, 07 Apr 2021 15:31:09 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4E3521424; Wed, 7 Apr 2021 08:31:03 -0700 (PDT) Received: from [192.168.0.110] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 415C73F792; Wed, 7 Apr 2021 08:31:01 -0700 (PDT) Subject: Re: [RFC PATCH v3 1/2] KVM: arm64: Move CMOs from user_mem_abort to the fault handlers To: Yanan Wang , Marc Zyngier , Will Deacon , Catalin Marinas , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: James Morse , Julien Thierry , Suzuki K Poulose , Gavin Shan , Quentin Perret , wanghaibin.wang@huawei.com, zhukeqian1@huawei.com, yuzenghui@huawei.com References: <20210326031654.3716-1-wangyanan55@huawei.com> <20210326031654.3716-2-wangyanan55@huawei.com> From: Alexandru Elisei Message-ID: Date: Wed, 7 Apr 2021 16:31:31 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: <20210326031654.3716-2-wangyanan55@huawei.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210407_163107_783270_63894DB4 X-CRM114-Status: GOOD ( 38.66 ) 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 SGkgWWFuYW4sCgpPbiAzLzI2LzIxIDM6MTYgQU0sIFlhbmFuIFdhbmcgd3JvdGU6Cj4gV2UgY3Vy cmVudGx5IHVuaWZvcm1seSBwZXJtb3JtIENNT3Mgb2YgRC1jYWNoZSBhbmQgSS1jYWNoZSBpbiBm dW5jdGlvbgo+IHVzZXJfbWVtX2Fib3J0IGJlZm9yZSBjYWxsaW5nIHRoZSBmYXVsdCBoYW5kbGVy cy4gSWYgd2UgZ2V0IGNvbmN1cnJlbnQKPiBndWVzdCBmYXVsdHMoZS5nLiB0cmFuc2xhdGlvbiBm YXVsdHMsIHBlcm1pc3Npb24gZmF1bHRzKSBvciBzb21lIHJlYWxseQo+IHVubmVjZXNzYXJ5IGd1 ZXN0IGZhdWx0cyBjYXVzZWQgYnkgQkJNLCBDTU9zIGZvciB0aGUgZmlyc3QgdmNwdSBhcmUKCkkg Y2FuJ3QgZmlndXJlIG91dCB3aGF0IEJCTSBtZWFucy4KCj4gbmVjZXNzYXJ5IHdoaWxlIHRoZSBv dGhlcnMgbGF0ZXIgYXJlIG5vdC4KPgo+IEJ5IG1vdmluZyBDTU9zIHRvIHRoZSBmYXVsdCBoYW5k bGVycywgd2UgY2FuIGVhc2lseSBpZGVudGlmeSBjb25kaXRpb25zCj4gd2hlcmUgdGhleSBhcmUg cmVhbGx5IG5lZWRlZCBhbmQgYXZvaWQgdGhlIHVubmVjZXNzYXJ5IG9uZXMuIEFzIGl0J3MgYQo+ IHRpbWUgY29uc3VtaW5nIHByb2Nlc3MgdG8gcGVyZm9ybSBDTU9zIGVzcGVjaWFsbHkgd2hlbiBm bHVzaGluZyBhIGJsb2NrCj4gcmFuZ2UsIHNvIHRoaXMgc29sdXRpb24gcmVkdWNlcyBtdWNoIGxv YWQgb2Yga3ZtIGFuZCBpbXByb3ZlIGVmZmljaWVuY3kKPiBvZiB0aGUgcGFnZSB0YWJsZSBjb2Rl Lgo+Cj4gU28gbGV0J3MgbW92ZSBib3RoIGNsZWFuIG9mIEQtY2FjaGUgYW5kIGludmFsaWRhdGlv biBvZiBJLWNhY2hlIHRvIHRoZQo+IG1hcCBwYXRoIGFuZCBtb3ZlIG9ubHkgaW52YWxpZGF0aW9u IG9mIEktY2FjaGUgdG8gdGhlIHBlcm1pc3Npb24gcGF0aC4KPiBTaW5jZSB0aGUgb3JpZ2luYWwg QVBJcyBmb3IgQ01PcyBpbiBtbXUuYyBhcmUgb25seSBjYWxsZWQgaW4gZnVuY3Rpb24KPiB1c2Vy X21lbV9hYm9ydCwgd2Ugbm93IGFsc28gbW92ZSB0aGVtIHRvIHBndGFibGUuYy4KPgo+IFNpZ25l ZC1vZmYtYnk6IFlhbmFuIFdhbmcgPHdhbmd5YW5hbjU1QGh1YXdlaS5jb20+Cj4gLS0tCj4gIGFy Y2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oIHwgMzEgLS0tLS0tLS0tLS0tLS0tCj4gIGFy Y2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMgICAgIHwgNjggKysrKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0KPiAgYXJjaC9hcm02NC9rdm0vbW11LmMgICAgICAgICAgICAgfCAyMyArKy0t LS0tLS0tLQo+ICAzIGZpbGVzIGNoYW5nZWQsIDU3IGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9u cygtKQo+Cj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oIGIv YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbW11LmgKPiBpbmRleCA5MDg3Mzg1MWY2NzcuLmMz MWY4ODMwNmQ0ZSAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUu aAo+ICsrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oCj4gQEAgLTE3NywzNyAr MTc3LDYgQEAgc3RhdGljIGlubGluZSBib29sIHZjcHVfaGFzX2NhY2hlX2VuYWJsZWQoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1KQo+ICAJcmV0dXJuICh2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBTQ1RM Ul9FTDEpICYgMGIxMDEpID09IDBiMTAxOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5lIHZvaWQg X19jbGVhbl9kY2FjaGVfZ3Vlc3RfcGFnZShrdm1fcGZuX3QgcGZuLCB1bnNpZ25lZCBsb25nIHNp emUpCj4gLXsKPiAtCXZvaWQgKnZhID0gcGFnZV9hZGRyZXNzKHBmbl90b19wYWdlKHBmbikpOwo+ IC0KPiAtCS8qCj4gLQkgKiBXaXRoIEZXQiwgd2UgZW5zdXJlIHRoYXQgdGhlIGd1ZXN0IGFsd2F5 cyBhY2Nlc3NlcyBtZW1vcnkgdXNpbmcKPiAtCSAqIGNhY2hlYWJsZSBhdHRyaWJ1dGVzLCBhbmQg d2UgZG9uJ3QgaGF2ZSB0byBjbGVhbiB0byBQb0Mgd2hlbgo+IC0JICogZmF1bHRpbmcgaW4gcGFn ZXMuIEZ1cnRoZXJtb3JlLCBGV0IgaW1wbGllcyBJREMsIHNvIGNsZWFuaW5nIHRvCj4gLQkgKiBQ b1UgaXMgbm90IHJlcXVpcmVkIGVpdGhlciBpbiB0aGlzIGNhc2UuCj4gLQkgKi8KPiAtCWlmIChj cHVzX2hhdmVfY29uc3RfY2FwKEFSTTY0X0hBU19TVEFHRTJfRldCKSkKPiAtCQlyZXR1cm47Cj4g LQo+IC0Ja3ZtX2ZsdXNoX2RjYWNoZV90b19wb2ModmEsIHNpemUpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW5saW5lIHZvaWQgX19pbnZhbGlkYXRlX2ljYWNoZV9ndWVzdF9wYWdlKGt2bV9wZm5fdCBw Zm4sCj4gLQkJCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplKQo+IC17Cj4gLQlpZiAoaWNhY2hlX2lz X2FsaWFzaW5nKCkpIHsKPiAtCQkvKiBhbnkga2luZCBvZiBWSVBUIGNhY2hlICovCj4gLQkJX19m bHVzaF9pY2FjaGVfYWxsKCk7Cj4gLQl9IGVsc2UgaWYgKGlzX2tlcm5lbF9pbl9oeXBfbW9kZSgp IHx8ICFpY2FjaGVfaXNfdnBpcHQoKSkgewo+IC0JCS8qIFBJUFQgb3IgVlBJUFQgYXQgRUwyIChz ZWUgY29tbWVudCBpbiBfX2t2bV90bGJfZmx1c2hfdm1pZF9pcGEpICovCj4gLQkJdm9pZCAqdmEg PSBwYWdlX2FkZHJlc3MocGZuX3RvX3BhZ2UocGZuKSk7Cj4gLQo+IC0JCWludmFsaWRhdGVfaWNh Y2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXZhLAo+IC0JCQkJCSh1bnNpZ25lZCBsb25nKXZhICsg c2l6ZSk7Cj4gLQl9Cj4gLX0KPiAtCj4gIHZvaWQga3ZtX3NldF93YXlfZmx1c2goc3RydWN0IGt2 bV92Y3B1ICp2Y3B1KTsKPiAgdm9pZCBrdm1fdG9nZ2xlX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAq dmNwdSwgYm9vbCB3YXNfZW5hYmxlZCk7Cj4gIAo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2 bS9oeXAvcGd0YWJsZS5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYwo+IGluZGV4IDRk MTc3Y2UxZDUzNi4uODI5YTM0ZWVhNTI2IDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5 cC9wZ3RhYmxlLmMKPiArKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jCj4gQEAgLTQ2 NCw2ICs0NjQsNDMgQEAgc3RhdGljIGludCBzdGFnZTJfbWFwX3NldF9wcm90X2F0dHIoZW51bSBr dm1fcGd0YWJsZV9wcm90IHByb3QsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiArc3RhdGljIGJv b2wgc3RhZ2UyX3B0ZV9jYWNoZWFibGUoa3ZtX3B0ZV90IHB0ZSkKPiArewo+ICsJdTY0IG1lbWF0 dHIgPSBwdGUgJiBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9NRU1BVFRSOwo+ICsJcmV0dXJuIG1l bWF0dHIgPT0gUEFHRV9TMl9NRU1BVFRSKE5PUk1BTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29s IHN0YWdlMl9wdGVfZXhlY3V0YWJsZShrdm1fcHRlX3QgcHRlKQo+ICt7Cj4gKwlyZXR1cm4gIShw dGUgJiBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9YTik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHN0YWdlMl9mbHVzaF9kY2FjaGUodm9pZCAqYWRkciwgdTY0IHNpemUpCj4gK3sKPiArCS8qCj4g KwkgKiBXaXRoIEZXQiwgd2UgZW5zdXJlIHRoYXQgdGhlIGd1ZXN0IGFsd2F5cyBhY2Nlc3NlcyBt ZW1vcnkgdXNpbmcKPiArCSAqIGNhY2hlYWJsZSBhdHRyaWJ1dGVzLCBhbmQgd2UgZG9uJ3QgaGF2 ZSB0byBjbGVhbiB0byBQb0Mgd2hlbgo+ICsJICogZmF1bHRpbmcgaW4gcGFnZXMuIEZ1cnRoZXJt b3JlLCBGV0IgaW1wbGllcyBJREMsIHNvIGNsZWFuaW5nIHRvCj4gKwkgKiBQb1UgaXMgbm90IHJl cXVpcmVkIGVpdGhlciBpbiB0aGlzIGNhc2UuCj4gKwkgKi8KPiArCWlmIChjcHVzX2hhdmVfY29u c3RfY2FwKEFSTTY0X0hBU19TVEFHRTJfRldCKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJX19mbHVz aF9kY2FjaGVfYXJlYShhZGRyLCBzaXplKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3RhZ2Uy X2ludmFsaWRhdGVfaWNhY2hlKHZvaWQgKmFkZHIsIHU2NCBzaXplKQo+ICt7Cj4gKwlpZiAoaWNh Y2hlX2lzX2FsaWFzaW5nKCkpIHsKPiArCQkvKiBGbHVzaCBhbnkga2luZCBvZiBWSVBUIGljYWNo ZSAqLwo+ICsJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwo+ICsJfSBlbHNlIGlmIChpc19rZXJuZWxf aW5faHlwX21vZGUoKSB8fCAhaWNhY2hlX2lzX3ZwaXB0KCkpIHsKPiArCQkvKiBQSVBUIG9yIFZQ SVBUIGF0IEVMMiAqLwo+ICsJCWludmFsaWRhdGVfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25n KWFkZHIsCj4gKwkJCQkJKHVuc2lnbmVkIGxvbmcpYWRkciArIHNpemUpOwo+ICsJfQo+ICt9Cj4g Kwo+ICBzdGF0aWMgaW50IHN0YWdlMl9tYXBfd2Fsa2VyX3RyeV9sZWFmKHU2NCBhZGRyLCB1NjQg ZW5kLCB1MzIgbGV2ZWwsCj4gIAkJCQkgICAgICBrdm1fcHRlX3QgKnB0ZXAsCj4gIAkJCQkgICAg ICBzdHJ1Y3Qgc3RhZ2UyX21hcF9kYXRhICpkYXRhKQo+IEBAIC00OTUsNiArNTMyLDEzIEBAIHN0 YXRpYyBpbnQgc3RhZ2UyX21hcF93YWxrZXJfdHJ5X2xlYWYodTY0IGFkZHIsIHU2NCBlbmQsIHUz MiBsZXZlbCwKPiAgCQlwdXRfcGFnZShwYWdlKTsKPiAgCX0KPiAgCj4gKwkvKiBQZXJmb3JtIENN T3MgYmVmb3JlIGluc3RhbGxhdGlvbiBvZiB0aGUgbmV3IFBURSAqLwo+ICsJaWYgKCFrdm1fcHRl X3ZhbGlkKG9sZCkgfHwgc3RhZ2UyX3B0ZV9jYWNoZWFibGUob2xkKSkKCkknbSBub3Qgc3VyZSB3 aHkgdGhlIHN0YWdlMl9wdGVfY2FjaGVhYmxlKG9sZCkgY29uZGl0aW9uIGlzIG5lZWRlZC4KCmt2 bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoKSBoYW5kbGVzIHRocmVlIHR5cGVzIG9mIHN0YWdlIDIgZGF0 YSBvciBpbnN0cnVjdGlvbgphYm9ydHM6IHRyYW5zbGF0aW9uIGZhdWx0cyAoZmF1bHRfc3RhdHVz ID09IEZTQ19GQVVMVCksIGFjY2VzcyBmYXVsdHMKKGZhdWx0X3N0YXR1cyA9PSBGU0NfQUNDRVNT KSBhbmQgcGVybWlzc2lvbiBmYXVsdHMgKGZhdWx0X3N0YXR1cyA9PSBGU0NfUEVSTSkuCgpBY2Nl c3MgZmF1bHRzIGFyZSBoYW5kbGVkIGluIGhhbmRsZV9hY2Nlc3NfZmF1bHQoKSwgd2hpY2ggbWVh bnMgdXNlcl9tZW1fYWJvcnQoKQpoYW5kbGVzIHRyYW5zbGF0aW9uIGFuZCBwZXJtaXNzaW9uIGZh dWx0cy4gVGhlIG9yaWdpbmFsIGNvZGUgZGlkIHRoZSBkY2FjaGUgY2xlYW4KKyBpbnZhbCB3aGVu IG5vdCBhIHBlcm1pc3Npb24gZmF1bHQsIHdoaWNoIG1lYW5zIHRoZSBDTU8gd2FzIGRvbmUgb25s eSBvbiBhCnRyYW5zbGF0aW9uIGZhdWx0LiBUcmFuc2xhdGlvbiBmYXVsdHMgbWVhbiB0aGF0IHRo ZSBJUEEgd2FzIG5vdCBtYXBwZWQsIHNvIHRoZSBvbGQKZW50cnkgd2lsbCBhbHdheXMgYmUgaW52 YWxpZC4gRXZlbiBpZiB3ZSdyZSBjb2FsZXNjaW5nIG11bHRpcGxlIGxhc3QgbGV2ZWwgbGVhZgpl bnRyaWVzIGludCBvYcKgIGJsb2NrIG1hcHBpbmcsIHRoZSB0YWJsZSBlbnRyeSB3aGljaCBpcyBy ZXBsYWNlZCBpcyBpbnZhbGlkCmJlY2F1c2UgaXQncyBtYXJrZWQgYXMgc3VjaCBpbiBzdGFnZTJf bWFwX3dhbGtfdGFibGVfcHJlKCkuCgpJcyB0aGVyZSBzb21ldGhpbmcgSSdtIG1pc3Npbmc/Cgo+ ICsJCXN0YWdlMl9mbHVzaF9kY2FjaGUoX192YShwaHlzKSwgZ3JhbnVsZSk7Cj4gKwo+ICsJaWYg KHN0YWdlMl9wdGVfZXhlY3V0YWJsZShuZXcpKQo+ICsJCXN0YWdlMl9pbnZhbGlkYXRlX2ljYWNo ZShfX3ZhKHBoeXMpLCBncmFudWxlKTsKClRoaXMsIHRvZ2V0aGVyIHdpdGggdGhlIHN0YWdlMl9h dHRyX3dhbGtlcigpIGNoYW5nZXMgYmVsb3csIGxvb2sgaWRlbnRpY2FsIHRvIHRoZQpjdXJyZW50 IGNvZGUgaW4gdXNlcl9tZW1fYWJvcnQoKS4gVGhlIGV4ZWN1dGFibGUgcGVybWlzc2lvbiBpcyBz ZXQgb24gYW4gZXhlYwpmYXVsdCAoaW5zdHJ1Y3Rpb24gYWJvcnQgbm90IG9uIGEgc3RhZ2UgMiB0 cmFuc2xhdGlvbiB0YWJsZSB3YWxrKSwgYW5kIGFzIGEgcmVzdWx0Cm9mIHRoZSBmYXVsdCB3ZSBl aXRoZXIgbmVlZCB0byBtYXAgYSBuZXcgcGFnZSBoZXJlLCBvciByZWxheCBwZXJtaXNzaW9ucyBp bgprdm1fcGd0YWJsZV9zdGFnZTJfcmVsYXhfcGVybXMoKSAtPiBzdGFnZTJfYXR0cl93YWxrZXIo KSBiZWxvdy4KClRoYW5rcywKCkFsZXgKCj4gKwo+ICAJc21wX3N0b3JlX3JlbGVhc2UocHRlcCwg bmV3KTsKPiAgCWdldF9wYWdlKHBhZ2UpOwo+ICAJZGF0YS0+cGh5cyArPSBncmFudWxlOwo+IEBA IC02NTEsMjAgKzY5NSw2IEBAIGludCBrdm1fcGd0YWJsZV9zdGFnZTJfbWFwKHN0cnVjdCBrdm1f cGd0YWJsZSAqcGd0LCB1NjQgYWRkciwgdTY0IHNpemUsCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4g IAo+IC1zdGF0aWMgdm9pZCBzdGFnZTJfZmx1c2hfZGNhY2hlKHZvaWQgKmFkZHIsIHU2NCBzaXpl KQo+IC17Cj4gLQlpZiAoY3B1c19oYXZlX2NvbnN0X2NhcChBUk02NF9IQVNfU1RBR0UyX0ZXQikp Cj4gLQkJcmV0dXJuOwo+IC0KPiAtCV9fZmx1c2hfZGNhY2hlX2FyZWEoYWRkciwgc2l6ZSk7Cj4g LX0KPiAtCj4gLXN0YXRpYyBib29sIHN0YWdlMl9wdGVfY2FjaGVhYmxlKGt2bV9wdGVfdCBwdGUp Cj4gLXsKPiAtCXU2NCBtZW1hdHRyID0gcHRlICYgS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfTUVN QVRUUjsKPiAtCXJldHVybiBtZW1hdHRyID09IFBBR0VfUzJfTUVNQVRUUihOT1JNQUwpOwo+IC19 Cj4gLQo+ICBzdGF0aWMgaW50IHN0YWdlMl91bm1hcF93YWxrZXIodTY0IGFkZHIsIHU2NCBlbmQs IHUzMiBsZXZlbCwga3ZtX3B0ZV90ICpwdGVwLAo+ICAJCQkgICAgICAgZW51bSBrdm1fcGd0YWJs ZV93YWxrX2ZsYWdzIGZsYWcsCj4gIAkJCSAgICAgICB2b2lkICogY29uc3QgYXJnKQo+IEBAIC03 NDMsOCArNzczLDE2IEBAIHN0YXRpYyBpbnQgc3RhZ2UyX2F0dHJfd2Fsa2VyKHU2NCBhZGRyLCB1 NjQgZW5kLCB1MzIgbGV2ZWwsIGt2bV9wdGVfdCAqcHRlcCwKPiAgCSAqIGJ1dCB3b3JzdC1jYXNl IHRoZSBhY2Nlc3MgZmxhZyB1cGRhdGUgZ2V0cyBsb3N0IGFuZCB3aWxsIGJlCj4gIAkgKiBzZXQg b24gdGhlIG5leHQgYWNjZXNzIGluc3RlYWQuCj4gIAkgKi8KPiAtCWlmIChkYXRhLT5wdGUgIT0g cHRlKQo+ICsJaWYgKGRhdGEtPnB0ZSAhPSBwdGUpIHsKPiArCQkvKgo+ICsJCSAqIEludmFsaWRh dGUgdGhlIGluc3RydWN0aW9uIGNhY2hlIGJlZm9yZSB1cGRhdGluZwo+ICsJCSAqIGlmIHdlIGFy ZSBnb2luZyB0byBhZGQgdGhlIGV4ZWN1dGFibGUgcGVybWlzc2lvbi4KPiArCQkgKi8KPiArCQlp ZiAoIXN0YWdlMl9wdGVfZXhlY3V0YWJsZSgqcHRlcCkgJiYgc3RhZ2UyX3B0ZV9leGVjdXRhYmxl KHB0ZSkpCj4gKwkJCXN0YWdlMl9pbnZhbGlkYXRlX2ljYWNoZShrdm1fcHRlX2ZvbGxvdyhwdGUp LAo+ICsJCQkJCQkga3ZtX2dyYW51bGVfc2l6ZShsZXZlbCkpOwo+ICAJCVdSSVRFX09OQ0UoKnB0 ZXAsIHB0ZSk7Cj4gKwl9Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvYXJj aC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwo+IGluZGV4IDc3Y2IyZDI4 ZjJhNC4uMWVlYzlmNjNiYzZmIDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jCj4g KysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKPiBAQCAtNjA5LDE2ICs2MDksNiBAQCB2b2lkIGt2 bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChzdHJ1Y3Qga3ZtICprdm0sCj4g IAlrdm1fbW11X3dyaXRlX3Byb3RlY3RfcHRfbWFza2VkKGt2bSwgc2xvdCwgZ2ZuX29mZnNldCwg bWFzayk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGNsZWFuX2RjYWNoZV9ndWVzdF9wYWdlKGt2 bV9wZm5fdCBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKPiAtewo+IC0JX19jbGVhbl9kY2FjaGVf Z3Vlc3RfcGFnZShwZm4sIHNpemUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpbnZhbGlkYXRl X2ljYWNoZV9ndWVzdF9wYWdlKGt2bV9wZm5fdCBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKPiAt ewo+IC0JX19pbnZhbGlkYXRlX2ljYWNoZV9ndWVzdF9wYWdlKHBmbiwgc2l6ZSk7Cj4gLX0KPiAt Cj4gIHN0YXRpYyB2b2lkIGt2bV9zZW5kX2h3cG9pc29uX3NpZ25hbCh1bnNpZ25lZCBsb25nIGFk ZHJlc3MsIHNob3J0IGxzYikKPiAgewo+ICAJc2VuZF9zaWdfbWNlZXJyKEJVU19NQ0VFUlJfQVIs ICh2b2lkIF9fdXNlciAqKWFkZHJlc3MsIGxzYiwgY3VycmVudCk7Cj4gQEAgLTg4MiwxMyArODcy LDggQEAgc3RhdGljIGludCB1c2VyX21lbV9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBo eXNfYWRkcl90IGZhdWx0X2lwYSwKPiAgCWlmICh3cml0YWJsZSkKPiAgCQlwcm90IHw9IEtWTV9Q R1RBQkxFX1BST1RfVzsKPiAgCj4gLQlpZiAoZmF1bHRfc3RhdHVzICE9IEZTQ19QRVJNICYmICFk ZXZpY2UpCj4gLQkJY2xlYW5fZGNhY2hlX2d1ZXN0X3BhZ2UocGZuLCB2bWFfcGFnZXNpemUpOwo+ IC0KPiAtCWlmIChleGVjX2ZhdWx0KSB7Cj4gKwlpZiAoZXhlY19mYXVsdCkKPiAgCQlwcm90IHw9 IEtWTV9QR1RBQkxFX1BST1RfWDsKPiAtCQlpbnZhbGlkYXRlX2ljYWNoZV9ndWVzdF9wYWdlKHBm biwgdm1hX3BhZ2VzaXplKTsKPiAtCX0KPiAgCj4gIAlpZiAoZGV2aWNlKQo+ICAJCXByb3QgfD0g S1ZNX1BHVEFCTEVfUFJPVF9ERVZJQ0U7Cj4gQEAgLTExNDQsMTAgKzExMjksMTAgQEAgaW50IGt2 bV9zZXRfc3B0ZV9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSwgcHRlX3Qg cHRlKQo+ICAJdHJhY2Vfa3ZtX3NldF9zcHRlX2h2YShodmEpOwo+ICAKPiAgCS8qCj4gLQkgKiBX ZSd2ZSBtb3ZlZCBhIHBhZ2UgYXJvdW5kLCBwcm9iYWJseSB0aHJvdWdoIENvVywgc28gbGV0J3Mg dHJlYXQgaXQKPiAtCSAqIGp1c3QgbGlrZSBhIHRyYW5zbGF0aW9uIGZhdWx0IGFuZCBjbGVhbiB0 aGUgY2FjaGUgdG8gdGhlIFBvQy4KPiArCSAqIFdlJ3ZlIG1vdmVkIGEgcGFnZSBhcm91bmQsIHBy b2JhYmx5IHRocm91Z2ggQ29XLCBzbyBsZXQncyB0cmVhdAo+ICsJICogaXQganVzdCBsaWtlIGEg dHJhbnNsYXRpb24gZmF1bHQgYW5kIHRoZSBtYXAgaGFuZGxlciB3aWxsIGNsZWFuCj4gKwkgKiB0 aGUgY2FjaGUgdG8gdGhlIFBvQy4KPiAgCSAqLwo+IC0JY2xlYW5fZGNhY2hlX2d1ZXN0X3BhZ2Uo cGZuLCBQQUdFX1NJWkUpOwo+ICAJaGFuZGxlX2h2YV90b19ncGEoa3ZtLCBodmEsIGVuZCwgJmt2 bV9zZXRfc3B0ZV9oYW5kbGVyLCAmcGZuKTsKPiAgCXJldHVybiAwOwo+ICB9CgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1h aWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==