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=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, 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 57705C33C9E for ; Sat, 11 Jan 2020 07:31:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2B26A2077C for ; Sat, 11 Jan 2020 07:31:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728573AbgAKHbW (ORCPT ); Sat, 11 Jan 2020 02:31:22 -0500 Received: from szxga01-in.huawei.com ([45.249.212.187]:2922 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728500AbgAKHbV (ORCPT ); Sat, 11 Jan 2020 02:31:21 -0500 Received: from DGGEMM404-HUB.china.huawei.com (unknown [172.30.72.54]) by Forcepoint Email with ESMTP id 9DB748B199B1D4CB891D; Sat, 11 Jan 2020 15:30:45 +0800 (CST) Received: from dggeme755-chm.china.huawei.com (10.3.19.101) by DGGEMM404-HUB.china.huawei.com (10.3.20.212) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sat, 11 Jan 2020 15:30:45 +0800 Received: from [127.0.0.1] (10.173.221.248) by dggeme755-chm.china.huawei.com (10.3.19.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Sat, 11 Jan 2020 15:30:44 +0800 Subject: Re: [PATCH v2 3/6] KVM: arm64: Support pvlock preempted via shared structure To: Steven Price , , , , , , CC: , , , , , , , , , "Wanghaibin (D)" References: <20191226135833.1052-1-yezengruan@huawei.com> <20191226135833.1052-4-yezengruan@huawei.com> <468e2bb4-8986-5e1e-8c4a-31aa56a9ae4f@arm.com> From: yezengruan Message-ID: Date: Sat, 11 Jan 2020 15:30:42 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.3.0 MIME-Version: 1.0 In-Reply-To: <468e2bb4-8986-5e1e-8c4a-31aa56a9ae4f@arm.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 8bit X-Originating-IP: [10.173.221.248] X-ClientProxiedBy: dggeme701-chm.china.huawei.com (10.1.199.97) To dggeme755-chm.china.huawei.com (10.3.19.101) X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Steve, On 2020/1/9 23:02, Steven Price wrote: > On 26/12/2019 13:58, Zengruan Ye wrote: >> Implement the service call for configuring a shared structure between a >> VCPU and the hypervisor in which the hypervisor can tell the VCPU is >> running or not. >> >> The preempted field is zero if 1) some old KVM deos not support this filed. > > NIT: s/deos/does/ Thanks for posting this. > > However, I would hope that the service call will fail if it's an old KVM not simply return zero. Sorry, I'm not sure what you mean. The service call will fail if it's an old KVM, and the Guest will use __native_vcpu_is_preempted. > >> 2) the VCPU is not preempted. Other values means the VCPU has been preempted. >> >> Signed-off-by: Zengruan Ye >> --- >>   arch/arm/include/asm/kvm_host.h   | 18 ++++++++++++ >>   arch/arm64/include/asm/kvm_host.h | 19 +++++++++++++ >>   arch/arm64/kvm/Makefile           |  1 + >>   virt/kvm/arm/arm.c                |  8 ++++++ >>   virt/kvm/arm/hypercalls.c         |  8 ++++++ >>   virt/kvm/arm/pvlock.c             | 46 +++++++++++++++++++++++++++++++ >>   6 files changed, 100 insertions(+) >>   create mode 100644 virt/kvm/arm/pvlock.c >> >> diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h >> index 556cd818eccf..dfeaf9204875 100644 >> --- a/arch/arm/include/asm/kvm_host.h >> +++ b/arch/arm/include/asm/kvm_host.h >> @@ -356,6 +356,24 @@ static inline bool kvm_arm_is_pvtime_enabled(struct kvm_vcpu_arch *vcpu_arch) >>       return false; >>   } >>   +static inline void kvm_arm_pvlock_preempted_init(struct kvm_vcpu_arch *vcpu_arch) >> +{ >> +} >> + >> +static inline bool kvm_arm_is_pvlock_preempted_ready(struct kvm_vcpu_arch *vcpu_arch) >> +{ >> +    return false; >> +} >> + >> +static inline gpa_t kvm_init_pvlock(struct kvm_vcpu *vcpu) >> +{ >> +    return GPA_INVALID; >> +} >> + >> +static inline void kvm_update_pvlock_preempted(struct kvm_vcpu *vcpu, u64 preempted) >> +{ >> +} >> + >>   void kvm_mmu_wp_memory_region(struct kvm *kvm, int slot); >>     struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr); >> diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h >> index c61260cf63c5..2818a2330f92 100644 >> --- a/arch/arm64/include/asm/kvm_host.h >> +++ b/arch/arm64/include/asm/kvm_host.h >> @@ -354,6 +354,12 @@ struct kvm_vcpu_arch { >>           u64 last_steal; >>           gpa_t base; >>       } steal; >> + >> +    /* Guest PV lock state */ >> +    struct { >> +        u64 preempted; > > I'm not sure why the kernel needs to (separately) track this preempted state? It doesn't appear to be used from what I can tell. Good point, the preempted state field is not actually used, I'll remove it. > > Steve > >> +        gpa_t base; >> +    } pv; >>   }; >>     /* Pointer to the vcpu's SVE FFR for sve_{save,load}_state() */ >> @@ -515,6 +521,19 @@ static inline bool kvm_arm_is_pvtime_enabled(struct kvm_vcpu_arch *vcpu_arch) >>       return (vcpu_arch->steal.base != GPA_INVALID); >>   } >>   +static inline void kvm_arm_pvlock_preempted_init(struct kvm_vcpu_arch *vcpu_arch) >> +{ >> +    vcpu_arch->pv.base = GPA_INVALID; >> +} >> + >> +static inline bool kvm_arm_is_pvlock_preempted_ready(struct kvm_vcpu_arch *vcpu_arch) >> +{ >> +    return (vcpu_arch->pv.base != GPA_INVALID); >> +} >> + >> +gpa_t kvm_init_pvlock(struct kvm_vcpu *vcpu); >> +void kvm_update_pvlock_preempted(struct kvm_vcpu *vcpu, u64 preempted); >> + >>   void kvm_set_sei_esr(struct kvm_vcpu *vcpu, u64 syndrome); >>     struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr); >> diff --git a/arch/arm64/kvm/Makefile b/arch/arm64/kvm/Makefile >> index 5ffbdc39e780..e4591f56d5f1 100644 >> --- a/arch/arm64/kvm/Makefile >> +++ b/arch/arm64/kvm/Makefile >> @@ -15,6 +15,7 @@ kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/arm.o $(KVM)/arm/mmu.o $(KVM)/arm/mmio. >>   kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/psci.o $(KVM)/arm/perf.o >>   kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hypercalls.o >>   kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/pvtime.o >> +kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/pvlock.o >>     kvm-$(CONFIG_KVM_ARM_HOST) += inject_fault.o regmap.o va_layout.o >>   kvm-$(CONFIG_KVM_ARM_HOST) += hyp.o hyp-init.o handle_exit.o >> diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c >> index 8de4daf25097..36d57e77d3c4 100644 >> --- a/virt/kvm/arm/arm.c >> +++ b/virt/kvm/arm/arm.c >> @@ -383,6 +383,8 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) >>         kvm_arm_pvtime_vcpu_init(&vcpu->arch); >>   +    kvm_arm_pvlock_preempted_init(&vcpu->arch); >> + >>       return kvm_vgic_vcpu_init(vcpu); >>   } >>   @@ -421,6 +423,9 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) >>           vcpu_set_wfx_traps(vcpu); >>         vcpu_ptrauth_setup_lazy(vcpu); >> + >> +    if (kvm_arm_is_pvlock_preempted_ready(&vcpu->arch)) >> +        kvm_update_pvlock_preempted(vcpu, 0); >>   } >>     void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) >> @@ -434,6 +439,9 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) >>       vcpu->cpu = -1; >>         kvm_arm_set_running_vcpu(NULL); >> + >> +    if (kvm_arm_is_pvlock_preempted_ready(&vcpu->arch)) >> +        kvm_update_pvlock_preempted(vcpu, 1); >>   } >>     static void vcpu_power_off(struct kvm_vcpu *vcpu) >> diff --git a/virt/kvm/arm/hypercalls.c b/virt/kvm/arm/hypercalls.c >> index 550dfa3e53cd..1c6a11f21bb4 100644 >> --- a/virt/kvm/arm/hypercalls.c >> +++ b/virt/kvm/arm/hypercalls.c >> @@ -52,6 +52,9 @@ int kvm_hvc_call_handler(struct kvm_vcpu *vcpu) >>           case ARM_SMCCC_HV_PV_TIME_FEATURES: >>               val = SMCCC_RET_SUCCESS; >>               break; >> +        case ARM_SMCCC_HV_PV_LOCK_FEATURES: >> +            val = SMCCC_RET_SUCCESS; >> +            break; >>           } >>           break; >>       case ARM_SMCCC_HV_PV_TIME_FEATURES: >> @@ -62,6 +65,11 @@ int kvm_hvc_call_handler(struct kvm_vcpu *vcpu) >>           if (gpa != GPA_INVALID) >>               val = gpa; >>           break; >> +    case ARM_SMCCC_HV_PV_LOCK_PREEMPTED: >> +        gpa = kvm_init_pvlock(vcpu); >> +        if (gpa != GPA_INVALID) >> +            val = gpa; >> +        break; >>       default: >>           return kvm_psci_call(vcpu); >>       } >> diff --git a/virt/kvm/arm/pvlock.c b/virt/kvm/arm/pvlock.c >> new file mode 100644 >> index 000000000000..cdfd30a903b9 >> --- /dev/null >> +++ b/virt/kvm/arm/pvlock.c >> @@ -0,0 +1,46 @@ >> +/* SPDX-License-Identifier: GPL-2.0-only */ >> +/* >> + * Copyright(c) 2019 Huawei Technologies Co., Ltd >> + * Author: Zengruan Ye >> + */ >> + >> +#include >> +#include >> + >> +#include >> + >> +#include >> + >> +gpa_t kvm_init_pvlock(struct kvm_vcpu *vcpu) >> +{ >> +    struct pvlock_vcpu_state init_values = {}; >> +    struct kvm *kvm = vcpu->kvm; >> +    u64 base = vcpu->arch.pv.base; >> +    int idx; >> + >> +    if (base == GPA_INVALID) >> +        return base; >> + >> +    idx = srcu_read_lock(&kvm->srcu); >> +    kvm_write_guest(kvm, base, &init_values, sizeof(init_values)); >> +    srcu_read_unlock(&kvm->srcu, idx); >> + >> +    return base; >> +} >> + >> +void kvm_update_pvlock_preempted(struct kvm_vcpu *vcpu, u64 preempted) >> +{ >> +    int idx; >> +    u64 offset; >> +    __le64 preempted_le; >> +    struct kvm *kvm = vcpu->kvm; >> +    u64 base = vcpu->arch.pv.base; >> + >> +    vcpu->arch.pv.preempted = preempted; >> +    preempted_le = cpu_to_le64(preempted); >> + >> +    idx = srcu_read_lock(&kvm->srcu); >> +    offset = offsetof(struct pvlock_vcpu_state, preempted); >> +    kvm_put_guest(kvm, base + offset, preempted_le, u64); >> +    srcu_read_unlock(&kvm->srcu, idx); >> +} >> > > > . Thanks, Zengruan 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=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, 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 43393C33C9E for ; Sat, 11 Jan 2020 07:30:55 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id CD9002077C for ; Sat, 11 Jan 2020 07:30:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CD9002077C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=huawei.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 46BEC4B0E7; Sat, 11 Jan 2020 02:30:54 -0500 (EST) 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 sz2f2Gk7ODZY; Sat, 11 Jan 2020 02:30:52 -0500 (EST) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id E65F84B095; Sat, 11 Jan 2020 02:30:52 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id B35534B069 for ; Sat, 11 Jan 2020 02:30:51 -0500 (EST) 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 sKU0Sy3AIOn2 for ; Sat, 11 Jan 2020 02:30:50 -0500 (EST) Received: from huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id EAA4A4AFFB for ; Sat, 11 Jan 2020 02:30:49 -0500 (EST) Received: from DGGEMM404-HUB.china.huawei.com (unknown [172.30.72.54]) by Forcepoint Email with ESMTP id 9DB748B199B1D4CB891D; Sat, 11 Jan 2020 15:30:45 +0800 (CST) Received: from dggeme755-chm.china.huawei.com (10.3.19.101) by DGGEMM404-HUB.china.huawei.com (10.3.20.212) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sat, 11 Jan 2020 15:30:45 +0800 Received: from [127.0.0.1] (10.173.221.248) by dggeme755-chm.china.huawei.com (10.3.19.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Sat, 11 Jan 2020 15:30:44 +0800 Subject: Re: [PATCH v2 3/6] KVM: arm64: Support pvlock preempted via shared structure To: Steven Price , , , , , , References: <20191226135833.1052-1-yezengruan@huawei.com> <20191226135833.1052-4-yezengruan@huawei.com> <468e2bb4-8986-5e1e-8c4a-31aa56a9ae4f@arm.com> From: yezengruan Message-ID: Date: Sat, 11 Jan 2020 15:30:42 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.3.0 MIME-Version: 1.0 In-Reply-To: <468e2bb4-8986-5e1e-8c4a-31aa56a9ae4f@arm.com> Content-Language: en-US X-Originating-IP: [10.173.221.248] X-ClientProxiedBy: dggeme701-chm.china.huawei.com (10.1.199.97) To dggeme755-chm.china.huawei.com (10.3.19.101) X-CFilter-Loop: Reflected Cc: catalin.marinas@arm.com, daniel.lezcano@linaro.org, linux@armlinux.org.uk, maz@kernel.org, will@kernel.org 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 SGkgU3RldmUsCgpPbiAyMDIwLzEvOSAyMzowMiwgU3RldmVuIFByaWNlIHdyb3RlOgo+IE9uIDI2 LzEyLzIwMTkgMTM6NTgsIFplbmdydWFuIFllIHdyb3RlOgo+PiBJbXBsZW1lbnQgdGhlIHNlcnZp Y2UgY2FsbCBmb3IgY29uZmlndXJpbmcgYSBzaGFyZWQgc3RydWN0dXJlIGJldHdlZW4gYQo+PiBW Q1BVIGFuZCB0aGUgaHlwZXJ2aXNvciBpbiB3aGljaCB0aGUgaHlwZXJ2aXNvciBjYW4gdGVsbCB0 aGUgVkNQVSBpcwo+PiBydW5uaW5nIG9yIG5vdC4KPj4KPj4gVGhlIHByZWVtcHRlZCBmaWVsZCBp cyB6ZXJvIGlmIDEpIHNvbWUgb2xkIEtWTSBkZW9zIG5vdCBzdXBwb3J0IHRoaXMgZmlsZWQuCj4g Cj4gTklUOiBzL2Rlb3MvZG9lcy8KClRoYW5rcyBmb3IgcG9zdGluZyB0aGlzLgoKPiAKPiBIb3dl dmVyLCBJIHdvdWxkIGhvcGUgdGhhdCB0aGUgc2VydmljZSBjYWxsIHdpbGwgZmFpbCBpZiBpdCdz IGFuIG9sZCBLVk0gbm90IHNpbXBseSByZXR1cm4gemVyby4KClNvcnJ5LCBJJ20gbm90IHN1cmUg d2hhdCB5b3UgbWVhbi4gVGhlIHNlcnZpY2UgY2FsbCB3aWxsIGZhaWwgaWYgaXQncyBhbiBvbGQg S1ZNLCBhbmQgdGhlIEd1ZXN0IHdpbGwgdXNlIF9fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkLgoK PiAKPj4gMikgdGhlIFZDUFUgaXMgbm90IHByZWVtcHRlZC4gT3RoZXIgdmFsdWVzIG1lYW5zIHRo ZSBWQ1BVIGhhcyBiZWVuIHByZWVtcHRlZC4KPj4KPj4gU2lnbmVkLW9mZi1ieTogWmVuZ3J1YW4g WWUgPHllemVuZ3J1YW5AaHVhd2VpLmNvbT4KPj4gLS0tCj4+IMKgIGFyY2gvYXJtL2luY2x1ZGUv YXNtL2t2bV9ob3N0LmjCoMKgIHwgMTggKysrKysrKysrKysrCj4+IMKgIGFyY2gvYXJtNjQvaW5j bHVkZS9hc20va3ZtX2hvc3QuaCB8IDE5ICsrKysrKysrKysrKysKPj4gwqAgYXJjaC9hcm02NC9r dm0vTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMSArCj4+IMKgIHZpcnQva3ZtL2Fy bS9hcm0uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgOCArKysrKysKPj4gwqAg dmlydC9rdm0vYXJtL2h5cGVyY2FsbHMuY8KgwqDCoMKgwqDCoMKgwqAgfMKgIDggKysrKysrCj4+ IMKgIHZpcnQva3ZtL2FybS9wdmxvY2suY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDQ2ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gwqAgNiBmaWxlcyBjaGFuZ2VkLCAxMDAg aW5zZXJ0aW9ucygrKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgdmlydC9rdm0vYXJtL3B2bG9j ay5jCj4+Cj4+IGRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIv YXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+PiBpbmRleCA1NTZjZDgxOGVjY2YuLmRm ZWFmOTIwNDg3NSAxMDA2NDQKPj4gLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2hvc3Qu aAo+PiArKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4+IEBAIC0zNTYsNiAr MzU2LDI0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKHN0 cnVjdCBrdm1fdmNwdV9hcmNoICp2Y3B1X2FyY2gpCj4+IMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNl Owo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2FybV9wdmxvY2tfcHJlZW1w dGVkX2luaXQoc3RydWN0IGt2bV92Y3B1X2FyY2ggKnZjcHVfYXJjaCkKPj4gK3sKPj4gK30KPj4g Kwo+PiArc3RhdGljIGlubGluZSBib29sIGt2bV9hcm1faXNfcHZsb2NrX3ByZWVtcHRlZF9yZWFk eShzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdmNwdV9hcmNoKQo+PiArewo+PiArwqDCoMKgIHJldHVy biBmYWxzZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBncGFfdCBrdm1faW5pdF9wdmxv Y2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+PiArewo+PiArwqDCoMKgIHJldHVybiBHUEFfSU5W QUxJRDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIGt2bV91cGRhdGVfcHZsb2Nr X3ByZWVtcHRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwcmVlbXB0ZWQpCj4+ICt7Cj4+ ICt9Cj4+ICsKPj4gwqAgdm9pZCBrdm1fbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAq a3ZtLCBpbnQgc2xvdCk7Cj4+IMKgIMKgIHN0cnVjdCBrdm1fdmNwdSAqa3ZtX21waWRyX3RvX3Zj cHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1waWRyKTsKPj4gZGlmZiAtLWdpdCBh L2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9h c20va3ZtX2hvc3QuaAo+PiBpbmRleCBjNjEyNjBjZjYzYzUuLjI4MThhMjMzMGY5MiAxMDA2NDQK Pj4gLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4+ICsrKyBiL2FyY2gv YXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+PiBAQCAtMzU0LDYgKzM1NCwxMiBAQCBzdHJ1 Y3Qga3ZtX3ZjcHVfYXJjaCB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgbGFzdF9zdGVhbDsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdwYV90IGJhc2U7Cj4+IMKgwqDCoMKgwqAgfSBzdGVhbDsK Pj4gKwo+PiArwqDCoMKgIC8qIEd1ZXN0IFBWIGxvY2sgc3RhdGUgKi8KPj4gK8KgwqDCoCBzdHJ1 Y3Qgewo+PiArwqDCoMKgwqDCoMKgwqAgdTY0IHByZWVtcHRlZDsKPiAKPiBJJ20gbm90IHN1cmUg d2h5IHRoZSBrZXJuZWwgbmVlZHMgdG8gKHNlcGFyYXRlbHkpIHRyYWNrIHRoaXMgcHJlZW1wdGVk IHN0YXRlPyBJdCBkb2Vzbid0IGFwcGVhciB0byBiZSB1c2VkIGZyb20gd2hhdCBJIGNhbiB0ZWxs LgoKR29vZCBwb2ludCwgdGhlIHByZWVtcHRlZCBzdGF0ZSBmaWVsZCBpcyBub3QgYWN0dWFsbHkg dXNlZCwgSSdsbCByZW1vdmUgaXQuCgo+IAo+IFN0ZXZlCj4gCj4+ICvCoMKgwqDCoMKgwqDCoCBn cGFfdCBiYXNlOwo+PiArwqDCoMKgIH0gcHY7Cj4+IMKgIH07Cj4+IMKgIMKgIC8qIFBvaW50ZXIg dG8gdGhlIHZjcHUncyBTVkUgRkZSIGZvciBzdmVfe3NhdmUsbG9hZH1fc3RhdGUoKSAqLwo+PiBA QCAtNTE1LDYgKzUyMSwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FybV9pc19wdnRpbWVf ZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdmNwdV9hcmNoKQo+PiDCoMKgwqDCoMKgIHJl dHVybiAodmNwdV9hcmNoLT5zdGVhbC5iYXNlICE9IEdQQV9JTlZBTElEKTsKPj4gwqAgfQo+PiDC oCArc3RhdGljIGlubGluZSB2b2lkIGt2bV9hcm1fcHZsb2NrX3ByZWVtcHRlZF9pbml0KHN0cnVj dCBrdm1fdmNwdV9hcmNoICp2Y3B1X2FyY2gpCj4+ICt7Cj4+ICvCoMKgwqAgdmNwdV9hcmNoLT5w di5iYXNlID0gR1BBX0lOVkFMSUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBr dm1fYXJtX2lzX3B2bG9ja19wcmVlbXB0ZWRfcmVhZHkoc3RydWN0IGt2bV92Y3B1X2FyY2ggKnZj cHVfYXJjaCkKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gKHZjcHVfYXJjaC0+cHYuYmFzZSAhPSBH UEFfSU5WQUxJRCk7Cj4+ICt9Cj4+ICsKPj4gK2dwYV90IGt2bV9pbml0X3B2bG9jayhzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUpOwo+PiArdm9pZCBrdm1fdXBkYXRlX3B2bG9ja19wcmVlbXB0ZWQoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcHJlZW1wdGVkKTsKPj4gKwo+PiDCoCB2b2lkIGt2bV9z ZXRfc2VpX2VzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzeW5kcm9tZSk7Cj4+IMKgIMKg IHN0cnVjdCBrdm1fdmNwdSAqa3ZtX21waWRyX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNp Z25lZCBsb25nIG1waWRyKTsKPj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxl IGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUKPj4gaW5kZXggNWZmYmRjMzllNzgwLi5lNDU5MWY1 NmQ1ZjEgMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlCj4+ICsrKyBiL2Fy Y2gvYXJtNjQva3ZtL01ha2VmaWxlCj4+IEBAIC0xNSw2ICsxNSw3IEBAIGt2bS0kKENPTkZJR19L Vk1fQVJNX0hPU1QpICs9ICQoS1ZNKS9hcm0vYXJtLm8gJChLVk0pL2FybS9tbXUubyAkKEtWTSkv YXJtL21taW8uCj4+IMKgIGt2bS0kKENPTkZJR19LVk1fQVJNX0hPU1QpICs9ICQoS1ZNKS9hcm0v cHNjaS5vICQoS1ZNKS9hcm0vcGVyZi5vCj4+IMKgIGt2bS0kKENPTkZJR19LVk1fQVJNX0hPU1Qp ICs9ICQoS1ZNKS9hcm0vaHlwZXJjYWxscy5vCj4+IMKgIGt2bS0kKENPTkZJR19LVk1fQVJNX0hP U1QpICs9ICQoS1ZNKS9hcm0vcHZ0aW1lLm8KPj4gK2t2bS0kKENPTkZJR19LVk1fQVJNX0hPU1Qp ICs9ICQoS1ZNKS9hcm0vcHZsb2NrLm8KPj4gwqAgwqAga3ZtLSQoQ09ORklHX0tWTV9BUk1fSE9T VCkgKz0gaW5qZWN0X2ZhdWx0Lm8gcmVnbWFwLm8gdmFfbGF5b3V0Lm8KPj4gwqAga3ZtLSQoQ09O RklHX0tWTV9BUk1fSE9TVCkgKz0gaHlwLm8gaHlwLWluaXQubyBoYW5kbGVfZXhpdC5vCj4+IGRp ZmYgLS1naXQgYS92aXJ0L2t2bS9hcm0vYXJtLmMgYi92aXJ0L2t2bS9hcm0vYXJtLmMKPj4gaW5k ZXggOGRlNGRhZjI1MDk3Li4zNmQ1N2U3N2QzYzQgMTAwNjQ0Cj4+IC0tLSBhL3ZpcnQva3ZtL2Fy bS9hcm0uYwo+PiArKysgYi92aXJ0L2t2bS9hcm0vYXJtLmMKPj4gQEAgLTM4Myw2ICszODMsOCBA QCBpbnQga3ZtX2FyY2hfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4gwqAgwqDC oMKgwqDCoCBrdm1fYXJtX3B2dGltZV92Y3B1X2luaXQoJnZjcHUtPmFyY2gpOwo+PiDCoCArwqDC oMKgIGt2bV9hcm1fcHZsb2NrX3ByZWVtcHRlZF9pbml0KCZ2Y3B1LT5hcmNoKTsKPj4gKwo+PiDC oMKgwqDCoMKgIHJldHVybiBrdm1fdmdpY192Y3B1X2luaXQodmNwdSk7Cj4+IMKgIH0KPj4gwqAg QEAgLTQyMSw2ICs0MjMsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUsIGludCBjcHUpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB2Y3B1X3NldF93ZnhfdHJh cHModmNwdSk7Cj4+IMKgIMKgwqDCoMKgwqAgdmNwdV9wdHJhdXRoX3NldHVwX2xhenkodmNwdSk7 Cj4+ICsKPj4gK8KgwqDCoCBpZiAoa3ZtX2FybV9pc19wdmxvY2tfcHJlZW1wdGVkX3JlYWR5KCZ2 Y3B1LT5hcmNoKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGt2bV91cGRhdGVfcHZsb2NrX3ByZWVtcHRl ZCh2Y3B1LCAwKTsKPj4gwqAgfQo+PiDCoCDCoCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVj dCBrdm1fdmNwdSAqdmNwdSkKPj4gQEAgLTQzNCw2ICs0MzksOSBAQCB2b2lkIGt2bV9hcmNoX3Zj cHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4gwqDCoMKgwqDCoCB2Y3B1LT5jcHUgPSAt MTsKPj4gwqAgwqDCoMKgwqDCoCBrdm1fYXJtX3NldF9ydW5uaW5nX3ZjcHUoTlVMTCk7Cj4+ICsK Pj4gK8KgwqDCoCBpZiAoa3ZtX2FybV9pc19wdmxvY2tfcHJlZW1wdGVkX3JlYWR5KCZ2Y3B1LT5h cmNoKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGt2bV91cGRhdGVfcHZsb2NrX3ByZWVtcHRlZCh2Y3B1 LCAxKTsKPj4gwqAgfQo+PiDCoCDCoCBzdGF0aWMgdm9pZCB2Y3B1X3Bvd2VyX29mZihzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUpCj4+IGRpZmYgLS1naXQgYS92aXJ0L2t2bS9hcm0vaHlwZXJjYWxscy5j IGIvdmlydC9rdm0vYXJtL2h5cGVyY2FsbHMuYwo+PiBpbmRleCA1NTBkZmEzZTUzY2QuLjFjNmEx MWYyMWJiNCAxMDA2NDQKPj4gLS0tIGEvdmlydC9rdm0vYXJtL2h5cGVyY2FsbHMuYwo+PiArKysg Yi92aXJ0L2t2bS9hcm0vaHlwZXJjYWxscy5jCj4+IEBAIC01Miw2ICs1Miw5IEBAIGludCBrdm1f aHZjX2NhbGxfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBjYXNlIEFSTV9TTUNDQ19IVl9QVl9USU1FX0ZFQVRVUkVTOgo+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB2YWwgPSBTTUNDQ19SRVRfU1VDQ0VTUzsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIEFSTV9TTUNDQ19IVl9Q Vl9MT0NLX0ZFQVRVUkVTOgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwgPSBTTUNDQ19S RVRfU1VDQ0VTUzsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gwqDCoMKgwqDCoCBj YXNlIEFSTV9TTUNDQ19IVl9QVl9USU1FX0ZFQVRVUkVTOgo+PiBAQCAtNjIsNiArNjUsMTEgQEAg aW50IGt2bV9odmNfY2FsbF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChncGEgIT0gR1BBX0lOVkFMSUQpCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHZhbCA9IGdwYTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDC oMKgIGNhc2UgQVJNX1NNQ0NDX0hWX1BWX0xPQ0tfUFJFRU1QVEVEOgo+PiArwqDCoMKgwqDCoMKg wqAgZ3BhID0ga3ZtX2luaXRfcHZsb2NrKHZjcHUpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGdw YSAhPSBHUEFfSU5WQUxJRCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsID0gZ3BhOwo+ PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKgwqAgZGVmYXVsdDoKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBrdm1fcHNjaV9jYWxsKHZjcHUpOwo+PiDCoMKgwqDCoMKgIH0K Pj4gZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2FybS9wdmxvY2suYyBiL3ZpcnQva3ZtL2FybS9wdmxv Y2suYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmNkZmQz MGE5MDNiOQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL3ZpcnQva3ZtL2FybS9wdmxvY2suYwo+ PiBAQCAtMCwwICsxLDQ2IEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5ICovCj4+ICsvKgo+PiArICogQ29weXJpZ2h0KGMpIDIwMTkgSHVhd2VpIFRlY2hub2xv Z2llcyBDby4sIEx0ZAo+PiArICogQXV0aG9yOiBaZW5ncnVhbiBZZSA8eWV6ZW5ncnVhbkBodWF3 ZWkuY29tPgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9hcm0tc21jY2MuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgo+PiArCj4+ICsjaW5jbHVkZSA8YXNtL3B2bG9j ay1hYmkuaD4KPj4gKwo+PiArI2luY2x1ZGUgPGt2bS9hcm1faHlwZXJjYWxscy5oPgo+PiArCj4+ ICtncGFfdCBrdm1faW5pdF9wdmxvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+PiArewo+PiAr wqDCoMKgIHN0cnVjdCBwdmxvY2tfdmNwdV9zdGF0ZSBpbml0X3ZhbHVlcyA9IHt9Owo+PiArwqDC oMKgIHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtPmt2bTsKPj4gK8KgwqDCoCB1NjQgYmFzZSA9IHZj cHUtPmFyY2gucHYuYmFzZTsKPj4gK8KgwqDCoCBpbnQgaWR4Owo+PiArCj4+ICvCoMKgwqAgaWYg KGJhc2UgPT0gR1BBX0lOVkFMSUQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gYmFzZTsKPj4g Kwo+PiArwqDCoMKgIGlkeCA9IHNyY3VfcmVhZF9sb2NrKCZrdm0tPnNyY3UpOwo+PiArwqDCoMKg IGt2bV93cml0ZV9ndWVzdChrdm0sIGJhc2UsICZpbml0X3ZhbHVlcywgc2l6ZW9mKGluaXRfdmFs dWVzKSk7Cj4+ICvCoMKgwqAgc3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCBpZHgpOwo+PiAr Cj4+ICvCoMKgwqAgcmV0dXJuIGJhc2U7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQga3ZtX3VwZGF0ZV9w dmxvY2tfcHJlZW1wdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHByZWVtcHRlZCkKPj4g K3sKPj4gK8KgwqDCoCBpbnQgaWR4Owo+PiArwqDCoMKgIHU2NCBvZmZzZXQ7Cj4+ICvCoMKgwqAg X19sZTY0IHByZWVtcHRlZF9sZTsKPj4gK8KgwqDCoCBzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LT5r dm07Cj4+ICvCoMKgwqAgdTY0IGJhc2UgPSB2Y3B1LT5hcmNoLnB2LmJhc2U7Cj4+ICsKPj4gK8Kg wqDCoCB2Y3B1LT5hcmNoLnB2LnByZWVtcHRlZCA9IHByZWVtcHRlZDsKPj4gK8KgwqDCoCBwcmVl bXB0ZWRfbGUgPSBjcHVfdG9fbGU2NChwcmVlbXB0ZWQpOwo+PiArCj4+ICvCoMKgwqAgaWR4ID0g c3JjdV9yZWFkX2xvY2soJmt2bS0+c3JjdSk7Cj4+ICvCoMKgwqAgb2Zmc2V0ID0gb2Zmc2V0b2Yo c3RydWN0IHB2bG9ja192Y3B1X3N0YXRlLCBwcmVlbXB0ZWQpOwo+PiArwqDCoMKgIGt2bV9wdXRf Z3Vlc3Qoa3ZtLCBiYXNlICsgb2Zmc2V0LCBwcmVlbXB0ZWRfbGUsIHU2NCk7Cj4+ICvCoMKgwqAg c3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCBpZHgpOwo+PiArfQo+Pgo+IAo+IAo+IC4KClRo YW5rcywKClplbmdydWFuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwprdm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0cy5jcy5jb2x1bWJpYS5lZHUK aHR0cHM6Ly9saXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9saXN0aW5mby9rdm1hcm0K From mboxrd@z Thu Jan 1 00:00:00 1970 From: yezengruan Subject: Re: [PATCH v2 3/6] KVM: arm64: Support pvlock preempted via shared structure Date: Sat, 11 Jan 2020 15:30:42 +0800 Message-ID: References: <20191226135833.1052-1-yezengruan@huawei.com> <20191226135833.1052-4-yezengruan@huawei.com> <468e2bb4-8986-5e1e-8c4a-31aa56a9ae4f@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <468e2bb4-8986-5e1e-8c4a-31aa56a9ae4f@arm.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" To: Steven Price , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-doc@vger.kernel.org, virtualization@lists.linux-foundation.org Cc: mark.rutland@arm.com, suzuki.poulose@arm.com, catalin.marinas@arm.com, daniel.lezcano@linaro.org, linux@armlinux.org.uk, james.morse@arm.com, maz@kernel.org, "Wanghaibin (D)" , will@kernel.org, julien.thierry.kdev@gmail.com List-Id: virtualization@lists.linuxfoundation.org SGkgU3RldmUsCgpPbiAyMDIwLzEvOSAyMzowMiwgU3RldmVuIFByaWNlIHdyb3RlOgo+IE9uIDI2 LzEyLzIwMTkgMTM6NTgsIFplbmdydWFuIFllIHdyb3RlOgo+PiBJbXBsZW1lbnQgdGhlIHNlcnZp Y2UgY2FsbCBmb3IgY29uZmlndXJpbmcgYSBzaGFyZWQgc3RydWN0dXJlIGJldHdlZW4gYQo+PiBW Q1BVIGFuZCB0aGUgaHlwZXJ2aXNvciBpbiB3aGljaCB0aGUgaHlwZXJ2aXNvciBjYW4gdGVsbCB0 aGUgVkNQVSBpcwo+PiBydW5uaW5nIG9yIG5vdC4KPj4KPj4gVGhlIHByZWVtcHRlZCBmaWVsZCBp cyB6ZXJvIGlmIDEpIHNvbWUgb2xkIEtWTSBkZW9zIG5vdCBzdXBwb3J0IHRoaXMgZmlsZWQuCj4g Cj4gTklUOiBzL2Rlb3MvZG9lcy8KClRoYW5rcyBmb3IgcG9zdGluZyB0aGlzLgoKPiAKPiBIb3dl dmVyLCBJIHdvdWxkIGhvcGUgdGhhdCB0aGUgc2VydmljZSBjYWxsIHdpbGwgZmFpbCBpZiBpdCdz IGFuIG9sZCBLVk0gbm90IHNpbXBseSByZXR1cm4gemVyby4KClNvcnJ5LCBJJ20gbm90IHN1cmUg d2hhdCB5b3UgbWVhbi4gVGhlIHNlcnZpY2UgY2FsbCB3aWxsIGZhaWwgaWYgaXQncyBhbiBvbGQg S1ZNLCBhbmQgdGhlIEd1ZXN0IHdpbGwgdXNlIF9fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkLgoK PiAKPj4gMikgdGhlIFZDUFUgaXMgbm90IHByZWVtcHRlZC4gT3RoZXIgdmFsdWVzIG1lYW5zIHRo ZSBWQ1BVIGhhcyBiZWVuIHByZWVtcHRlZC4KPj4KPj4gU2lnbmVkLW9mZi1ieTogWmVuZ3J1YW4g WWUgPHllemVuZ3J1YW5AaHVhd2VpLmNvbT4KPj4gLS0tCj4+IMKgIGFyY2gvYXJtL2luY2x1ZGUv YXNtL2t2bV9ob3N0LmjCoMKgIHwgMTggKysrKysrKysrKysrCj4+IMKgIGFyY2gvYXJtNjQvaW5j bHVkZS9hc20va3ZtX2hvc3QuaCB8IDE5ICsrKysrKysrKysrKysKPj4gwqAgYXJjaC9hcm02NC9r dm0vTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMSArCj4+IMKgIHZpcnQva3ZtL2Fy bS9hcm0uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgOCArKysrKysKPj4gwqAg dmlydC9rdm0vYXJtL2h5cGVyY2FsbHMuY8KgwqDCoMKgwqDCoMKgwqAgfMKgIDggKysrKysrCj4+ IMKgIHZpcnQva3ZtL2FybS9wdmxvY2suY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDQ2ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gwqAgNiBmaWxlcyBjaGFuZ2VkLCAxMDAg aW5zZXJ0aW9ucygrKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgdmlydC9rdm0vYXJtL3B2bG9j ay5jCj4+Cj4+IGRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIv YXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+PiBpbmRleCA1NTZjZDgxOGVjY2YuLmRm ZWFmOTIwNDg3NSAxMDA2NDQKPj4gLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2hvc3Qu aAo+PiArKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4+IEBAIC0zNTYsNiAr MzU2LDI0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKHN0 cnVjdCBrdm1fdmNwdV9hcmNoICp2Y3B1X2FyY2gpCj4+IMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNl Owo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2FybV9wdmxvY2tfcHJlZW1w dGVkX2luaXQoc3RydWN0IGt2bV92Y3B1X2FyY2ggKnZjcHVfYXJjaCkKPj4gK3sKPj4gK30KPj4g Kwo+PiArc3RhdGljIGlubGluZSBib29sIGt2bV9hcm1faXNfcHZsb2NrX3ByZWVtcHRlZF9yZWFk eShzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdmNwdV9hcmNoKQo+PiArewo+PiArwqDCoMKgIHJldHVy biBmYWxzZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBncGFfdCBrdm1faW5pdF9wdmxv Y2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+PiArewo+PiArwqDCoMKgIHJldHVybiBHUEFfSU5W QUxJRDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIGt2bV91cGRhdGVfcHZsb2Nr X3ByZWVtcHRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwcmVlbXB0ZWQpCj4+ICt7Cj4+ ICt9Cj4+ICsKPj4gwqAgdm9pZCBrdm1fbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAq a3ZtLCBpbnQgc2xvdCk7Cj4+IMKgIMKgIHN0cnVjdCBrdm1fdmNwdSAqa3ZtX21waWRyX3RvX3Zj cHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1waWRyKTsKPj4gZGlmZiAtLWdpdCBh L2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9h c20va3ZtX2hvc3QuaAo+PiBpbmRleCBjNjEyNjBjZjYzYzUuLjI4MThhMjMzMGY5MiAxMDA2NDQK Pj4gLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4+ICsrKyBiL2FyY2gv YXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+PiBAQCAtMzU0LDYgKzM1NCwxMiBAQCBzdHJ1 Y3Qga3ZtX3ZjcHVfYXJjaCB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgbGFzdF9zdGVhbDsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdwYV90IGJhc2U7Cj4+IMKgwqDCoMKgwqAgfSBzdGVhbDsK Pj4gKwo+PiArwqDCoMKgIC8qIEd1ZXN0IFBWIGxvY2sgc3RhdGUgKi8KPj4gK8KgwqDCoCBzdHJ1 Y3Qgewo+PiArwqDCoMKgwqDCoMKgwqAgdTY0IHByZWVtcHRlZDsKPiAKPiBJJ20gbm90IHN1cmUg d2h5IHRoZSBrZXJuZWwgbmVlZHMgdG8gKHNlcGFyYXRlbHkpIHRyYWNrIHRoaXMgcHJlZW1wdGVk IHN0YXRlPyBJdCBkb2Vzbid0IGFwcGVhciB0byBiZSB1c2VkIGZyb20gd2hhdCBJIGNhbiB0ZWxs LgoKR29vZCBwb2ludCwgdGhlIHByZWVtcHRlZCBzdGF0ZSBmaWVsZCBpcyBub3QgYWN0dWFsbHkg dXNlZCwgSSdsbCByZW1vdmUgaXQuCgo+IAo+IFN0ZXZlCj4gCj4+ICvCoMKgwqDCoMKgwqDCoCBn cGFfdCBiYXNlOwo+PiArwqDCoMKgIH0gcHY7Cj4+IMKgIH07Cj4+IMKgIMKgIC8qIFBvaW50ZXIg dG8gdGhlIHZjcHUncyBTVkUgRkZSIGZvciBzdmVfe3NhdmUsbG9hZH1fc3RhdGUoKSAqLwo+PiBA QCAtNTE1LDYgKzUyMSwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FybV9pc19wdnRpbWVf ZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdmNwdV9hcmNoKQo+PiDCoMKgwqDCoMKgIHJl dHVybiAodmNwdV9hcmNoLT5zdGVhbC5iYXNlICE9IEdQQV9JTlZBTElEKTsKPj4gwqAgfQo+PiDC oCArc3RhdGljIGlubGluZSB2b2lkIGt2bV9hcm1fcHZsb2NrX3ByZWVtcHRlZF9pbml0KHN0cnVj dCBrdm1fdmNwdV9hcmNoICp2Y3B1X2FyY2gpCj4+ICt7Cj4+ICvCoMKgwqAgdmNwdV9hcmNoLT5w di5iYXNlID0gR1BBX0lOVkFMSUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBr dm1fYXJtX2lzX3B2bG9ja19wcmVlbXB0ZWRfcmVhZHkoc3RydWN0IGt2bV92Y3B1X2FyY2ggKnZj cHVfYXJjaCkKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gKHZjcHVfYXJjaC0+cHYuYmFzZSAhPSBH UEFfSU5WQUxJRCk7Cj4+ICt9Cj4+ICsKPj4gK2dwYV90IGt2bV9pbml0X3B2bG9jayhzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUpOwo+PiArdm9pZCBrdm1fdXBkYXRlX3B2bG9ja19wcmVlbXB0ZWQoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcHJlZW1wdGVkKTsKPj4gKwo+PiDCoCB2b2lkIGt2bV9z ZXRfc2VpX2VzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzeW5kcm9tZSk7Cj4+IMKgIMKg IHN0cnVjdCBrdm1fdmNwdSAqa3ZtX21waWRyX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNp Z25lZCBsb25nIG1waWRyKTsKPj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxl IGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUKPj4gaW5kZXggNWZmYmRjMzllNzgwLi5lNDU5MWY1 NmQ1ZjEgMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlCj4+ICsrKyBiL2Fy Y2gvYXJtNjQva3ZtL01ha2VmaWxlCj4+IEBAIC0xNSw2ICsxNSw3IEBAIGt2bS0kKENPTkZJR19L Vk1fQVJNX0hPU1QpICs9ICQoS1ZNKS9hcm0vYXJtLm8gJChLVk0pL2FybS9tbXUubyAkKEtWTSkv YXJtL21taW8uCj4+IMKgIGt2bS0kKENPTkZJR19LVk1fQVJNX0hPU1QpICs9ICQoS1ZNKS9hcm0v cHNjaS5vICQoS1ZNKS9hcm0vcGVyZi5vCj4+IMKgIGt2bS0kKENPTkZJR19LVk1fQVJNX0hPU1Qp ICs9ICQoS1ZNKS9hcm0vaHlwZXJjYWxscy5vCj4+IMKgIGt2bS0kKENPTkZJR19LVk1fQVJNX0hP U1QpICs9ICQoS1ZNKS9hcm0vcHZ0aW1lLm8KPj4gK2t2bS0kKENPTkZJR19LVk1fQVJNX0hPU1Qp ICs9ICQoS1ZNKS9hcm0vcHZsb2NrLm8KPj4gwqAgwqAga3ZtLSQoQ09ORklHX0tWTV9BUk1fSE9T VCkgKz0gaW5qZWN0X2ZhdWx0Lm8gcmVnbWFwLm8gdmFfbGF5b3V0Lm8KPj4gwqAga3ZtLSQoQ09O RklHX0tWTV9BUk1fSE9TVCkgKz0gaHlwLm8gaHlwLWluaXQubyBoYW5kbGVfZXhpdC5vCj4+IGRp ZmYgLS1naXQgYS92aXJ0L2t2bS9hcm0vYXJtLmMgYi92aXJ0L2t2bS9hcm0vYXJtLmMKPj4gaW5k ZXggOGRlNGRhZjI1MDk3Li4zNmQ1N2U3N2QzYzQgMTAwNjQ0Cj4+IC0tLSBhL3ZpcnQva3ZtL2Fy bS9hcm0uYwo+PiArKysgYi92aXJ0L2t2bS9hcm0vYXJtLmMKPj4gQEAgLTM4Myw2ICszODMsOCBA QCBpbnQga3ZtX2FyY2hfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4gwqAgwqDC oMKgwqDCoCBrdm1fYXJtX3B2dGltZV92Y3B1X2luaXQoJnZjcHUtPmFyY2gpOwo+PiDCoCArwqDC oMKgIGt2bV9hcm1fcHZsb2NrX3ByZWVtcHRlZF9pbml0KCZ2Y3B1LT5hcmNoKTsKPj4gKwo+PiDC oMKgwqDCoMKgIHJldHVybiBrdm1fdmdpY192Y3B1X2luaXQodmNwdSk7Cj4+IMKgIH0KPj4gwqAg QEAgLTQyMSw2ICs0MjMsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUsIGludCBjcHUpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB2Y3B1X3NldF93ZnhfdHJh cHModmNwdSk7Cj4+IMKgIMKgwqDCoMKgwqAgdmNwdV9wdHJhdXRoX3NldHVwX2xhenkodmNwdSk7 Cj4+ICsKPj4gK8KgwqDCoCBpZiAoa3ZtX2FybV9pc19wdmxvY2tfcHJlZW1wdGVkX3JlYWR5KCZ2 Y3B1LT5hcmNoKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGt2bV91cGRhdGVfcHZsb2NrX3ByZWVtcHRl ZCh2Y3B1LCAwKTsKPj4gwqAgfQo+PiDCoCDCoCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVj dCBrdm1fdmNwdSAqdmNwdSkKPj4gQEAgLTQzNCw2ICs0MzksOSBAQCB2b2lkIGt2bV9hcmNoX3Zj cHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4gwqDCoMKgwqDCoCB2Y3B1LT5jcHUgPSAt MTsKPj4gwqAgwqDCoMKgwqDCoCBrdm1fYXJtX3NldF9ydW5uaW5nX3ZjcHUoTlVMTCk7Cj4+ICsK Pj4gK8KgwqDCoCBpZiAoa3ZtX2FybV9pc19wdmxvY2tfcHJlZW1wdGVkX3JlYWR5KCZ2Y3B1LT5h cmNoKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGt2bV91cGRhdGVfcHZsb2NrX3ByZWVtcHRlZCh2Y3B1 LCAxKTsKPj4gwqAgfQo+PiDCoCDCoCBzdGF0aWMgdm9pZCB2Y3B1X3Bvd2VyX29mZihzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUpCj4+IGRpZmYgLS1naXQgYS92aXJ0L2t2bS9hcm0vaHlwZXJjYWxscy5j IGIvdmlydC9rdm0vYXJtL2h5cGVyY2FsbHMuYwo+PiBpbmRleCA1NTBkZmEzZTUzY2QuLjFjNmEx MWYyMWJiNCAxMDA2NDQKPj4gLS0tIGEvdmlydC9rdm0vYXJtL2h5cGVyY2FsbHMuYwo+PiArKysg Yi92aXJ0L2t2bS9hcm0vaHlwZXJjYWxscy5jCj4+IEBAIC01Miw2ICs1Miw5IEBAIGludCBrdm1f aHZjX2NhbGxfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBjYXNlIEFSTV9TTUNDQ19IVl9QVl9USU1FX0ZFQVRVUkVTOgo+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB2YWwgPSBTTUNDQ19SRVRfU1VDQ0VTUzsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIEFSTV9TTUNDQ19IVl9Q Vl9MT0NLX0ZFQVRVUkVTOgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwgPSBTTUNDQ19S RVRfU1VDQ0VTUzsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gwqDCoMKgwqDCoCBj YXNlIEFSTV9TTUNDQ19IVl9QVl9USU1FX0ZFQVRVUkVTOgo+PiBAQCAtNjIsNiArNjUsMTEgQEAg aW50IGt2bV9odmNfY2FsbF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChncGEgIT0gR1BBX0lOVkFMSUQpCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHZhbCA9IGdwYTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDC oMKgIGNhc2UgQVJNX1NNQ0NDX0hWX1BWX0xPQ0tfUFJFRU1QVEVEOgo+PiArwqDCoMKgwqDCoMKg wqAgZ3BhID0ga3ZtX2luaXRfcHZsb2NrKHZjcHUpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGdw YSAhPSBHUEFfSU5WQUxJRCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsID0gZ3BhOwo+ PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKgwqAgZGVmYXVsdDoKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBrdm1fcHNjaV9jYWxsKHZjcHUpOwo+PiDCoMKgwqDCoMKgIH0K Pj4gZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2FybS9wdmxvY2suYyBiL3ZpcnQva3ZtL2FybS9wdmxv Y2suYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmNkZmQz MGE5MDNiOQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL3ZpcnQva3ZtL2FybS9wdmxvY2suYwo+ PiBAQCAtMCwwICsxLDQ2IEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5ICovCj4+ICsvKgo+PiArICogQ29weXJpZ2h0KGMpIDIwMTkgSHVhd2VpIFRlY2hub2xv Z2llcyBDby4sIEx0ZAo+PiArICogQXV0aG9yOiBaZW5ncnVhbiBZZSA8eWV6ZW5ncnVhbkBodWF3 ZWkuY29tPgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9hcm0tc21jY2MuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgo+PiArCj4+ICsjaW5jbHVkZSA8YXNtL3B2bG9j ay1hYmkuaD4KPj4gKwo+PiArI2luY2x1ZGUgPGt2bS9hcm1faHlwZXJjYWxscy5oPgo+PiArCj4+ ICtncGFfdCBrdm1faW5pdF9wdmxvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+PiArewo+PiAr wqDCoMKgIHN0cnVjdCBwdmxvY2tfdmNwdV9zdGF0ZSBpbml0X3ZhbHVlcyA9IHt9Owo+PiArwqDC oMKgIHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtPmt2bTsKPj4gK8KgwqDCoCB1NjQgYmFzZSA9IHZj cHUtPmFyY2gucHYuYmFzZTsKPj4gK8KgwqDCoCBpbnQgaWR4Owo+PiArCj4+ICvCoMKgwqAgaWYg KGJhc2UgPT0gR1BBX0lOVkFMSUQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gYmFzZTsKPj4g Kwo+PiArwqDCoMKgIGlkeCA9IHNyY3VfcmVhZF9sb2NrKCZrdm0tPnNyY3UpOwo+PiArwqDCoMKg IGt2bV93cml0ZV9ndWVzdChrdm0sIGJhc2UsICZpbml0X3ZhbHVlcywgc2l6ZW9mKGluaXRfdmFs dWVzKSk7Cj4+ICvCoMKgwqAgc3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCBpZHgpOwo+PiAr Cj4+ICvCoMKgwqAgcmV0dXJuIGJhc2U7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQga3ZtX3VwZGF0ZV9w dmxvY2tfcHJlZW1wdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHByZWVtcHRlZCkKPj4g K3sKPj4gK8KgwqDCoCBpbnQgaWR4Owo+PiArwqDCoMKgIHU2NCBvZmZzZXQ7Cj4+ICvCoMKgwqAg X19sZTY0IHByZWVtcHRlZF9sZTsKPj4gK8KgwqDCoCBzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LT5r dm07Cj4+ICvCoMKgwqAgdTY0IGJhc2UgPSB2Y3B1LT5hcmNoLnB2LmJhc2U7Cj4+ICsKPj4gK8Kg wqDCoCB2Y3B1LT5hcmNoLnB2LnByZWVtcHRlZCA9IHByZWVtcHRlZDsKPj4gK8KgwqDCoCBwcmVl bXB0ZWRfbGUgPSBjcHVfdG9fbGU2NChwcmVlbXB0ZWQpOwo+PiArCj4+ICvCoMKgwqAgaWR4ID0g c3JjdV9yZWFkX2xvY2soJmt2bS0+c3JjdSk7Cj4+ICvCoMKgwqAgb2Zmc2V0ID0gb2Zmc2V0b2Yo c3RydWN0IHB2bG9ja192Y3B1X3N0YXRlLCBwcmVlbXB0ZWQpOwo+PiArwqDCoMKgIGt2bV9wdXRf Z3Vlc3Qoa3ZtLCBiYXNlICsgb2Zmc2V0LCBwcmVlbXB0ZWRfbGUsIHU2NCk7Cj4+ICvCoMKgwqAg c3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCBpZHgpOwo+PiArfQo+Pgo+IAo+IAo+IC4KClRo YW5rcywKClplbmdydWFuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMu bGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21h aWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24= 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=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,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 1F289C33C9E for ; Sat, 11 Jan 2020 07:31:03 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id E32122077C for ; Sat, 11 Jan 2020 07:31:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="UxN+oAsV" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E32122077C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=M3ScVPwjeOVar3VBISEuM0YTeaQASMCkO2s4Icl4KVY=; b=UxN+oAsVaJmZO1 E0L0YC8v2KCX4rf+c7XL5qnHzSAWCRJJxWYg3xetgr/+jA9hMEIvTSkCMQPjf/AbKFfi+Csz5MEVJ UcbSvUAhk6HRQ7Sk/DHc2qDDAZ9UgQy4MpR0UsWgrz+VECw25inJ8Kh7O0CAEqJynzC+xNGiHuvqs mPm7+xWllggxruQW4RqAvY28h6UXe7Er5mJc9aGOKGqN2KksBI5Ds+2bIEfj0uZLcWie6jPcuaZzI ipCPedoNJAPZo2zVurXQbOwtyYkzdKd2kx5NMl5l1O2QsxkhffUNOYjaPOC2ve56JhN1LuS3WUOug 7cDrCBRpnDS7PdSOnuFQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iqBEX-0002NE-8G; Sat, 11 Jan 2020 07:30:57 +0000 Received: from szxga01-in.huawei.com ([45.249.212.187] helo=huawei.com) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iqBET-0002MT-85 for linux-arm-kernel@lists.infradead.org; Sat, 11 Jan 2020 07:30:55 +0000 Received: from DGGEMM404-HUB.china.huawei.com (unknown [172.30.72.54]) by Forcepoint Email with ESMTP id 9DB748B199B1D4CB891D; Sat, 11 Jan 2020 15:30:45 +0800 (CST) Received: from dggeme755-chm.china.huawei.com (10.3.19.101) by DGGEMM404-HUB.china.huawei.com (10.3.20.212) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sat, 11 Jan 2020 15:30:45 +0800 Received: from [127.0.0.1] (10.173.221.248) by dggeme755-chm.china.huawei.com (10.3.19.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Sat, 11 Jan 2020 15:30:44 +0800 Subject: Re: [PATCH v2 3/6] KVM: arm64: Support pvlock preempted via shared structure To: Steven Price , , , , , , References: <20191226135833.1052-1-yezengruan@huawei.com> <20191226135833.1052-4-yezengruan@huawei.com> <468e2bb4-8986-5e1e-8c4a-31aa56a9ae4f@arm.com> From: yezengruan Message-ID: Date: Sat, 11 Jan 2020 15:30:42 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.3.0 MIME-Version: 1.0 In-Reply-To: <468e2bb4-8986-5e1e-8c4a-31aa56a9ae4f@arm.com> Content-Language: en-US X-Originating-IP: [10.173.221.248] X-ClientProxiedBy: dggeme701-chm.china.huawei.com (10.1.199.97) To dggeme755-chm.china.huawei.com (10.3.19.101) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200110_233053_692705_1812DD4E X-CRM114-Status: GOOD ( 19.85 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.rutland@arm.com, suzuki.poulose@arm.com, catalin.marinas@arm.com, daniel.lezcano@linaro.org, linux@armlinux.org.uk, james.morse@arm.com, maz@kernel.org, "Wanghaibin \(D\)" , will@kernel.org, julien.thierry.kdev@gmail.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgU3RldmUsCgpPbiAyMDIwLzEvOSAyMzowMiwgU3RldmVuIFByaWNlIHdyb3RlOgo+IE9uIDI2 LzEyLzIwMTkgMTM6NTgsIFplbmdydWFuIFllIHdyb3RlOgo+PiBJbXBsZW1lbnQgdGhlIHNlcnZp Y2UgY2FsbCBmb3IgY29uZmlndXJpbmcgYSBzaGFyZWQgc3RydWN0dXJlIGJldHdlZW4gYQo+PiBW Q1BVIGFuZCB0aGUgaHlwZXJ2aXNvciBpbiB3aGljaCB0aGUgaHlwZXJ2aXNvciBjYW4gdGVsbCB0 aGUgVkNQVSBpcwo+PiBydW5uaW5nIG9yIG5vdC4KPj4KPj4gVGhlIHByZWVtcHRlZCBmaWVsZCBp cyB6ZXJvIGlmIDEpIHNvbWUgb2xkIEtWTSBkZW9zIG5vdCBzdXBwb3J0IHRoaXMgZmlsZWQuCj4g Cj4gTklUOiBzL2Rlb3MvZG9lcy8KClRoYW5rcyBmb3IgcG9zdGluZyB0aGlzLgoKPiAKPiBIb3dl dmVyLCBJIHdvdWxkIGhvcGUgdGhhdCB0aGUgc2VydmljZSBjYWxsIHdpbGwgZmFpbCBpZiBpdCdz IGFuIG9sZCBLVk0gbm90IHNpbXBseSByZXR1cm4gemVyby4KClNvcnJ5LCBJJ20gbm90IHN1cmUg d2hhdCB5b3UgbWVhbi4gVGhlIHNlcnZpY2UgY2FsbCB3aWxsIGZhaWwgaWYgaXQncyBhbiBvbGQg S1ZNLCBhbmQgdGhlIEd1ZXN0IHdpbGwgdXNlIF9fbmF0aXZlX3ZjcHVfaXNfcHJlZW1wdGVkLgoK PiAKPj4gMikgdGhlIFZDUFUgaXMgbm90IHByZWVtcHRlZC4gT3RoZXIgdmFsdWVzIG1lYW5zIHRo ZSBWQ1BVIGhhcyBiZWVuIHByZWVtcHRlZC4KPj4KPj4gU2lnbmVkLW9mZi1ieTogWmVuZ3J1YW4g WWUgPHllemVuZ3J1YW5AaHVhd2VpLmNvbT4KPj4gLS0tCj4+IMKgIGFyY2gvYXJtL2luY2x1ZGUv YXNtL2t2bV9ob3N0LmjCoMKgIHwgMTggKysrKysrKysrKysrCj4+IMKgIGFyY2gvYXJtNjQvaW5j bHVkZS9hc20va3ZtX2hvc3QuaCB8IDE5ICsrKysrKysrKysrKysKPj4gwqAgYXJjaC9hcm02NC9r dm0vTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMSArCj4+IMKgIHZpcnQva3ZtL2Fy bS9hcm0uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgOCArKysrKysKPj4gwqAg dmlydC9rdm0vYXJtL2h5cGVyY2FsbHMuY8KgwqDCoMKgwqDCoMKgwqAgfMKgIDggKysrKysrCj4+ IMKgIHZpcnQva3ZtL2FybS9wdmxvY2suY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDQ2ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gwqAgNiBmaWxlcyBjaGFuZ2VkLCAxMDAg aW5zZXJ0aW9ucygrKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgdmlydC9rdm0vYXJtL3B2bG9j ay5jCj4+Cj4+IGRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIv YXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+PiBpbmRleCA1NTZjZDgxOGVjY2YuLmRm ZWFmOTIwNDg3NSAxMDA2NDQKPj4gLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2hvc3Qu aAo+PiArKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4+IEBAIC0zNTYsNiAr MzU2LDI0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKHN0 cnVjdCBrdm1fdmNwdV9hcmNoICp2Y3B1X2FyY2gpCj4+IMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNl Owo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2FybV9wdmxvY2tfcHJlZW1w dGVkX2luaXQoc3RydWN0IGt2bV92Y3B1X2FyY2ggKnZjcHVfYXJjaCkKPj4gK3sKPj4gK30KPj4g Kwo+PiArc3RhdGljIGlubGluZSBib29sIGt2bV9hcm1faXNfcHZsb2NrX3ByZWVtcHRlZF9yZWFk eShzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdmNwdV9hcmNoKQo+PiArewo+PiArwqDCoMKgIHJldHVy biBmYWxzZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBncGFfdCBrdm1faW5pdF9wdmxv Y2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+PiArewo+PiArwqDCoMKgIHJldHVybiBHUEFfSU5W QUxJRDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIGt2bV91cGRhdGVfcHZsb2Nr X3ByZWVtcHRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwcmVlbXB0ZWQpCj4+ICt7Cj4+ ICt9Cj4+ICsKPj4gwqAgdm9pZCBrdm1fbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAq a3ZtLCBpbnQgc2xvdCk7Cj4+IMKgIMKgIHN0cnVjdCBrdm1fdmNwdSAqa3ZtX21waWRyX3RvX3Zj cHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1waWRyKTsKPj4gZGlmZiAtLWdpdCBh L2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9h c20va3ZtX2hvc3QuaAo+PiBpbmRleCBjNjEyNjBjZjYzYzUuLjI4MThhMjMzMGY5MiAxMDA2NDQK Pj4gLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4+ICsrKyBiL2FyY2gv YXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+PiBAQCAtMzU0LDYgKzM1NCwxMiBAQCBzdHJ1 Y3Qga3ZtX3ZjcHVfYXJjaCB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgbGFzdF9zdGVhbDsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdwYV90IGJhc2U7Cj4+IMKgwqDCoMKgwqAgfSBzdGVhbDsK Pj4gKwo+PiArwqDCoMKgIC8qIEd1ZXN0IFBWIGxvY2sgc3RhdGUgKi8KPj4gK8KgwqDCoCBzdHJ1 Y3Qgewo+PiArwqDCoMKgwqDCoMKgwqAgdTY0IHByZWVtcHRlZDsKPiAKPiBJJ20gbm90IHN1cmUg d2h5IHRoZSBrZXJuZWwgbmVlZHMgdG8gKHNlcGFyYXRlbHkpIHRyYWNrIHRoaXMgcHJlZW1wdGVk IHN0YXRlPyBJdCBkb2Vzbid0IGFwcGVhciB0byBiZSB1c2VkIGZyb20gd2hhdCBJIGNhbiB0ZWxs LgoKR29vZCBwb2ludCwgdGhlIHByZWVtcHRlZCBzdGF0ZSBmaWVsZCBpcyBub3QgYWN0dWFsbHkg dXNlZCwgSSdsbCByZW1vdmUgaXQuCgo+IAo+IFN0ZXZlCj4gCj4+ICvCoMKgwqDCoMKgwqDCoCBn cGFfdCBiYXNlOwo+PiArwqDCoMKgIH0gcHY7Cj4+IMKgIH07Cj4+IMKgIMKgIC8qIFBvaW50ZXIg dG8gdGhlIHZjcHUncyBTVkUgRkZSIGZvciBzdmVfe3NhdmUsbG9hZH1fc3RhdGUoKSAqLwo+PiBA QCAtNTE1LDYgKzUyMSwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FybV9pc19wdnRpbWVf ZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdmNwdV9hcmNoKQo+PiDCoMKgwqDCoMKgIHJl dHVybiAodmNwdV9hcmNoLT5zdGVhbC5iYXNlICE9IEdQQV9JTlZBTElEKTsKPj4gwqAgfQo+PiDC oCArc3RhdGljIGlubGluZSB2b2lkIGt2bV9hcm1fcHZsb2NrX3ByZWVtcHRlZF9pbml0KHN0cnVj dCBrdm1fdmNwdV9hcmNoICp2Y3B1X2FyY2gpCj4+ICt7Cj4+ICvCoMKgwqAgdmNwdV9hcmNoLT5w di5iYXNlID0gR1BBX0lOVkFMSUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBr dm1fYXJtX2lzX3B2bG9ja19wcmVlbXB0ZWRfcmVhZHkoc3RydWN0IGt2bV92Y3B1X2FyY2ggKnZj cHVfYXJjaCkKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gKHZjcHVfYXJjaC0+cHYuYmFzZSAhPSBH UEFfSU5WQUxJRCk7Cj4+ICt9Cj4+ICsKPj4gK2dwYV90IGt2bV9pbml0X3B2bG9jayhzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUpOwo+PiArdm9pZCBrdm1fdXBkYXRlX3B2bG9ja19wcmVlbXB0ZWQoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcHJlZW1wdGVkKTsKPj4gKwo+PiDCoCB2b2lkIGt2bV9z ZXRfc2VpX2VzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzeW5kcm9tZSk7Cj4+IMKgIMKg IHN0cnVjdCBrdm1fdmNwdSAqa3ZtX21waWRyX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNp Z25lZCBsb25nIG1waWRyKTsKPj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxl IGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUKPj4gaW5kZXggNWZmYmRjMzllNzgwLi5lNDU5MWY1 NmQ1ZjEgMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlCj4+ICsrKyBiL2Fy Y2gvYXJtNjQva3ZtL01ha2VmaWxlCj4+IEBAIC0xNSw2ICsxNSw3IEBAIGt2bS0kKENPTkZJR19L Vk1fQVJNX0hPU1QpICs9ICQoS1ZNKS9hcm0vYXJtLm8gJChLVk0pL2FybS9tbXUubyAkKEtWTSkv YXJtL21taW8uCj4+IMKgIGt2bS0kKENPTkZJR19LVk1fQVJNX0hPU1QpICs9ICQoS1ZNKS9hcm0v cHNjaS5vICQoS1ZNKS9hcm0vcGVyZi5vCj4+IMKgIGt2bS0kKENPTkZJR19LVk1fQVJNX0hPU1Qp ICs9ICQoS1ZNKS9hcm0vaHlwZXJjYWxscy5vCj4+IMKgIGt2bS0kKENPTkZJR19LVk1fQVJNX0hP U1QpICs9ICQoS1ZNKS9hcm0vcHZ0aW1lLm8KPj4gK2t2bS0kKENPTkZJR19LVk1fQVJNX0hPU1Qp ICs9ICQoS1ZNKS9hcm0vcHZsb2NrLm8KPj4gwqAgwqAga3ZtLSQoQ09ORklHX0tWTV9BUk1fSE9T VCkgKz0gaW5qZWN0X2ZhdWx0Lm8gcmVnbWFwLm8gdmFfbGF5b3V0Lm8KPj4gwqAga3ZtLSQoQ09O RklHX0tWTV9BUk1fSE9TVCkgKz0gaHlwLm8gaHlwLWluaXQubyBoYW5kbGVfZXhpdC5vCj4+IGRp ZmYgLS1naXQgYS92aXJ0L2t2bS9hcm0vYXJtLmMgYi92aXJ0L2t2bS9hcm0vYXJtLmMKPj4gaW5k ZXggOGRlNGRhZjI1MDk3Li4zNmQ1N2U3N2QzYzQgMTAwNjQ0Cj4+IC0tLSBhL3ZpcnQva3ZtL2Fy bS9hcm0uYwo+PiArKysgYi92aXJ0L2t2bS9hcm0vYXJtLmMKPj4gQEAgLTM4Myw2ICszODMsOCBA QCBpbnQga3ZtX2FyY2hfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4gwqAgwqDC oMKgwqDCoCBrdm1fYXJtX3B2dGltZV92Y3B1X2luaXQoJnZjcHUtPmFyY2gpOwo+PiDCoCArwqDC oMKgIGt2bV9hcm1fcHZsb2NrX3ByZWVtcHRlZF9pbml0KCZ2Y3B1LT5hcmNoKTsKPj4gKwo+PiDC oMKgwqDCoMKgIHJldHVybiBrdm1fdmdpY192Y3B1X2luaXQodmNwdSk7Cj4+IMKgIH0KPj4gwqAg QEAgLTQyMSw2ICs0MjMsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUsIGludCBjcHUpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB2Y3B1X3NldF93ZnhfdHJh cHModmNwdSk7Cj4+IMKgIMKgwqDCoMKgwqAgdmNwdV9wdHJhdXRoX3NldHVwX2xhenkodmNwdSk7 Cj4+ICsKPj4gK8KgwqDCoCBpZiAoa3ZtX2FybV9pc19wdmxvY2tfcHJlZW1wdGVkX3JlYWR5KCZ2 Y3B1LT5hcmNoKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGt2bV91cGRhdGVfcHZsb2NrX3ByZWVtcHRl ZCh2Y3B1LCAwKTsKPj4gwqAgfQo+PiDCoCDCoCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVj dCBrdm1fdmNwdSAqdmNwdSkKPj4gQEAgLTQzNCw2ICs0MzksOSBAQCB2b2lkIGt2bV9hcmNoX3Zj cHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4gwqDCoMKgwqDCoCB2Y3B1LT5jcHUgPSAt MTsKPj4gwqAgwqDCoMKgwqDCoCBrdm1fYXJtX3NldF9ydW5uaW5nX3ZjcHUoTlVMTCk7Cj4+ICsK Pj4gK8KgwqDCoCBpZiAoa3ZtX2FybV9pc19wdmxvY2tfcHJlZW1wdGVkX3JlYWR5KCZ2Y3B1LT5h cmNoKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGt2bV91cGRhdGVfcHZsb2NrX3ByZWVtcHRlZCh2Y3B1 LCAxKTsKPj4gwqAgfQo+PiDCoCDCoCBzdGF0aWMgdm9pZCB2Y3B1X3Bvd2VyX29mZihzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUpCj4+IGRpZmYgLS1naXQgYS92aXJ0L2t2bS9hcm0vaHlwZXJjYWxscy5j IGIvdmlydC9rdm0vYXJtL2h5cGVyY2FsbHMuYwo+PiBpbmRleCA1NTBkZmEzZTUzY2QuLjFjNmEx MWYyMWJiNCAxMDA2NDQKPj4gLS0tIGEvdmlydC9rdm0vYXJtL2h5cGVyY2FsbHMuYwo+PiArKysg Yi92aXJ0L2t2bS9hcm0vaHlwZXJjYWxscy5jCj4+IEBAIC01Miw2ICs1Miw5IEBAIGludCBrdm1f aHZjX2NhbGxfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBjYXNlIEFSTV9TTUNDQ19IVl9QVl9USU1FX0ZFQVRVUkVTOgo+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB2YWwgPSBTTUNDQ19SRVRfU1VDQ0VTUzsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIEFSTV9TTUNDQ19IVl9Q Vl9MT0NLX0ZFQVRVUkVTOgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwgPSBTTUNDQ19S RVRfU1VDQ0VTUzsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gwqDCoMKgwqDCoCBj YXNlIEFSTV9TTUNDQ19IVl9QVl9USU1FX0ZFQVRVUkVTOgo+PiBAQCAtNjIsNiArNjUsMTEgQEAg aW50IGt2bV9odmNfY2FsbF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChncGEgIT0gR1BBX0lOVkFMSUQpCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHZhbCA9IGdwYTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDC oMKgIGNhc2UgQVJNX1NNQ0NDX0hWX1BWX0xPQ0tfUFJFRU1QVEVEOgo+PiArwqDCoMKgwqDCoMKg wqAgZ3BhID0ga3ZtX2luaXRfcHZsb2NrKHZjcHUpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGdw YSAhPSBHUEFfSU5WQUxJRCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsID0gZ3BhOwo+ PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKgwqAgZGVmYXVsdDoKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBrdm1fcHNjaV9jYWxsKHZjcHUpOwo+PiDCoMKgwqDCoMKgIH0K Pj4gZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2FybS9wdmxvY2suYyBiL3ZpcnQva3ZtL2FybS9wdmxv Y2suYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmNkZmQz MGE5MDNiOQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL3ZpcnQva3ZtL2FybS9wdmxvY2suYwo+ PiBAQCAtMCwwICsxLDQ2IEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5ICovCj4+ICsvKgo+PiArICogQ29weXJpZ2h0KGMpIDIwMTkgSHVhd2VpIFRlY2hub2xv Z2llcyBDby4sIEx0ZAo+PiArICogQXV0aG9yOiBaZW5ncnVhbiBZZSA8eWV6ZW5ncnVhbkBodWF3 ZWkuY29tPgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9hcm0tc21jY2MuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgo+PiArCj4+ICsjaW5jbHVkZSA8YXNtL3B2bG9j ay1hYmkuaD4KPj4gKwo+PiArI2luY2x1ZGUgPGt2bS9hcm1faHlwZXJjYWxscy5oPgo+PiArCj4+ ICtncGFfdCBrdm1faW5pdF9wdmxvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+PiArewo+PiAr wqDCoMKgIHN0cnVjdCBwdmxvY2tfdmNwdV9zdGF0ZSBpbml0X3ZhbHVlcyA9IHt9Owo+PiArwqDC oMKgIHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtPmt2bTsKPj4gK8KgwqDCoCB1NjQgYmFzZSA9IHZj cHUtPmFyY2gucHYuYmFzZTsKPj4gK8KgwqDCoCBpbnQgaWR4Owo+PiArCj4+ICvCoMKgwqAgaWYg KGJhc2UgPT0gR1BBX0lOVkFMSUQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gYmFzZTsKPj4g Kwo+PiArwqDCoMKgIGlkeCA9IHNyY3VfcmVhZF9sb2NrKCZrdm0tPnNyY3UpOwo+PiArwqDCoMKg IGt2bV93cml0ZV9ndWVzdChrdm0sIGJhc2UsICZpbml0X3ZhbHVlcywgc2l6ZW9mKGluaXRfdmFs dWVzKSk7Cj4+ICvCoMKgwqAgc3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCBpZHgpOwo+PiAr Cj4+ICvCoMKgwqAgcmV0dXJuIGJhc2U7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQga3ZtX3VwZGF0ZV9w dmxvY2tfcHJlZW1wdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHByZWVtcHRlZCkKPj4g K3sKPj4gK8KgwqDCoCBpbnQgaWR4Owo+PiArwqDCoMKgIHU2NCBvZmZzZXQ7Cj4+ICvCoMKgwqAg X19sZTY0IHByZWVtcHRlZF9sZTsKPj4gK8KgwqDCoCBzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LT5r dm07Cj4+ICvCoMKgwqAgdTY0IGJhc2UgPSB2Y3B1LT5hcmNoLnB2LmJhc2U7Cj4+ICsKPj4gK8Kg wqDCoCB2Y3B1LT5hcmNoLnB2LnByZWVtcHRlZCA9IHByZWVtcHRlZDsKPj4gK8KgwqDCoCBwcmVl bXB0ZWRfbGUgPSBjcHVfdG9fbGU2NChwcmVlbXB0ZWQpOwo+PiArCj4+ICvCoMKgwqAgaWR4ID0g c3JjdV9yZWFkX2xvY2soJmt2bS0+c3JjdSk7Cj4+ICvCoMKgwqAgb2Zmc2V0ID0gb2Zmc2V0b2Yo c3RydWN0IHB2bG9ja192Y3B1X3N0YXRlLCBwcmVlbXB0ZWQpOwo+PiArwqDCoMKgIGt2bV9wdXRf Z3Vlc3Qoa3ZtLCBiYXNlICsgb2Zmc2V0LCBwcmVlbXB0ZWRfbGUsIHU2NCk7Cj4+ICvCoMKgwqAg c3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCBpZHgpOwo+PiArfQo+Pgo+IAo+IAo+IC4KClRo YW5rcywKClplbmdydWFuCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo=