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=-6.9 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED 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 E11ACC04AB3 for ; Fri, 10 May 2019 14:35:29 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id A5F3F2177B for ; Fri, 10 May 2019 14:35:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A5F3F2177B 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 3D8CA4A4A9; Fri, 10 May 2019 10:35:29 -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 AgZqfk6xmuEb; Fri, 10 May 2019 10:35:27 -0400 (EDT) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 073E74A4BE; Fri, 10 May 2019 10:35:27 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 7DC7B4A4A9 for ; Fri, 10 May 2019 10:35:25 -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 0tIUbHAX4FS1 for ; Fri, 10 May 2019 10:35:24 -0400 (EDT) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 1578C4A389 for ; Fri, 10 May 2019 10:35:24 -0400 (EDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5CCE6C0586DD; Fri, 10 May 2019 14:35:23 +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 EB38260126; Fri, 10 May 2019 14:35:16 +0000 (UTC) Subject: Re: [PATCH v7 06/23] iommu: Introduce bind/unbind_guest_msi 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-7-eric.auger@redhat.com> From: Auger Eric Message-ID: Date: Fri, 10 May 2019 16:35:15 +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: Content-Language: en-US X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Fri, 10 May 2019 14:35:23 +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 SGkgUm9iaW4sCk9uIDUvOC8xOSAzOjU5IFBNLCBSb2JpbiBNdXJwaHkgd3JvdGU6Cj4gT24gMDgv MDQvMjAxOSAxMzoxOCwgRXJpYyBBdWdlciB3cm90ZToKPj4gT24gQVJNLCBNU0kgYXJlIHRyYW5z bGF0ZWQgYnkgdGhlIFNNTVUuIEFuIElPVkEgaXMgYWxsb2NhdGVkCj4+IGZvciBlYWNoIE1TSSBk b29yYmVsbC4gSWYgYm90aCB0aGUgaG9zdCBhbmQgdGhlIGd1ZXN0IGFyZSBleHBvc2VkCj4+IHdp dGggU01NVXMsIHdlIGVuZCB1cCB3aXRoIDIgZGlmZmVyZW50IElPVkFzIGFsbG9jYXRlZCBieSBl YWNoLgo+PiBndWVzdCBhbGxvY2F0ZXMgYW4gSU9WQSAoZ0lPVkEpIHRvIG1hcCBvbnRvIHRoZSBn dWVzdCBNU0kKPj4gZG9vcmJlbGwgKGdEQikuIFRoZSBIb3N0IGFsbG9jYXRlcyBhbm90aGVyIElP VkEgKGhJT1ZBKSB0byBtYXAKPj4gb250byB0aGUgcGh5c2ljYWwgZG9vcmJlbGwgKGhEQikuCj4+ Cj4+IFNvIHdlIGVuZCB1cCB3aXRoIDIgdW50aWVkIG1hcHBpbmdzOgo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgUzHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFMyCj4+IGdJT1ZBwqDCoMKgIC0+wqDCoMKg IGdEQgo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhJT1ZBwqDCoMKgIC0+wqDCoMKg IGhEQgo+Pgo+PiBDdXJyZW50bHkgdGhlIFBDSSBkZXZpY2UgaXMgcHJvZ3JhbW1lZCBieSB0aGUg aG9zdCB3aXRoIGhJT1ZBCj4+IGFzIE1TSSBkb29yYmVsbC4gU28gdGhpcyBkb2VzIG5vdCB3b3Jr Lgo+Pgo+PiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYW4gQVBJIHRvIHBhc3MgZ0lPVkEvZ0RCIHRv IHRoZSBob3N0IHNvCj4+IHRoYXQgZ0lPVkEgY2FuIGJlIHJldXNlZCBieSB0aGUgaG9zdCBpbnN0 ZWFkIG9mIHJlLWFsbG9jYXRpbmcKPj4gYSBuZXcgSU9WQS4gU28gdGhlIGdvYWwgaXMgdG8gY3Jl YXRlIHRoZSBmb2xsb3dpbmcgbmVzdGVkIG1hcHBpbmc6Cj4+Cj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBTMcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUzIKPj4gZ0lPVkHCoMKgwqAgLT7CoMKgwqAgZ0RC wqDCoMKgwqAgLT7CoMKgwqAgaERCCj4+Cj4+IGFuZCBwcm9ncmFtIHRoZSBQQ0kgZGV2aWNlIHdp dGggZ0lPVkEgTVNJIGRvb3JiZWxsLgo+Pgo+PiBJbiBjYXNlIHdlIGhhdmUgc2V2ZXJhbCBkZXZp Y2VzIGF0dGFjaGVkIHRvIHRoaXMgbmVzdGVkIGRvbWFpbgo+PiAoZGV2aWNlcyBiZWxvbmdpbmcg dG8gdGhlIHNhbWUgZ3JvdXApLCB0aGV5IGNhbm5vdCBiZSBpc29sYXRlZAo+PiBvbiBndWVzdCBz aWRlIGVpdGhlci4gU28gdGhleSBzaG91bGQgYWxzbyBlbmQgdXAgaW4gdGhlIHNhbWUgZG9tYWlu Cj4+IG9uIGd1ZXN0IHNpZGUuIFdlIHdpbGwgZW5mb3JjZSB0aGF0IGFsbCB0aGUgZGV2aWNlcyBh dHRhY2hlZCB0bwo+PiB0aGUgaG9zdCBpb21tdSBkb21haW4gdXNlIHRoZSBzYW1lIHBoeXNpY2Fs IGRvb3JiZWxsIGFuZCBzaW1pbGFybHkKPj4gYSBzaW5nbGUgdmlydHVhbCBkb29yYmVsbCBtYXBw aW5nIGdldHMgcmVnaXN0ZXJlZCAoMSBzaW5nbGUKPj4gdmlydHVhbCBkb29yYmVsbCBpcyB1c2Vk IG9uIGd1ZXN0IGFzIHdlbGwpLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBFcmljIEF1Z2VyIDxlcmlj LmF1Z2VyQHJlZGhhdC5jb20+Cj4+Cj4+IC0tLQo+PiB2NiAtPiB2NzoKPj4gLSByZW1vdmUgdGhl IGRldmljZSBoYW5kbGUgcGFyYW1ldGVyLgo+PiAtIEFkZCBjb21tZW50cyBzYXlpbmcgdGhlcmUg Y2FuIG9ubHkgYmUgYSBzaW5nbGUgTVNJIGJpbmRpbmcKPj4gwqDCoCByZWdpc3RlcmVkIHBlciBp b21tdV9kb21haW4KPj4gdjUgLT4gdjY6Cj4+IC1maXggY29tcGlsZSBpc3N1ZSB3aGVuIElPTU1V X0FQSSBpcyBub3Qgc2V0Cj4+Cj4+IHYzIC0+IHY0Ogo+PiAtIGFkZCB1bmJpbmQKPj4KPj4gdjIg LT4gdjM6Cj4+IC0gYWRkIGEgc3RydWN0IGRldmljZSBoYW5kbGUKPj4gLS0tCj4+IMKgIGRyaXZl cnMvaW9tbXUvaW9tbXUuYyB8IDM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPj4gwqAgaW5jbHVkZS9saW51eC9pb21tdS5oIHwgMjMgKysrKysrKysrKysrKysrKysrKysr KysKPj4gwqAgMiBmaWxlcyBjaGFuZ2VkLCA2MCBpbnNlcnRpb25zKCspCj4+Cj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2lvbW11L2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L2lvbW11LmMKPj4gaW5k ZXggNmQ2Y2I0MDA1Y2E1Li4wZDE2MGJiZDZmODEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvaW9t bXUvaW9tbXUuYwo+PiArKysgYi9kcml2ZXJzL2lvbW11L2lvbW11LmMKPj4gQEAgLTE1NzUsNiAr MTU3NSw0MyBAQCBzdGF0aWMgdm9pZCBfX2lvbW11X2RldGFjaF9kZXZpY2Uoc3RydWN0Cj4+IGlv bW11X2RvbWFpbiAqZG9tYWluLAo+PiDCoMKgwqDCoMKgIHRyYWNlX2RldGFjaF9kZXZpY2VfZnJv bV9kb21haW4oZGV2KTsKPj4gwqAgfQo+PiDCoCArLyoqCj4+ICsgKiBpb21tdV9iaW5kX2d1ZXN0 X21zaSAtIFBhc3NlcyB0aGUgc3RhZ2UxIEdJT1ZBL0dQQSBtYXBwaW5nIG9mIGEKPj4gKyAqIHZp cnR1YWwgZG9vcmJlbGwKPj4gKyAqCj4+ICsgKiBAZG9tYWluOiBpb21tdSBkb21haW4gdGhlIHN0 YWdlIDEgbWFwcGluZyB3aWxsIGJlIGF0dGFjaGVkIHRvCj4+ICsgKiBAaW92YTogaW92YSBhbGxv Y2F0ZWQgYnkgdGhlIGd1ZXN0Cj4+ICsgKiBAZ3BhOiBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIG9m IHRoZSB2aXJ0dWFsIGRvb3JiZWxsCj4+ICsgKiBAc2l6ZTogZ3JhbnVsZSBzaXplIHVzZWQgZm9y IHRoZSBtYXBwaW5nCj4+ICsgKgo+PiArICogVGhlIGFzc29jaWF0ZWQgSU9WQSBjYW4gYmUgcmV1 c2VkIGJ5IHRoZSBob3N0IHRvIGNyZWF0ZSBhIG5lc3RlZAo+PiArICogc3RhZ2UyIGJpbmRpbmcg bWFwcGluZyB0cmFuc2xhdGluZyBpbnRvIHRoZSBwaHlzaWNhbCBkb29yYmVsbCB1c2VkCj4+ICsg KiBieSB0aGUgZGV2aWNlcyBhdHRhY2hlZCB0byB0aGUgZG9tYWluLgo+PiArICoKPj4gKyAqIEFs bCBkZXZpY2VzIHdpdGhpbiB0aGUgZG9tYWluIG11c3Qgc2hhcmUgdGhlIHNhbWUgcGh5c2ljYWwg ZG9vcmJlbGwuCj4+ICsgKiBBIHNpbmdsZSBNU0kgR0lPVkEvR1BBIG1hcHBpbmcgY2FuIGJlIGF0 dGFjaGVkIHRvIGFuIGlvbW11X2RvbWFpbi4KPj4gKyAqLwo+PiArCj4+ICtpbnQgaW9tbXVfYmlu ZF9ndWVzdF9tc2koc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRtYV9hZGRyX3QgZ2lvdmEsIHBoeXNfYWRkcl90IGdwYSwgc2l6ZV90IHNp emUpCj4+ICt7Cj4+ICvCoMKgwqAgaWYgKHVubGlrZWx5KCFkb21haW4tPm9wcy0+YmluZF9ndWVz dF9tc2kpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7Cj4+ICsKPj4gK8KgwqDC oCByZXR1cm4gZG9tYWluLT5vcHMtPmJpbmRfZ3Vlc3RfbXNpKGRvbWFpbiwgZ2lvdmEsIGdwYSwg c2l6ZSk7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MX0dQTChpb21tdV9iaW5kX2d1ZXN0X21zaSk7 Cj4+ICsKPj4gK3ZvaWQgaW9tbXVfdW5iaW5kX2d1ZXN0X21zaShzdHJ1Y3QgaW9tbXVfZG9tYWlu ICpkb21haW4sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX2FkZHJfdCBp b3ZhKQo+PiArewo+PiArwqDCoMKgIGlmICh1bmxpa2VseSghZG9tYWluLT5vcHMtPnVuYmluZF9n dWVzdF9tc2kpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArCj4+ICvCoMKgwqAgZG9t YWluLT5vcHMtPnVuYmluZF9ndWVzdF9tc2koZG9tYWluLCBpb3ZhKTsKPj4gK30KPj4gK0VYUE9S VF9TWU1CT0xfR1BMKGlvbW11X3VuYmluZF9ndWVzdF9tc2kpOwo+PiArCj4+IMKgIHZvaWQgaW9t bXVfZGV0YWNoX2RldmljZShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHN0cnVjdCBkZXZp Y2UKPj4gKmRldikKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBpb21tdV9ncm91cCAqZ3Jv dXA7Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbW11LmggYi9pbmNsdWRlL2xpbnV4 L2lvbW11LmgKPj4gaW5kZXggN2M3YzZiYWQxNDIwLi5hMmYzZjk2NGVhZDIgMTAwNjQ0Cj4+IC0t LSBhL2luY2x1ZGUvbGludXgvaW9tbXUuaAo+PiArKysgYi9pbmNsdWRlL2xpbnV4L2lvbW11LmgK Pj4gQEAgLTE5Miw2ICsxOTIsOCBAQCBzdHJ1Y3QgaW9tbXVfcmVzdl9yZWdpb24gewo+PiDCoMKg ICogQGF0dGFjaF9wYXNpZF90YWJsZTogYXR0YWNoIGEgcGFzaWQgdGFibGUKPj4gwqDCoCAqIEBk ZXRhY2hfcGFzaWRfdGFibGU6IGRldGFjaCB0aGUgcGFzaWQgdGFibGUKPj4gwqDCoCAqIEBjYWNo ZV9pbnZhbGlkYXRlOiBpbnZhbGlkYXRlIHRyYW5zbGF0aW9uIGNhY2hlcwo+PiArICogQGJpbmRf Z3Vlc3RfbXNpOiBwcm92aWRlcyBhIHN0YWdlMSBnaW92YS9ncGEgTVNJIGRvb3JiZWxsIG1hcHBp bmcKPj4gKyAqIEB1bmJpbmRfZ3Vlc3RfbXNpOiB3aXRoZHJhdyBhIHN0YWdlMSBnaW92YS9ncGEg TVNJIGRvb3JiZWxsIG1hcHBpbmcKPj4gwqDCoCAqIEBwZ3NpemVfYml0bWFwOiBiaXRtYXAgb2Yg YWxsIHBvc3NpYmxlIHN1cHBvcnRlZCBwYWdlIHNpemVzCj4+IMKgwqAgKi8KPj4gwqAgc3RydWN0 IGlvbW11X29wcyB7Cj4+IEBAIC0yNDMsNiArMjQ1LDEwIEBAIHN0cnVjdCBpb21tdV9vcHMgewo+ PiDCoMKgwqDCoMKgIGludCAoKmNhY2hlX2ludmFsaWRhdGUpKHN0cnVjdCBpb21tdV9kb21haW4g KmRvbWFpbiwgc3RydWN0Cj4+IGRldmljZSAqZGV2LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0cnVjdCBpb21tdV9jYWNoZV9pbnZhbGlkYXRlX2luZm8gKmludl9pbmZv KTsKPj4gwqAgK8KgwqDCoCBpbnQgKCpiaW5kX2d1ZXN0X21zaSkoc3RydWN0IGlvbW11X2RvbWFp biAqZG9tYWluLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfYWRk cl90IGdpb3ZhLCBwaHlzX2FkZHJfdCBncGEsIHNpemVfdCBzaXplKTsKPj4gK8KgwqDCoCB2b2lk ICgqdW5iaW5kX2d1ZXN0X21zaSkoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCBkbWFfYWRk cl90Cj4+IGdpb3ZhKTsKPj4gKwo+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgcGdzaXplX2Jp dG1hcDsKPj4gwqAgfTsKPj4gwqAgQEAgLTM1Niw2ICszNjIsMTEgQEAgZXh0ZXJuIHZvaWQgaW9t bXVfZGV0YWNoX3Bhc2lkX3RhYmxlKHN0cnVjdAo+PiBpb21tdV9kb21haW4gKmRvbWFpbik7Cj4+ IMKgIGV4dGVybiBpbnQgaW9tbXVfY2FjaGVfaW52YWxpZGF0ZShzdHJ1Y3QgaW9tbXVfZG9tYWlu ICpkb21haW4sCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBkZXZpY2UgKmRldiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGlvbW11X2NhY2hlX2ludmFsaWRhdGVfaW5mbyAqaW52X2luZm8pOwo+PiArZXh0ZXJu IGludCBpb21tdV9iaW5kX2d1ZXN0X21zaShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX2FkZHJfdCBnaW92YSwgcGh5c19h ZGRyX3QgZ3BhLCBzaXplX3Qgc2l6ZSk7Cj4+ICtleHRlcm4gdm9pZCBpb21tdV91bmJpbmRfZ3Vl c3RfbXNpKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfYWRkcl90IGdpb3ZhKTsKPj4gKwo+PiDCoCBleHRlcm4g c3RydWN0IGlvbW11X2RvbWFpbiAqaW9tbXVfZ2V0X2RvbWFpbl9mb3JfZGV2KHN0cnVjdCBkZXZp Y2UKPj4gKmRldik7Cj4+IMKgIGV4dGVybiBzdHJ1Y3QgaW9tbXVfZG9tYWluICppb21tdV9nZXRf ZG1hX2RvbWFpbihzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+PiDCoCBleHRlcm4gaW50IGlvbW11X21h cChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKPj4gQEAg LTgxMiw2ICs4MjMsMTggQEAgaW9tbXVfY2FjaGVfaW52YWxpZGF0ZShzdHJ1Y3QgaW9tbXVfZG9t YWluICpkb21haW4sCj4+IMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7Cj4+IMKgIH0KPj4gwqAg K3N0YXRpYyBpbmxpbmUKPj4gK2ludCBpb21tdV9iaW5kX2d1ZXN0X21zaShzdHJ1Y3QgaW9tbXVf ZG9tYWluICpkb21haW4sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX2FkZHJfdCBn aW92YSwgcGh5c19hZGRyX3QgZ3BhLCBzaXplX3Qgc2l6ZSkKPj4gK3sKPj4gK8KgwqDCoCByZXR1 cm4gLUVOT0RFVjsKPj4gK30KPj4gK3N0YXRpYyBpbmxpbmUKPj4gK2ludCBpb21tdV91bmJpbmRf Z3Vlc3RfbXNpKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgZG1hX2FkZHJfdAo+PiBnaW92 YSkKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gLUVOT0RFVjsKPiAKPiBJdCdzIGxlc3Mgb2YgYSBw cm9ibGVtIHRoYW4gbWlzbWF0Y2hpbmcgdGhlIG90aGVyIHdheSByb3VuZCwgYnV0IGZvcgo+IGNv bnNpc3RlbmN5IHRoaXMgc2hvdWxkIHJldHVybiB2b2lkIGxpa2UgdGhlIHJlYWwgdmVyc2lvbi4K dGhhbmsgeW91IGZvciBzcG90dGluZyB0aGlzLgoKRXJpYwo+IAo+IFJvYmluLgo+IAo+PiArfQo+ PiArCj4+IMKgICNlbmRpZiAvKiBDT05GSUdfSU9NTVVfQVBJICovCj4+IMKgIMKgICNpZmRlZiBD T05GSUdfSU9NTVVfREVCVUdGUwo+PgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwprdm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0cy5jcy5jb2x1bWJp YS5lZHUKaHR0cHM6Ly9saXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9saXN0aW5mby9rdm1h cm0K