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 2C68DC3ABCB for ; Fri, 9 May 2025 21:31:49 +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=xX5uP4OYt3eBsXmP25rwf642wrnX83n78tkd0peRubs=; b=QcP/PfIKiuq1vq y+4wQe3qT8r7QI6zu5ds/eHK2D1fWFyHZZQ7IKOqpzL0l8Azzc/8oEZX3udNIsyWS3q1XntSzLW52 4vIRJTVcssrKuLyczv6PNEjPM58ljwsoe0C+izqxgJ0nfG5HqNh53RsCr/EqNHMGUZsP+4s7BA7cN 89iWzh98H+ppGzq5C2LiaqV01u6FGD3xcthM41oXfthVscGSp9o5QfiBiFYLH99ZGawl8KIbScT5z Y61DqExsLtOOG4SIrqp3+Y8n9gSWp/iu8erLnWEmURhHjb3QLzDmKk7mp0D9rMKPAJKKXwYEHArhJ rgHywTmFyY4BMQbOBprw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uDVJs-00000004y0V-1jB9; Fri, 09 May 2025 21:31:48 +0000 Received: from out-184.mta0.migadu.com ([2001:41d0:1004:224b::b8]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uDSmw-00000004c0y-2AuB for kvm-riscv@lists.infradead.org; Fri, 09 May 2025 18:49:40 +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_114939_352989_9447FB0E X-CRM114-Status: GOOD ( 26.75 ) X-BeenThere: kvm-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: "kvm-riscv" Errors-To: kvm-riscv-bounces+kvm-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 PgoKLS0gCmt2bS1yaXNjdiBtYWlsaW5nIGxpc3QKa3ZtLXJpc2N2QGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9rdm0tcmlzY3YK From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from out-170.mta0.migadu.com (out-170.mta0.migadu.com [91.218.175.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9FA6423C4FD for ; Fri, 9 May 2025 18:49:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746816580; cv=none; b=r+EywofKbgliUSw1JIZwgXUUzAqlpklZ5Dn6ce/Jjc2wigqsu1p+tyQQZvGMb9ZwPbnDHIVO2UhK1tDEZZng18D6nDkNJ38PgYBZv/b84h5WLXt55m8z3AzyTi+wZAqMgf8EWJT6Ck3pDVVlhAgFmCSgg9PUWO9aJEO/8b1AhL4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746816580; c=relaxed/simple; bh=qffBJkvqeUNO/und6Qh2RkE/6kc4df+T6b36gSTk63Y=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=RClA6ZY11cnJBhzWE+cD0NjeFGQc919mXic9ebtXworEXfyicTfZ35XrOWsAokvkdA5DyQr0369SRwD1jbhp5wxERDcpJkavY3LxRG7+Lip9RZCFiFU/mms3rEEUj0Pen5I0zG6Obiv4+DLQ1w+prmji/+qazJa72gwTPTxTpss= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=uLqyyUS4; arc=none smtp.client-ip=91.218.175.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="uLqyyUS4" 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 Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: 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> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT On 4/24/25 10:32 AM, Clément Léger wrote: > Add basic infrastructure to support the FWFT extension in KVM. > > Signed-off-by: Clément Léger > Reviewed-by: Andrew Jones > --- > arch/riscv/include/asm/kvm_host.h | 4 + > arch/riscv/include/asm/kvm_vcpu_sbi.h | 1 + > arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h | 29 +++ > arch/riscv/include/uapi/asm/kvm.h | 1 + > arch/riscv/kvm/Makefile | 1 + > arch/riscv/kvm/vcpu_sbi.c | 4 + > arch/riscv/kvm/vcpu_sbi_fwft.c | 216 +++++++++++++++++++++ > 7 files changed, 256 insertions(+) > create mode 100644 arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h > create mode 100644 arch/riscv/kvm/vcpu_sbi_fwft.c > > diff --git a/arch/riscv/include/asm/kvm_host.h b/arch/riscv/include/asm/kvm_host.h > index 4fa02e082142..c3f880763b9a 100644 > --- a/arch/riscv/include/asm/kvm_host.h > +++ b/arch/riscv/include/asm/kvm_host.h > @@ -19,6 +19,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -281,6 +282,9 @@ struct kvm_vcpu_arch { > /* Performance monitoring context */ > struct kvm_pmu pmu_context; > > + /* Firmware feature SBI extension context */ > + struct kvm_sbi_fwft fwft_context; > + > /* 'static' configurations which are set only once */ > struct kvm_vcpu_config cfg; > > diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h > index cb68b3a57c8f..ffd03fed0c06 100644 > --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h > +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h > @@ -98,6 +98,7 @@ extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_hsm; > extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_dbcn; > extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_susp; > extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_sta; > +extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_fwft; > extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_experimental; > extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_vendor; > > diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h b/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h > new file mode 100644 > index 000000000000..9ba841355758 > --- /dev/null > +++ b/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h > @@ -0,0 +1,29 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * Copyright (c) 2025 Rivos Inc. > + * > + * Authors: > + * Clément Léger > + */ > + > +#ifndef __KVM_VCPU_RISCV_FWFT_H > +#define __KVM_VCPU_RISCV_FWFT_H > + > +#include > + > +struct kvm_sbi_fwft_feature; > + > +struct kvm_sbi_fwft_config { > + const struct kvm_sbi_fwft_feature *feature; > + bool supported; > + unsigned long flags; > +}; > + > +/* FWFT data structure per vcpu */ > +struct kvm_sbi_fwft { > + struct kvm_sbi_fwft_config *configs; > +}; > + > +#define vcpu_to_fwft(vcpu) (&(vcpu)->arch.fwft_context) > + > +#endif /* !__KVM_VCPU_RISCV_FWFT_H */ > diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/asm/kvm.h > index 5f59fd226cc5..5ba77a3d9f6e 100644 > --- a/arch/riscv/include/uapi/asm/kvm.h > +++ b/arch/riscv/include/uapi/asm/kvm.h > @@ -204,6 +204,7 @@ enum KVM_RISCV_SBI_EXT_ID { > KVM_RISCV_SBI_EXT_DBCN, > KVM_RISCV_SBI_EXT_STA, > KVM_RISCV_SBI_EXT_SUSP, > + KVM_RISCV_SBI_EXT_FWFT, > KVM_RISCV_SBI_EXT_MAX, > }; > > diff --git a/arch/riscv/kvm/Makefile b/arch/riscv/kvm/Makefile > index 4e0bba91d284..06e2d52a9b88 100644 > --- a/arch/riscv/kvm/Makefile > +++ b/arch/riscv/kvm/Makefile > @@ -26,6 +26,7 @@ kvm-y += vcpu_onereg.o > kvm-$(CONFIG_RISCV_PMU_SBI) += vcpu_pmu.o > kvm-y += vcpu_sbi.o > kvm-y += vcpu_sbi_base.o > +kvm-y += vcpu_sbi_fwft.o > kvm-y += vcpu_sbi_hsm.o > kvm-$(CONFIG_RISCV_PMU_SBI) += vcpu_sbi_pmu.o > kvm-y += vcpu_sbi_replace.o > diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c > index 50be079b5528..0748810c0252 100644 > --- a/arch/riscv/kvm/vcpu_sbi.c > +++ b/arch/riscv/kvm/vcpu_sbi.c > @@ -78,6 +78,10 @@ static const struct kvm_riscv_sbi_extension_entry sbi_ext[] = { > .ext_idx = KVM_RISCV_SBI_EXT_STA, > .ext_ptr = &vcpu_sbi_ext_sta, > }, > + { > + .ext_idx = KVM_RISCV_SBI_EXT_FWFT, > + .ext_ptr = &vcpu_sbi_ext_fwft, > + }, > { > .ext_idx = KVM_RISCV_SBI_EXT_EXPERIMENTAL, > .ext_ptr = &vcpu_sbi_ext_experimental, > diff --git a/arch/riscv/kvm/vcpu_sbi_fwft.c b/arch/riscv/kvm/vcpu_sbi_fwft.c > new file mode 100644 > index 000000000000..b0f66c7bf010 > --- /dev/null > +++ b/arch/riscv/kvm/vcpu_sbi_fwft.c > @@ -0,0 +1,216 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright (c) 2025 Rivos Inc. > + * > + * Authors: > + * Clément Léger > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +struct kvm_sbi_fwft_feature { > + /** > + * @id: Feature ID > + */ > + enum sbi_fwft_feature_t id; > + > + /** > + * @supported: Check if the feature is supported on the vcpu > + * > + * This callback is optional, if not provided the feature is assumed to > + * be supported > + */ > + bool (*supported)(struct kvm_vcpu *vcpu); > + > + /** > + * @set: Set the feature value > + * > + * Return SBI_SUCCESS on success or an SBI error (SBI_ERR_*) > + * > + * This callback is mandatory > + */ > + long (*set)(struct kvm_vcpu *vcpu, struct kvm_sbi_fwft_config *conf, unsigned long value); > + > + /** > + * @get: Get the feature current value > + * > + * Return SBI_SUCCESS on success or an SBI error (SBI_ERR_*) > + * > + * This callback is mandatory > + */ > + long (*get)(struct kvm_vcpu *vcpu, struct kvm_sbi_fwft_config *conf, unsigned long *value); > +}; > + > +static const enum sbi_fwft_feature_t kvm_fwft_defined_features[] = { > + SBI_FWFT_MISALIGNED_EXC_DELEG, > + SBI_FWFT_LANDING_PAD, > + SBI_FWFT_SHADOW_STACK, > + SBI_FWFT_DOUBLE_TRAP, > + SBI_FWFT_PTE_AD_HW_UPDATING, > + SBI_FWFT_POINTER_MASKING_PMLEN, > +}; > + > +static bool kvm_fwft_is_defined_feature(enum sbi_fwft_feature_t feature) > +{ > + int i; > + > + for (i = 0; i < ARRAY_SIZE(kvm_fwft_defined_features); i++) { > + if (kvm_fwft_defined_features[i] == feature) > + return true; > + } > + > + return false; > +} > + > +static const struct kvm_sbi_fwft_feature features[] = { > +}; > + > +static struct kvm_sbi_fwft_config * > +kvm_sbi_fwft_get_config(struct kvm_vcpu *vcpu, enum sbi_fwft_feature_t feature) > +{ > + int i; > + struct kvm_sbi_fwft *fwft = vcpu_to_fwft(vcpu); > + > + for (i = 0; i < ARRAY_SIZE(features); i++) { > + if (fwft->configs[i].feature->id == feature) > + return &fwft->configs[i]; > + } > + > + return NULL; > +} > + > +static int kvm_fwft_get_feature(struct kvm_vcpu *vcpu, u32 feature, > + struct kvm_sbi_fwft_config **conf) > +{ > + struct kvm_sbi_fwft_config *tconf; > + > + tconf = kvm_sbi_fwft_get_config(vcpu, feature); > + if (!tconf) { > + if (kvm_fwft_is_defined_feature(feature)) > + return SBI_ERR_NOT_SUPPORTED; > + > + return SBI_ERR_DENIED; > + } > + > + if (!tconf->supported) > + return SBI_ERR_NOT_SUPPORTED; > + > + *conf = tconf; > + > + return SBI_SUCCESS; > +} > + > +static int kvm_sbi_fwft_set(struct kvm_vcpu *vcpu, u32 feature, > + unsigned long value, unsigned long flags) > +{ > + int ret; > + struct kvm_sbi_fwft_config *conf; > + > + ret = kvm_fwft_get_feature(vcpu, feature, &conf); > + if (ret) > + return ret; > + > + if ((flags & ~SBI_FWFT_SET_FLAG_LOCK) != 0) > + return SBI_ERR_INVALID_PARAM; > + > + if (conf->flags & SBI_FWFT_SET_FLAG_LOCK) > + return SBI_ERR_DENIED_LOCKED; > + > + conf->flags = flags; > + > + return conf->feature->set(vcpu, conf, value); > +} > + > +static int kvm_sbi_fwft_get(struct kvm_vcpu *vcpu, unsigned long feature, > + unsigned long *value) > +{ > + int ret; > + struct kvm_sbi_fwft_config *conf; > + > + ret = kvm_fwft_get_feature(vcpu, feature, &conf); > + if (ret) > + return ret; > + > + return conf->feature->get(vcpu, conf, value); > +} > + > +static int kvm_sbi_ext_fwft_handler(struct kvm_vcpu *vcpu, struct kvm_run *run, > + struct kvm_vcpu_sbi_return *retdata) > +{ > + int ret; > + struct kvm_cpu_context *cp = &vcpu->arch.guest_context; > + unsigned long funcid = cp->a6; > + > + switch (funcid) { > + case SBI_EXT_FWFT_SET: > + ret = kvm_sbi_fwft_set(vcpu, cp->a0, cp->a1, cp->a2); > + break; > + case SBI_EXT_FWFT_GET: > + ret = kvm_sbi_fwft_get(vcpu, cp->a0, &retdata->out_val); > + break; > + default: > + ret = SBI_ERR_NOT_SUPPORTED; > + break; > + } > + > + retdata->err_val = ret; > + > + return 0; > +} > + > +static int kvm_sbi_ext_fwft_init(struct kvm_vcpu *vcpu) > +{ > + struct kvm_sbi_fwft *fwft = vcpu_to_fwft(vcpu); > + const struct kvm_sbi_fwft_feature *feature; > + struct kvm_sbi_fwft_config *conf; > + int i; > + > + fwft->configs = kcalloc(ARRAY_SIZE(features), sizeof(struct kvm_sbi_fwft_config), > + GFP_KERNEL); > + if (!fwft->configs) > + return -ENOMEM; > + > + for (i = 0; i < ARRAY_SIZE(features); i++) { > + feature = &features[i]; > + conf = &fwft->configs[i]; > + if (feature->supported) > + conf->supported = feature->supported(vcpu); > + else > + conf->supported = true; > + > + conf->feature = feature; > + } > + > + return 0; > +} > + > +static void kvm_sbi_ext_fwft_deinit(struct kvm_vcpu *vcpu) > +{ > + struct kvm_sbi_fwft *fwft = vcpu_to_fwft(vcpu); > + > + kfree(fwft->configs); > +} > + > +static void kvm_sbi_ext_fwft_reset(struct kvm_vcpu *vcpu) > +{ > + int i; > + struct kvm_sbi_fwft *fwft = vcpu_to_fwft(vcpu); > + > + for (i = 0; i < ARRAY_SIZE(features); i++) > + fwft->configs[i].flags = 0; > +} > + > +const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_fwft = { > + .extid_start = SBI_EXT_FWFT, > + .extid_end = SBI_EXT_FWFT, > + .handler = kvm_sbi_ext_fwft_handler, > + .init = kvm_sbi_ext_fwft_init, > + .deinit = kvm_sbi_ext_fwft_deinit, > + .reset = kvm_sbi_ext_fwft_reset, > +}; LGTM. Reviewed-by: Atish Patra 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=