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=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS 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 EF0B4C04AA7 for ; Mon, 13 May 2019 14:41:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BF4C72084A for ; Mon, 13 May 2019 14:41:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730666AbfEMOkz (ORCPT ); Mon, 13 May 2019 10:40:55 -0400 Received: from mx1.redhat.com ([209.132.183.28]:55232 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729482AbfEMOkw (ORCPT ); Mon, 13 May 2019 10:40:52 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9D2ED30832D1; Mon, 13 May 2019 14:40:50 +0000 (UTC) Received: from [10.36.116.17] (ovpn-116-17.ams2.redhat.com [10.36.116.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DA5265D722; Mon, 13 May 2019 14:40:42 +0000 (UTC) Subject: Re: [PATCH v7 12/23] iommu/smmuv3: Get prepared for nested stage support To: Robin Murphy , eric.auger.pro@gmail.com, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, joro@8bytes.org, alex.williamson@redhat.com, jacob.jun.pan@linux.intel.com, yi.l.liu@intel.com, jean-philippe.brucker@arm.com, will.deacon@arm.com Cc: kevin.tian@intel.com, ashok.raj@intel.com, marc.zyngier@arm.com, christoffer.dall@arm.com, peter.maydell@linaro.org, vincent.stehle@arm.com References: <20190408121911.24103-1-eric.auger@redhat.com> <20190408121911.24103-13-eric.auger@redhat.com> <66f873eb-35c0-d1e9-794e-9150dbdb13fe@arm.com> <424fc9bc-f040-d702-5a04-0faef1125989@arm.com> From: Auger Eric Message-ID: Date: Mon, 13 May 2019 16:40:41 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 MIME-Version: 1.0 In-Reply-To: <424fc9bc-f040-d702-5a04-0faef1125989@arm.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Mon, 13 May 2019 14:40:50 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Robin, On 5/13/19 1:43 PM, Robin Murphy wrote: > On 10/05/2019 15:34, Auger Eric wrote: >> Hi Robin, >> >> On 5/8/19 4:24 PM, Robin Murphy wrote: >>> On 08/04/2019 13:19, Eric Auger wrote: >>>> To allow nested stage support, we need to store both >>>> stage 1 and stage 2 configurations (and remove the former >>>> union). >>>> >>>> A nested setup is characterized by both s1_cfg and s2_cfg >>>> set. >>>> >>>> We introduce a new ste.abort field that will be set upon >>>> guest stage1 configuration passing. If s1_cfg is NULL and >>>> ste.abort is set, traffic can't pass. If ste.abort is not set, >>>> S1 is bypassed. >>>> >>>> arm_smmu_write_strtab_ent() is modified to write both stage >>>> fields in the STE and deal with the abort field. >>>> >>>> In nested mode, only stage 2 is "finalized" as the host does >>>> not own/configure the stage 1 context descriptor, guest does. >>>> >>>> Signed-off-by: Eric Auger >>>> >>>> --- >>>> >>>> v4 -> v5: >>>> - reset ste.abort on detach >>>> >>>> v3 -> v4: >>>> - s1_cfg.nested_abort and nested_bypass removed. >>>> - s/ste.nested/ste.abort >>>> - arm_smmu_write_strtab_ent modifications with introduction >>>>     of local abort, bypass and translate local variables >>>> - comment updated >>>> >>>> v1 -> v2: >>>> - invalidate the STE before moving from a live STE config to another >>>> - add the nested_abort and nested_bypass fields >>>> --- >>>>    drivers/iommu/arm-smmu-v3.c | 35 ++++++++++++++++++++--------------- >>>>    1 file changed, 20 insertions(+), 15 deletions(-) >>>> >>>> diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c >>>> index 21d027695181..e22e944ffc05 100644 >>>> --- a/drivers/iommu/arm-smmu-v3.c >>>> +++ b/drivers/iommu/arm-smmu-v3.c >>>> @@ -211,6 +211,7 @@ >>>>    #define STRTAB_STE_0_CFG_BYPASS        4 >>>>    #define STRTAB_STE_0_CFG_S1_TRANS    5 >>>>    #define STRTAB_STE_0_CFG_S2_TRANS    6 >>>> +#define STRTAB_STE_0_CFG_NESTED        7 >>>>      #define STRTAB_STE_0_S1FMT        GENMASK_ULL(5, 4) >>>>    #define STRTAB_STE_0_S1FMT_LINEAR    0 >>>> @@ -514,6 +515,7 @@ struct arm_smmu_strtab_ent { >>>>         * configured according to the domain type. >>>>         */ >>>>        bool                assigned; >>>> +    bool                abort; >>>>        struct arm_smmu_s1_cfg        *s1_cfg; >>>>        struct arm_smmu_s2_cfg        *s2_cfg; >>>>    }; >>>> @@ -628,10 +630,8 @@ struct arm_smmu_domain { >>>>        bool                non_strict; >>>>          enum arm_smmu_domain_stage    stage; >>>> -    union { >>>> -        struct arm_smmu_s1_cfg    s1_cfg; >>>> -        struct arm_smmu_s2_cfg    s2_cfg; >>>> -    }; >>>> +    struct arm_smmu_s1_cfg    s1_cfg; >>>> +    struct arm_smmu_s2_cfg    s2_cfg; >>>>          struct iommu_domain        domain; >>>>    @@ -1108,12 +1108,13 @@ static void arm_smmu_write_strtab_ent(struct >>>> arm_smmu_device *smmu, u32 sid, >>>>                          __le64 *dst, struct arm_smmu_strtab_ent *ste) >>>>    { >>>>        /* >>>> -     * This is hideously complicated, but we only really care about >>>> -     * three cases at the moment: >>>> +     * We care about the following transitions: >>>>         * >>>>         * 1. Invalid (all zero) -> bypass/fault (init) >>>> -     * 2. Bypass/fault -> translation/bypass (attach) >>>> -     * 3. Translation/bypass -> bypass/fault (detach) >>>> +     * 2. Bypass/fault -> single stage translation/bypass (attach) >>>> +     * 3. single stage Translation/bypass -> bypass/fault (detach) >>>> +     * 4. S2 -> S1 + S2 (attach_pasid_table) >>>> +     * 5. S1 + S2 -> S2 (detach_pasid_table) >>>>         * >>>>         * Given that we can't update the STE atomically and the SMMU >>>>         * doesn't read the thing in a defined order, that leaves us >>>> @@ -1124,7 +1125,7 @@ static void arm_smmu_write_strtab_ent(struct >>>> arm_smmu_device *smmu, u32 sid, >>>>         * 3. Update Config, sync >>>>         */ >>>>        u64 val = le64_to_cpu(dst[0]); >>>> -    bool ste_live = false; >>>> +    bool abort, bypass, translate, ste_live = false; >>>>        struct arm_smmu_cmdq_ent prefetch_cmd = { >>>>            .opcode        = CMDQ_OP_PREFETCH_CFG, >>>>            .prefetch    = { >>>> @@ -1138,11 +1139,11 @@ static void arm_smmu_write_strtab_ent(struct >>>> arm_smmu_device *smmu, u32 sid, >>>>                break; >>>>            case STRTAB_STE_0_CFG_S1_TRANS: >>>>            case STRTAB_STE_0_CFG_S2_TRANS: >>>> +        case STRTAB_STE_0_CFG_NESTED: >>>>                ste_live = true; >>>>                break; >>>>            case STRTAB_STE_0_CFG_ABORT: >>>> -            if (disable_bypass) >>>> -                break; >>>> +            break; >>>>            default: >>>>                BUG(); /* STE corruption */ >>>>            } >>>> @@ -1152,8 +1153,13 @@ static void arm_smmu_write_strtab_ent(struct >>>> arm_smmu_device *smmu, u32 sid, >>>>        val = STRTAB_STE_0_V; >>>>          /* Bypass/fault */ >>>> -    if (!ste->assigned || !(ste->s1_cfg || ste->s2_cfg)) { >>>> -        if (!ste->assigned && disable_bypass) >>>> + >>>> +    abort = (!ste->assigned && disable_bypass) || ste->abort; >>>> +    translate = ste->s1_cfg || ste->s2_cfg; >>>> +    bypass = !abort && !translate; >>>> + >>>> +    if (abort || bypass) { >>>> +        if (abort) >>>>                val |= FIELD_PREP(STRTAB_STE_0_CFG, >>>> STRTAB_STE_0_CFG_ABORT); >>>>            else >>>>                val |= FIELD_PREP(STRTAB_STE_0_CFG, >>>> STRTAB_STE_0_CFG_BYPASS); >>>> @@ -1172,7 +1178,6 @@ static void arm_smmu_write_strtab_ent(struct >>>> arm_smmu_device *smmu, u32 sid, >>>>        } >>>>          if (ste->s1_cfg) { >>>> -        BUG_ON(ste_live); >>> >>> Hmm, I'm a little uneasy about just removing these checks altogether, as >>> there are still cases where rewriting a live entry is bogus, that we'd >>> really like to keep catching. Is the problem that it's hard to tell when >>> you're 'rewriting' the S2 config of a nested entry with the same thing >>> on attaching/detaching its S1 context? >> No, I restored the original checks in !nested mode and added a new check >> to make sure we never update a live S1 in nested mode. Only S2 can be >> live. > > Right, either way it's fairly easy to enforce "!(cfg->s1 && ste->s1)", > but what I'm really concerned about is that fact where Stream IDs (or > possibly PASIDS) get messed up and we end up silently writing a nested > config over an STE which happens to already have an S2 configuration for > some other domain (or vice versa). > > I guess it might suffice to verify that the VTTBRs match for S2<->nested > transitions, what do you reckon? Yes I can test the STE.S2TTB values which should are identical during such transitions. Thanks Eric > > Robin. 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=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS 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 4300EC46470 for ; Mon, 13 May 2019 14:41:14 +0000 (UTC) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (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 1E27F2133F for ; Mon, 13 May 2019 14:41:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1E27F2133F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 7825BE5D; Mon, 13 May 2019 14:40:53 +0000 (UTC) Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 85ECFE3B for ; Mon, 13 May 2019 14:40:52 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 737CD837 for ; Mon, 13 May 2019 14:40:51 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9D2ED30832D1; Mon, 13 May 2019 14:40:50 +0000 (UTC) Received: from [10.36.116.17] (ovpn-116-17.ams2.redhat.com [10.36.116.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DA5265D722; Mon, 13 May 2019 14:40:42 +0000 (UTC) Subject: Re: [PATCH v7 12/23] iommu/smmuv3: Get prepared for nested stage support To: Robin Murphy , eric.auger.pro@gmail.com, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, joro@8bytes.org, alex.williamson@redhat.com, jacob.jun.pan@linux.intel.com, yi.l.liu@intel.com, jean-philippe.brucker@arm.com, will.deacon@arm.com References: <20190408121911.24103-1-eric.auger@redhat.com> <20190408121911.24103-13-eric.auger@redhat.com> <66f873eb-35c0-d1e9-794e-9150dbdb13fe@arm.com> <424fc9bc-f040-d702-5a04-0faef1125989@arm.com> From: Auger Eric Message-ID: Date: Mon, 13 May 2019 16:40:41 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 MIME-Version: 1.0 In-Reply-To: <424fc9bc-f040-d702-5a04-0faef1125989@arm.com> Content-Language: en-US X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Mon, 13 May 2019 14:40:50 +0000 (UTC) Cc: peter.maydell@linaro.org, kevin.tian@intel.com, vincent.stehle@arm.com, ashok.raj@intel.com, marc.zyngier@arm.com, christoffer.dall@arm.com X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: iommu-bounces@lists.linux-foundation.org Errors-To: iommu-bounces@lists.linux-foundation.org SGkgUm9iaW4sCgpPbiA1LzEzLzE5IDE6NDMgUE0sIFJvYmluIE11cnBoeSB3cm90ZToKPiBPbiAx MC8wNS8yMDE5IDE1OjM0LCBBdWdlciBFcmljIHdyb3RlOgo+PiBIaSBSb2JpbiwKPj4KPj4gT24g NS84LzE5IDQ6MjQgUE0sIFJvYmluIE11cnBoeSB3cm90ZToKPj4+IE9uIDA4LzA0LzIwMTkgMTM6 MTksIEVyaWMgQXVnZXIgd3JvdGU6Cj4+Pj4gVG8gYWxsb3cgbmVzdGVkIHN0YWdlIHN1cHBvcnQs IHdlIG5lZWQgdG8gc3RvcmUgYm90aAo+Pj4+IHN0YWdlIDEgYW5kIHN0YWdlIDIgY29uZmlndXJh dGlvbnMgKGFuZCByZW1vdmUgdGhlIGZvcm1lcgo+Pj4+IHVuaW9uKS4KPj4+Pgo+Pj4+IEEgbmVz dGVkIHNldHVwIGlzIGNoYXJhY3Rlcml6ZWQgYnkgYm90aCBzMV9jZmcgYW5kIHMyX2NmZwo+Pj4+ IHNldC4KPj4+Pgo+Pj4+IFdlIGludHJvZHVjZSBhIG5ldyBzdGUuYWJvcnQgZmllbGQgdGhhdCB3 aWxsIGJlIHNldCB1cG9uCj4+Pj4gZ3Vlc3Qgc3RhZ2UxIGNvbmZpZ3VyYXRpb24gcGFzc2luZy4g SWYgczFfY2ZnIGlzIE5VTEwgYW5kCj4+Pj4gc3RlLmFib3J0IGlzIHNldCwgdHJhZmZpYyBjYW4n dCBwYXNzLiBJZiBzdGUuYWJvcnQgaXMgbm90IHNldCwKPj4+PiBTMSBpcyBieXBhc3NlZC4KPj4+ Pgo+Pj4+IGFybV9zbW11X3dyaXRlX3N0cnRhYl9lbnQoKSBpcyBtb2RpZmllZCB0byB3cml0ZSBi b3RoIHN0YWdlCj4+Pj4gZmllbGRzIGluIHRoZSBTVEUgYW5kIGRlYWwgd2l0aCB0aGUgYWJvcnQg ZmllbGQuCj4+Pj4KPj4+PiBJbiBuZXN0ZWQgbW9kZSwgb25seSBzdGFnZSAyIGlzICJmaW5hbGl6 ZWQiIGFzIHRoZSBob3N0IGRvZXMKPj4+PiBub3Qgb3duL2NvbmZpZ3VyZSB0aGUgc3RhZ2UgMSBj b250ZXh0IGRlc2NyaXB0b3IsIGd1ZXN0IGRvZXMuCj4+Pj4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBF cmljIEF1Z2VyIDxlcmljLmF1Z2VyQHJlZGhhdC5jb20+Cj4+Pj4KPj4+PiAtLS0KPj4+Pgo+Pj4+ IHY0IC0+IHY1Ogo+Pj4+IC0gcmVzZXQgc3RlLmFib3J0IG9uIGRldGFjaAo+Pj4+Cj4+Pj4gdjMg LT4gdjQ6Cj4+Pj4gLSBzMV9jZmcubmVzdGVkX2Fib3J0IGFuZCBuZXN0ZWRfYnlwYXNzIHJlbW92 ZWQuCj4+Pj4gLSBzL3N0ZS5uZXN0ZWQvc3RlLmFib3J0Cj4+Pj4gLSBhcm1fc21tdV93cml0ZV9z dHJ0YWJfZW50IG1vZGlmaWNhdGlvbnMgd2l0aCBpbnRyb2R1Y3Rpb24KPj4+PiDCoMKgwqAgb2Yg bG9jYWwgYWJvcnQsIGJ5cGFzcyBhbmQgdHJhbnNsYXRlIGxvY2FsIHZhcmlhYmxlcwo+Pj4+IC0g Y29tbWVudCB1cGRhdGVkCj4+Pj4KPj4+PiB2MSAtPiB2MjoKPj4+PiAtIGludmFsaWRhdGUgdGhl IFNURSBiZWZvcmUgbW92aW5nIGZyb20gYSBsaXZlIFNURSBjb25maWcgdG8gYW5vdGhlcgo+Pj4+ IC0gYWRkIHRoZSBuZXN0ZWRfYWJvcnQgYW5kIG5lc3RlZF9ieXBhc3MgZmllbGRzCj4+Pj4gLS0t Cj4+Pj4gwqDCoCBkcml2ZXJzL2lvbW11L2FybS1zbW11LXYzLmMgfCAzNSArKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0tLQo+Pj4+IMKgwqAgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2Vy dGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQo+Pj4+Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv aW9tbXUvYXJtLXNtbXUtdjMuYyBiL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUtdjMuYwo+Pj4+IGlu ZGV4IDIxZDAyNzY5NTE4MS4uZTIyZTk0NGZmYzA1IDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMv aW9tbXUvYXJtLXNtbXUtdjMuYwo+Pj4+ICsrKyBiL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUtdjMu Ywo+Pj4+IEBAIC0yMTEsNiArMjExLDcgQEAKPj4+PiDCoMKgICNkZWZpbmUgU1RSVEFCX1NURV8w X0NGR19CWVBBU1PCoMKgwqDCoMKgwqDCoCA0Cj4+Pj4gwqDCoCAjZGVmaW5lIFNUUlRBQl9TVEVf MF9DRkdfUzFfVFJBTlPCoMKgwqAgNQo+Pj4+IMKgwqAgI2RlZmluZSBTVFJUQUJfU1RFXzBfQ0ZH X1MyX1RSQU5TwqDCoMKgIDYKPj4+PiArI2RlZmluZSBTVFJUQUJfU1RFXzBfQ0ZHX05FU1RFRMKg wqDCoMKgwqDCoMKgIDcKPj4+PiDCoMKgIMKgICNkZWZpbmUgU1RSVEFCX1NURV8wX1MxRk1UwqDC oMKgwqDCoMKgwqAgR0VOTUFTS19VTEwoNSwgNCkKPj4+PiDCoMKgICNkZWZpbmUgU1RSVEFCX1NU RV8wX1MxRk1UX0xJTkVBUsKgwqDCoCAwCj4+Pj4gQEAgLTUxNCw2ICs1MTUsNyBAQCBzdHJ1Y3Qg YXJtX3NtbXVfc3RydGFiX2VudCB7Cj4+Pj4gwqDCoMKgwqDCoMKgwqAgKiBjb25maWd1cmVkIGFj Y29yZGluZyB0byB0aGUgZG9tYWluIHR5cGUuCj4+Pj4gwqDCoMKgwqDCoMKgwqAgKi8KPj4+PiDC oMKgwqDCoMKgwqAgYm9vbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3NpZ25lZDsK Pj4+PiArwqDCoMKgIGJvb2zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWJvcnQ7Cj4+ Pj4gwqDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9zMV9jZmfCoMKgwqDCoMKgwqDCoCAqczFf Y2ZnOwo+Pj4+IMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfczJfY2ZnwqDCoMKgwqDCoMKg wqAgKnMyX2NmZzsKPj4+PiDCoMKgIH07Cj4+Pj4gQEAgLTYyOCwxMCArNjMwLDggQEAgc3RydWN0 IGFybV9zbW11X2RvbWFpbiB7Cj4+Pj4gwqDCoMKgwqDCoMKgIGJvb2zCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbm9uX3N0cmljdDsKPj4+PiDCoMKgIMKgwqDCoMKgwqAgZW51bSBhcm1f c21tdV9kb21haW5fc3RhZ2XCoMKgwqAgc3RhZ2U7Cj4+Pj4gLcKgwqDCoCB1bmlvbiB7Cj4+Pj4g LcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9zMV9jZmfCoMKgwqAgczFfY2ZnOwo+Pj4+ IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfczJfY2ZnwqDCoMKgIHMyX2NmZzsKPj4+ PiAtwqDCoMKgIH07Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfczFfY2ZnwqDCoMKgIHMx X2NmZzsKPj4+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9zMl9jZmfCoMKgwqAgczJfY2ZnOwo+ Pj4+IMKgwqAgwqDCoMKgwqDCoCBzdHJ1Y3QgaW9tbXVfZG9tYWluwqDCoMKgwqDCoMKgwqAgZG9t YWluOwo+Pj4+IMKgwqAgQEAgLTExMDgsMTIgKzExMDgsMTMgQEAgc3RhdGljIHZvaWQgYXJtX3Nt bXVfd3JpdGVfc3RydGFiX2VudChzdHJ1Y3QKPj4+PiBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUz MiBzaWQsCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIF9fbGU2NCAqZHN0LCBzdHJ1Y3QgYXJtX3NtbXVfc3RydGFiX2VudCAqc3RlKQo+Pj4+IMKg wqAgewo+Pj4+IMKgwqDCoMKgwqDCoCAvKgo+Pj4+IC3CoMKgwqDCoCAqIFRoaXMgaXMgaGlkZW91 c2x5IGNvbXBsaWNhdGVkLCBidXQgd2Ugb25seSByZWFsbHkgY2FyZSBhYm91dAo+Pj4+IC3CoMKg wqDCoCAqIHRocmVlIGNhc2VzIGF0IHRoZSBtb21lbnQ6Cj4+Pj4gK8KgwqDCoMKgICogV2UgY2Fy ZSBhYm91dCB0aGUgZm9sbG93aW5nIHRyYW5zaXRpb25zOgo+Pj4+IMKgwqDCoMKgwqDCoMKgICoK Pj4+PiDCoMKgwqDCoMKgwqDCoCAqIDEuIEludmFsaWQgKGFsbCB6ZXJvKSAtPiBieXBhc3MvZmF1 bHQgKGluaXQpCj4+Pj4gLcKgwqDCoMKgICogMi4gQnlwYXNzL2ZhdWx0IC0+IHRyYW5zbGF0aW9u L2J5cGFzcyAoYXR0YWNoKQo+Pj4+IC3CoMKgwqDCoCAqIDMuIFRyYW5zbGF0aW9uL2J5cGFzcyAt PiBieXBhc3MvZmF1bHQgKGRldGFjaCkKPj4+PiArwqDCoMKgwqAgKiAyLiBCeXBhc3MvZmF1bHQg LT4gc2luZ2xlIHN0YWdlIHRyYW5zbGF0aW9uL2J5cGFzcyAoYXR0YWNoKQo+Pj4+ICvCoMKgwqDC oCAqIDMuIHNpbmdsZSBzdGFnZSBUcmFuc2xhdGlvbi9ieXBhc3MgLT4gYnlwYXNzL2ZhdWx0IChk ZXRhY2gpCj4+Pj4gK8KgwqDCoMKgICogNC4gUzIgLT4gUzEgKyBTMiAoYXR0YWNoX3Bhc2lkX3Rh YmxlKQo+Pj4+ICvCoMKgwqDCoCAqIDUuIFMxICsgUzIgLT4gUzIgKGRldGFjaF9wYXNpZF90YWJs ZSkKPj4+PiDCoMKgwqDCoMKgwqDCoCAqCj4+Pj4gwqDCoMKgwqDCoMKgwqAgKiBHaXZlbiB0aGF0 IHdlIGNhbid0IHVwZGF0ZSB0aGUgU1RFIGF0b21pY2FsbHkgYW5kIHRoZSBTTU1VCj4+Pj4gwqDC oMKgwqDCoMKgwqAgKiBkb2Vzbid0IHJlYWQgdGhlIHRoaW5nIGluIGEgZGVmaW5lZCBvcmRlciwg dGhhdCBsZWF2ZXMgdXMKPj4+PiBAQCAtMTEyNCw3ICsxMTI1LDcgQEAgc3RhdGljIHZvaWQgYXJt X3NtbXVfd3JpdGVfc3RydGFiX2VudChzdHJ1Y3QKPj4+PiBhcm1fc21tdV9kZXZpY2UgKnNtbXUs IHUzMiBzaWQsCj4+Pj4gwqDCoMKgwqDCoMKgwqAgKiAzLiBVcGRhdGUgQ29uZmlnLCBzeW5jCj4+ Pj4gwqDCoMKgwqDCoMKgwqAgKi8KPj4+PiDCoMKgwqDCoMKgwqAgdTY0IHZhbCA9IGxlNjRfdG9f Y3B1KGRzdFswXSk7Cj4+Pj4gLcKgwqDCoCBib29sIHN0ZV9saXZlID0gZmFsc2U7Cj4+Pj4gK8Kg wqDCoCBib29sIGFib3J0LCBieXBhc3MsIHRyYW5zbGF0ZSwgc3RlX2xpdmUgPSBmYWxzZTsKPj4+ PiDCoMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2NtZHFfZW50IHByZWZldGNoX2NtZCA9IHsK Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAub3Bjb2RlwqDCoMKgwqDCoMKgwqAgPSBDTURRX09Q X1BSRUZFVENIX0NGRywKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAucHJlZmV0Y2jCoMKgwqAg PSB7Cj4+Pj4gQEAgLTExMzgsMTEgKzExMzksMTEgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVfd3Jp dGVfc3RydGFiX2VudChzdHJ1Y3QKPj4+PiBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUzMiBzaWQs Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjYXNlIFNUUlRBQl9TVEVfMF9DRkdfUzFfVFJBTlM6Cj4+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqAgY2FzZSBTVFJUQUJfU1RFXzBfQ0ZHX1MyX1RSQU5TOgo+Pj4+ICvCoMKgwqDC oMKgwqDCoCBjYXNlIFNUUlRBQl9TVEVfMF9DRkdfTkVTVEVEOgo+Pj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RlX2xpdmUgPSB0cnVlOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYnJlYWs7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2FzZSBTVFJUQUJfU1RF XzBfQ0ZHX0FCT1JUOgo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChkaXNhYmxlX2J5 cGFzcykKPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRl ZmF1bHQ6Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCVUcoKTsgLyogU1RFIGNv cnJ1cHRpb24gKi8KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gQEAgLTExNTIsOCAr MTE1MywxMyBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV93cml0ZV9zdHJ0YWJfZW50KHN0cnVjdAo+ Pj4+IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCwKPj4+PiDCoMKgwqDCoMKgwqAgdmFs ID0gU1RSVEFCX1NURV8wX1Y7Cj4+Pj4gwqDCoCDCoMKgwqDCoMKgIC8qIEJ5cGFzcy9mYXVsdCAq Lwo+Pj4+IC3CoMKgwqAgaWYgKCFzdGUtPmFzc2lnbmVkIHx8ICEoc3RlLT5zMV9jZmcgfHwgc3Rl LT5zMl9jZmcpKSB7Cj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmICghc3RlLT5hc3NpZ25lZCAmJiBk aXNhYmxlX2J5cGFzcykKPj4+PiArCj4+Pj4gK8KgwqDCoCBhYm9ydCA9ICghc3RlLT5hc3NpZ25l ZCAmJiBkaXNhYmxlX2J5cGFzcykgfHwgc3RlLT5hYm9ydDsKPj4+PiArwqDCoMKgIHRyYW5zbGF0 ZSA9IHN0ZS0+czFfY2ZnIHx8IHN0ZS0+czJfY2ZnOwo+Pj4+ICvCoMKgwqAgYnlwYXNzID0gIWFi b3J0ICYmICF0cmFuc2xhdGU7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaWYgKGFib3J0IHx8IGJ5cGFz cykgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYWJvcnQpCj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB2YWwgfD0gRklFTERfUFJFUChTVFJUQUJfU1RFXzBfQ0ZHLAo+Pj4+IFNU UlRBQl9TVEVfMF9DRkdfQUJPUlQpOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UKPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZhbCB8PSBGSUVMRF9QUkVQKFNUUlRBQl9T VEVfMF9DRkcsCj4+Pj4gU1RSVEFCX1NURV8wX0NGR19CWVBBU1MpOwo+Pj4+IEBAIC0xMTcyLDcg KzExNzgsNiBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV93cml0ZV9zdHJ0YWJfZW50KHN0cnVjdAo+ Pj4+IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCwKPj4+PiDCoMKgwqDCoMKgwqAgfQo+ Pj4+IMKgwqAgwqDCoMKgwqDCoCBpZiAoc3RlLT5zMV9jZmcpIHsKPj4+PiAtwqDCoMKgwqDCoMKg wqAgQlVHX09OKHN0ZV9saXZlKTsKPj4+Cj4+PiBIbW0sIEknbSBhIGxpdHRsZSB1bmVhc3kgYWJv dXQganVzdCByZW1vdmluZyB0aGVzZSBjaGVja3MgYWx0b2dldGhlciwgYXMKPj4+IHRoZXJlIGFy ZSBzdGlsbCBjYXNlcyB3aGVyZSByZXdyaXRpbmcgYSBsaXZlIGVudHJ5IGlzIGJvZ3VzLCB0aGF0 IHdlJ2QKPj4+IHJlYWxseSBsaWtlIHRvIGtlZXAgY2F0Y2hpbmcuIElzIHRoZSBwcm9ibGVtIHRo YXQgaXQncyBoYXJkIHRvIHRlbGwgd2hlbgo+Pj4geW91J3JlICdyZXdyaXRpbmcnIHRoZSBTMiBj b25maWcgb2YgYSBuZXN0ZWQgZW50cnkgd2l0aCB0aGUgc2FtZSB0aGluZwo+Pj4gb24gYXR0YWNo aW5nL2RldGFjaGluZyBpdHMgUzEgY29udGV4dD8KPj4gTm8sIEkgcmVzdG9yZWQgdGhlIG9yaWdp bmFsIGNoZWNrcyBpbiAhbmVzdGVkIG1vZGUgYW5kIGFkZGVkIGEgbmV3IGNoZWNrCj4+IHRvIG1h a2Ugc3VyZSB3ZSBuZXZlciB1cGRhdGUgYSBsaXZlIFMxIGluIG5lc3RlZCBtb2RlLiBPbmx5IFMy IGNhbiBiZQo+PiBsaXZlLgo+IAo+IFJpZ2h0LCBlaXRoZXIgd2F5IGl0J3MgZmFpcmx5IGVhc3kg dG8gZW5mb3JjZSAiIShjZmctPnMxICYmIHN0ZS0+czEpIiwKPiBidXQgd2hhdCBJJ20gcmVhbGx5 IGNvbmNlcm5lZCBhYm91dCBpcyB0aGF0IGZhY3Qgd2hlcmUgU3RyZWFtIElEcyAob3IKPiBwb3Nz aWJseSBQQVNJRFMpIGdldCBtZXNzZWQgdXAgYW5kIHdlIGVuZCB1cCBzaWxlbnRseSB3cml0aW5n IGEgbmVzdGVkCj4gY29uZmlnIG92ZXIgYW4gU1RFIHdoaWNoIGhhcHBlbnMgdG8gYWxyZWFkeSBo YXZlIGFuIFMyIGNvbmZpZ3VyYXRpb24gZm9yCj4gc29tZSBvdGhlciBkb21haW4gKG9yIHZpY2Ug dmVyc2EpLgoKPiAKPiBJIGd1ZXNzIGl0IG1pZ2h0IHN1ZmZpY2UgdG8gdmVyaWZ5IHRoYXQgdGhl IFZUVEJScyBtYXRjaCBmb3IgUzI8LT5uZXN0ZWQKPiB0cmFuc2l0aW9ucywgd2hhdCBkbyB5b3Ug cmVja29uPwpZZXMgSSBjYW4gdGVzdCB0aGUgU1RFLlMyVFRCIHZhbHVlcyB3aGljaCBzaG91bGQg YXJlIGlkZW50aWNhbCBkdXJpbmcKc3VjaCB0cmFuc2l0aW9ucy4KClRoYW5rcwoKRXJpYwo+IAo+ IFJvYmluLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpp b21tdSBtYWlsaW5nIGxpc3QKaW9tbXVAbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6 Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vaW9tbXU= 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=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS 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 C41E4C46470 for ; Mon, 13 May 2019 14:40:57 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 4A3922084A for ; Mon, 13 May 2019 14:40:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4A3922084A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.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 A29734A4AA; Mon, 13 May 2019 10:40:56 -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 rpbqQVy1UA8a; Mon, 13 May 2019 10:40:54 -0400 (EDT) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 5AECE4A456; Mon, 13 May 2019 10:40:54 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 086BD4A496 for ; Mon, 13 May 2019 10:40:53 -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 vSsWKPJDv4ZQ for ; Mon, 13 May 2019 10:40:51 -0400 (EDT) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id A145A4A3B4 for ; Mon, 13 May 2019 10:40:51 -0400 (EDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9D2ED30832D1; Mon, 13 May 2019 14:40:50 +0000 (UTC) Received: from [10.36.116.17] (ovpn-116-17.ams2.redhat.com [10.36.116.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DA5265D722; Mon, 13 May 2019 14:40:42 +0000 (UTC) Subject: Re: [PATCH v7 12/23] iommu/smmuv3: Get prepared for nested stage support To: Robin Murphy , eric.auger.pro@gmail.com, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, joro@8bytes.org, alex.williamson@redhat.com, jacob.jun.pan@linux.intel.com, yi.l.liu@intel.com, jean-philippe.brucker@arm.com, will.deacon@arm.com References: <20190408121911.24103-1-eric.auger@redhat.com> <20190408121911.24103-13-eric.auger@redhat.com> <66f873eb-35c0-d1e9-794e-9150dbdb13fe@arm.com> <424fc9bc-f040-d702-5a04-0faef1125989@arm.com> From: Auger Eric Message-ID: Date: Mon, 13 May 2019 16:40:41 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 MIME-Version: 1.0 In-Reply-To: <424fc9bc-f040-d702-5a04-0faef1125989@arm.com> Content-Language: en-US X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Mon, 13 May 2019 14:40:50 +0000 (UTC) Cc: kevin.tian@intel.com, vincent.stehle@arm.com, ashok.raj@intel.com, marc.zyngier@arm.com 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 SGkgUm9iaW4sCgpPbiA1LzEzLzE5IDE6NDMgUE0sIFJvYmluIE11cnBoeSB3cm90ZToKPiBPbiAx MC8wNS8yMDE5IDE1OjM0LCBBdWdlciBFcmljIHdyb3RlOgo+PiBIaSBSb2JpbiwKPj4KPj4gT24g NS84LzE5IDQ6MjQgUE0sIFJvYmluIE11cnBoeSB3cm90ZToKPj4+IE9uIDA4LzA0LzIwMTkgMTM6 MTksIEVyaWMgQXVnZXIgd3JvdGU6Cj4+Pj4gVG8gYWxsb3cgbmVzdGVkIHN0YWdlIHN1cHBvcnQs IHdlIG5lZWQgdG8gc3RvcmUgYm90aAo+Pj4+IHN0YWdlIDEgYW5kIHN0YWdlIDIgY29uZmlndXJh dGlvbnMgKGFuZCByZW1vdmUgdGhlIGZvcm1lcgo+Pj4+IHVuaW9uKS4KPj4+Pgo+Pj4+IEEgbmVz dGVkIHNldHVwIGlzIGNoYXJhY3Rlcml6ZWQgYnkgYm90aCBzMV9jZmcgYW5kIHMyX2NmZwo+Pj4+ IHNldC4KPj4+Pgo+Pj4+IFdlIGludHJvZHVjZSBhIG5ldyBzdGUuYWJvcnQgZmllbGQgdGhhdCB3 aWxsIGJlIHNldCB1cG9uCj4+Pj4gZ3Vlc3Qgc3RhZ2UxIGNvbmZpZ3VyYXRpb24gcGFzc2luZy4g SWYgczFfY2ZnIGlzIE5VTEwgYW5kCj4+Pj4gc3RlLmFib3J0IGlzIHNldCwgdHJhZmZpYyBjYW4n dCBwYXNzLiBJZiBzdGUuYWJvcnQgaXMgbm90IHNldCwKPj4+PiBTMSBpcyBieXBhc3NlZC4KPj4+ Pgo+Pj4+IGFybV9zbW11X3dyaXRlX3N0cnRhYl9lbnQoKSBpcyBtb2RpZmllZCB0byB3cml0ZSBi b3RoIHN0YWdlCj4+Pj4gZmllbGRzIGluIHRoZSBTVEUgYW5kIGRlYWwgd2l0aCB0aGUgYWJvcnQg ZmllbGQuCj4+Pj4KPj4+PiBJbiBuZXN0ZWQgbW9kZSwgb25seSBzdGFnZSAyIGlzICJmaW5hbGl6 ZWQiIGFzIHRoZSBob3N0IGRvZXMKPj4+PiBub3Qgb3duL2NvbmZpZ3VyZSB0aGUgc3RhZ2UgMSBj b250ZXh0IGRlc2NyaXB0b3IsIGd1ZXN0IGRvZXMuCj4+Pj4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBF cmljIEF1Z2VyIDxlcmljLmF1Z2VyQHJlZGhhdC5jb20+Cj4+Pj4KPj4+PiAtLS0KPj4+Pgo+Pj4+ IHY0IC0+IHY1Ogo+Pj4+IC0gcmVzZXQgc3RlLmFib3J0IG9uIGRldGFjaAo+Pj4+Cj4+Pj4gdjMg LT4gdjQ6Cj4+Pj4gLSBzMV9jZmcubmVzdGVkX2Fib3J0IGFuZCBuZXN0ZWRfYnlwYXNzIHJlbW92 ZWQuCj4+Pj4gLSBzL3N0ZS5uZXN0ZWQvc3RlLmFib3J0Cj4+Pj4gLSBhcm1fc21tdV93cml0ZV9z dHJ0YWJfZW50IG1vZGlmaWNhdGlvbnMgd2l0aCBpbnRyb2R1Y3Rpb24KPj4+PiDCoMKgwqAgb2Yg bG9jYWwgYWJvcnQsIGJ5cGFzcyBhbmQgdHJhbnNsYXRlIGxvY2FsIHZhcmlhYmxlcwo+Pj4+IC0g Y29tbWVudCB1cGRhdGVkCj4+Pj4KPj4+PiB2MSAtPiB2MjoKPj4+PiAtIGludmFsaWRhdGUgdGhl IFNURSBiZWZvcmUgbW92aW5nIGZyb20gYSBsaXZlIFNURSBjb25maWcgdG8gYW5vdGhlcgo+Pj4+ IC0gYWRkIHRoZSBuZXN0ZWRfYWJvcnQgYW5kIG5lc3RlZF9ieXBhc3MgZmllbGRzCj4+Pj4gLS0t Cj4+Pj4gwqDCoCBkcml2ZXJzL2lvbW11L2FybS1zbW11LXYzLmMgfCAzNSArKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0tLQo+Pj4+IMKgwqAgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2Vy dGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQo+Pj4+Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv aW9tbXUvYXJtLXNtbXUtdjMuYyBiL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUtdjMuYwo+Pj4+IGlu ZGV4IDIxZDAyNzY5NTE4MS4uZTIyZTk0NGZmYzA1IDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMv aW9tbXUvYXJtLXNtbXUtdjMuYwo+Pj4+ICsrKyBiL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUtdjMu Ywo+Pj4+IEBAIC0yMTEsNiArMjExLDcgQEAKPj4+PiDCoMKgICNkZWZpbmUgU1RSVEFCX1NURV8w X0NGR19CWVBBU1PCoMKgwqDCoMKgwqDCoCA0Cj4+Pj4gwqDCoCAjZGVmaW5lIFNUUlRBQl9TVEVf MF9DRkdfUzFfVFJBTlPCoMKgwqAgNQo+Pj4+IMKgwqAgI2RlZmluZSBTVFJUQUJfU1RFXzBfQ0ZH X1MyX1RSQU5TwqDCoMKgIDYKPj4+PiArI2RlZmluZSBTVFJUQUJfU1RFXzBfQ0ZHX05FU1RFRMKg wqDCoMKgwqDCoMKgIDcKPj4+PiDCoMKgIMKgICNkZWZpbmUgU1RSVEFCX1NURV8wX1MxRk1UwqDC oMKgwqDCoMKgwqAgR0VOTUFTS19VTEwoNSwgNCkKPj4+PiDCoMKgICNkZWZpbmUgU1RSVEFCX1NU RV8wX1MxRk1UX0xJTkVBUsKgwqDCoCAwCj4+Pj4gQEAgLTUxNCw2ICs1MTUsNyBAQCBzdHJ1Y3Qg YXJtX3NtbXVfc3RydGFiX2VudCB7Cj4+Pj4gwqDCoMKgwqDCoMKgwqAgKiBjb25maWd1cmVkIGFj Y29yZGluZyB0byB0aGUgZG9tYWluIHR5cGUuCj4+Pj4gwqDCoMKgwqDCoMKgwqAgKi8KPj4+PiDC oMKgwqDCoMKgwqAgYm9vbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3NpZ25lZDsK Pj4+PiArwqDCoMKgIGJvb2zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWJvcnQ7Cj4+ Pj4gwqDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9zMV9jZmfCoMKgwqDCoMKgwqDCoCAqczFf Y2ZnOwo+Pj4+IMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfczJfY2ZnwqDCoMKgwqDCoMKg wqAgKnMyX2NmZzsKPj4+PiDCoMKgIH07Cj4+Pj4gQEAgLTYyOCwxMCArNjMwLDggQEAgc3RydWN0 IGFybV9zbW11X2RvbWFpbiB7Cj4+Pj4gwqDCoMKgwqDCoMKgIGJvb2zCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbm9uX3N0cmljdDsKPj4+PiDCoMKgIMKgwqDCoMKgwqAgZW51bSBhcm1f c21tdV9kb21haW5fc3RhZ2XCoMKgwqAgc3RhZ2U7Cj4+Pj4gLcKgwqDCoCB1bmlvbiB7Cj4+Pj4g LcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9zMV9jZmfCoMKgwqAgczFfY2ZnOwo+Pj4+ IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfczJfY2ZnwqDCoMKgIHMyX2NmZzsKPj4+ PiAtwqDCoMKgIH07Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfczFfY2ZnwqDCoMKgIHMx X2NmZzsKPj4+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9zMl9jZmfCoMKgwqAgczJfY2ZnOwo+ Pj4+IMKgwqAgwqDCoMKgwqDCoCBzdHJ1Y3QgaW9tbXVfZG9tYWluwqDCoMKgwqDCoMKgwqAgZG9t YWluOwo+Pj4+IMKgwqAgQEAgLTExMDgsMTIgKzExMDgsMTMgQEAgc3RhdGljIHZvaWQgYXJtX3Nt bXVfd3JpdGVfc3RydGFiX2VudChzdHJ1Y3QKPj4+PiBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUz MiBzaWQsCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIF9fbGU2NCAqZHN0LCBzdHJ1Y3QgYXJtX3NtbXVfc3RydGFiX2VudCAqc3RlKQo+Pj4+IMKg wqAgewo+Pj4+IMKgwqDCoMKgwqDCoCAvKgo+Pj4+IC3CoMKgwqDCoCAqIFRoaXMgaXMgaGlkZW91 c2x5IGNvbXBsaWNhdGVkLCBidXQgd2Ugb25seSByZWFsbHkgY2FyZSBhYm91dAo+Pj4+IC3CoMKg wqDCoCAqIHRocmVlIGNhc2VzIGF0IHRoZSBtb21lbnQ6Cj4+Pj4gK8KgwqDCoMKgICogV2UgY2Fy ZSBhYm91dCB0aGUgZm9sbG93aW5nIHRyYW5zaXRpb25zOgo+Pj4+IMKgwqDCoMKgwqDCoMKgICoK Pj4+PiDCoMKgwqDCoMKgwqDCoCAqIDEuIEludmFsaWQgKGFsbCB6ZXJvKSAtPiBieXBhc3MvZmF1 bHQgKGluaXQpCj4+Pj4gLcKgwqDCoMKgICogMi4gQnlwYXNzL2ZhdWx0IC0+IHRyYW5zbGF0aW9u L2J5cGFzcyAoYXR0YWNoKQo+Pj4+IC3CoMKgwqDCoCAqIDMuIFRyYW5zbGF0aW9uL2J5cGFzcyAt PiBieXBhc3MvZmF1bHQgKGRldGFjaCkKPj4+PiArwqDCoMKgwqAgKiAyLiBCeXBhc3MvZmF1bHQg LT4gc2luZ2xlIHN0YWdlIHRyYW5zbGF0aW9uL2J5cGFzcyAoYXR0YWNoKQo+Pj4+ICvCoMKgwqDC oCAqIDMuIHNpbmdsZSBzdGFnZSBUcmFuc2xhdGlvbi9ieXBhc3MgLT4gYnlwYXNzL2ZhdWx0IChk ZXRhY2gpCj4+Pj4gK8KgwqDCoMKgICogNC4gUzIgLT4gUzEgKyBTMiAoYXR0YWNoX3Bhc2lkX3Rh YmxlKQo+Pj4+ICvCoMKgwqDCoCAqIDUuIFMxICsgUzIgLT4gUzIgKGRldGFjaF9wYXNpZF90YWJs ZSkKPj4+PiDCoMKgwqDCoMKgwqDCoCAqCj4+Pj4gwqDCoMKgwqDCoMKgwqAgKiBHaXZlbiB0aGF0 IHdlIGNhbid0IHVwZGF0ZSB0aGUgU1RFIGF0b21pY2FsbHkgYW5kIHRoZSBTTU1VCj4+Pj4gwqDC oMKgwqDCoMKgwqAgKiBkb2Vzbid0IHJlYWQgdGhlIHRoaW5nIGluIGEgZGVmaW5lZCBvcmRlciwg dGhhdCBsZWF2ZXMgdXMKPj4+PiBAQCAtMTEyNCw3ICsxMTI1LDcgQEAgc3RhdGljIHZvaWQgYXJt X3NtbXVfd3JpdGVfc3RydGFiX2VudChzdHJ1Y3QKPj4+PiBhcm1fc21tdV9kZXZpY2UgKnNtbXUs IHUzMiBzaWQsCj4+Pj4gwqDCoMKgwqDCoMKgwqAgKiAzLiBVcGRhdGUgQ29uZmlnLCBzeW5jCj4+ Pj4gwqDCoMKgwqDCoMKgwqAgKi8KPj4+PiDCoMKgwqDCoMKgwqAgdTY0IHZhbCA9IGxlNjRfdG9f Y3B1KGRzdFswXSk7Cj4+Pj4gLcKgwqDCoCBib29sIHN0ZV9saXZlID0gZmFsc2U7Cj4+Pj4gK8Kg wqDCoCBib29sIGFib3J0LCBieXBhc3MsIHRyYW5zbGF0ZSwgc3RlX2xpdmUgPSBmYWxzZTsKPj4+ PiDCoMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2NtZHFfZW50IHByZWZldGNoX2NtZCA9IHsK Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAub3Bjb2RlwqDCoMKgwqDCoMKgwqAgPSBDTURRX09Q X1BSRUZFVENIX0NGRywKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAucHJlZmV0Y2jCoMKgwqAg PSB7Cj4+Pj4gQEAgLTExMzgsMTEgKzExMzksMTEgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVfd3Jp dGVfc3RydGFiX2VudChzdHJ1Y3QKPj4+PiBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUzMiBzaWQs Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjYXNlIFNUUlRBQl9TVEVfMF9DRkdfUzFfVFJBTlM6Cj4+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqAgY2FzZSBTVFJUQUJfU1RFXzBfQ0ZHX1MyX1RSQU5TOgo+Pj4+ICvCoMKgwqDC oMKgwqDCoCBjYXNlIFNUUlRBQl9TVEVfMF9DRkdfTkVTVEVEOgo+Pj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RlX2xpdmUgPSB0cnVlOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYnJlYWs7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2FzZSBTVFJUQUJfU1RF XzBfQ0ZHX0FCT1JUOgo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChkaXNhYmxlX2J5 cGFzcykKPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRl ZmF1bHQ6Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCVUcoKTsgLyogU1RFIGNv cnJ1cHRpb24gKi8KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gQEAgLTExNTIsOCAr MTE1MywxMyBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV93cml0ZV9zdHJ0YWJfZW50KHN0cnVjdAo+ Pj4+IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCwKPj4+PiDCoMKgwqDCoMKgwqAgdmFs ID0gU1RSVEFCX1NURV8wX1Y7Cj4+Pj4gwqDCoCDCoMKgwqDCoMKgIC8qIEJ5cGFzcy9mYXVsdCAq Lwo+Pj4+IC3CoMKgwqAgaWYgKCFzdGUtPmFzc2lnbmVkIHx8ICEoc3RlLT5zMV9jZmcgfHwgc3Rl LT5zMl9jZmcpKSB7Cj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmICghc3RlLT5hc3NpZ25lZCAmJiBk aXNhYmxlX2J5cGFzcykKPj4+PiArCj4+Pj4gK8KgwqDCoCBhYm9ydCA9ICghc3RlLT5hc3NpZ25l ZCAmJiBkaXNhYmxlX2J5cGFzcykgfHwgc3RlLT5hYm9ydDsKPj4+PiArwqDCoMKgIHRyYW5zbGF0 ZSA9IHN0ZS0+czFfY2ZnIHx8IHN0ZS0+czJfY2ZnOwo+Pj4+ICvCoMKgwqAgYnlwYXNzID0gIWFi b3J0ICYmICF0cmFuc2xhdGU7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaWYgKGFib3J0IHx8IGJ5cGFz cykgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYWJvcnQpCj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB2YWwgfD0gRklFTERfUFJFUChTVFJUQUJfU1RFXzBfQ0ZHLAo+Pj4+IFNU UlRBQl9TVEVfMF9DRkdfQUJPUlQpOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UKPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZhbCB8PSBGSUVMRF9QUkVQKFNUUlRBQl9T VEVfMF9DRkcsCj4+Pj4gU1RSVEFCX1NURV8wX0NGR19CWVBBU1MpOwo+Pj4+IEBAIC0xMTcyLDcg KzExNzgsNiBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV93cml0ZV9zdHJ0YWJfZW50KHN0cnVjdAo+ Pj4+IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCwKPj4+PiDCoMKgwqDCoMKgwqAgfQo+ Pj4+IMKgwqAgwqDCoMKgwqDCoCBpZiAoc3RlLT5zMV9jZmcpIHsKPj4+PiAtwqDCoMKgwqDCoMKg wqAgQlVHX09OKHN0ZV9saXZlKTsKPj4+Cj4+PiBIbW0sIEknbSBhIGxpdHRsZSB1bmVhc3kgYWJv dXQganVzdCByZW1vdmluZyB0aGVzZSBjaGVja3MgYWx0b2dldGhlciwgYXMKPj4+IHRoZXJlIGFy ZSBzdGlsbCBjYXNlcyB3aGVyZSByZXdyaXRpbmcgYSBsaXZlIGVudHJ5IGlzIGJvZ3VzLCB0aGF0 IHdlJ2QKPj4+IHJlYWxseSBsaWtlIHRvIGtlZXAgY2F0Y2hpbmcuIElzIHRoZSBwcm9ibGVtIHRo YXQgaXQncyBoYXJkIHRvIHRlbGwgd2hlbgo+Pj4geW91J3JlICdyZXdyaXRpbmcnIHRoZSBTMiBj b25maWcgb2YgYSBuZXN0ZWQgZW50cnkgd2l0aCB0aGUgc2FtZSB0aGluZwo+Pj4gb24gYXR0YWNo aW5nL2RldGFjaGluZyBpdHMgUzEgY29udGV4dD8KPj4gTm8sIEkgcmVzdG9yZWQgdGhlIG9yaWdp bmFsIGNoZWNrcyBpbiAhbmVzdGVkIG1vZGUgYW5kIGFkZGVkIGEgbmV3IGNoZWNrCj4+IHRvIG1h a2Ugc3VyZSB3ZSBuZXZlciB1cGRhdGUgYSBsaXZlIFMxIGluIG5lc3RlZCBtb2RlLiBPbmx5IFMy IGNhbiBiZQo+PiBsaXZlLgo+IAo+IFJpZ2h0LCBlaXRoZXIgd2F5IGl0J3MgZmFpcmx5IGVhc3kg dG8gZW5mb3JjZSAiIShjZmctPnMxICYmIHN0ZS0+czEpIiwKPiBidXQgd2hhdCBJJ20gcmVhbGx5 IGNvbmNlcm5lZCBhYm91dCBpcyB0aGF0IGZhY3Qgd2hlcmUgU3RyZWFtIElEcyAob3IKPiBwb3Nz aWJseSBQQVNJRFMpIGdldCBtZXNzZWQgdXAgYW5kIHdlIGVuZCB1cCBzaWxlbnRseSB3cml0aW5n IGEgbmVzdGVkCj4gY29uZmlnIG92ZXIgYW4gU1RFIHdoaWNoIGhhcHBlbnMgdG8gYWxyZWFkeSBo YXZlIGFuIFMyIGNvbmZpZ3VyYXRpb24gZm9yCj4gc29tZSBvdGhlciBkb21haW4gKG9yIHZpY2Ug dmVyc2EpLgoKPiAKPiBJIGd1ZXNzIGl0IG1pZ2h0IHN1ZmZpY2UgdG8gdmVyaWZ5IHRoYXQgdGhl IFZUVEJScyBtYXRjaCBmb3IgUzI8LT5uZXN0ZWQKPiB0cmFuc2l0aW9ucywgd2hhdCBkbyB5b3Ug cmVja29uPwpZZXMgSSBjYW4gdGVzdCB0aGUgU1RFLlMyVFRCIHZhbHVlcyB3aGljaCBzaG91bGQg YXJlIGlkZW50aWNhbCBkdXJpbmcKc3VjaCB0cmFuc2l0aW9ucy4KClRoYW5rcwoKRXJpYwo+IAo+ IFJvYmluLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpr dm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0cy5jcy5jb2x1bWJpYS5lZHUKaHR0cHM6Ly9s aXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9saXN0aW5mby9rdm1hcm0K