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 14700C35FF8 for ; Mon, 17 Mar 2025 17:13: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=sA4BgaEkhIpx3A96rEJz0ZTz/gr0hGF7qe7TQP1kLJc=; b=XPQdtwdsp25rKA zZgjuE/rkpJBkKuFvCZ2OAJTqMzn7lTdF1B6SxEmeBlUK+WaeqECpTEUE+LeI2wumJPRvxQAP3BK8 f7XNL7+e2UuIq3lyclymimEqHkG8tVO2MN2QoJnipBVkN7vJjlKii56EjhB1n+JU2RUix6VRtPFhR G3DAF6BiU8S3jnGP+pE7RJ+nhrb7fvoo4GhiwpqQaD5l+wzco5fqNsPVTJEAn5yNlYc8cKFdFkZBm kHf21ZXJAHcNfho546tqpEsUFlefaZhQLYxhl5owSREFZ4Fa4Mxe/FX5j0D0oEEBcLWKF5HAAidxQ blA6R0RkOI5ZvRH5ZXuQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tuE1m-00000003VaL-2yam; Mon, 17 Mar 2025 17:13:26 +0000 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tuDwy-00000003Tbz-16Lr for linux-riscv@lists.infradead.org; Mon, 17 Mar 2025 17:08:29 +0000 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-43cf848528aso19933155e9.2 for ; Mon, 17 Mar 2025 10:08:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1742231307; x=1742836107; 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=htANgsmbkNgRMbGQD4e3tcAhU02WYfiaQrP01+RVlsg=; b=GhJS916Dfw25Tla2sQgWSAGu/yZMhwiB1mpUiximd/7l8QgDBV/8W4aYg+ctHdjCPv 0R+LteJhsWXS+hj6qJHjeo1jUkYCeY+HPwNga9+ix83eS7Ivdd0Ar/0wiYXnkmMqn7ZY SBiuk0Q2R3dm/3o6bx52BliDJNw5nrK7KD9Shx8BxI+1bQnE7UlUK5VNpazGClCOzK0L oX+g25UMRKxBpQ4/VcPTDXN0oNrZ5QCELmkvjOxQsSGXHkTQKhnFhHE0cU6XLEOqVgjo dOXru3rWLLkRGPBe49AitV3NliirmMbgOFfcXJZZOtxE5MN6mV/zb77QET9FyG5biX5v VEAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742231307; x=1742836107; 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=htANgsmbkNgRMbGQD4e3tcAhU02WYfiaQrP01+RVlsg=; b=LQCXe5FW4UeX86Swsu/Ei2L3gJdXMdWq1EjQKFQbTBCuqN5iSj7X4IcjhNj74W808f Y8EEMV9bXapwJbM4wFMUlZxSqeStRnizsYaxhNu2goKRMW28yc1Pn5VM1lIRoRwnSZ4d fpJWP/HIjHo37yKjRPCNcrtcBXeeEESM0Yg5OCdCkZBXwWqPPSz9x+9SNb1bl4HObJ1H pmGR66xhoHG15Lp+XJmtjg6GIwlgqP8iE2uq6PtKlQuR8ppBNq3sp4NYZtr3vk8Tm5AU sHv9pm/UJEh9YDDFl+PFSnViiDiHB0KsJFLEhDMDywpw+a1KJ1qbzk4C/oqUCuM7p0rU lEkw== X-Forwarded-Encrypted: i=1; AJvYcCWzUN8XZifLyuRGxQFWg5GQ4NdAN/cZ6Icg2OWm62ozMYHHTwKt1Ajo88RC4l8s/+UySXaw9wrBn5So3A==@lists.infradead.org X-Gm-Message-State: AOJu0Yzj1yfE+PkpBNMxmmeNyj+oBL0oOiEIohQvM9jU662GtmK8h9sj DiiBv07nmyWdwCMxuYuxfdBpHVkRpBEswOBCLPVKrAG+1xzZCl1rCrZqeJVkdKc= X-Gm-Gg: ASbGncvjUhapQgzYtkSlqQ46YBkzBUT5QlkXDvrgkoyJ5Xp4TyAr1qGt0A/NfavMc8L 0PWxQldfuwq3YbM0VhjWNG6pxoOzx7zbd3jMdDpGjxAznkJiNpuroKzOAwjeuNQQ2ZJddh/bPW9 pWryHofGE4Q5KtZkd7B10+/sV5gczOUa1TwwQZjfRuhfDwOs866dWE1UZI9eRM73F85r7BTbbLr y7VI4wdmgwS+fmg2WK3ESrTWRiTQ/xQekRh+U5Y1KlGHXFU89nhHTTBm/FDr6+PaQ9kGtN4Lx1T /jxWCfPT59QV3ue85vgTjf0LYZudr7s8oRD42BVidqVFxWHk34HU4QMB X-Google-Smtp-Source: AGHT+IFfYY3GNObYbRkOWr107QkuPT9aClIwdgADGAW00AGW4WvCO631D/hnLE5yPui2XsBly5Wj2g== X-Received: by 2002:a05:6000:4182:b0:390:f6be:af1d with SMTP id ffacd0b85a97d-3996b49903fmr451332f8f.41.1742231306653; Mon, 17 Mar 2025 10:08:26 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d23cddb2asm96014505e9.39.2025.03.17.10.08.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Mar 2025 10:08:26 -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 , Andrew Jones Subject: [PATCH v4 17/18] RISC-V: KVM: add support for FWFT SBI extension Date: Mon, 17 Mar 2025 18:06:23 +0100 Message-ID: <20250317170625.1142870-18-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250317170625.1142870-1-cleger@rivosinc.com> References: <20250317170625.1142870-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250317_100828_307391_DB612A0C X-CRM114-Status: GOOD ( 25.04 ) 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 bT4KUmV2aWV3ZWQtYnk6IEFuZHJldyBKb25lcyA8YWpvbmVzQHZlbnRhbmFtaWNyby5jb20+Ci0t LQogYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oICAgICAgICAgIHwgICA0ICsKIGFy Y2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpLmggICAgICB8ICAgMSArCiBhcmNoL3Jp c2N2L2luY2x1ZGUvYXNtL2t2bV92Y3B1X3NiaV9md2Z0LmggfCAgMjkgKysrCiBhcmNoL3Jpc2N2 L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggICAgICAgICAgfCAgIDEgKwogYXJjaC9yaXNjdi9rdm0v TWFrZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGFyY2gvcmlzY3Yva3ZtL3ZjcHVf c2JpLmMgICAgICAgICAgICAgICAgICB8ICAgNCArCiBhcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9m d2Z0LmMgICAgICAgICAgICAgfCAyMTYgKysrKysrKysrKysrKysrKysrKysrCiA3IGZpbGVzIGNo YW5nZWQsIDI1NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9yaXNjdi9p bmNsdWRlL2FzbS9rdm1fdmNwdV9zYmlfZndmdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9y aXNjdi9rdm0vdmNwdV9zYmlfZndmdC5jCgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRl L2FzbS9rdm1faG9zdC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4 IGJiOTNkMjk5NWVhMi4uYzBkYjYxYmE2OTFhIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1 ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5o CkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL2t2bV92Y3B1X2ZwLmg+CiAjaW5jbHVk ZSA8YXNtL2t2bV92Y3B1X2luc24uaD4KICNpbmNsdWRlIDxhc20va3ZtX3ZjcHVfc2JpLmg+Cisj aW5jbHVkZSA8YXNtL2t2bV92Y3B1X3NiaV9md2Z0Lmg+CiAjaW5jbHVkZSA8YXNtL2t2bV92Y3B1 X3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL2t2bV92Y3B1X3BtdS5oPgogCkBAIC0yODEsNiArMjgy LDkgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCS8qIFBlcmZvcm1hbmNlIG1vbml0b3Jpbmcg Y29udGV4dCAqLwogCXN0cnVjdCBrdm1fcG11IHBtdV9jb250ZXh0OwogCisJLyogRmlybXdhcmUg ZmVhdHVyZSBTQkkgZXh0ZW5zaW9uIGNvbnRleHQgKi8KKwlzdHJ1Y3Qga3ZtX3NiaV9md2Z0IGZ3 ZnRfY29udGV4dDsKKwogCS8qICdzdGF0aWMnIGNvbmZpZ3VyYXRpb25zIHdoaWNoIGFyZSBzZXQg b25seSBvbmNlICovCiAJc3RydWN0IGt2bV92Y3B1X2NvbmZpZyBjZmc7CiAKZGlmZiAtLWdpdCBh L2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpLmggYi9hcmNoL3Jpc2N2L2luY2x1 ZGUvYXNtL2t2bV92Y3B1X3NiaS5oCmluZGV4IGNiNjhiM2E1N2M4Zi4uZmZkMDNmZWQwYzA2IDEw MDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV92Y3B1X3NiaS5oCisrKyBiL2Fy Y2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpLmgKQEAgLTk4LDYgKzk4LDcgQEAgZXh0 ZXJuIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9zYmlfZXh0ZW5zaW9uIHZjcHVfc2JpX2V4dF9oc207 CiBleHRlcm4gY29uc3Qgc3RydWN0IGt2bV92Y3B1X3NiaV9leHRlbnNpb24gdmNwdV9zYmlfZXh0 X2RiY247CiBleHRlcm4gY29uc3Qgc3RydWN0IGt2bV92Y3B1X3NiaV9leHRlbnNpb24gdmNwdV9z YmlfZXh0X3N1c3A7CiBleHRlcm4gY29uc3Qgc3RydWN0IGt2bV92Y3B1X3NiaV9leHRlbnNpb24g dmNwdV9zYmlfZXh0X3N0YTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX2V4dGVu c2lvbiB2Y3B1X3NiaV9leHRfZndmdDsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfc2Jp X2V4dGVuc2lvbiB2Y3B1X3NiaV9leHRfZXhwZXJpbWVudGFsOwogZXh0ZXJuIGNvbnN0IHN0cnVj dCBrdm1fdmNwdV9zYmlfZXh0ZW5zaW9uIHZjcHVfc2JpX2V4dF92ZW5kb3I7CiAKZGlmZiAtLWdp dCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpX2Z3ZnQuaCBiL2FyY2gvcmlz Y3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpX2Z3ZnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjliYTg0MTM1NTc1OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gv cmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpX2Z3ZnQuaApAQCAtMCwwICsxLDI5IEBACisv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogQ29weXJp Z2h0IChjKSAyMDI1IFJpdm9zIEluYy4KKyAqCisgKiBBdXRob3JzOgorICogICAgIENsw6ltZW50 IEzDqWdlciA8Y2xlZ2VyQHJpdm9zaW5jLmNvbT4KKyAqLworCisjaWZuZGVmIF9fS1ZNX1ZDUFVf UklTQ1ZfRldGVF9ICisjZGVmaW5lIF9fS1ZNX1ZDUFVfUklTQ1ZfRldGVF9ICisKKyNpbmNsdWRl IDxhc20vc2JpLmg+CisKK3N0cnVjdCBrdm1fc2JpX2Z3ZnRfZmVhdHVyZTsKKworc3RydWN0IGt2 bV9zYmlfZndmdF9jb25maWcgeworCWNvbnN0IHN0cnVjdCBrdm1fc2JpX2Z3ZnRfZmVhdHVyZSAq ZmVhdHVyZTsKKwlib29sIHN1cHBvcnRlZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKwor LyogRldGVCBkYXRhIHN0cnVjdHVyZSBwZXIgdmNwdSAqLworc3RydWN0IGt2bV9zYmlfZndmdCB7 CisJc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKmNvbmZpZ3M7Cit9OworCisjZGVmaW5lIHZj cHVfdG9fZndmdCh2Y3B1KSAoJih2Y3B1KS0+YXJjaC5md2Z0X2NvbnRleHQpCisKKyNlbmRpZiAv KiAhX19LVk1fVkNQVV9SSVNDVl9GV0ZUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5j bHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS91YXBpL2FzbS9rdm0uaApp bmRleCBmMDZiYzVlZmNkNzkuLmZhNmVlZTFjYWY0MSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9p bmNsdWRlL3VhcGkvYXNtL2t2bS5oCisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS91YXBpL2FzbS9r dm0uaApAQCAtMjAyLDYgKzIwMiw3IEBAIGVudW0gS1ZNX1JJU0NWX1NCSV9FWFRfSUQgewogCUtW TV9SSVNDVl9TQklfRVhUX0RCQ04sCiAJS1ZNX1JJU0NWX1NCSV9FWFRfU1RBLAogCUtWTV9SSVND Vl9TQklfRVhUX1NVU1AsCisJS1ZNX1JJU0NWX1NCSV9FWFRfRldGVCwKIAlLVk1fUklTQ1ZfU0JJ X0VYVF9NQVgsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZSBiL2Fy Y2gvcmlzY3Yva3ZtL01ha2VmaWxlCmluZGV4IDRlMGJiYTkxZDI4NC4uMDZlMmQ1MmE5Yjg4IDEw MDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL3Jpc2N2L2t2bS9N YWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQCBrdm0teSArPSB2Y3B1X29uZXJlZy5vCiBrdm0tJChD T05GSUdfUklTQ1ZfUE1VX1NCSSkgKz0gdmNwdV9wbXUubwoga3ZtLXkgKz0gdmNwdV9zYmkubwog a3ZtLXkgKz0gdmNwdV9zYmlfYmFzZS5vCitrdm0teSArPSB2Y3B1X3NiaV9md2Z0Lm8KIGt2bS15 ICs9IHZjcHVfc2JpX2hzbS5vCiBrdm0tJChDT05GSUdfUklTQ1ZfUE1VX1NCSSkgKz0gdmNwdV9z YmlfcG11Lm8KIGt2bS15ICs9IHZjcHVfc2JpX3JlcGxhY2UubwpkaWZmIC0tZ2l0IGEvYXJjaC9y aXNjdi9rdm0vdmNwdV9zYmkuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpLmMKaW5kZXggNTBi ZTA3OWI1NTI4Li4wNzQ4ODEwYzAyNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVf c2JpLmMKKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmkuYwpAQCAtNzgsNiArNzgsMTAgQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fcmlzY3Zfc2JpX2V4dGVuc2lvbl9lbnRyeSBzYmlfZXh0 W10gPSB7CiAJCS5leHRfaWR4ID0gS1ZNX1JJU0NWX1NCSV9FWFRfU1RBLAogCQkuZXh0X3B0ciA9 ICZ2Y3B1X3NiaV9leHRfc3RhLAogCX0sCisJeworCQkuZXh0X2lkeCA9IEtWTV9SSVNDVl9TQklf RVhUX0ZXRlQsCisJCS5leHRfcHRyID0gJnZjcHVfc2JpX2V4dF9md2Z0LAorCX0sCiAJewogCQku ZXh0X2lkeCA9IEtWTV9SSVNDVl9TQklfRVhUX0VYUEVSSU1FTlRBTCwKIAkJLmV4dF9wdHIgPSAm dmNwdV9zYmlfZXh0X2V4cGVyaW1lbnRhbCwKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3Zj cHVfc2JpX2Z3ZnQuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX2Z3ZnQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhhN2NmZTFmZTdhNwotLS0gL2Rldi9udWxs CisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX2Z3ZnQuYwpAQCAtMCwwICsxLDIxNiBAQAor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMjUgUml2b3MgSW5jLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICAgQ2zDqW1lbnQgTMOpZ2Vy IDxjbGVnZXJAcml2b3NpbmMuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgor I2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5j bHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vc2JpLmg+CisjaW5jbHVkZSA8 YXNtL2t2bV92Y3B1X3NiaS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fdmNwdV9zYmlfZndmdC5oPgor CitzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2ZlYXR1cmUgeworCS8qKgorCSAqIEBpZDogRmVhdHVyZSBJ RAorCSAqLworCWVudW0gc2JpX2Z3ZnRfZmVhdHVyZV90IGlkOworCisJLyoqCisJICogQHN1cHBv cnRlZDogQ2hlY2sgaWYgdGhlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIG9uIHRoZSB2Y3B1CisJICoK KwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLCBpZiBub3QgcHJvdmlkZWQgdGhlIGZlYXR1 cmUgaXMgYXNzdW1lZCB0bworCSAqIGJlIHN1cHBvcnRlZAorCSAqLworCWJvb2wgKCpzdXBwb3J0 ZWQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKKwkvKioKKwkgKiBAc2V0OiBTZXQgdGhlIGZl YXR1cmUgdmFsdWUKKwkgKgorCSAqIFJldHVybiBTQklfU1VDQ0VTUyBvbiBzdWNjZXNzIG9yIGFu IFNCSSBlcnJvciAoU0JJX0VSUl8qKQorCSAqCisJICogVGhpcyBjYWxsYmFjayBpcyBtYW5kYXRv cnkKKwkgKi8KKwlsb25nICgqc2V0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1f c2JpX2Z3ZnRfY29uZmlnICpjb25mLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsKKworCS8qKgorCSAq IEBnZXQ6IEdldCB0aGUgZmVhdHVyZSBjdXJyZW50IHZhbHVlCisJICoKKwkgKiBSZXR1cm4gU0JJ X1NVQ0NFU1Mgb24gc3VjY2VzcyBvciBhbiBTQkkgZXJyb3IgKFNCSV9FUlJfKikKKwkgKgorCSAq IFRoaXMgY2FsbGJhY2sgaXMgbWFuZGF0b3J5CisJICovCisJIGxvbmcgKCpnZXQpKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKmNvbmYsIHVuc2lnbmVk IGxvbmcgKnZhbHVlKTsKK307CisKK3N0YXRpYyBjb25zdCBlbnVtIHNiaV9md2Z0X2ZlYXR1cmVf dCBrdm1fZndmdF9kZWZpbmVkX2ZlYXR1cmVzW10gPSB7CisJU0JJX0ZXRlRfTUlTQUxJR05FRF9F WENfREVMRUcsCisJU0JJX0ZXRlRfTEFORElOR19QQUQsCisJU0JJX0ZXRlRfU0hBRE9XX1NUQUNL LAorCVNCSV9GV0ZUX0RPVUJMRV9UUkFQLAorCVNCSV9GV0ZUX1BURV9BRF9IV19VUERBVElORywK KwlTQklfRldGVF9QT0lOVEVSX01BU0tJTkdfUE1MRU4sCit9OworCitzdGF0aWMgYm9vbCBrdm1f ZndmdF9pc19kZWZpbmVkX2ZlYXR1cmUoZW51bSBzYmlfZndmdF9mZWF0dXJlX3QgZmVhdHVyZSkK K3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGt2bV9md2Z0X2RlZmlu ZWRfZmVhdHVyZXMpOyBpKyspIHsKKwkJaWYgKGt2bV9md2Z0X2RlZmluZWRfZmVhdHVyZXNbaV0g PT0gZmVhdHVyZSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fc2JpX2Z3ZnRfZmVhdHVyZSBmZWF0dXJlc1tdID0gewor fTsKKworc3RhdGljIHN0cnVjdCBrdm1fc2JpX2Z3ZnRfY29uZmlnICoKK2t2bV9zYmlfZndmdF9n ZXRfY29uZmlnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBzYmlfZndmdF9mZWF0dXJlX3Qg ZmVhdHVyZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qga3ZtX3NiaV9md2Z0ICpmd2Z0ID0gdmNwdV90 b19md2Z0KHZjcHUpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmVhdHVyZXMpOyBp KyspIHsKKwkJaWYgKGZ3ZnQtPmNvbmZpZ3NbaV0uZmVhdHVyZS0+aWQgPT0gZmVhdHVyZSkKKwkJ CXJldHVybiAmZndmdC0+Y29uZmlnc1tpXTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3Rh dGljIGludCBrdm1fZndmdF9nZXRfZmVhdHVyZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBm ZWF0dXJlLAorCQkJCXN0cnVjdCBrdm1fc2JpX2Z3ZnRfY29uZmlnICoqY29uZikKK3sKKwlzdHJ1 Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyAqdGNvbmY7CisKKwl0Y29uZiA9IGt2bV9zYmlfZndmdF9n ZXRfY29uZmlnKHZjcHUsIGZlYXR1cmUpOworCWlmICghdGNvbmYpIHsKKwkJaWYgKGt2bV9md2Z0 X2lzX2RlZmluZWRfZmVhdHVyZShmZWF0dXJlKSkKKwkJCXJldHVybiBTQklfRVJSX05PVF9TVVBQ T1JURUQ7CisKKwkJcmV0dXJuIFNCSV9FUlJfREVOSUVEOworCX0KKworCWlmICghdGNvbmYtPnN1 cHBvcnRlZCkKKwkJcmV0dXJuIFNCSV9FUlJfTk9UX1NVUFBPUlRFRDsKKworCSpjb25mID0gdGNv bmY7CisKKwlyZXR1cm4gU0JJX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3NiaV9md2Z0 X3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBmZWF0dXJlLAorCQkJICAgIHVuc2lnbmVk IGxvbmcgdmFsdWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qg a3ZtX3NiaV9md2Z0X2NvbmZpZyAqY29uZjsKKworCXJldCA9IGt2bV9md2Z0X2dldF9mZWF0dXJl KHZjcHUsIGZlYXR1cmUsICZjb25mKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYg KChmbGFncyAmIH5TQklfRldGVF9TRVRfRkxBR19MT0NLKSAhPSAwKQorCQlyZXR1cm4gU0JJX0VS Ul9JTlZBTElEX1BBUkFNOworCisJaWYgKGNvbmYtPmZsYWdzICYgU0JJX0ZXRlRfU0VUX0ZMQUdf TE9DSykKKwkJcmV0dXJuIFNCSV9FUlJfREVOSUVEX0xPQ0tFRDsKKworCWNvbmYtPmZsYWdzID0g ZmxhZ3M7CisKKwlyZXR1cm4gY29uZi0+ZmVhdHVyZS0+c2V0KHZjcHUsIGNvbmYsIHZhbHVlKTsK K30KKworc3RhdGljIGludCBrdm1fc2JpX2Z3ZnRfZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwg dW5zaWduZWQgbG9uZyBmZWF0dXJlLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKnZhbHVlKQorewor CWludCByZXQ7CisJc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKmNvbmY7CisKKwlyZXQgPSBr dm1fZndmdF9nZXRfZmVhdHVyZSh2Y3B1LCBmZWF0dXJlLCAmY29uZik7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldHVybiBjb25mLT5mZWF0dXJlLT5nZXQodmNwdSwgY29uZiwgdmFs dWUpOworfQorCitzdGF0aWMgaW50IGt2bV9zYmlfZXh0X2Z3ZnRfaGFuZGxlcihzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sCisJCQkJICAgIHN0cnVjdCBrdm1fdmNw dV9zYmlfcmV0dXJuICpyZXRkYXRhKQoreworCWludCByZXQ7CisJc3RydWN0IGt2bV9jcHVfY29u dGV4dCAqY3AgPSAmdmNwdS0+YXJjaC5ndWVzdF9jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgZnVu Y2lkID0gY3AtPmE2OworCisJc3dpdGNoIChmdW5jaWQpIHsKKwljYXNlIFNCSV9FWFRfRldGVF9T RVQ6CisJCXJldCA9IGt2bV9zYmlfZndmdF9zZXQodmNwdSwgY3AtPmEwLCBjcC0+YTEsIGNwLT5h Mik7CisJCWJyZWFrOworCWNhc2UgU0JJX0VYVF9GV0ZUX0dFVDoKKwkJcmV0ID0ga3ZtX3NiaV9m d2Z0X2dldCh2Y3B1LCBjcC0+YTAsICZyZXRkYXRhLT5vdXRfdmFsKTsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJcmV0ID0gU0JJX0VSUl9OT1RfU1VQUE9SVEVEOworCQlicmVhazsKKwl9CisKKwly ZXRkYXRhLT5lcnJfdmFsID0gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga3Zt X3NiaV9leHRfZndmdF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3Zt X3NiaV9md2Z0ICpmd2Z0ID0gdmNwdV90b19md2Z0KHZjcHUpOworCWNvbnN0IHN0cnVjdCBrdm1f c2JpX2Z3ZnRfZmVhdHVyZSAqZmVhdHVyZTsKKwlzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyAq Y29uZjsKKwlpbnQgaTsKKworCWZ3ZnQtPmNvbmZpZ3MgPSBrY2FsbG9jKEFSUkFZX1NJWkUoZmVh dHVyZXMpLCBzaXplb2Yoc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcpLAorCQkJCUdGUF9LRVJO RUwpOworCWlmICghZndmdC0+Y29uZmlncykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShmZWF0dXJlcyk7IGkrKykgeworCQlmZWF0dXJlID0gJmZlYXR1 cmVzW2ldOworCQljb25mID0gJmZ3ZnQtPmNvbmZpZ3NbaV07CisJCWlmIChmZWF0dXJlLT5zdXBw b3J0ZWQpCisJCQljb25mLT5zdXBwb3J0ZWQgPSBmZWF0dXJlLT5zdXBwb3J0ZWQodmNwdSk7CisJ CWVsc2UKKwkJCWNvbmYtPnN1cHBvcnRlZCA9IHRydWU7CisKKwkJY29uZi0+ZmVhdHVyZSA9IGZl YXR1cmU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9zYmlfZXh0X2Z3 ZnRfZGVpbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtX3NiaV9md2Z0 ICpmd2Z0ID0gdmNwdV90b19md2Z0KHZjcHUpOworCisJa2ZyZWUoZndmdC0+Y29uZmlncyk7Cit9 CisKK3N0YXRpYyB2b2lkIGt2bV9zYmlfZXh0X2Z3ZnRfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2 Y3B1KQoreworCWludCBpOworCXN0cnVjdCBrdm1fc2JpX2Z3ZnQgKmZ3ZnQgPSB2Y3B1X3RvX2Z3 ZnQodmNwdSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmZWF0dXJlcyk7IGkrKykK KwkJZndmdC0+Y29uZmlnc1tpXS5mbGFncyA9IDA7Cit9CisKK2NvbnN0IHN0cnVjdCBrdm1fdmNw dV9zYmlfZXh0ZW5zaW9uIHZjcHVfc2JpX2V4dF9md2Z0ID0geworCS5leHRpZF9zdGFydCA9IFNC SV9FWFRfRldGVCwKKwkuZXh0aWRfZW5kID0gU0JJX0VYVF9GV0ZULAorCS5oYW5kbGVyID0ga3Zt X3NiaV9leHRfZndmdF9oYW5kbGVyLAorCS5pbml0ID0ga3ZtX3NiaV9leHRfZndmdF9pbml0LAor CS5kZWluaXQgPSBrdm1fc2JpX2V4dF9md2Z0X2RlaW5pdCwKKwkucmVzZXQgPSBrdm1fc2JpX2V4 dF9md2Z0X3Jlc2V0LAorfTsKLS0gCjIuNDcuMgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNj dkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtcmlzY3YK