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 CC2CAC282DE for ; Mon, 10 Mar 2025 17:50:33 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=CA3UaE8liiguy2bsPfu/W8KiQfNMFpGZczGy04jk0bg=; b=zdV4rR7MDeGPN8 S95H1afv3psiRaa2hNL7IZ+T8Go0L3BlaFXixIcErYOa44efV5JwxjX0o1ia3Bi3xW2lOKVyfnuYs HCk8tgZQIJ+15I4EY3epEZb2dUNsAVmU2G2DMbpEYASveEvC8MrfVWyP0NQgxRAez0yPCO15kv4wu BAYmSoytTLdz08+F7M/ZemrAP8mePv9+kyuNEcmYPWGSunv8exL7LtyHhYXPjfxp2LRZU1wpCT1Lu 9YTL3tG6JjH2FSgviepG/R1ORc4wYjv1rLIuTcMvQOp+ZaY/WMM37zobhVtJhwlbOVaT/4ZJedP4n cutoh13WIFpsPTDM3eNg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trhGr-00000003Wu5-0tjQ; Mon, 10 Mar 2025 17:50:33 +0000 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1treqM-000000038Fs-2RXd for kvm-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:15:03 +0000 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-224019ad9edso99893925ad.1 for ; Mon, 10 Mar 2025 08:15:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619702; x=1742224502; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hOd2k9Vwz3oIUDtJN/qvQUzpTwasFoa+EjUHjoptxP4=; b=h8kw7FkzZeBXwZvf3Kehi2ovzoqmmXbvpuSx6kivI1wlmSZI+eFrwAm8q9Whf/MZro 9TokuvGwlWJSQOac80RDtNn3M3/3PY57qYQEE8h8RtcaJL/gndxAYPXcmw0OAmM07qxL R7ZtZX4YBFFJMbSLzxXLh/JZmbgOUfR/urXTNnVq/Z8lEESZEVH+axUnCYj5gIhSK3j4 4Kidq8tgr500WvQtP3fSbwplHVddFeYN4mphUWVmeHRx2ek/ICHs6qCDKrPQheHpIuDv LL7m7iPVCuKTeKn6+7DkHQCOK6p+8cESohh/ROZ0DhEDpMemN+Kz0Go61SljD2ItaVTP m8PQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619702; x=1742224502; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hOd2k9Vwz3oIUDtJN/qvQUzpTwasFoa+EjUHjoptxP4=; b=nIj8rAy7h4Obmgk8q9YcrYGBleTfuKPW0JxhLtDesFMVgpX+fbcvxqe56YBw1U3/Ja +HAbo4c1STXghqyeJ/IfWzo3NYfob+wlp38vh8FIxVwvqqUGBfq3lES6rBHiecs/EpzO 30y7/mk9S0BZf+VdjPHMeqMOPDRzt99s7y+tW2zV988U4gxvD3Gkebf+pkwik3jPKxuZ Q+7DpJ5Y75zu1VbOD7jYAQkhjtU5zaHnfxuSSvJkSZxyDenx9k6sHqurzOp94dCgfg57 i02nCk9HrKpLjZ7ZSb1T6bEaCEQdmZ1vDqRf+iwitPUMzdLlsuGN6sFMn8zRL5k1PvtU BjLQ== X-Forwarded-Encrypted: i=1; AJvYcCUppoeKGXz4pXYuYlG6rtCvNVhy98kF7roRqIkGlBKxILRJCMBvqwHoYxf/PFqFvS/bAuMB5rQatvE=@lists.infradead.org X-Gm-Message-State: AOJu0Yw+GBMV78o2rKtzbByx9xvBz5j1v8TNs3eNnsITa0HZ/hiNi6wL MG1DAfWvTeSIT6UxzNWcJXttKWOn35eNlYUqufNDktXMJYfhKGHD+sOY+BgqhxKx06G+MOzPeXp XWzg= X-Gm-Gg: ASbGnctdNEMnAVAkO1t8J13F5jDiQbJIsZF38g2pmrz6M/IlVD7dxsPAS0KBX5okrYA /gN6iobfhN4EnrLoru1S+CPhExKLPH5nD02N4Gz3mCm09BNCPgzq4tjElFi9t4FzmVha7F0RuCd s5OlFUSwukNqNbLdyhuqOYJpKJtcnZVsx1uqdtV4BcW/F4cHj3CPr/oe2IIa+z2BpC1H4NGFbbf wN/5EhWG2Luqba+8JwRVVl1BKhlkJUHQNmGFY7Ynh/lNVnOdhVs9gd9EuxBLkFIEUtaAaF3D+Nd NiSvJyqZrCoiN+lBDufIMmegZTt8kSFZW5BwecG/J9MG9Q== X-Google-Smtp-Source: AGHT+IHzT9d4a2eYINgey0kceBibGso0f5earoCP/lcsD5F2ll8sbD9jFU+xJVsySTd/60DzZCpM3Q== X-Received: by 2002:a17:903:40cb:b0:215:9642:4d7a with SMTP id d9443c01a7336-22428407b19mr226412835ad.0.1741619701896; Mon, 10 Mar 2025 08:15:01 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.14.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:15:01 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: 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: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland Subject: [PATCH v3 16/17] RISC-V: KVM: add support for FWFT SBI extension Date: Mon, 10 Mar 2025 16:12:23 +0100 Message-ID: <20250310151229.2365992-17-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081502_621928_024B31A5 X-CRM114-Status: GOOD ( 25.97 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "kvm-riscv" Errors-To: kvm-riscv-bounces+kvm-riscv=archiver.kernel.org@lists.infradead.org QWRkIGJhc2ljIGluZnJhc3RydWN0dXJlIHRvIHN1cHBvcnQgdGhlIEZXRlQgZXh0ZW5zaW9uIGlu IEtWTS4KClNpZ25lZC1vZmYtYnk6IENsw6ltZW50IEzDqWdlciA8Y2xlZ2VyQHJpdm9zaW5jLmNv bT4KLS0tCiBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggICAgICAgICAgfCAgIDQg KwogYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmkuaCAgICAgIHwgICAxICsKIGFy Y2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpX2Z3ZnQuaCB8ICAzMSArKysKIGFyY2gv cmlzY3YvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCAgICAgICAgICB8ICAgMSArCiBhcmNoL3Jpc2N2 L2t2bS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogYXJjaC9yaXNjdi9rdm0v dmNwdV9zYmkuYyAgICAgICAgICAgICAgICAgIHwgICA0ICsKIGFyY2gvcmlzY3Yva3ZtL3ZjcHVf c2JpX2Z3ZnQuYyAgICAgICAgICAgICB8IDIxMiArKysrKysrKysrKysrKysrKysrKysKIDcgZmls ZXMgY2hhbmdlZCwgMjU0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3Jp c2N2L2luY2x1ZGUvYXNtL2t2bV92Y3B1X3NiaV9md2Z0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBh cmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9md2Z0LmMKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2lu Y2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgK aW5kZXggYmI5M2QyOTk1ZWEyLi5jMGRiNjFiYTY5MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yv aW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9o b3N0LmgKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20va3ZtX3ZjcHVfZnAuaD4KICNp bmNsdWRlIDxhc20va3ZtX3ZjcHVfaW5zbi5oPgogI2luY2x1ZGUgPGFzbS9rdm1fdmNwdV9zYmku aD4KKyNpbmNsdWRlIDxhc20va3ZtX3ZjcHVfc2JpX2Z3ZnQuaD4KICNpbmNsdWRlIDxhc20va3Zt X3ZjcHVfdGltZXIuaD4KICNpbmNsdWRlIDxhc20va3ZtX3ZjcHVfcG11Lmg+CiAKQEAgLTI4MSw2 ICsyODIsOSBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJLyogUGVyZm9ybWFuY2UgbW9uaXRv cmluZyBjb250ZXh0ICovCiAJc3RydWN0IGt2bV9wbXUgcG11X2NvbnRleHQ7CiAKKwkvKiBGaXJt d2FyZSBmZWF0dXJlIFNCSSBleHRlbnNpb24gY29udGV4dCAqLworCXN0cnVjdCBrdm1fc2JpX2Z3 ZnQgZndmdF9jb250ZXh0OworCiAJLyogJ3N0YXRpYycgY29uZmlndXJhdGlvbnMgd2hpY2ggYXJl IHNldCBvbmx5IG9uY2UgKi8KIAlzdHJ1Y3Qga3ZtX3ZjcHVfY29uZmlnIGNmZzsKIApkaWZmIC0t Z2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmkuaCBiL2FyY2gvcmlzY3Yv aW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpLmgKaW5kZXggY2I2OGIzYTU3YzhmLi5mZmQwM2ZlZDBj MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpLmgKKysr IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmkuaApAQCAtOTgsNiArOTgsNyBA QCBleHRlcm4gY29uc3Qgc3RydWN0IGt2bV92Y3B1X3NiaV9leHRlbnNpb24gdmNwdV9zYmlfZXh0 X2hzbTsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX2V4dGVuc2lvbiB2Y3B1X3Ni aV9leHRfZGJjbjsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX2V4dGVuc2lvbiB2 Y3B1X3NiaV9leHRfc3VzcDsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX2V4dGVu c2lvbiB2Y3B1X3NiaV9leHRfc3RhOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9zYmlf ZXh0ZW5zaW9uIHZjcHVfc2JpX2V4dF9md2Z0OwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBrdm1fdmNw dV9zYmlfZXh0ZW5zaW9uIHZjcHVfc2JpX2V4dF9leHBlcmltZW50YWw7CiBleHRlcm4gY29uc3Qg c3RydWN0IGt2bV92Y3B1X3NiaV9leHRlbnNpb24gdmNwdV9zYmlfZXh0X3ZlbmRvcjsKIApkaWZm IC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmlfZndmdC5oIGIvYXJj aC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmlfZndmdC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZWM3NTY4ZTBkYzFhCi0tLSAvZGV2L251bGwKKysrIGIv YXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmlfZndmdC5oCkBAIC0wLDAgKzEsMzEg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBD b3B5cmlnaHQgKGMpIDIwMjUgUml2b3MgSW5jLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICAgQ2zD qW1lbnQgTMOpZ2VyIDxjbGVnZXJAcml2b3NpbmMuY29tPgorICovCisKKyNpZm5kZWYgX19LVk1f VkNQVV9SSVNDVl9GV0ZUX0gKKyNkZWZpbmUgX19LVk1fVkNQVV9SSVNDVl9GV0ZUX0gKKworI2lu Y2x1ZGUgPGFzbS9zYmkuaD4KKworc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWc7CitzdHJ1Y3Qg a3ZtX3NiaV9md2Z0X2ZlYXR1cmU7CitzdHJ1Y3Qga3ZtX3ZjcHU7CisKK3N0cnVjdCBrdm1fc2Jp X2Z3ZnRfY29uZmlnIHsKKwljb25zdCBzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2ZlYXR1cmUgKmZlYXR1 cmU7CisJYm9vbCBzdXBwb3J0ZWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKK307CisKKy8qIEZX RlQgZGF0YSBzdHJ1Y3R1cmUgcGVyIHZjcHUgKi8KK3N0cnVjdCBrdm1fc2JpX2Z3ZnQgeworCXN0 cnVjdCBrdm1fc2JpX2Z3ZnRfY29uZmlnICpjb25maWdzOworfTsKKworI2RlZmluZSB2Y3B1X3Rv X2Z3ZnQodmNwdSkgKCYodmNwdSktPmFyY2guZndmdF9jb250ZXh0KQorCisjZW5kaWYgLyogIV9f S1ZNX1ZDUFVfUklTQ1ZfRldGVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUv dWFwaS9hc20va3ZtLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKaW5kZXgg ZjA2YmM1ZWZjZDc5Li5mYTZlZWUxY2FmNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVk ZS91YXBpL2FzbS9rdm0uaAorKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgK QEAgLTIwMiw2ICsyMDIsNyBAQCBlbnVtIEtWTV9SSVNDVl9TQklfRVhUX0lEIHsKIAlLVk1fUklT Q1ZfU0JJX0VYVF9EQkNOLAogCUtWTV9SSVNDVl9TQklfRVhUX1NUQSwKIAlLVk1fUklTQ1ZfU0JJ X0VYVF9TVVNQLAorCUtWTV9SSVNDVl9TQklfRVhUX0ZXRlQsCiAJS1ZNX1JJU0NWX1NCSV9FWFRf TUFYLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGUgYi9hcmNoL3Jp c2N2L2t2bS9NYWtlZmlsZQppbmRleCA0ZTBiYmE5MWQyODQuLjA2ZTJkNTJhOWI4OCAxMDA2NDQK LS0tIGEvYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC9yaXNjdi9rdm0vTWFrZWZp bGUKQEAgLTI2LDYgKzI2LDcgQEAga3ZtLXkgKz0gdmNwdV9vbmVyZWcubwoga3ZtLSQoQ09ORklH X1JJU0NWX1BNVV9TQkkpICs9IHZjcHVfcG11Lm8KIGt2bS15ICs9IHZjcHVfc2JpLm8KIGt2bS15 ICs9IHZjcHVfc2JpX2Jhc2Uubwora3ZtLXkgKz0gdmNwdV9zYmlfZndmdC5vCiBrdm0teSArPSB2 Y3B1X3NiaV9oc20ubwoga3ZtLSQoQ09ORklHX1JJU0NWX1BNVV9TQkkpICs9IHZjcHVfc2JpX3Bt dS5vCiBrdm0teSArPSB2Y3B1X3NiaV9yZXBsYWNlLm8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yv a3ZtL3ZjcHVfc2JpLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaS5jCmluZGV4IDE4NzI2MDk2 ZWY0NC4uMjdmMjJlOThjOGY4IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaS5j CisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpLmMKQEAgLTc4LDYgKzc4LDEwIEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3Qga3ZtX3Jpc2N2X3NiaV9leHRlbnNpb25fZW50cnkgc2JpX2V4dFtdID0g ewogCQkuZXh0X2lkeCA9IEtWTV9SSVNDVl9TQklfRVhUX1NUQSwKIAkJLmV4dF9wdHIgPSAmdmNw dV9zYmlfZXh0X3N0YSwKIAl9LAorCXsKKwkJLmV4dF9pZHggPSBLVk1fUklTQ1ZfU0JJX0VYVF9G V0ZULAorCQkuZXh0X3B0ciA9ICZ2Y3B1X3NiaV9leHRfZndmdCwKKwl9LAogCXsKIAkJLmV4dF9p ZHggPSBLVk1fUklTQ1ZfU0JJX0VYVF9FWFBFUklNRU5UQUwsCiAJCS5leHRfcHRyID0gJnZjcHVf c2JpX2V4dF9leHBlcmltZW50YWwsCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3Ni aV9md2Z0LmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9md2Z0LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jY2UxZTQxZDU0OTAKLS0tIC9kZXYvbnVsbAorKysg Yi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9md2Z0LmMKQEAgLTAsMCArMSwyMTIgQEAKKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChjKSAyMDI1 IFJpdm9zIEluYy4KKyAqCisgKiBBdXRob3JzOgorICogICAgIENsw6ltZW50IEzDqWdlciA8Y2xl Z2VyQHJpdm9zaW5jLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNs dWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUg PGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL3NiaS5oPgorI2luY2x1ZGUgPGFzbS9r dm1fdmNwdV9zYmkuaD4KKyNpbmNsdWRlIDxhc20va3ZtX3ZjcHVfc2JpX2Z3ZnQuaD4KKworc3Ry dWN0IGt2bV9zYmlfZndmdF9mZWF0dXJlIHsKKwkvKioKKwkgKiBAaWQ6IEZlYXR1cmUgSUQKKwkg Ki8KKwllbnVtIHNiaV9md2Z0X2ZlYXR1cmVfdCBpZDsKKworCS8qKgorCSAqIEBzdXBwb3J0ZWQ6 IENoZWNrIGlmIHRoZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBvbiB0aGUgdmNwdQorCSAqCisJICog VGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCwgaWYgbm90IHByb3ZpZGVkIHRoZSBmZWF0dXJlIGlz IGFzc3VtZWQgdG8KKwkgKiBiZSBzdXBwb3J0ZWQKKwkgKi8KKwlib29sICgqc3VwcG9ydGVkKShz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCisJLyoqCisJICogQHNldDogU2V0IHRoZSBmZWF0dXJl IHZhbHVlCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG1hbmRhdG9yeQorCSAqLworCWludCAo KnNldCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyAq Y29uZiwgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAZ2V0OiBHZXQgdGhlIGZl YXR1cmUgY3VycmVudCB2YWx1ZQorCSAqCisJICogVGhpcyBjYWxsYmFjayBpcyBtYW5kYXRvcnkK KwkgKi8KKwlpbnQgKCpnZXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zYmlf ZndmdF9jb25maWcgKmNvbmYsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKTsKK307CisKK3N0YXRpYyBj b25zdCBlbnVtIHNiaV9md2Z0X2ZlYXR1cmVfdCBrdm1fZndmdF9kZWZpbmVkX2ZlYXR1cmVzW10g PSB7CisJU0JJX0ZXRlRfTUlTQUxJR05FRF9FWENfREVMRUcsCisJU0JJX0ZXRlRfTEFORElOR19Q QUQsCisJU0JJX0ZXRlRfU0hBRE9XX1NUQUNLLAorCVNCSV9GV0ZUX0RPVUJMRV9UUkFQLAorCVNC SV9GV0ZUX1BURV9BRF9IV19VUERBVElORywKKwlTQklfRldGVF9QT0lOVEVSX01BU0tJTkdfUE1M RU4sCit9OworCitzdGF0aWMgYm9vbCBrdm1fZndmdF9pc19kZWZpbmVkX2ZlYXR1cmUoZW51bSBz YmlfZndmdF9mZWF0dXJlX3QgZmVhdHVyZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGt2bV9md2Z0X2RlZmluZWRfZmVhdHVyZXMpOyBpKyspIHsKKwkJaWYgKGt2 bV9md2Z0X2RlZmluZWRfZmVhdHVyZXNbaV0gPT0gZmVhdHVyZSkKKwkJCXJldHVybiB0cnVlOwor CX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fc2JpX2Z3 ZnRfZmVhdHVyZSBmZWF0dXJlc1tdID0geworfTsKKworc3RhdGljIHN0cnVjdCBrdm1fc2JpX2Z3 ZnRfY29uZmlnICoKK2t2bV9zYmlfZndmdF9nZXRfY29uZmlnKHN0cnVjdCBrdm1fdmNwdSAqdmNw dSwgZW51bSBzYmlfZndmdF9mZWF0dXJlX3QgZmVhdHVyZSkKK3sKKwlpbnQgaSA9IDA7CisJc3Ry dWN0IGt2bV9zYmlfZndmdCAqZndmdCA9IHZjcHVfdG9fZndmdCh2Y3B1KTsKKworCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGZlYXR1cmVzKTsgaSsrKSB7CisJCWlmIChmd2Z0LT5jb25maWdz W2ldLmZlYXR1cmUtPmlkID09IGZlYXR1cmUpCisJCQlyZXR1cm4gJmZ3ZnQtPmNvbmZpZ3NbaV07 CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQga3ZtX2Z3ZnRfZ2V0X2ZlYXR1 cmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZmVhdHVyZSwKKwkJCQlzdHJ1Y3Qga3ZtX3Ni aV9md2Z0X2NvbmZpZyAqKmNvbmYpCit7CisJc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKnRj b25mOworCisJdGNvbmYgPSBrdm1fc2JpX2Z3ZnRfZ2V0X2NvbmZpZyh2Y3B1LCBmZWF0dXJlKTsK KwlpZiAoIXRjb25mKSB7CisJCWlmIChrdm1fZndmdF9pc19kZWZpbmVkX2ZlYXR1cmUoZmVhdHVy ZSkpCisJCQlyZXR1cm4gU0JJX0VSUl9OT1RfU1VQUE9SVEVEOworCisJCXJldHVybiBTQklfRVJS X0RFTklFRDsKKwl9CisKKwlpZiAoIXRjb25mLT5zdXBwb3J0ZWQpCisJCXJldHVybiBTQklfRVJS X05PVF9TVVBQT1JURUQ7CisKKwkqY29uZiA9IHRjb25mOworCisJcmV0dXJuIFNCSV9TVUNDRVNT OworfQorCitzdGF0aWMgaW50IGt2bV9zYmlfZndmdF9zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1 LCB1MzIgZmVhdHVyZSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIHZhbHVlLCB1bnNpZ25lZCBsb25n IGZsYWdzKQoreworCWludCByZXQ7CisJc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKmNvbmY7 CisKKwlyZXQgPSBrdm1fZndmdF9nZXRfZmVhdHVyZSh2Y3B1LCBmZWF0dXJlLCAmY29uZik7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgoZmxhZ3MgJiB+U0JJX0ZXRlRfU0VUX0ZM QUdfTE9DSykgIT0gMCkKKwkJcmV0dXJuIFNCSV9FUlJfSU5WQUxJRF9QQVJBTTsKKworCWlmIChj b25mLT5mbGFncyAmIFNCSV9GV0ZUX1NFVF9GTEFHX0xPQ0spCisJCXJldHVybiBTQklfRVJSX0RF TklFRF9MT0NLRUQ7CisKKwljb25mLT5mbGFncyA9IGZsYWdzOworCisJcmV0dXJuIGNvbmYtPmZl YXR1cmUtPnNldCh2Y3B1LCBjb25mLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3NiaV9m d2Z0X2dldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZmVhdHVyZSwKKwkJ CSAgICB1bnNpZ25lZCBsb25nICp2YWx1ZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBrdm1fc2Jp X2Z3ZnRfY29uZmlnICpjb25mOworCisJcmV0ID0ga3ZtX2Z3ZnRfZ2V0X2ZlYXR1cmUodmNwdSwg ZmVhdHVyZSwgJmNvbmYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY29u Zi0+ZmVhdHVyZS0+Z2V0KHZjcHUsIGNvbmYsIHZhbHVlKTsKK30KKworc3RhdGljIGludCBrdm1f c2JpX2V4dF9md2Z0X2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1 biAqcnVuLAorCQkJCSAgICBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX3JldHVybiAqcmV0ZGF0YSkKK3sK KwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjcCA9ICZ2Y3B1LT5hcmNo Lmd1ZXN0X2NvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBmdW5jaWQgPSBjcC0+YTY7CisKKwlzd2l0 Y2ggKGZ1bmNpZCkgeworCWNhc2UgU0JJX0VYVF9GV0ZUX1NFVDoKKwkJcmV0ID0ga3ZtX3NiaV9m d2Z0X3NldCh2Y3B1LCBjcC0+YTAsIGNwLT5hMSwgY3AtPmEyKTsKKwkJYnJlYWs7CisJY2FzZSBT QklfRVhUX0ZXRlRfR0VUOgorCQlyZXQgPSBrdm1fc2JpX2Z3ZnRfZ2V0KHZjcHUsIGNwLT5hMCwg JnJldGRhdGEtPm91dF92YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSBTQklfRVJS X05PVF9TVVBQT1JURUQ7CisJCWJyZWFrOworCX0KKworCXJldGRhdGEtPmVycl92YWwgPSByZXQ7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrdm1fc2JpX2V4dF9md2Z0X2luaXQoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2JpX2Z3ZnQgKmZ3ZnQgPSB2Y3B1 X3RvX2Z3ZnQodmNwdSk7CisJY29uc3Qgc3RydWN0IGt2bV9zYmlfZndmdF9mZWF0dXJlICpmZWF0 dXJlOworCXN0cnVjdCBrdm1fc2JpX2Z3ZnRfY29uZmlnICpjb25mOworCWludCBpOworCisJZndm dC0+Y29uZmlncyA9IGtjYWxsb2MoQVJSQVlfU0laRShmZWF0dXJlcyksIHNpemVvZihzdHJ1Y3Qg a3ZtX3NiaV9md2Z0X2NvbmZpZyksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFmd2Z0LT5jb25m aWdzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZl YXR1cmVzKTsgaSsrKSB7CisJCWZlYXR1cmUgPSAmZmVhdHVyZXNbaV07CisJCWNvbmYgPSAmZndm dC0+Y29uZmlnc1tpXTsKKwkJaWYgKGZlYXR1cmUtPnN1cHBvcnRlZCkKKwkJCWNvbmYtPnN1cHBv cnRlZCA9IGZlYXR1cmUtPnN1cHBvcnRlZCh2Y3B1KTsKKwkJZWxzZQorCQkJY29uZi0+c3VwcG9y dGVkID0gdHJ1ZTsKKworCQljb25mLT5mZWF0dXJlID0gZmVhdHVyZTsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQga3ZtX3NiaV9leHRfZndmdF9kZWluaXQoc3RydWN0IGt2bV92 Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2JpX2Z3ZnQgKmZ3ZnQgPSB2Y3B1X3RvX2Z3ZnQo dmNwdSk7CisKKwlrZnJlZShmd2Z0LT5jb25maWdzKTsKK30KKworc3RhdGljIHZvaWQga3ZtX3Ni aV9leHRfZndmdF9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IGkgPSAwOwor CXN0cnVjdCBrdm1fc2JpX2Z3ZnQgKmZ3ZnQgPSB2Y3B1X3RvX2Z3ZnQodmNwdSk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShmZWF0dXJlcyk7IGkrKykKKwkJZndmdC0+Y29uZmlnc1tp XS5mbGFncyA9IDA7Cit9CisKK2NvbnN0IHN0cnVjdCBrdm1fdmNwdV9zYmlfZXh0ZW5zaW9uIHZj cHVfc2JpX2V4dF9md2Z0ID0geworCS5leHRpZF9zdGFydCA9IFNCSV9FWFRfRldGVCwKKwkuZXh0 aWRfZW5kID0gU0JJX0VYVF9GV0ZULAorCS5oYW5kbGVyID0ga3ZtX3NiaV9leHRfZndmdF9oYW5k bGVyLAorCS5pbml0ID0ga3ZtX3NiaV9leHRfZndmdF9pbml0LAorCS5kZWluaXQgPSBrdm1fc2Jp X2V4dF9md2Z0X2RlaW5pdCwKKwkucmVzZXQgPSBrdm1fc2JpX2V4dF9md2Z0X3Jlc2V0LAorfTsK LS0gCjIuNDcuMgoKCi0tIAprdm0tcmlzY3YgbWFpbGluZyBsaXN0Cmt2bS1yaXNjdkBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v a3ZtLXJpc2N2Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9320C233157 for ; Mon, 10 Mar 2025 15:15:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741619704; cv=none; b=U4wJxDwLkC9dWBIY30AMGDwE0ieeElcfejp5KnSzQIABpa1OXpECGIB9DBAksXUCNe7eH3AS4QLfphMvX0ygGTCxlhClpZrcOxA2ktXXhr66622b6PVBVo1/pWFGD8t3mIeFePpxeNQlU/LNC8Po8pgUsbrSUdavzmIjkxNIaoY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741619704; c=relaxed/simple; bh=OumzHOvvtu3QMkazrSo0lmLwyWtJQVbysLsPBCM8uXA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pWS2XvOM3RXVcTvQpFq/rBBqz3tPl2QYlFm1/lLz7SnY1QFvdilVoft5IQnnLG+Nw7251d8NkVFtIo18vpkqjJ3axARum5GLEdr+0vhX+QZpwTCd+M8R2ihztpoDnSy9LLsz6/6dL4gqa+LOqvvucYTf9Ro/yQSXoxieRkXtwss= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=aCUsNWE4; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="aCUsNWE4" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-22113560c57so81061095ad.2 for ; Mon, 10 Mar 2025 08:15:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619702; x=1742224502; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hOd2k9Vwz3oIUDtJN/qvQUzpTwasFoa+EjUHjoptxP4=; b=aCUsNWE4Jiq1b9kt7zr+qBpkNIFRBemBcvSr4SwVSNdcbDKhDC8YPoj7l2Oc3I8hbV w97ayyxcS4U7f6+9KllPtvQJCWo2Z00jvJ4EAoQyQpxvVDgXW9bjIw9JRICF/RFiJ4fP EEPXKy9EB+B7tiOG3zugNmEy4yIuPOkVuSqvUdPJqYqTeQL7zqzYTL86uCp0Hu0PdSBV bqPxRtI5LnSR6Qq3meen8ckuVwgz5qzU563WoE+Vq4AJinTQrK47fw3oyHKsgxPYKW8s fhH/5hMFx9E3AkvjgnTzof/FsMaM6jmMWcJzHCCmkrY3QUzxgJ+oJdNkxmO//mafVnDU zmBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619702; x=1742224502; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hOd2k9Vwz3oIUDtJN/qvQUzpTwasFoa+EjUHjoptxP4=; b=X5tWp32ujIElgSKEWYZJQpwZszHzLbtWoV0h8X3rRFzrMH4plnobSmkT6Fn2q8ByZ0 dd1H+mVohtY2b9qDa/IPlAFGiHFx3dVjahinhP2qzWMcE1zTnTtoFpsZdNvXaYMBQEwR 70wp78uwc/usRCbXNg6G6JfHyNVPAtdoBBAu0l2uuAz9FX+C2aBBLY39uVHWUK6Gyfvh WpOHnReOHL8gDH0OZ4qbKknfqzkP3FsPDFzOLg3uZTsQR3hlpug+t/m3N81AYiTPdcq6 e+C85Bo1fm7QSmD2x2iz+mec1BhHJA+ApjvCie3UE8cR3nAjslN77291Bl1HKTuCgIqu X/Qg== X-Forwarded-Encrypted: i=1; AJvYcCU+qzuGlYTdxXdLOcELHtI4i82nFi0Uym3qndF0ztifgGdbWpBGv/WNTSzfTlcYYYO1IeI=@vger.kernel.org X-Gm-Message-State: AOJu0YyL5SlVW7KX2iwIl93kX9spc8w1xHA6oACp6cTm8q2/xCuW5k9+ A4Fq7iH3lE579loqO9Y8dseE//YFrYUJ8P1WmGLSpfAckBe+ZG3RRsxXbYT69H0= X-Gm-Gg: ASbGncubDUBvrT8va+LrWG8mpD5T4UON4utuLhJ8GoHycH9rlNtwKMd66PE5hpYiI70 DqwK3twL1QubS6ePMO3TXFXZ4FOMMJflccY+jYi/rUMzGRWsp8iderlonAsODMao7En7W/V9Mc9 MNDfQhlTuRqUSfCwxd8rfFt5RznBhSq5RgZp8n5QKz7kp1RpZCt416zFXMo+PLXQq2GCw9nS2tE 63GEbVXLhIEC6ysk+TxxXZZeAG+chhXjQ1MVqrBrFkcfsPgNqJDcZk9kiop2We6+nNPOXas4j/L SM6PbIdoTzT5nSZv/UZei1WqWSEJ8Pb7QcHBbu/fhnL64g== X-Google-Smtp-Source: AGHT+IHzT9d4a2eYINgey0kceBibGso0f5earoCP/lcsD5F2ll8sbD9jFU+xJVsySTd/60DzZCpM3Q== X-Received: by 2002:a17:903:40cb:b0:215:9642:4d7a with SMTP id d9443c01a7336-22428407b19mr226412835ad.0.1741619701896; Mon, 10 Mar 2025 08:15:01 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.14.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:15:01 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: 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: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland Subject: [PATCH v3 16/17] RISC-V: KVM: add support for FWFT SBI extension Date: Mon, 10 Mar 2025 16:12:23 +0100 Message-ID: <20250310151229.2365992-17-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add basic infrastructure to support the FWFT extension in KVM. Signed-off-by: Clément Léger --- 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 | 31 +++ 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 | 212 +++++++++++++++++++++ 7 files changed, 254 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 bb93d2995ea2..c0db61ba691a 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..ec7568e0dc1a --- /dev/null +++ b/arch/riscv/include/asm/kvm_vcpu_sbi_fwft.h @@ -0,0 +1,31 @@ +/* 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_config; +struct kvm_sbi_fwft_feature; +struct kvm_vcpu; + +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 f06bc5efcd79..fa6eee1caf41 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -202,6 +202,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 18726096ef44..27f22e98c8f8 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..cce1e41d5490 --- /dev/null +++ b/arch/riscv/kvm/vcpu_sbi_fwft.c @@ -0,0 +1,212 @@ +// 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 + * + * This callback is mandatory + */ + int (*set)(struct kvm_vcpu *vcpu, struct kvm_sbi_fwft_config *conf, unsigned long value); + + /** + * @get: Get the feature current value + * + * This callback is mandatory + */ + int (*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 = 0; + 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 = 0; + 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 = 0; + 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, +}; -- 2.47.2 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 48009C282EC for ; Mon, 10 Mar 2025 15:48:00 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6MfW+iFl6xwVc+1M0ZJhAlsFv7erKgV/JTBieTgR58U=; b=cjvYrNP/qINpIb sqfWfaQY0StEkdg1d/NNV+QnHiyuQ5IvsLLD/0HiC9lK4mp8ESlfyhpqbM3qFDO89B/T34ZM1N1xH XAFJmKgytcN3OdZxT5CmoH6cwF1gr1j4lP/x+V9d0zK5hTs2VoKnzELmYS+I19hlavsfaETssl0rq JEFzGMLbN75vnJQBO0lm/c/jXKMsxlV38oBQ4WQ3p9bxkfTr4dicJa9v2CGh5FulVTgi7GJKghPS0 poWvCtdsxvQFXbchT4BqvEfxe9n3ruPJnQPWomleSukSwggXDbQcwHLP1F4nrYeUI866/pqUgXQF0 Dfrap2SCIIHGCEnOFS6w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trfMA-00000003GNn-3vA9; Mon, 10 Mar 2025 15:47:54 +0000 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1treqM-000000038Fr-1ovL for linux-riscv@lists.infradead.org; Mon, 10 Mar 2025 15:15:03 +0000 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-224019ad9edso99893895ad.1 for ; Mon, 10 Mar 2025 08:15:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741619702; x=1742224502; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hOd2k9Vwz3oIUDtJN/qvQUzpTwasFoa+EjUHjoptxP4=; b=h8kw7FkzZeBXwZvf3Kehi2ovzoqmmXbvpuSx6kivI1wlmSZI+eFrwAm8q9Whf/MZro 9TokuvGwlWJSQOac80RDtNn3M3/3PY57qYQEE8h8RtcaJL/gndxAYPXcmw0OAmM07qxL R7ZtZX4YBFFJMbSLzxXLh/JZmbgOUfR/urXTNnVq/Z8lEESZEVH+axUnCYj5gIhSK3j4 4Kidq8tgr500WvQtP3fSbwplHVddFeYN4mphUWVmeHRx2ek/ICHs6qCDKrPQheHpIuDv LL7m7iPVCuKTeKn6+7DkHQCOK6p+8cESohh/ROZ0DhEDpMemN+Kz0Go61SljD2ItaVTP m8PQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741619702; x=1742224502; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hOd2k9Vwz3oIUDtJN/qvQUzpTwasFoa+EjUHjoptxP4=; b=iS2mw2eIbnunkG4lTU79bwEXnpBTraVESBbwpUb+NRsWeL6J9Ys98FF0H/Jss+MGOz Jyp4kaskC51+j9DRRaZwz9cjNxb3NzziWpkShycVyegK5ny8yDGMIu8mtYmKhvNdjcg9 4NXeaScca12SQwcCQLGJPSlG/Wc4+q40FiMjEfHWo0bL/7dt8wa0xUQ8CvMuvFoubfHb i7U6vPcPyvqSZzOIqq48uO0NWU8u3lN/qrmFKCwKcY5xUsWzELmtZPNdzngwTOmjHr1d hidwi7EGOcIIGMgKBj7O8iZvgzt8lZ8NUPTydAl3u6UAgkIAmxpYCuGHi6JSNWrOyijH 22sA== X-Forwarded-Encrypted: i=1; AJvYcCXOfcV+7hO34tYKpx/YS7BrHR3ayY7bMyBGCUhrH1FZnbPQ5lYmN++l54JA0GJWYEfO8HCKetmxYNOqoQ==@lists.infradead.org X-Gm-Message-State: AOJu0YzptA5LgDWQ1uWH0/Q5o+HpKG2vPj9C69lHwMAToLJaE0I3LpWZ VjdgYHGyitKKbPSlW3EB5hjBZtWELjIaIkF1egZ4WYirkJ2sF5YgCWvANgbxWhk= X-Gm-Gg: ASbGnctQwiwUZ/0Td9ZQLpiinaW6IjL7J1uTa9YYQji/lGOBBypsXEPA9Gp0N9MUWFx 2RH3+pK/hMw590hkO0mDCcH1PVIVzCvYFGGzh0WxQxUiiCyUNiel+qkemgpL0UauXm7UWncBrrJ lDNBsMh4tT82juVwKi3G/mNSt9JrzFX88q2A1bATlKZNIG+zu9AHa7hJAkpUDYNwZ810I2ILags xYSlrwUhoa3rLw1d53SjHKVZ3v2zPj7gjfdSAO0VfFUsnPomxfcwwslkcAJ1WSL0m6bhoTgPko7 cRe7Wuk2fu4l5I7puBdN9BqnqvDijQ+9a7ajC0LNzUeJZg== X-Google-Smtp-Source: AGHT+IHzT9d4a2eYINgey0kceBibGso0f5earoCP/lcsD5F2ll8sbD9jFU+xJVsySTd/60DzZCpM3Q== X-Received: by 2002:a17:903:40cb:b0:215:9642:4d7a with SMTP id d9443c01a7336-22428407b19mr226412835ad.0.1741619701896; Mon, 10 Mar 2025 08:15:01 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-224109e99dfsm79230515ad.91.2025.03.10.08.14.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Mar 2025 08:15:01 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: 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: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Samuel Holland Subject: [PATCH v3 16/17] RISC-V: KVM: add support for FWFT SBI extension Date: Mon, 10 Mar 2025 16:12:23 +0100 Message-ID: <20250310151229.2365992-17-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250310151229.2365992-1-cleger@rivosinc.com> References: <20250310151229.2365992-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_081502_478870_92721E65 X-CRM114-Status: GOOD ( 25.97 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org QWRkIGJhc2ljIGluZnJhc3RydWN0dXJlIHRvIHN1cHBvcnQgdGhlIEZXRlQgZXh0ZW5zaW9uIGlu IEtWTS4KClNpZ25lZC1vZmYtYnk6IENsw6ltZW50IEzDqWdlciA8Y2xlZ2VyQHJpdm9zaW5jLmNv bT4KLS0tCiBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggICAgICAgICAgfCAgIDQg KwogYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmkuaCAgICAgIHwgICAxICsKIGFy Y2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpX2Z3ZnQuaCB8ICAzMSArKysKIGFyY2gv cmlzY3YvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCAgICAgICAgICB8ICAgMSArCiBhcmNoL3Jpc2N2 L2t2bS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogYXJjaC9yaXNjdi9rdm0v dmNwdV9zYmkuYyAgICAgICAgICAgICAgICAgIHwgICA0ICsKIGFyY2gvcmlzY3Yva3ZtL3ZjcHVf c2JpX2Z3ZnQuYyAgICAgICAgICAgICB8IDIxMiArKysrKysrKysrKysrKysrKysrKysKIDcgZmls ZXMgY2hhbmdlZCwgMjU0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3Jp c2N2L2luY2x1ZGUvYXNtL2t2bV92Y3B1X3NiaV9md2Z0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBh cmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9md2Z0LmMKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2lu Y2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgK aW5kZXggYmI5M2QyOTk1ZWEyLi5jMGRiNjFiYTY5MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yv aW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9o b3N0LmgKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20va3ZtX3ZjcHVfZnAuaD4KICNp bmNsdWRlIDxhc20va3ZtX3ZjcHVfaW5zbi5oPgogI2luY2x1ZGUgPGFzbS9rdm1fdmNwdV9zYmku aD4KKyNpbmNsdWRlIDxhc20va3ZtX3ZjcHVfc2JpX2Z3ZnQuaD4KICNpbmNsdWRlIDxhc20va3Zt X3ZjcHVfdGltZXIuaD4KICNpbmNsdWRlIDxhc20va3ZtX3ZjcHVfcG11Lmg+CiAKQEAgLTI4MSw2 ICsyODIsOSBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJLyogUGVyZm9ybWFuY2UgbW9uaXRv cmluZyBjb250ZXh0ICovCiAJc3RydWN0IGt2bV9wbXUgcG11X2NvbnRleHQ7CiAKKwkvKiBGaXJt d2FyZSBmZWF0dXJlIFNCSSBleHRlbnNpb24gY29udGV4dCAqLworCXN0cnVjdCBrdm1fc2JpX2Z3 ZnQgZndmdF9jb250ZXh0OworCiAJLyogJ3N0YXRpYycgY29uZmlndXJhdGlvbnMgd2hpY2ggYXJl IHNldCBvbmx5IG9uY2UgKi8KIAlzdHJ1Y3Qga3ZtX3ZjcHVfY29uZmlnIGNmZzsKIApkaWZmIC0t Z2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmkuaCBiL2FyY2gvcmlzY3Yv aW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpLmgKaW5kZXggY2I2OGIzYTU3YzhmLi5mZmQwM2ZlZDBj MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpLmgKKysr IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmkuaApAQCAtOTgsNiArOTgsNyBA QCBleHRlcm4gY29uc3Qgc3RydWN0IGt2bV92Y3B1X3NiaV9leHRlbnNpb24gdmNwdV9zYmlfZXh0 X2hzbTsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX2V4dGVuc2lvbiB2Y3B1X3Ni aV9leHRfZGJjbjsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX2V4dGVuc2lvbiB2 Y3B1X3NiaV9leHRfc3VzcDsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX2V4dGVu c2lvbiB2Y3B1X3NiaV9leHRfc3RhOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9zYmlf ZXh0ZW5zaW9uIHZjcHVfc2JpX2V4dF9md2Z0OwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBrdm1fdmNw dV9zYmlfZXh0ZW5zaW9uIHZjcHVfc2JpX2V4dF9leHBlcmltZW50YWw7CiBleHRlcm4gY29uc3Qg c3RydWN0IGt2bV92Y3B1X3NiaV9leHRlbnNpb24gdmNwdV9zYmlfZXh0X3ZlbmRvcjsKIApkaWZm IC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmlfZndmdC5oIGIvYXJj aC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmlfZndmdC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZWM3NTY4ZTBkYzFhCi0tLSAvZGV2L251bGwKKysrIGIv YXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmlfZndmdC5oCkBAIC0wLDAgKzEsMzEg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBD b3B5cmlnaHQgKGMpIDIwMjUgUml2b3MgSW5jLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICAgQ2zD qW1lbnQgTMOpZ2VyIDxjbGVnZXJAcml2b3NpbmMuY29tPgorICovCisKKyNpZm5kZWYgX19LVk1f VkNQVV9SSVNDVl9GV0ZUX0gKKyNkZWZpbmUgX19LVk1fVkNQVV9SSVNDVl9GV0ZUX0gKKworI2lu Y2x1ZGUgPGFzbS9zYmkuaD4KKworc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWc7CitzdHJ1Y3Qg a3ZtX3NiaV9md2Z0X2ZlYXR1cmU7CitzdHJ1Y3Qga3ZtX3ZjcHU7CisKK3N0cnVjdCBrdm1fc2Jp X2Z3ZnRfY29uZmlnIHsKKwljb25zdCBzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2ZlYXR1cmUgKmZlYXR1 cmU7CisJYm9vbCBzdXBwb3J0ZWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKK307CisKKy8qIEZX RlQgZGF0YSBzdHJ1Y3R1cmUgcGVyIHZjcHUgKi8KK3N0cnVjdCBrdm1fc2JpX2Z3ZnQgeworCXN0 cnVjdCBrdm1fc2JpX2Z3ZnRfY29uZmlnICpjb25maWdzOworfTsKKworI2RlZmluZSB2Y3B1X3Rv X2Z3ZnQodmNwdSkgKCYodmNwdSktPmFyY2guZndmdF9jb250ZXh0KQorCisjZW5kaWYgLyogIV9f S1ZNX1ZDUFVfUklTQ1ZfRldGVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUv dWFwaS9hc20va3ZtLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKaW5kZXgg ZjA2YmM1ZWZjZDc5Li5mYTZlZWUxY2FmNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVk ZS91YXBpL2FzbS9rdm0uaAorKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgK QEAgLTIwMiw2ICsyMDIsNyBAQCBlbnVtIEtWTV9SSVNDVl9TQklfRVhUX0lEIHsKIAlLVk1fUklT Q1ZfU0JJX0VYVF9EQkNOLAogCUtWTV9SSVNDVl9TQklfRVhUX1NUQSwKIAlLVk1fUklTQ1ZfU0JJ X0VYVF9TVVNQLAorCUtWTV9SSVNDVl9TQklfRVhUX0ZXRlQsCiAJS1ZNX1JJU0NWX1NCSV9FWFRf TUFYLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGUgYi9hcmNoL3Jp c2N2L2t2bS9NYWtlZmlsZQppbmRleCA0ZTBiYmE5MWQyODQuLjA2ZTJkNTJhOWI4OCAxMDA2NDQK LS0tIGEvYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC9yaXNjdi9rdm0vTWFrZWZp bGUKQEAgLTI2LDYgKzI2LDcgQEAga3ZtLXkgKz0gdmNwdV9vbmVyZWcubwoga3ZtLSQoQ09ORklH X1JJU0NWX1BNVV9TQkkpICs9IHZjcHVfcG11Lm8KIGt2bS15ICs9IHZjcHVfc2JpLm8KIGt2bS15 ICs9IHZjcHVfc2JpX2Jhc2Uubwora3ZtLXkgKz0gdmNwdV9zYmlfZndmdC5vCiBrdm0teSArPSB2 Y3B1X3NiaV9oc20ubwoga3ZtLSQoQ09ORklHX1JJU0NWX1BNVV9TQkkpICs9IHZjcHVfc2JpX3Bt dS5vCiBrdm0teSArPSB2Y3B1X3NiaV9yZXBsYWNlLm8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yv a3ZtL3ZjcHVfc2JpLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaS5jCmluZGV4IDE4NzI2MDk2 ZWY0NC4uMjdmMjJlOThjOGY4IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaS5j CisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpLmMKQEAgLTc4LDYgKzc4LDEwIEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3Qga3ZtX3Jpc2N2X3NiaV9leHRlbnNpb25fZW50cnkgc2JpX2V4dFtdID0g ewogCQkuZXh0X2lkeCA9IEtWTV9SSVNDVl9TQklfRVhUX1NUQSwKIAkJLmV4dF9wdHIgPSAmdmNw dV9zYmlfZXh0X3N0YSwKIAl9LAorCXsKKwkJLmV4dF9pZHggPSBLVk1fUklTQ1ZfU0JJX0VYVF9G V0ZULAorCQkuZXh0X3B0ciA9ICZ2Y3B1X3NiaV9leHRfZndmdCwKKwl9LAogCXsKIAkJLmV4dF9p ZHggPSBLVk1fUklTQ1ZfU0JJX0VYVF9FWFBFUklNRU5UQUwsCiAJCS5leHRfcHRyID0gJnZjcHVf c2JpX2V4dF9leHBlcmltZW50YWwsCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3Ni aV9md2Z0LmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9md2Z0LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jY2UxZTQxZDU0OTAKLS0tIC9kZXYvbnVsbAorKysg Yi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9md2Z0LmMKQEAgLTAsMCArMSwyMTIgQEAKKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChjKSAyMDI1 IFJpdm9zIEluYy4KKyAqCisgKiBBdXRob3JzOgorICogICAgIENsw6ltZW50IEzDqWdlciA8Y2xl Z2VyQHJpdm9zaW5jLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNs dWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUg PGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL3NiaS5oPgorI2luY2x1ZGUgPGFzbS9r dm1fdmNwdV9zYmkuaD4KKyNpbmNsdWRlIDxhc20va3ZtX3ZjcHVfc2JpX2Z3ZnQuaD4KKworc3Ry dWN0IGt2bV9zYmlfZndmdF9mZWF0dXJlIHsKKwkvKioKKwkgKiBAaWQ6IEZlYXR1cmUgSUQKKwkg Ki8KKwllbnVtIHNiaV9md2Z0X2ZlYXR1cmVfdCBpZDsKKworCS8qKgorCSAqIEBzdXBwb3J0ZWQ6 IENoZWNrIGlmIHRoZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBvbiB0aGUgdmNwdQorCSAqCisJICog VGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCwgaWYgbm90IHByb3ZpZGVkIHRoZSBmZWF0dXJlIGlz IGFzc3VtZWQgdG8KKwkgKiBiZSBzdXBwb3J0ZWQKKwkgKi8KKwlib29sICgqc3VwcG9ydGVkKShz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCisJLyoqCisJICogQHNldDogU2V0IHRoZSBmZWF0dXJl IHZhbHVlCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG1hbmRhdG9yeQorCSAqLworCWludCAo KnNldCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyAq Y29uZiwgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAZ2V0OiBHZXQgdGhlIGZl YXR1cmUgY3VycmVudCB2YWx1ZQorCSAqCisJICogVGhpcyBjYWxsYmFjayBpcyBtYW5kYXRvcnkK KwkgKi8KKwlpbnQgKCpnZXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zYmlf ZndmdF9jb25maWcgKmNvbmYsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKTsKK307CisKK3N0YXRpYyBj b25zdCBlbnVtIHNiaV9md2Z0X2ZlYXR1cmVfdCBrdm1fZndmdF9kZWZpbmVkX2ZlYXR1cmVzW10g PSB7CisJU0JJX0ZXRlRfTUlTQUxJR05FRF9FWENfREVMRUcsCisJU0JJX0ZXRlRfTEFORElOR19Q QUQsCisJU0JJX0ZXRlRfU0hBRE9XX1NUQUNLLAorCVNCSV9GV0ZUX0RPVUJMRV9UUkFQLAorCVNC SV9GV0ZUX1BURV9BRF9IV19VUERBVElORywKKwlTQklfRldGVF9QT0lOVEVSX01BU0tJTkdfUE1M RU4sCit9OworCitzdGF0aWMgYm9vbCBrdm1fZndmdF9pc19kZWZpbmVkX2ZlYXR1cmUoZW51bSBz YmlfZndmdF9mZWF0dXJlX3QgZmVhdHVyZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGt2bV9md2Z0X2RlZmluZWRfZmVhdHVyZXMpOyBpKyspIHsKKwkJaWYgKGt2 bV9md2Z0X2RlZmluZWRfZmVhdHVyZXNbaV0gPT0gZmVhdHVyZSkKKwkJCXJldHVybiB0cnVlOwor CX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fc2JpX2Z3 ZnRfZmVhdHVyZSBmZWF0dXJlc1tdID0geworfTsKKworc3RhdGljIHN0cnVjdCBrdm1fc2JpX2Z3 ZnRfY29uZmlnICoKK2t2bV9zYmlfZndmdF9nZXRfY29uZmlnKHN0cnVjdCBrdm1fdmNwdSAqdmNw dSwgZW51bSBzYmlfZndmdF9mZWF0dXJlX3QgZmVhdHVyZSkKK3sKKwlpbnQgaSA9IDA7CisJc3Ry dWN0IGt2bV9zYmlfZndmdCAqZndmdCA9IHZjcHVfdG9fZndmdCh2Y3B1KTsKKworCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGZlYXR1cmVzKTsgaSsrKSB7CisJCWlmIChmd2Z0LT5jb25maWdz W2ldLmZlYXR1cmUtPmlkID09IGZlYXR1cmUpCisJCQlyZXR1cm4gJmZ3ZnQtPmNvbmZpZ3NbaV07 CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQga3ZtX2Z3ZnRfZ2V0X2ZlYXR1 cmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZmVhdHVyZSwKKwkJCQlzdHJ1Y3Qga3ZtX3Ni aV9md2Z0X2NvbmZpZyAqKmNvbmYpCit7CisJc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKnRj b25mOworCisJdGNvbmYgPSBrdm1fc2JpX2Z3ZnRfZ2V0X2NvbmZpZyh2Y3B1LCBmZWF0dXJlKTsK KwlpZiAoIXRjb25mKSB7CisJCWlmIChrdm1fZndmdF9pc19kZWZpbmVkX2ZlYXR1cmUoZmVhdHVy ZSkpCisJCQlyZXR1cm4gU0JJX0VSUl9OT1RfU1VQUE9SVEVEOworCisJCXJldHVybiBTQklfRVJS X0RFTklFRDsKKwl9CisKKwlpZiAoIXRjb25mLT5zdXBwb3J0ZWQpCisJCXJldHVybiBTQklfRVJS X05PVF9TVVBQT1JURUQ7CisKKwkqY29uZiA9IHRjb25mOworCisJcmV0dXJuIFNCSV9TVUNDRVNT OworfQorCitzdGF0aWMgaW50IGt2bV9zYmlfZndmdF9zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1 LCB1MzIgZmVhdHVyZSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIHZhbHVlLCB1bnNpZ25lZCBsb25n IGZsYWdzKQoreworCWludCByZXQ7CisJc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKmNvbmY7 CisKKwlyZXQgPSBrdm1fZndmdF9nZXRfZmVhdHVyZSh2Y3B1LCBmZWF0dXJlLCAmY29uZik7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgoZmxhZ3MgJiB+U0JJX0ZXRlRfU0VUX0ZM QUdfTE9DSykgIT0gMCkKKwkJcmV0dXJuIFNCSV9FUlJfSU5WQUxJRF9QQVJBTTsKKworCWlmIChj b25mLT5mbGFncyAmIFNCSV9GV0ZUX1NFVF9GTEFHX0xPQ0spCisJCXJldHVybiBTQklfRVJSX0RF TklFRF9MT0NLRUQ7CisKKwljb25mLT5mbGFncyA9IGZsYWdzOworCisJcmV0dXJuIGNvbmYtPmZl YXR1cmUtPnNldCh2Y3B1LCBjb25mLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3NiaV9m d2Z0X2dldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZmVhdHVyZSwKKwkJ CSAgICB1bnNpZ25lZCBsb25nICp2YWx1ZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBrdm1fc2Jp X2Z3ZnRfY29uZmlnICpjb25mOworCisJcmV0ID0ga3ZtX2Z3ZnRfZ2V0X2ZlYXR1cmUodmNwdSwg ZmVhdHVyZSwgJmNvbmYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY29u Zi0+ZmVhdHVyZS0+Z2V0KHZjcHUsIGNvbmYsIHZhbHVlKTsKK30KKworc3RhdGljIGludCBrdm1f c2JpX2V4dF9md2Z0X2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1 biAqcnVuLAorCQkJCSAgICBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX3JldHVybiAqcmV0ZGF0YSkKK3sK KwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0ICpjcCA9ICZ2Y3B1LT5hcmNo Lmd1ZXN0X2NvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBmdW5jaWQgPSBjcC0+YTY7CisKKwlzd2l0 Y2ggKGZ1bmNpZCkgeworCWNhc2UgU0JJX0VYVF9GV0ZUX1NFVDoKKwkJcmV0ID0ga3ZtX3NiaV9m d2Z0X3NldCh2Y3B1LCBjcC0+YTAsIGNwLT5hMSwgY3AtPmEyKTsKKwkJYnJlYWs7CisJY2FzZSBT QklfRVhUX0ZXRlRfR0VUOgorCQlyZXQgPSBrdm1fc2JpX2Z3ZnRfZ2V0KHZjcHUsIGNwLT5hMCwg JnJldGRhdGEtPm91dF92YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSBTQklfRVJS X05PVF9TVVBQT1JURUQ7CisJCWJyZWFrOworCX0KKworCXJldGRhdGEtPmVycl92YWwgPSByZXQ7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrdm1fc2JpX2V4dF9md2Z0X2luaXQoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2JpX2Z3ZnQgKmZ3ZnQgPSB2Y3B1 X3RvX2Z3ZnQodmNwdSk7CisJY29uc3Qgc3RydWN0IGt2bV9zYmlfZndmdF9mZWF0dXJlICpmZWF0 dXJlOworCXN0cnVjdCBrdm1fc2JpX2Z3ZnRfY29uZmlnICpjb25mOworCWludCBpOworCisJZndm dC0+Y29uZmlncyA9IGtjYWxsb2MoQVJSQVlfU0laRShmZWF0dXJlcyksIHNpemVvZihzdHJ1Y3Qg a3ZtX3NiaV9md2Z0X2NvbmZpZyksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFmd2Z0LT5jb25m aWdzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZl YXR1cmVzKTsgaSsrKSB7CisJCWZlYXR1cmUgPSAmZmVhdHVyZXNbaV07CisJCWNvbmYgPSAmZndm dC0+Y29uZmlnc1tpXTsKKwkJaWYgKGZlYXR1cmUtPnN1cHBvcnRlZCkKKwkJCWNvbmYtPnN1cHBv cnRlZCA9IGZlYXR1cmUtPnN1cHBvcnRlZCh2Y3B1KTsKKwkJZWxzZQorCQkJY29uZi0+c3VwcG9y dGVkID0gdHJ1ZTsKKworCQljb25mLT5mZWF0dXJlID0gZmVhdHVyZTsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQga3ZtX3NiaV9leHRfZndmdF9kZWluaXQoc3RydWN0IGt2bV92 Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2JpX2Z3ZnQgKmZ3ZnQgPSB2Y3B1X3RvX2Z3ZnQo dmNwdSk7CisKKwlrZnJlZShmd2Z0LT5jb25maWdzKTsKK30KKworc3RhdGljIHZvaWQga3ZtX3Ni aV9leHRfZndmdF9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IGkgPSAwOwor CXN0cnVjdCBrdm1fc2JpX2Z3ZnQgKmZ3ZnQgPSB2Y3B1X3RvX2Z3ZnQodmNwdSk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShmZWF0dXJlcyk7IGkrKykKKwkJZndmdC0+Y29uZmlnc1tp XS5mbGFncyA9IDA7Cit9CisKK2NvbnN0IHN0cnVjdCBrdm1fdmNwdV9zYmlfZXh0ZW5zaW9uIHZj cHVfc2JpX2V4dF9md2Z0ID0geworCS5leHRpZF9zdGFydCA9IFNCSV9FWFRfRldGVCwKKwkuZXh0 aWRfZW5kID0gU0JJX0VYVF9GV0ZULAorCS5oYW5kbGVyID0ga3ZtX3NiaV9leHRfZndmdF9oYW5k bGVyLAorCS5pbml0ID0ga3ZtX3NiaV9leHRfZndmdF9pbml0LAorCS5kZWluaXQgPSBrdm1fc2Jp X2V4dF9md2Z0X2RlaW5pdCwKKwkucmVzZXQgPSBrdm1fc2JpX2V4dF9md2Z0X3Jlc2V0LAorfTsK LS0gCjIuNDcuMgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlz Y3YK