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,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 82D4CC636C8 for ; Tue, 20 Jul 2021 16:45:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 60275610A7 for ; Tue, 20 Jul 2021 16:45:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232324AbhGTQEC (ORCPT ); Tue, 20 Jul 2021 12:04:02 -0400 Received: from foss.arm.com ([217.140.110.172]:34722 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230092AbhGTQDI (ORCPT ); Tue, 20 Jul 2021 12:03:08 -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 A154C31B; Tue, 20 Jul 2021 09:43:34 -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 DA2B33F694; Tue, 20 Jul 2021 09:43:32 -0700 (PDT) Subject: Re: [PATCH v2 4/4] KVM: arm64: Remove PMSWINC_EL0 shadow register To: Marc Zyngier Cc: linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, James Morse , Suzuki K Poulose , Alexandre Chartre , Robin Murphy , Andrew Jones , Russell King , kernel-team@android.com References: <20210719123902.1493805-1-maz@kernel.org> <20210719123902.1493805-5-maz@kernel.org> From: Alexandru Elisei Message-ID: <9ad0f6a5-fcd0-0179-efa7-7b35ed36e2ff@arm.com> Date: Tue, 20 Jul 2021 17:44:32 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.12.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Hi Marc, On 7/19/21 5:56 PM, Marc Zyngier wrote: > Hi Alex, > > On 2021-07-19 17:35, Alexandru Elisei wrote: >> Hi Marc, >> >> On 7/19/21 1:39 PM, Marc Zyngier wrote: >>> We keep an entry for the PMSWINC_EL0 register in the vcpu structure, >>> while *never* writing anything there outside of reset. >>> >>> Given that the register is defined as write-only, that we always >>> trap when this register is accessed, there is little point in saving >>> anything anyway. >>> >>> Get rid of the entry, and save a mighty 8 bytes per vcpu structure. >>> >>> We still need to keep it exposed to userspace in order to preserve >>> backward compatibility with previously saved VMs. Since userspace >>> cannot expect any effect of writing to PMSWINC_EL0, treat the >>> register as RAZ/WI for the purpose of userspace access. >>> >>> Signed-off-by: Marc Zyngier >>> --- >>>  arch/arm64/include/asm/kvm_host.h |  1 - >>>  arch/arm64/kvm/sys_regs.c         | 21 ++++++++++++++++++++- >>>  2 files changed, 20 insertions(+), 2 deletions(-) >>> >>> diff --git a/arch/arm64/include/asm/kvm_host.h >>> b/arch/arm64/include/asm/kvm_host.h >>> index 41911585ae0c..afc169630884 100644 >>> --- a/arch/arm64/include/asm/kvm_host.h >>> +++ b/arch/arm64/include/asm/kvm_host.h >>> @@ -185,7 +185,6 @@ enum vcpu_sysreg { >>>      PMCNTENSET_EL0,    /* Count Enable Set Register */ >>>      PMINTENSET_EL1,    /* Interrupt Enable Set Register */ >>>      PMOVSSET_EL0,    /* Overflow Flag Status Set Register */ >>> -    PMSWINC_EL0,    /* Software Increment Register */ >>>      PMUSERENR_EL0,    /* User Enable Register */ >>> >>>      /* Pointer Authentication Registers in a strict increasing order. */ >>> diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c >>> index f22139658e48..a1f5101f49a3 100644 >>> --- a/arch/arm64/kvm/sys_regs.c >>> +++ b/arch/arm64/kvm/sys_regs.c >>> @@ -1286,6 +1286,20 @@ static int set_raz_id_reg(struct kvm_vcpu *vcpu, const >>> struct sys_reg_desc *rd, >>>      return __set_id_reg(vcpu, rd, uaddr, true); >>>  } >>> >>> +static int set_wi_reg(struct kvm_vcpu *vcpu, const struct sys_reg_desc *rd, >>> +              const struct kvm_one_reg *reg, void __user *uaddr) >>> +{ >>> +    int err; >>> +    u64 val; >>> + >>> +    /* Perform the access even if we are going to ignore the value */ >>> +    err = reg_from_user(&val, uaddr, sys_reg_to_index(rd)); >> >> I don't understand why the read still happens if the value is ignored. >> Just so KVM >> preserves the previous behaviour and tells userspace there was an error? > > If userspace has given us a duff pointer, it needs to know about it. Makes sense, thanks. > >>> +    if (err) >>> +        return err; >>> + >>> +    return 0; >>> +} >>> + >>>  static bool access_ctr(struct kvm_vcpu *vcpu, struct sys_reg_params *p, >>>                 const struct sys_reg_desc *r) >>>  { >>> @@ -1629,8 +1643,13 @@ static const struct sys_reg_desc sys_reg_descs[] = { >>>        .access = access_pmcnten, .reg = PMCNTENSET_EL0 }, >>>      { PMU_SYS_REG(SYS_PMOVSCLR_EL0), >>>        .access = access_pmovs, .reg = PMOVSSET_EL0 }, >>> +    /* >>> +     * PM_SWINC_EL0 is exposed to userspace as RAZ/WI, as it was >>> +     * previously (and pointlessly) advertised in the past... >>> +     */ >>>      { PMU_SYS_REG(SYS_PMSWINC_EL0), >>> -      .access = access_pmswinc, .reg = PMSWINC_EL0 }, >>> +      .get_user = get_raz_id_reg, .set_user = set_wi_reg, >> >> In my opinion, the call chain to return 0 looks pretty confusing to me, as the >> functions seemed made for ID register accesses, and the leaf function, >> read_id_reg(), tries to match this register with a list of ID >> registers. Since we >> have already added a new function just for PMSWINC_EL0, I was >> wondering if adding >> another function, something like get_raz_reg(), would make more sense. > > In that case, I'd rather just kill get_raz_id_reg() and replace it with > this get_raz_reg(). If we trat something as RAZ, who cares whether it is > an idreg or not? I agree, the Arm ARM doesn't make the distinction between ID registers and other system registers in the definition of RAZ, I don't think KVM should either. And the way read_id_reg() is written allows returning a value different than 0 even if raz is true, which in my opinion could only happen because of a bug in KVM. I can have a go at writing the patch(es) on top of this series, if you want. At the moment I'm rewriting the KVM SPE series, so it will be a few weeks until I get around to doing it though. Thanks, Alex 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 C79A3C07E95 for ; Tue, 20 Jul 2021 16:43:39 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 19B7D610C7 for ; Tue, 20 Jul 2021 16:43:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 19B7D610C7 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 98D1D4A00B; Tue, 20 Jul 2021 12:43:38 -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 y5VuKB6bhZyi; Tue, 20 Jul 2021 12:43:37 -0400 (EDT) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 386794A193; Tue, 20 Jul 2021 12:43:37 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id E45214A00B for ; Tue, 20 Jul 2021 12:43:36 -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 E662FnDx9Ofv for ; Tue, 20 Jul 2021 12:43:35 -0400 (EDT) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 8530040FC7 for ; Tue, 20 Jul 2021 12:43:35 -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 A154C31B; Tue, 20 Jul 2021 09:43:34 -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 DA2B33F694; Tue, 20 Jul 2021 09:43:32 -0700 (PDT) Subject: Re: [PATCH v2 4/4] KVM: arm64: Remove PMSWINC_EL0 shadow register To: Marc Zyngier References: <20210719123902.1493805-1-maz@kernel.org> <20210719123902.1493805-5-maz@kernel.org> From: Alexandru Elisei Message-ID: <9ad0f6a5-fcd0-0179-efa7-7b35ed36e2ff@arm.com> Date: Tue, 20 Jul 2021 17:44:32 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.12.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Cc: kvm@vger.kernel.org, kernel-team@android.com, Russell King , Robin Murphy , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.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 SGkgTWFyYywKCk9uIDcvMTkvMjEgNTo1NiBQTSwgTWFyYyBaeW5naWVyIHdyb3RlOgo+IEhpIEFs ZXgsCj4KPiBPbiAyMDIxLTA3LTE5IDE3OjM1LCBBbGV4YW5kcnUgRWxpc2VpIHdyb3RlOgo+PiBI aSBNYXJjLAo+Pgo+PiBPbiA3LzE5LzIxIDE6MzkgUE0sIE1hcmMgWnluZ2llciB3cm90ZToKPj4+ IFdlIGtlZXAgYW4gZW50cnkgZm9yIHRoZSBQTVNXSU5DX0VMMCByZWdpc3RlciBpbiB0aGUgdmNw dSBzdHJ1Y3R1cmUsCj4+PiB3aGlsZSAqbmV2ZXIqIHdyaXRpbmcgYW55dGhpbmcgdGhlcmUgb3V0 c2lkZSBvZiByZXNldC4KPj4+Cj4+PiBHaXZlbiB0aGF0IHRoZSByZWdpc3RlciBpcyBkZWZpbmVk IGFzIHdyaXRlLW9ubHksIHRoYXQgd2UgYWx3YXlzCj4+PiB0cmFwIHdoZW4gdGhpcyByZWdpc3Rl ciBpcyBhY2Nlc3NlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHNhdmluZwo+Pj4gYW55dGhp bmcgYW55d2F5Lgo+Pj4KPj4+IEdldCByaWQgb2YgdGhlIGVudHJ5LCBhbmQgc2F2ZSBhIG1pZ2h0 eSA4IGJ5dGVzIHBlciB2Y3B1IHN0cnVjdHVyZS4KPj4+Cj4+PiBXZSBzdGlsbCBuZWVkIHRvIGtl ZXAgaXQgZXhwb3NlZCB0byB1c2Vyc3BhY2UgaW4gb3JkZXIgdG8gcHJlc2VydmUKPj4+IGJhY2t3 YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91c2x5IHNhdmVkIFZNcy4gU2luY2UgdXNlcnNw YWNlCj4+PiBjYW5ub3QgZXhwZWN0IGFueSBlZmZlY3Qgb2Ygd3JpdGluZyB0byBQTVNXSU5DX0VM MCwgdHJlYXQgdGhlCj4+PiByZWdpc3RlciBhcyBSQVovV0kgZm9yIHRoZSBwdXJwb3NlIG9mIHVz ZXJzcGFjZSBhY2Nlc3MuCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogTWFyYyBaeW5naWVyIDxtYXpA a2VybmVsLm9yZz4KPj4+IC0tLQo+Pj4gwqBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0 LmggfMKgIDEgLQo+Pj4gwqBhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jwqDCoMKgwqDCoMKgwqDC oCB8IDIxICsrKysrKysrKysrKysrKysrKysrLQo+Pj4gwqAyIGZpbGVzIGNoYW5nZWQsIDIwIGlu c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJt NjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+Pj4gYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2 bV9ob3N0LmgKPj4+IGluZGV4IDQxOTExNTg1YWUwYy4uYWZjMTY5NjMwODg0IDEwMDY0NAo+Pj4g LS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4+PiArKysgYi9hcmNoL2Fy bTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPj4+IEBAIC0xODUsNyArMTg1LDYgQEAgZW51bSB2 Y3B1X3N5c3JlZyB7Cj4+PiDCoMKgwqDCoCBQTUNOVEVOU0VUX0VMMCzCoMKgwqAgLyogQ291bnQg RW5hYmxlIFNldCBSZWdpc3RlciAqLwo+Pj4gwqDCoMKgwqAgUE1JTlRFTlNFVF9FTDEswqDCoMKg IC8qIEludGVycnVwdCBFbmFibGUgU2V0IFJlZ2lzdGVyICovCj4+PiDCoMKgwqDCoCBQTU9WU1NF VF9FTDAswqDCoMKgIC8qIE92ZXJmbG93IEZsYWcgU3RhdHVzIFNldCBSZWdpc3RlciAqLwo+Pj4g LcKgwqDCoCBQTVNXSU5DX0VMMCzCoMKgwqAgLyogU29mdHdhcmUgSW5jcmVtZW50IFJlZ2lzdGVy ICovCj4+PiDCoMKgwqDCoCBQTVVTRVJFTlJfRUwwLMKgwqDCoCAvKiBVc2VyIEVuYWJsZSBSZWdp c3RlciAqLwo+Pj4KPj4+IMKgwqDCoMKgIC8qIFBvaW50ZXIgQXV0aGVudGljYXRpb24gUmVnaXN0 ZXJzIGluIGEgc3RyaWN0IGluY3JlYXNpbmcgb3JkZXIuICovCj4+PiBkaWZmIC0tZ2l0IGEvYXJj aC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKPj4+IGlu ZGV4IGYyMjEzOTY1OGU0OC4uYTFmNTEwMWY0OWEzIDEwMDY0NAo+Pj4gLS0tIGEvYXJjaC9hcm02 NC9rdm0vc3lzX3JlZ3MuYwo+Pj4gKysrIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwo+Pj4g QEAgLTEyODYsNiArMTI4NiwyMCBAQCBzdGF0aWMgaW50IHNldF9yYXpfaWRfcmVnKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSwgY29uc3QKPj4+IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLAo+Pj4gwqDC oMKgwqAgcmV0dXJuIF9fc2V0X2lkX3JlZyh2Y3B1LCByZCwgdWFkZHIsIHRydWUpOwo+Pj4gwqB9 Cj4+Pgo+Pj4gK3N0YXRpYyBpbnQgc2V0X3dpX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNv bnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnN0IHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnLCB2b2lkIF9fdXNlciAqdWFkZHIpCj4+ PiArewo+Pj4gK8KgwqDCoCBpbnQgZXJyOwo+Pj4gK8KgwqDCoCB1NjQgdmFsOwo+Pj4gKwo+Pj4g K8KgwqDCoCAvKiBQZXJmb3JtIHRoZSBhY2Nlc3MgZXZlbiBpZiB3ZSBhcmUgZ29pbmcgdG8gaWdu b3JlIHRoZSB2YWx1ZSAqLwo+Pj4gK8KgwqDCoCBlcnIgPSByZWdfZnJvbV91c2VyKCZ2YWwsIHVh ZGRyLCBzeXNfcmVnX3RvX2luZGV4KHJkKSk7Cj4+Cj4+IEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkg dGhlIHJlYWQgc3RpbGwgaGFwcGVucyBpZiB0aGUgdmFsdWUgaXMgaWdub3JlZC4KPj4gSnVzdCBz byBLVk0KPj4gcHJlc2VydmVzIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgYW5kIHRlbGxzIHVzZXJz cGFjZSB0aGVyZSB3YXMgYW4gZXJyb3I/Cj4KPiBJZiB1c2Vyc3BhY2UgaGFzIGdpdmVuIHVzIGEg ZHVmZiBwb2ludGVyLCBpdCBuZWVkcyB0byBrbm93IGFib3V0IGl0LgoKTWFrZXMgc2Vuc2UsIHRo YW5rcy4KCj4KPj4+ICvCoMKgwqAgaWYgKGVycikKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g ZXJyOwo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiDCoHN0YXRp YyBib29sIGFjY2Vzc19jdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19w YXJhbXMgKnAsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0 IHN5c19yZWdfZGVzYyAqcikKPj4+IMKgewo+Pj4gQEAgLTE2MjksOCArMTY0MywxMyBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7Cj4+PiDCoMKg wqDCoMKgwqAgLmFjY2VzcyA9IGFjY2Vzc19wbWNudGVuLCAucmVnID0gUE1DTlRFTlNFVF9FTDAg fSwKPj4+IMKgwqDCoMKgIHsgUE1VX1NZU19SRUcoU1lTX1BNT1ZTQ0xSX0VMMCksCj4+PiDCoMKg wqDCoMKgwqAgLmFjY2VzcyA9IGFjY2Vzc19wbW92cywgLnJlZyA9IFBNT1ZTU0VUX0VMMCB9LAo+ Pj4gK8KgwqDCoCAvKgo+Pj4gK8KgwqDCoMKgICogUE1fU1dJTkNfRUwwIGlzIGV4cG9zZWQgdG8g dXNlcnNwYWNlIGFzIFJBWi9XSSwgYXMgaXQgd2FzCj4+PiArwqDCoMKgwqAgKiBwcmV2aW91c2x5 IChhbmQgcG9pbnRsZXNzbHkpIGFkdmVydGlzZWQgaW4gdGhlIHBhc3QuLi4KPj4+ICvCoMKgwqDC oCAqLwo+Pj4gwqDCoMKgwqAgeyBQTVVfU1lTX1JFRyhTWVNfUE1TV0lOQ19FTDApLAo+Pj4gLcKg wqDCoMKgwqAgLmFjY2VzcyA9IGFjY2Vzc19wbXN3aW5jLCAucmVnID0gUE1TV0lOQ19FTDAgfSwK Pj4+ICvCoMKgwqDCoMKgIC5nZXRfdXNlciA9IGdldF9yYXpfaWRfcmVnLCAuc2V0X3VzZXIgPSBz ZXRfd2lfcmVnLAo+Pgo+PiBJbiBteSBvcGluaW9uLCB0aGUgY2FsbCBjaGFpbiB0byByZXR1cm4g MCBsb29rcyBwcmV0dHkgY29uZnVzaW5nIHRvIG1lLCBhcyB0aGUKPj4gZnVuY3Rpb25zIHNlZW1l ZCBtYWRlIGZvciBJRCByZWdpc3RlciBhY2Nlc3NlcywgYW5kIHRoZSBsZWFmIGZ1bmN0aW9uLAo+ PiByZWFkX2lkX3JlZygpLCB0cmllcyB0byBtYXRjaCB0aGlzIHJlZ2lzdGVyIHdpdGggYSBsaXN0 IG9mIElECj4+IHJlZ2lzdGVycy4gU2luY2Ugd2UKPj4gaGF2ZSBhbHJlYWR5IGFkZGVkIGEgbmV3 IGZ1bmN0aW9uIGp1c3QgZm9yIFBNU1dJTkNfRUwwLCBJIHdhcwo+PiB3b25kZXJpbmcgaWYgYWRk aW5nCj4+IGFub3RoZXIgZnVuY3Rpb24sIHNvbWV0aGluZyBsaWtlIGdldF9yYXpfcmVnKCksIHdv dWxkIG1ha2UgbW9yZSBzZW5zZS4KPgo+IEluIHRoYXQgY2FzZSwgSSdkIHJhdGhlciBqdXN0IGtp bGwgZ2V0X3Jhel9pZF9yZWcoKSBhbmQgcmVwbGFjZSBpdCB3aXRoCj4gdGhpcyBnZXRfcmF6X3Jl ZygpLiBJZiB3ZSB0cmF0IHNvbWV0aGluZyBhcyBSQVosIHdobyBjYXJlcyB3aGV0aGVyIGl0IGlz Cj4gYW4gaWRyZWcgb3Igbm90PwoKSSBhZ3JlZSwgdGhlIEFybSBBUk0gZG9lc24ndCBtYWtlIHRo ZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIElEIHJlZ2lzdGVycyBhbmQgb3RoZXIKc3lzdGVtIHJlZ2lz dGVycyBpbiB0aGUgZGVmaW5pdGlvbiBvZiBSQVosIEkgZG9uJ3QgdGhpbmsgS1ZNIHNob3VsZCBl aXRoZXIuIEFuZAp0aGUgd2F5IHJlYWRfaWRfcmVnKCkgaXMgd3JpdHRlbiBhbGxvd3MgcmV0dXJu aW5nIGEgdmFsdWUgZGlmZmVyZW50IHRoYW4gMCBldmVuIGlmCnJheiBpcyB0cnVlLCB3aGljaCBp biBteSBvcGluaW9uIGNvdWxkIG9ubHkgaGFwcGVuIGJlY2F1c2Ugb2YgYSBidWcgaW4gS1ZNLgoK SSBjYW4gaGF2ZSBhIGdvIGF0IHdyaXRpbmcgdGhlIHBhdGNoKGVzKSBvbiB0b3Agb2YgdGhpcyBz ZXJpZXMsIGlmIHlvdSB3YW50LiBBdAp0aGUgbW9tZW50IEknbSByZXdyaXRpbmcgdGhlIEtWTSBT UEUgc2VyaWVzLCBzbyBpdCB3aWxsIGJlIGEgZmV3IHdlZWtzIHVudGlsIEkgZ2V0CmFyb3VuZCB0 byBkb2luZyBpdCB0aG91Z2guCgpUaGFua3MsCgpBbGV4CgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwprdm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0 cy5jcy5jb2x1bWJpYS5lZHUKaHR0cHM6Ly9saXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9s aXN0aW5mby9rdm1hcm0K 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=-16.7 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 85B3DC07E95 for ; Tue, 20 Jul 2021 16:45:12 +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 4CA6C6101E for ; Tue, 20 Jul 2021 16:45:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4CA6C6101E 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=bombadil.20210309; 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=M3FGvAXwst8quxxYTKRgEbqUTrJbBzLsRKVB2paVASs=; b=iJLwyycaPKsNYsNefDVVM8f4kq 6ZTILGObXduIBJ+rArtHLKsdzaKtsvlYEvK/YR3AmsvEOCDJx12ltJmJ4dnd7bGAP2ttZrwC4pSrn PRqrGweM5rEx2FRmVDMQN6Yb166mwcf6UR1aCAXa358gSHbbx4NM2fezcBjPTCNtv1NKRIWjCG9kX g4nvWyVVtgFNBc567C1XrKypB+3sazvVOisw0LdOYS29XA6cvjT9AlRtt93dPvE+tl7xaK+4Pxl5O zhmPsNLhtp3jlT59A1DMPrtxomFN6PcQnHgXsO+r1ERXjJtq4k1VS21U1ZQgwnJhVfaNGJnZRWIQw gaYN471w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m5sqM-00Da3u-RY; Tue, 20 Jul 2021 16:43:42 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m5sqI-00Da2y-M2 for linux-arm-kernel@lists.infradead.org; Tue, 20 Jul 2021 16:43:40 +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 A154C31B; Tue, 20 Jul 2021 09:43:34 -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 DA2B33F694; Tue, 20 Jul 2021 09:43:32 -0700 (PDT) Subject: Re: [PATCH v2 4/4] KVM: arm64: Remove PMSWINC_EL0 shadow register To: Marc Zyngier Cc: linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, James Morse , Suzuki K Poulose , Alexandre Chartre , Robin Murphy , Andrew Jones , Russell King , kernel-team@android.com References: <20210719123902.1493805-1-maz@kernel.org> <20210719123902.1493805-5-maz@kernel.org> From: Alexandru Elisei Message-ID: <9ad0f6a5-fcd0-0179-efa7-7b35ed36e2ff@arm.com> Date: Tue, 20 Jul 2021 17:44:32 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.12.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210720_094338_860035_CB95A33A X-CRM114-Status: GOOD ( 34.75 ) 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 SGkgTWFyYywKCk9uIDcvMTkvMjEgNTo1NiBQTSwgTWFyYyBaeW5naWVyIHdyb3RlOgo+IEhpIEFs ZXgsCj4KPiBPbiAyMDIxLTA3LTE5IDE3OjM1LCBBbGV4YW5kcnUgRWxpc2VpIHdyb3RlOgo+PiBI aSBNYXJjLAo+Pgo+PiBPbiA3LzE5LzIxIDE6MzkgUE0sIE1hcmMgWnluZ2llciB3cm90ZToKPj4+ IFdlIGtlZXAgYW4gZW50cnkgZm9yIHRoZSBQTVNXSU5DX0VMMCByZWdpc3RlciBpbiB0aGUgdmNw dSBzdHJ1Y3R1cmUsCj4+PiB3aGlsZSAqbmV2ZXIqIHdyaXRpbmcgYW55dGhpbmcgdGhlcmUgb3V0 c2lkZSBvZiByZXNldC4KPj4+Cj4+PiBHaXZlbiB0aGF0IHRoZSByZWdpc3RlciBpcyBkZWZpbmVk IGFzIHdyaXRlLW9ubHksIHRoYXQgd2UgYWx3YXlzCj4+PiB0cmFwIHdoZW4gdGhpcyByZWdpc3Rl ciBpcyBhY2Nlc3NlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHNhdmluZwo+Pj4gYW55dGhp bmcgYW55d2F5Lgo+Pj4KPj4+IEdldCByaWQgb2YgdGhlIGVudHJ5LCBhbmQgc2F2ZSBhIG1pZ2h0 eSA4IGJ5dGVzIHBlciB2Y3B1IHN0cnVjdHVyZS4KPj4+Cj4+PiBXZSBzdGlsbCBuZWVkIHRvIGtl ZXAgaXQgZXhwb3NlZCB0byB1c2Vyc3BhY2UgaW4gb3JkZXIgdG8gcHJlc2VydmUKPj4+IGJhY2t3 YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91c2x5IHNhdmVkIFZNcy4gU2luY2UgdXNlcnNw YWNlCj4+PiBjYW5ub3QgZXhwZWN0IGFueSBlZmZlY3Qgb2Ygd3JpdGluZyB0byBQTVNXSU5DX0VM MCwgdHJlYXQgdGhlCj4+PiByZWdpc3RlciBhcyBSQVovV0kgZm9yIHRoZSBwdXJwb3NlIG9mIHVz ZXJzcGFjZSBhY2Nlc3MuCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogTWFyYyBaeW5naWVyIDxtYXpA a2VybmVsLm9yZz4KPj4+IC0tLQo+Pj4gwqBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0 LmggfMKgIDEgLQo+Pj4gwqBhcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jwqDCoMKgwqDCoMKgwqDC oCB8IDIxICsrKysrKysrKysrKysrKysrKysrLQo+Pj4gwqAyIGZpbGVzIGNoYW5nZWQsIDIwIGlu c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJt NjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+Pj4gYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2 bV9ob3N0LmgKPj4+IGluZGV4IDQxOTExNTg1YWUwYy4uYWZjMTY5NjMwODg0IDEwMDY0NAo+Pj4g LS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4+PiArKysgYi9hcmNoL2Fy bTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPj4+IEBAIC0xODUsNyArMTg1LDYgQEAgZW51bSB2 Y3B1X3N5c3JlZyB7Cj4+PiDCoMKgwqDCoCBQTUNOVEVOU0VUX0VMMCzCoMKgwqAgLyogQ291bnQg RW5hYmxlIFNldCBSZWdpc3RlciAqLwo+Pj4gwqDCoMKgwqAgUE1JTlRFTlNFVF9FTDEswqDCoMKg IC8qIEludGVycnVwdCBFbmFibGUgU2V0IFJlZ2lzdGVyICovCj4+PiDCoMKgwqDCoCBQTU9WU1NF VF9FTDAswqDCoMKgIC8qIE92ZXJmbG93IEZsYWcgU3RhdHVzIFNldCBSZWdpc3RlciAqLwo+Pj4g LcKgwqDCoCBQTVNXSU5DX0VMMCzCoMKgwqAgLyogU29mdHdhcmUgSW5jcmVtZW50IFJlZ2lzdGVy ICovCj4+PiDCoMKgwqDCoCBQTVVTRVJFTlJfRUwwLMKgwqDCoCAvKiBVc2VyIEVuYWJsZSBSZWdp c3RlciAqLwo+Pj4KPj4+IMKgwqDCoMKgIC8qIFBvaW50ZXIgQXV0aGVudGljYXRpb24gUmVnaXN0 ZXJzIGluIGEgc3RyaWN0IGluY3JlYXNpbmcgb3JkZXIuICovCj4+PiBkaWZmIC0tZ2l0IGEvYXJj aC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKPj4+IGlu ZGV4IGYyMjEzOTY1OGU0OC4uYTFmNTEwMWY0OWEzIDEwMDY0NAo+Pj4gLS0tIGEvYXJjaC9hcm02 NC9rdm0vc3lzX3JlZ3MuYwo+Pj4gKysrIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwo+Pj4g QEAgLTEyODYsNiArMTI4NiwyMCBAQCBzdGF0aWMgaW50IHNldF9yYXpfaWRfcmVnKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSwgY29uc3QKPj4+IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLAo+Pj4gwqDC oMKgwqAgcmV0dXJuIF9fc2V0X2lkX3JlZyh2Y3B1LCByZCwgdWFkZHIsIHRydWUpOwo+Pj4gwqB9 Cj4+Pgo+Pj4gK3N0YXRpYyBpbnQgc2V0X3dpX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNv bnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnN0IHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnLCB2b2lkIF9fdXNlciAqdWFkZHIpCj4+ PiArewo+Pj4gK8KgwqDCoCBpbnQgZXJyOwo+Pj4gK8KgwqDCoCB1NjQgdmFsOwo+Pj4gKwo+Pj4g K8KgwqDCoCAvKiBQZXJmb3JtIHRoZSBhY2Nlc3MgZXZlbiBpZiB3ZSBhcmUgZ29pbmcgdG8gaWdu b3JlIHRoZSB2YWx1ZSAqLwo+Pj4gK8KgwqDCoCBlcnIgPSByZWdfZnJvbV91c2VyKCZ2YWwsIHVh ZGRyLCBzeXNfcmVnX3RvX2luZGV4KHJkKSk7Cj4+Cj4+IEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkg dGhlIHJlYWQgc3RpbGwgaGFwcGVucyBpZiB0aGUgdmFsdWUgaXMgaWdub3JlZC4KPj4gSnVzdCBz byBLVk0KPj4gcHJlc2VydmVzIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgYW5kIHRlbGxzIHVzZXJz cGFjZSB0aGVyZSB3YXMgYW4gZXJyb3I/Cj4KPiBJZiB1c2Vyc3BhY2UgaGFzIGdpdmVuIHVzIGEg ZHVmZiBwb2ludGVyLCBpdCBuZWVkcyB0byBrbm93IGFib3V0IGl0LgoKTWFrZXMgc2Vuc2UsIHRo YW5rcy4KCj4KPj4+ICvCoMKgwqAgaWYgKGVycikKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g ZXJyOwo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiDCoHN0YXRp YyBib29sIGFjY2Vzc19jdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19w YXJhbXMgKnAsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0 IHN5c19yZWdfZGVzYyAqcikKPj4+IMKgewo+Pj4gQEAgLTE2MjksOCArMTY0MywxMyBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7Cj4+PiDCoMKg wqDCoMKgwqAgLmFjY2VzcyA9IGFjY2Vzc19wbWNudGVuLCAucmVnID0gUE1DTlRFTlNFVF9FTDAg fSwKPj4+IMKgwqDCoMKgIHsgUE1VX1NZU19SRUcoU1lTX1BNT1ZTQ0xSX0VMMCksCj4+PiDCoMKg wqDCoMKgwqAgLmFjY2VzcyA9IGFjY2Vzc19wbW92cywgLnJlZyA9IFBNT1ZTU0VUX0VMMCB9LAo+ Pj4gK8KgwqDCoCAvKgo+Pj4gK8KgwqDCoMKgICogUE1fU1dJTkNfRUwwIGlzIGV4cG9zZWQgdG8g dXNlcnNwYWNlIGFzIFJBWi9XSSwgYXMgaXQgd2FzCj4+PiArwqDCoMKgwqAgKiBwcmV2aW91c2x5 IChhbmQgcG9pbnRsZXNzbHkpIGFkdmVydGlzZWQgaW4gdGhlIHBhc3QuLi4KPj4+ICvCoMKgwqDC oCAqLwo+Pj4gwqDCoMKgwqAgeyBQTVVfU1lTX1JFRyhTWVNfUE1TV0lOQ19FTDApLAo+Pj4gLcKg wqDCoMKgwqAgLmFjY2VzcyA9IGFjY2Vzc19wbXN3aW5jLCAucmVnID0gUE1TV0lOQ19FTDAgfSwK Pj4+ICvCoMKgwqDCoMKgIC5nZXRfdXNlciA9IGdldF9yYXpfaWRfcmVnLCAuc2V0X3VzZXIgPSBz ZXRfd2lfcmVnLAo+Pgo+PiBJbiBteSBvcGluaW9uLCB0aGUgY2FsbCBjaGFpbiB0byByZXR1cm4g MCBsb29rcyBwcmV0dHkgY29uZnVzaW5nIHRvIG1lLCBhcyB0aGUKPj4gZnVuY3Rpb25zIHNlZW1l ZCBtYWRlIGZvciBJRCByZWdpc3RlciBhY2Nlc3NlcywgYW5kIHRoZSBsZWFmIGZ1bmN0aW9uLAo+ PiByZWFkX2lkX3JlZygpLCB0cmllcyB0byBtYXRjaCB0aGlzIHJlZ2lzdGVyIHdpdGggYSBsaXN0 IG9mIElECj4+IHJlZ2lzdGVycy4gU2luY2Ugd2UKPj4gaGF2ZSBhbHJlYWR5IGFkZGVkIGEgbmV3 IGZ1bmN0aW9uIGp1c3QgZm9yIFBNU1dJTkNfRUwwLCBJIHdhcwo+PiB3b25kZXJpbmcgaWYgYWRk aW5nCj4+IGFub3RoZXIgZnVuY3Rpb24sIHNvbWV0aGluZyBsaWtlIGdldF9yYXpfcmVnKCksIHdv dWxkIG1ha2UgbW9yZSBzZW5zZS4KPgo+IEluIHRoYXQgY2FzZSwgSSdkIHJhdGhlciBqdXN0IGtp bGwgZ2V0X3Jhel9pZF9yZWcoKSBhbmQgcmVwbGFjZSBpdCB3aXRoCj4gdGhpcyBnZXRfcmF6X3Jl ZygpLiBJZiB3ZSB0cmF0IHNvbWV0aGluZyBhcyBSQVosIHdobyBjYXJlcyB3aGV0aGVyIGl0IGlz Cj4gYW4gaWRyZWcgb3Igbm90PwoKSSBhZ3JlZSwgdGhlIEFybSBBUk0gZG9lc24ndCBtYWtlIHRo ZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIElEIHJlZ2lzdGVycyBhbmQgb3RoZXIKc3lzdGVtIHJlZ2lz dGVycyBpbiB0aGUgZGVmaW5pdGlvbiBvZiBSQVosIEkgZG9uJ3QgdGhpbmsgS1ZNIHNob3VsZCBl aXRoZXIuIEFuZAp0aGUgd2F5IHJlYWRfaWRfcmVnKCkgaXMgd3JpdHRlbiBhbGxvd3MgcmV0dXJu aW5nIGEgdmFsdWUgZGlmZmVyZW50IHRoYW4gMCBldmVuIGlmCnJheiBpcyB0cnVlLCB3aGljaCBp biBteSBvcGluaW9uIGNvdWxkIG9ubHkgaGFwcGVuIGJlY2F1c2Ugb2YgYSBidWcgaW4gS1ZNLgoK SSBjYW4gaGF2ZSBhIGdvIGF0IHdyaXRpbmcgdGhlIHBhdGNoKGVzKSBvbiB0b3Agb2YgdGhpcyBz ZXJpZXMsIGlmIHlvdSB3YW50LiBBdAp0aGUgbW9tZW50IEknbSByZXdyaXRpbmcgdGhlIEtWTSBT UEUgc2VyaWVzLCBzbyBpdCB3aWxsIGJlIGEgZmV3IHdlZWtzIHVudGlsIEkgZ2V0CmFyb3VuZCB0 byBkb2luZyBpdCB0aG91Z2guCgpUaGFua3MsCgpBbGV4CgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QK bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=