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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id B634FC3ABCB for ; Fri, 9 May 2025 21:31:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Qtr1eCnkebhsxqr6e1v3hvm3Tco00GYvdLBRW0/2gjk=; b=nG3UNoBSQS/rRm l8DnX24Ss6s8VHNPOwmjYWGNXbKfvKVWuACpjF44IuKoT2nZNSOQjbEfXbSezFXjnmOaGhpa89xUR SSvw8bjYgHOgBq4wEQVqfO/GjLg+5qGVICvHKzyu0RnMoQ1KFL042660CJMxIJM49szezs/ufEJuy kCZKrVP/ePhCf8OKT6DKw1ENIiPKsbthskds9xABX+b1vMDH6X3j40UzlBnQswD/4EO9FM//9OwDA L+ShlR8gNjGMB4z0g3lb9+ekpYXge29bf7N0bxE2G6hMtRZC2Q2j80wSIhAYRixOBD/ygk/oVLU8k ieoMW543B1DO07LGmpkQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uDVJs-00000004y0e-3Bnv; Fri, 09 May 2025 21:31:48 +0000 Received: from out-183.mta0.migadu.com ([2001:41d0:1004:224b::b7]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uDSn4-00000004c2B-2PBF for linux-riscv@lists.infradead.org; Fri, 09 May 2025 18:49:47 +0000 Message-ID: <1f24ee7d-df01-4386-b0c2-f68463519940@linux.dev> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1746816574; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=I+xTVNz/AWuQaww+Av/gvPGG3Ux3gd4hrwHisXmdbVY=; b=uLqyyUS4mIQdPlYV7BSaILMetdyUkWxvIzHUMEOjSkHuGCm8a+Fy92UlKRYZaI5kWt5UQv mx/LC1tQC1sGXBA+pYOVjeP48ZSFr3n6iJpJkJ32cHD0sYy8qI7TmLvtrA6M6VMTydMeev wBorqTZBxwlM+8HVuZqqoSfXhImvhLc= Date: Fri, 9 May 2025 11:49:17 -0700 MIME-Version: 1.0 Subject: Re: [PATCH v6 13/14] RISC-V: KVM: add support for FWFT SBI extension To: =?UTF-8?B?Q2zDqW1lbnQgTMOpZ2Vy?= , Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , Shuah Khan , Jonathan Corbet , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Cc: Samuel Holland , Andrew Jones , Deepak Gupta References: <20250424173204.1948385-1-cleger@rivosinc.com> <20250424173204.1948385-14-cleger@rivosinc.com> Content-Language: en-US X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Atish Patra In-Reply-To: <20250424173204.1948385-14-cleger@rivosinc.com> X-Migadu-Flow: FLOW_OUT X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250509_114946_884726_4741AE8E X-CRM114-Status: GOOD ( 26.75 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gNC8yNC8yNSAxMDozMiBBTSwgQ2zDg8KpbWVudCBMw4PCqWdlciB3cm90ZToKPiBBZGQgYmFz aWMgaW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCB0aGUgRldGVCBleHRlbnNpb24gaW4gS1ZNLgo+ IAo+IFNpZ25lZC1vZmYtYnk6IENsw6ltZW50IEzDqWdlciA8Y2xlZ2VyQHJpdm9zaW5jLmNvbT4K PiBSZXZpZXdlZC1ieTogQW5kcmV3IEpvbmVzIDxham9uZXNAdmVudGFuYW1pY3JvLmNvbT4KPiAt LS0KPiAgIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCAgICAgICAgICB8ICAgNCAr Cj4gICBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV92Y3B1X3NiaS5oICAgICAgfCAgIDEgKwo+ ICAgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmlfZndmdC5oIHwgIDI5ICsrKwo+ ICAgYXJjaC9yaXNjdi9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oICAgICAgICAgIHwgICAxICsKPiAg IGFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMSArCj4gICBh cmNoL3Jpc2N2L2t2bS92Y3B1X3NiaS5jICAgICAgICAgICAgICAgICAgfCAgIDQgKwo+ICAgYXJj aC9yaXNjdi9rdm0vdmNwdV9zYmlfZndmdC5jICAgICAgICAgICAgIHwgMjE2ICsrKysrKysrKysr KysrKysrKysrKwo+ICAgNyBmaWxlcyBjaGFuZ2VkLCAyNTYgaW5zZXJ0aW9ucygrKQo+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpX2Z3ZnQu aAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX2Z3ZnQuYwo+ IAo+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNo L3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPiBpbmRleCA0ZmEwMmUwODIxNDIuLmMzZjg4 MDc2M2I5YSAxMDA2NDQKPiAtLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgK PiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPiBAQCAtMTksNiArMTks NyBAQAo+ICAgI2luY2x1ZGUgPGFzbS9rdm1fdmNwdV9mcC5oPgo+ICAgI2luY2x1ZGUgPGFzbS9r dm1fdmNwdV9pbnNuLmg+Cj4gICAjaW5jbHVkZSA8YXNtL2t2bV92Y3B1X3NiaS5oPgo+ICsjaW5j bHVkZSA8YXNtL2t2bV92Y3B1X3NiaV9md2Z0Lmg+Cj4gICAjaW5jbHVkZSA8YXNtL2t2bV92Y3B1 X3RpbWVyLmg+Cj4gICAjaW5jbHVkZSA8YXNtL2t2bV92Y3B1X3BtdS5oPgo+ICAgCj4gQEAgLTI4 MSw2ICsyODIsOSBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7Cj4gICAJLyogUGVyZm9ybWFuY2Ug bW9uaXRvcmluZyBjb250ZXh0ICovCj4gICAJc3RydWN0IGt2bV9wbXUgcG11X2NvbnRleHQ7Cj4g ICAKPiArCS8qIEZpcm13YXJlIGZlYXR1cmUgU0JJIGV4dGVuc2lvbiBjb250ZXh0ICovCj4gKwlz dHJ1Y3Qga3ZtX3NiaV9md2Z0IGZ3ZnRfY29udGV4dDsKPiArCj4gICAJLyogJ3N0YXRpYycgY29u ZmlndXJhdGlvbnMgd2hpY2ggYXJlIHNldCBvbmx5IG9uY2UgKi8KPiAgIAlzdHJ1Y3Qga3ZtX3Zj cHVfY29uZmlnIGNmZzsKPiAgIAo+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNt L2t2bV92Y3B1X3NiaS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmkuaAo+ IGluZGV4IGNiNjhiM2E1N2M4Zi4uZmZkMDNmZWQwYzA2IDEwMDY0NAo+IC0tLSBhL2FyY2gvcmlz Y3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpLmgKPiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUv YXNtL2t2bV92Y3B1X3NiaS5oCj4gQEAgLTk4LDYgKzk4LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVj dCBrdm1fdmNwdV9zYmlfZXh0ZW5zaW9uIHZjcHVfc2JpX2V4dF9oc207Cj4gICBleHRlcm4gY29u c3Qgc3RydWN0IGt2bV92Y3B1X3NiaV9leHRlbnNpb24gdmNwdV9zYmlfZXh0X2RiY247Cj4gICBl eHRlcm4gY29uc3Qgc3RydWN0IGt2bV92Y3B1X3NiaV9leHRlbnNpb24gdmNwdV9zYmlfZXh0X3N1 c3A7Cj4gICBleHRlcm4gY29uc3Qgc3RydWN0IGt2bV92Y3B1X3NiaV9leHRlbnNpb24gdmNwdV9z YmlfZXh0X3N0YTsKPiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9zYmlfZXh0ZW5zaW9u IHZjcHVfc2JpX2V4dF9md2Z0Owo+ICAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9zYmlf ZXh0ZW5zaW9uIHZjcHVfc2JpX2V4dF9leHBlcmltZW50YWw7Cj4gICBleHRlcm4gY29uc3Qgc3Ry dWN0IGt2bV92Y3B1X3NiaV9leHRlbnNpb24gdmNwdV9zYmlfZXh0X3ZlbmRvcjsKPiAgIAo+IGRp ZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV92Y3B1X3NiaV9md2Z0LmggYi9h cmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV92Y3B1X3NiaV9md2Z0LmgKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOWJhODQxMzU1NzU4Cj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpX2Z3ZnQuaAo+IEBA IC0wLDAgKzEsMjkgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25s eSAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUgUml2b3MgSW5jLgo+ICsgKgo+ICsg KiBBdXRob3JzOgo+ICsgKiAgICAgQ2zDqW1lbnQgTMOpZ2VyIDxjbGVnZXJAcml2b3NpbmMuY29t Pgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19LVk1fVkNQVV9SSVNDVl9GV0ZUX0gKPiArI2RlZmlu ZSBfX0tWTV9WQ1BVX1JJU0NWX0ZXRlRfSAo+ICsKPiArI2luY2x1ZGUgPGFzbS9zYmkuaD4KPiAr Cj4gK3N0cnVjdCBrdm1fc2JpX2Z3ZnRfZmVhdHVyZTsKPiArCj4gK3N0cnVjdCBrdm1fc2JpX2Z3 ZnRfY29uZmlnIHsKPiArCWNvbnN0IHN0cnVjdCBrdm1fc2JpX2Z3ZnRfZmVhdHVyZSAqZmVhdHVy ZTsKPiArCWJvb2wgc3VwcG9ydGVkOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArfTsKPiAr Cj4gKy8qIEZXRlQgZGF0YSBzdHJ1Y3R1cmUgcGVyIHZjcHUgKi8KPiArc3RydWN0IGt2bV9zYmlf ZndmdCB7Cj4gKwlzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyAqY29uZmlnczsKPiArfTsKPiAr Cj4gKyNkZWZpbmUgdmNwdV90b19md2Z0KHZjcHUpICgmKHZjcHUpLT5hcmNoLmZ3ZnRfY29udGV4 dCkKPiArCj4gKyNlbmRpZiAvKiAhX19LVk1fVkNQVV9SSVNDVl9GV0ZUX0ggKi8KPiBkaWZmIC0t Z2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC9yaXNjdi9pbmNs dWRlL3VhcGkvYXNtL2t2bS5oCj4gaW5kZXggNWY1OWZkMjI2Y2M1Li41YmE3N2EzZDlmNmUgMTAw NjQ0Cj4gLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCj4gKysrIGIvYXJj aC9yaXNjdi9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCj4gQEAgLTIwNCw2ICsyMDQsNyBAQCBlbnVt IEtWTV9SSVNDVl9TQklfRVhUX0lEIHsKPiAgIAlLVk1fUklTQ1ZfU0JJX0VYVF9EQkNOLAo+ICAg CUtWTV9SSVNDVl9TQklfRVhUX1NUQSwKPiAgIAlLVk1fUklTQ1ZfU0JJX0VYVF9TVVNQLAo+ICsJ S1ZNX1JJU0NWX1NCSV9FWFRfRldGVCwKPiAgIAlLVk1fUklTQ1ZfU0JJX0VYVF9NQVgsCj4gICB9 Owo+ICAgCj4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL01ha2VmaWxlIGIvYXJjaC9yaXNj di9rdm0vTWFrZWZpbGUKPiBpbmRleCA0ZTBiYmE5MWQyODQuLjA2ZTJkNTJhOWI4OCAxMDA2NDQK PiAtLS0gYS9hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZQo+ICsrKyBiL2FyY2gvcmlzY3Yva3ZtL01h a2VmaWxlCj4gQEAgLTI2LDYgKzI2LDcgQEAga3ZtLXkgKz0gdmNwdV9vbmVyZWcubwo+ICAga3Zt LSQoQ09ORklHX1JJU0NWX1BNVV9TQkkpICs9IHZjcHVfcG11Lm8KPiAgIGt2bS15ICs9IHZjcHVf c2JpLm8KPiAgIGt2bS15ICs9IHZjcHVfc2JpX2Jhc2Uubwo+ICtrdm0teSArPSB2Y3B1X3NiaV9m d2Z0Lm8KPiAgIGt2bS15ICs9IHZjcHVfc2JpX2hzbS5vCj4gICBrdm0tJChDT05GSUdfUklTQ1Zf UE1VX1NCSSkgKz0gdmNwdV9zYmlfcG11Lm8KPiAgIGt2bS15ICs9IHZjcHVfc2JpX3JlcGxhY2Uu bwo+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaS5jIGIvYXJjaC9yaXNjdi9r dm0vdmNwdV9zYmkuYwo+IGluZGV4IDUwYmUwNzliNTUyOC4uMDc0ODgxMGMwMjUyIDEwMDY0NAo+ IC0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpLmMKPiArKysgYi9hcmNoL3Jpc2N2L2t2bS92 Y3B1X3NiaS5jCj4gQEAgLTc4LDYgKzc4LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3Jp c2N2X3NiaV9leHRlbnNpb25fZW50cnkgc2JpX2V4dFtdID0gewo+ICAgCQkuZXh0X2lkeCA9IEtW TV9SSVNDVl9TQklfRVhUX1NUQSwKPiAgIAkJLmV4dF9wdHIgPSAmdmNwdV9zYmlfZXh0X3N0YSwK PiAgIAl9LAo+ICsJewo+ICsJCS5leHRfaWR4ID0gS1ZNX1JJU0NWX1NCSV9FWFRfRldGVCwKPiAr CQkuZXh0X3B0ciA9ICZ2Y3B1X3NiaV9leHRfZndmdCwKPiArCX0sCj4gICAJewo+ICAgCQkuZXh0 X2lkeCA9IEtWTV9SSVNDVl9TQklfRVhUX0VYUEVSSU1FTlRBTCwKPiAgIAkJLmV4dF9wdHIgPSAm dmNwdV9zYmlfZXh0X2V4cGVyaW1lbnRhbCwKPiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0v dmNwdV9zYmlfZndmdC5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfZndmdC5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmIwZjY2YzdiZjAxMAo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9md2Z0LmMKPiBAQCAtMCww ICsxLDIxNiBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUgUml2b3MgSW5jLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ ICsgKiAgICAgQ2zDqW1lbnQgTMOpZ2VyIDxjbGVnZXJAcml2b3NpbmMuY29tPgo+ICsgKi8KPiAr Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgo+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgo+ICsjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUu aD4KPiArI2luY2x1ZGUgPGFzbS9zYmkuaD4KPiArI2luY2x1ZGUgPGFzbS9rdm1fdmNwdV9zYmku aD4KPiArI2luY2x1ZGUgPGFzbS9rdm1fdmNwdV9zYmlfZndmdC5oPgo+ICsKPiArc3RydWN0IGt2 bV9zYmlfZndmdF9mZWF0dXJlIHsKPiArCS8qKgo+ICsJICogQGlkOiBGZWF0dXJlIElECj4gKwkg Ki8KPiArCWVudW0gc2JpX2Z3ZnRfZmVhdHVyZV90IGlkOwo+ICsKPiArCS8qKgo+ICsJICogQHN1 cHBvcnRlZDogQ2hlY2sgaWYgdGhlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIG9uIHRoZSB2Y3B1Cj4g KwkgKgo+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCwgaWYgbm90IHByb3ZpZGVkIHRo ZSBmZWF0dXJlIGlzIGFzc3VtZWQgdG8KPiArCSAqIGJlIHN1cHBvcnRlZAo+ICsJICovCj4gKwli b29sICgqc3VwcG9ydGVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwo+ICsKPiArCS8qKgo+ICsJ ICogQHNldDogU2V0IHRoZSBmZWF0dXJlIHZhbHVlCj4gKwkgKgo+ICsJICogUmV0dXJuIFNCSV9T VUNDRVNTIG9uIHN1Y2Nlc3Mgb3IgYW4gU0JJIGVycm9yIChTQklfRVJSXyopCj4gKwkgKgo+ICsJ ICogVGhpcyBjYWxsYmFjayBpcyBtYW5kYXRvcnkKPiArCSAqLwo+ICsJbG9uZyAoKnNldCkoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyAqY29uZiwgdW5z aWduZWQgbG9uZyB2YWx1ZSk7Cj4gKwo+ICsJLyoqCj4gKwkgKiBAZ2V0OiBHZXQgdGhlIGZlYXR1 cmUgY3VycmVudCB2YWx1ZQo+ICsJICoKPiArCSAqIFJldHVybiBTQklfU1VDQ0VTUyBvbiBzdWNj ZXNzIG9yIGFuIFNCSSBlcnJvciAoU0JJX0VSUl8qKQo+ICsJICoKPiArCSAqIFRoaXMgY2FsbGJh Y2sgaXMgbWFuZGF0b3J5Cj4gKwkgKi8KPiArCWxvbmcgKCpnZXQpKHN0cnVjdCBrdm1fdmNwdSAq dmNwdSwgc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKmNvbmYsIHVuc2lnbmVkIGxvbmcgKnZh bHVlKTsKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBlbnVtIHNiaV9md2Z0X2ZlYXR1cmVfdCBr dm1fZndmdF9kZWZpbmVkX2ZlYXR1cmVzW10gPSB7Cj4gKwlTQklfRldGVF9NSVNBTElHTkVEX0VY Q19ERUxFRywKPiArCVNCSV9GV0ZUX0xBTkRJTkdfUEFELAo+ICsJU0JJX0ZXRlRfU0hBRE9XX1NU QUNLLAo+ICsJU0JJX0ZXRlRfRE9VQkxFX1RSQVAsCj4gKwlTQklfRldGVF9QVEVfQURfSFdfVVBE QVRJTkcsCj4gKwlTQklfRldGVF9QT0lOVEVSX01BU0tJTkdfUE1MRU4sCj4gK307Cj4gKwo+ICtz dGF0aWMgYm9vbCBrdm1fZndmdF9pc19kZWZpbmVkX2ZlYXR1cmUoZW51bSBzYmlfZndmdF9mZWF0 dXJlX3QgZmVhdHVyZSkKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoa3ZtX2Z3ZnRfZGVmaW5lZF9mZWF0dXJlcyk7IGkrKykgewo+ICsJCWlmIChrdm1f ZndmdF9kZWZpbmVkX2ZlYXR1cmVzW2ldID09IGZlYXR1cmUpCj4gKwkJCXJldHVybiB0cnVlOwo+ ICsJfQo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBrdm1fc2JpX2Z3ZnRfZmVhdHVyZSBmZWF0dXJlc1tdID0gewo+ICt9Owo+ICsKPiArc3RhdGlj IHN0cnVjdCBrdm1fc2JpX2Z3ZnRfY29uZmlnICoKPiAra3ZtX3NiaV9md2Z0X2dldF9jb25maWco c3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHNiaV9md2Z0X2ZlYXR1cmVfdCBmZWF0dXJlKQo+ ICt7Cj4gKwlpbnQgaTsKPiArCXN0cnVjdCBrdm1fc2JpX2Z3ZnQgKmZ3ZnQgPSB2Y3B1X3RvX2Z3 ZnQodmNwdSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmVhdHVyZXMpOyBp KyspIHsKPiArCQlpZiAoZndmdC0+Y29uZmlnc1tpXS5mZWF0dXJlLT5pZCA9PSBmZWF0dXJlKQo+ ICsJCQlyZXR1cm4gJmZ3ZnQtPmNvbmZpZ3NbaV07Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIE5VTEw7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQga3ZtX2Z3ZnRfZ2V0X2ZlYXR1cmUoc3RydWN0IGt2bV92 Y3B1ICp2Y3B1LCB1MzIgZmVhdHVyZSwKPiArCQkJCXN0cnVjdCBrdm1fc2JpX2Z3ZnRfY29uZmln ICoqY29uZikKPiArewo+ICsJc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKnRjb25mOwo+ICsK PiArCXRjb25mID0ga3ZtX3NiaV9md2Z0X2dldF9jb25maWcodmNwdSwgZmVhdHVyZSk7Cj4gKwlp ZiAoIXRjb25mKSB7Cj4gKwkJaWYgKGt2bV9md2Z0X2lzX2RlZmluZWRfZmVhdHVyZShmZWF0dXJl KSkKPiArCQkJcmV0dXJuIFNCSV9FUlJfTk9UX1NVUFBPUlRFRDsKPiArCj4gKwkJcmV0dXJuIFNC SV9FUlJfREVOSUVEOwo+ICsJfQo+ICsKPiArCWlmICghdGNvbmYtPnN1cHBvcnRlZCkKPiArCQly ZXR1cm4gU0JJX0VSUl9OT1RfU1VQUE9SVEVEOwo+ICsKPiArCSpjb25mID0gdGNvbmY7Cj4gKwo+ ICsJcmV0dXJuIFNCSV9TVUNDRVNTOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGt2bV9zYmlfZndm dF9zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZmVhdHVyZSwKPiArCQkJICAgIHVuc2ln bmVkIGxvbmcgdmFsdWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4gK3sKPiArCWludCByZXQ7Cj4g KwlzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyAqY29uZjsKPiArCj4gKwlyZXQgPSBrdm1fZndm dF9nZXRfZmVhdHVyZSh2Y3B1LCBmZWF0dXJlLCAmY29uZik7Cj4gKwlpZiAocmV0KQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJaWYgKChmbGFncyAmIH5TQklfRldGVF9TRVRfRkxBR19MT0NLKSAh PSAwKQo+ICsJCXJldHVybiBTQklfRVJSX0lOVkFMSURfUEFSQU07Cj4gKwo+ICsJaWYgKGNvbmYt PmZsYWdzICYgU0JJX0ZXRlRfU0VUX0ZMQUdfTE9DSykKPiArCQlyZXR1cm4gU0JJX0VSUl9ERU5J RURfTE9DS0VEOwo+ICsKPiArCWNvbmYtPmZsYWdzID0gZmxhZ3M7Cj4gKwo+ICsJcmV0dXJuIGNv bmYtPmZlYXR1cmUtPnNldCh2Y3B1LCBjb25mLCB2YWx1ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQga3ZtX3NiaV9md2Z0X2dldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcg ZmVhdHVyZSwKPiArCQkJICAgIHVuc2lnbmVkIGxvbmcgKnZhbHVlKQo+ICt7Cj4gKwlpbnQgcmV0 Owo+ICsJc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKmNvbmY7Cj4gKwo+ICsJcmV0ID0ga3Zt X2Z3ZnRfZ2V0X2ZlYXR1cmUodmNwdSwgZmVhdHVyZSwgJmNvbmYpOwo+ICsJaWYgKHJldCkKPiAr CQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldHVybiBjb25mLT5mZWF0dXJlLT5nZXQodmNwdSwgY29u ZiwgdmFsdWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGt2bV9zYmlfZXh0X2Z3ZnRfaGFuZGxl cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sCj4gKwkJCQkgICAg c3RydWN0IGt2bV92Y3B1X3NiaV9yZXR1cm4gKnJldGRhdGEpCj4gK3sKPiArCWludCByZXQ7Cj4g KwlzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjcCA9ICZ2Y3B1LT5hcmNoLmd1ZXN0X2NvbnRleHQ7 Cj4gKwl1bnNpZ25lZCBsb25nIGZ1bmNpZCA9IGNwLT5hNjsKPiArCj4gKwlzd2l0Y2ggKGZ1bmNp ZCkgewo+ICsJY2FzZSBTQklfRVhUX0ZXRlRfU0VUOgo+ICsJCXJldCA9IGt2bV9zYmlfZndmdF9z ZXQodmNwdSwgY3AtPmEwLCBjcC0+YTEsIGNwLT5hMik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFNC SV9FWFRfRldGVF9HRVQ6Cj4gKwkJcmV0ID0ga3ZtX3NiaV9md2Z0X2dldCh2Y3B1LCBjcC0+YTAs ICZyZXRkYXRhLT5vdXRfdmFsKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0ID0g U0JJX0VSUl9OT1RfU1VQUE9SVEVEOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXJldGRhdGEt PmVycl92YWwgPSByZXQ7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg a3ZtX3NiaV9leHRfZndmdF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPiArewo+ICsJc3Ry dWN0IGt2bV9zYmlfZndmdCAqZndmdCA9IHZjcHVfdG9fZndmdCh2Y3B1KTsKPiArCWNvbnN0IHN0 cnVjdCBrdm1fc2JpX2Z3ZnRfZmVhdHVyZSAqZmVhdHVyZTsKPiArCXN0cnVjdCBrdm1fc2JpX2Z3 ZnRfY29uZmlnICpjb25mOwo+ICsJaW50IGk7Cj4gKwo+ICsJZndmdC0+Y29uZmlncyA9IGtjYWxs b2MoQVJSQVlfU0laRShmZWF0dXJlcyksIHNpemVvZihzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZp ZyksCj4gKwkJCQlHRlBfS0VSTkVMKTsKPiArCWlmICghZndmdC0+Y29uZmlncykKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmZWF0dXJlcyk7 IGkrKykgewo+ICsJCWZlYXR1cmUgPSAmZmVhdHVyZXNbaV07Cj4gKwkJY29uZiA9ICZmd2Z0LT5j b25maWdzW2ldOwo+ICsJCWlmIChmZWF0dXJlLT5zdXBwb3J0ZWQpCj4gKwkJCWNvbmYtPnN1cHBv cnRlZCA9IGZlYXR1cmUtPnN1cHBvcnRlZCh2Y3B1KTsKPiArCQllbHNlCj4gKwkJCWNvbmYtPnN1 cHBvcnRlZCA9IHRydWU7Cj4gKwo+ICsJCWNvbmYtPmZlYXR1cmUgPSBmZWF0dXJlOwo+ICsJfQo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBrdm1fc2JpX2V4dF9md2Z0 X2RlaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gK3sKPiArCXN0cnVjdCBrdm1fc2JpX2Z3 ZnQgKmZ3ZnQgPSB2Y3B1X3RvX2Z3ZnQodmNwdSk7Cj4gKwo+ICsJa2ZyZWUoZndmdC0+Y29uZmln cyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGt2bV9zYmlfZXh0X2Z3ZnRfcmVzZXQoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1KQo+ICt7Cj4gKwlpbnQgaTsKPiArCXN0cnVjdCBrdm1fc2JpX2Z3ZnQg KmZ3ZnQgPSB2Y3B1X3RvX2Z3ZnQodmNwdSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoZmVhdHVyZXMpOyBpKyspCj4gKwkJZndmdC0+Y29uZmlnc1tpXS5mbGFncyA9IDA7Cj4g K30KPiArCj4gK2NvbnN0IHN0cnVjdCBrdm1fdmNwdV9zYmlfZXh0ZW5zaW9uIHZjcHVfc2JpX2V4 dF9md2Z0ID0gewo+ICsJLmV4dGlkX3N0YXJ0ID0gU0JJX0VYVF9GV0ZULAo+ICsJLmV4dGlkX2Vu ZCA9IFNCSV9FWFRfRldGVCwKPiArCS5oYW5kbGVyID0ga3ZtX3NiaV9leHRfZndmdF9oYW5kbGVy LAo+ICsJLmluaXQgPSBrdm1fc2JpX2V4dF9md2Z0X2luaXQsCj4gKwkuZGVpbml0ID0ga3ZtX3Ni aV9leHRfZndmdF9kZWluaXQsCj4gKwkucmVzZXQgPSBrdm1fc2JpX2V4dF9md2Z0X3Jlc2V0LAo+ ICt9OwoKTEdUTS4KUmV2aWV3ZWQtYnk6IEF0aXNoIFBhdHJhIDxhdGlzaHBAcml2b3NpbmMuY29t PgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt cmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo=