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 A4028C369D0 for ; Thu, 17 Apr 2025 12:36:26 +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=wYJrePHe6en6KFWVI6NCO2VyVn1UGmXUxYRRwRK9Vo4=; b=lsbse8zULhgKPb q9HJ16oU/sVM3ycRws5WvM1BVZ42+B95QY05mYX58b/8WdWPm01LZewYLb9jrGgh2XrELNvKXfaIc 1PLsArAxDr3c+0dyN/rFTNOVol4U1zq1onwx32XfXZ+yXwanOArgLl4JpdHWrnkPHSKcstEYxyANP HQiVeoPgyPHNlRUojrejm+z5vnxNIFPx64UpFaGvobIlbTYe56sF6J749ShKt8HgPcUANeNKIGOrj ot53yfFPQZl78uPT+BOaD2OJwo9TQzQlZtKUmoCXnTx38Alyq/x3tkxKk89QhH2D/EWeVNUff5tgb pIMQ5ok/tkVujeksLpTw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OTd-0000000CzPi-3NiQ; Thu, 17 Apr 2025 12:36:21 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5OJN-0000000Cw0O-272W for linux-riscv@lists.infradead.org; Thu, 17 Apr 2025 12:25:47 +0000 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-22401f4d35aso8575275ad.2 for ; Thu, 17 Apr 2025 05:25:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1744892745; x=1745497545; 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=pIsv+titG4x0ovEMDknM6ko4IiiOufEK1Ymj080VPx4=; b=rprm0DDXmzEsYBTVIrdgRMYV7N5lMIQ/oPJPedSIH1Fnpig/Z+HHK2hDHr8NtlL3Bv GqUAVAnT7mN2kF2zE5d/7xjBA2LfWB6xl5cyt9rwKu0+GcrbvSo2V91vd3JngFJXM5mJ A3Bu6WtzTyGSL+rXu0tBED+CAyVlz0YJ9PB+TQE4aBIdpb/1/f4WgWdQTHEmomsEtdiJ Z35TK50ctxVwgiKdg4YHJBQbcT1oXEZClSk5JDhGldAYWV4jOXwl+jdLyyVo7fs/yGnt DG7CA1EhoEPwYQK5Bl7CiFXA1RLsd56s2DbN1mVnZOyyCtH/9KdQij1iRw1Oh9/CNUeB VsqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744892745; x=1745497545; 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=pIsv+titG4x0ovEMDknM6ko4IiiOufEK1Ymj080VPx4=; b=ImBqaURrxYD/RPHrAjTi/Ek//U0dq821RCZPzkIHT7e+EJOPUirE6FKx7NTN6f1qbm TrU1+u+NZu1M92O1irDBeJIHqG3vaiRlbUDJ98y/TtcGqPOhZDHBWS4dAwWDWcu7eb77 2GTw5KEDJc+MsJ0Txo/QRgYQ+FP80b1yQB65oesZcvZpKrbheXcB8UXyNGKo4uHGGvU6 6Af1kh+iS8A37c/l7LGHmJnDfSOP+qOH4swT1i2ENIa73Wf7KUcocJ9BBr+bUe+PH1RZ KHFbTw1AmtZ25+kGBR+QHbvJEGp6WC+ktIgtQ0K4CKZzl9yalJfbrzWyzjijeKOMXk1b GsPw== X-Forwarded-Encrypted: i=1; AJvYcCW27A8z3yNsNm7ZYi+tI3mSFWbmvSpcmaA6LpTNW+Ilmw5D8QF+b8wzXmzyVYnWy6mxn/XiNwv/tT1oJw==@lists.infradead.org X-Gm-Message-State: AOJu0YxzYvfhG1KbJPNUFkvNEt/vKf0xy2u43u7+DITNS02ndRBRUFXo NLNkpQ+a3H1P3QQuun2OjM5R0crjDbiku0Ien73XOMbNVULD9dEDvqlX0hn2ntI= X-Gm-Gg: ASbGncvjaozSJVDONWGtj/ofWAh0ZEhgemFJp83aGLtrPsuCdj+RegMGG+phP1D3BxN 7zHsMZ2IdaM8U3vX+Y9zaMzshANpXCIHOAPpW+rLzaR5lLWIhcI1g4qYmJ/xF4+Zw5NVNSAjbQp mBVHLoZhSq7sbKSVo0w6DGK2BuL3m18ZpnwDqAu9SiXTNQqd4dH9DezLa728Dgo9JyYnGKIi+U8 r3CeeRMDWq05JiCPmrR8qar6d5/m5hTVQAZ1Ao4khHqYAD9jgWlQE7QyML18w0ObpZ46c0sddCk 8IC4XWqnwBEUgfKGlNIW114MDSEIn78ywHoTLXO8CA== X-Google-Smtp-Source: AGHT+IGDDihX5lWdOzC9ncwrK/tngZ3TXIjrRmj2gDvm4uw4i9VhaLXbViaOi5GeDmwgRF2C0Uq8jg== X-Received: by 2002:a17:902:dac2:b0:21f:4c8b:c4de with SMTP id d9443c01a7336-22c3596dbe6mr73195675ad.42.1744892744869; Thu, 17 Apr 2025 05:25:44 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c3ee1a78dsm18489415ad.253.2025.04.17.05.25.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 05:25:44 -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 v5 12/13] RISC-V: KVM: add support for FWFT SBI extension Date: Thu, 17 Apr 2025 14:19:59 +0200 Message-ID: <20250417122337.547969-13-cleger@rivosinc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250417122337.547969-1-cleger@rivosinc.com> References: <20250417122337.547969-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_052545_545695_107B1C54 X-CRM114-Status: GOOD ( 24.64 ) 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 IDRmYTAyZTA4MjE0Mi4uYzNmODgwNzYzYjlhIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1 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 bmRleCA1ZjU5ZmQyMjZjYzUuLjViYTc3YTNkOWY2ZSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9p bmNsdWRlL3VhcGkvYXNtL2t2bS5oCisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS91YXBpL2FzbS9r dm0uaApAQCAtMjA0LDYgKzIwNCw3IEBAIGVudW0gS1ZNX1JJU0NWX1NCSV9FWFRfSUQgewogCUtW TV9SSVNDVl9TQklfRVhUX0RCQ04sCiAJS1ZNX1JJU0NWX1NCSV9FWFRfU1RBLAogCUtWTV9SSVND Vl9TQklfRVhUX1NVU1AsCisJS1ZNX1JJU0NWX1NCSV9FWFRfRldGVCwKIAlLVk1fUklTQ1ZfU0JJ X0VYVF9NQVgsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZSBiL2Fy Y2gvcmlzY3Yva3ZtL01ha2VmaWxlCmluZGV4IDRlMGJiYTkxZDI4NC4uMDZlMmQ1MmE5Yjg4IDEw MDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL3Jpc2N2L2t2bS9N YWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQCBrdm0teSArPSB2Y3B1X29uZXJlZy5vCiBrdm0tJChD T05GSUdfUklTQ1ZfUE1VX1NCSSkgKz0gdmNwdV9wbXUubwoga3ZtLXkgKz0gdmNwdV9zYmkubwog a3ZtLXkgKz0gdmNwdV9zYmlfYmFzZS5vCitrdm0teSArPSB2Y3B1X3NiaV9md2Z0Lm8KIGt2bS15 ICs9IHZjcHVfc2JpX2hzbS5vCiBrdm0tJChDT05GSUdfUklTQ1ZfUE1VX1NCSSkgKz0gdmNwdV9z YmlfcG11Lm8KIGt2bS15ICs9IHZjcHVfc2JpX3JlcGxhY2UubwpkaWZmIC0tZ2l0IGEvYXJjaC9y aXNjdi9rdm0vdmNwdV9zYmkuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpLmMKaW5kZXggNTBi ZTA3OWI1NTI4Li4wNzQ4ODEwYzAyNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVf c2JpLmMKKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmkuYwpAQCAtNzgsNiArNzgsMTAgQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fcmlzY3Zfc2JpX2V4dGVuc2lvbl9lbnRyeSBzYmlfZXh0 W10gPSB7CiAJCS5leHRfaWR4ID0gS1ZNX1JJU0NWX1NCSV9FWFRfU1RBLAogCQkuZXh0X3B0ciA9 ICZ2Y3B1X3NiaV9leHRfc3RhLAogCX0sCisJeworCQkuZXh0X2lkeCA9IEtWTV9SSVNDVl9TQklf RVhUX0ZXRlQsCisJCS5leHRfcHRyID0gJnZjcHVfc2JpX2V4dF9md2Z0LAorCX0sCiAJewogCQku ZXh0X2lkeCA9IEtWTV9SSVNDVl9TQklfRVhUX0VYUEVSSU1FTlRBTCwKIAkJLmV4dF9wdHIgPSAm dmNwdV9zYmlfZXh0X2V4cGVyaW1lbnRhbCwKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3Zj cHVfc2JpX2Z3ZnQuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX2Z3ZnQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIwZjY2YzdiZjAxMAotLS0gL2Rldi9udWxs CisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX2Z3ZnQuYwpAQCAtMCwwICsxLDIxNiBAQAor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMjUgUml2b3MgSW5jLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICAgQ2zDqW1lbnQgTMOpZ2Vy IDxjbGVnZXJAcml2b3NpbmMuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgor I2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5j bHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vc2JpLmg+CisjaW5jbHVkZSA8 YXNtL2t2bV92Y3B1X3NiaS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fdmNwdV9zYmlfZndmdC5oPgor CitzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2ZlYXR1cmUgeworCS8qKgorCSAqIEBpZDogRmVhdHVyZSBJ RAorCSAqLworCWVudW0gc2JpX2Z3ZnRfZmVhdHVyZV90IGlkOworCisJLyoqCisJICogQHN1cHBv cnRlZDogQ2hlY2sgaWYgdGhlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIG9uIHRoZSB2Y3B1CisJICoK KwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLCBpZiBub3QgcHJvdmlkZWQgdGhlIGZlYXR1 cmUgaXMgYXNzdW1lZCB0bworCSAqIGJlIHN1cHBvcnRlZAorCSAqLworCWJvb2wgKCpzdXBwb3J0 ZWQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKKwkvKioKKwkgKiBAc2V0OiBTZXQgdGhlIGZl YXR1cmUgdmFsdWUKKwkgKgorCSAqIFJldHVybiBTQklfU1VDQ0VTUyBvbiBzdWNjZXNzIG9yIGFu IFNCSSBlcnJvciAoU0JJX0VSUl8qKQorCSAqCisJICogVGhpcyBjYWxsYmFjayBpcyBtYW5kYXRv cnkKKwkgKi8KKwlsb25nICgqc2V0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1f c2JpX2Z3ZnRfY29uZmlnICpjb25mLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsKKworCS8qKgorCSAq IEBnZXQ6IEdldCB0aGUgZmVhdHVyZSBjdXJyZW50IHZhbHVlCisJICoKKwkgKiBSZXR1cm4gU0JJ X1NVQ0NFU1Mgb24gc3VjY2VzcyBvciBhbiBTQkkgZXJyb3IgKFNCSV9FUlJfKikKKwkgKgorCSAq IFRoaXMgY2FsbGJhY2sgaXMgbWFuZGF0b3J5CisJICovCisJbG9uZyAoKmdldCkoc3RydWN0IGt2 bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyAqY29uZiwgdW5zaWduZWQg bG9uZyAqdmFsdWUpOworfTsKKworc3RhdGljIGNvbnN0IGVudW0gc2JpX2Z3ZnRfZmVhdHVyZV90 IGt2bV9md2Z0X2RlZmluZWRfZmVhdHVyZXNbXSA9IHsKKwlTQklfRldGVF9NSVNBTElHTkVEX0VY Q19ERUxFRywKKwlTQklfRldGVF9MQU5ESU5HX1BBRCwKKwlTQklfRldGVF9TSEFET1dfU1RBQ0ss CisJU0JJX0ZXRlRfRE9VQkxFX1RSQVAsCisJU0JJX0ZXRlRfUFRFX0FEX0hXX1VQREFUSU5HLAor CVNCSV9GV0ZUX1BPSU5URVJfTUFTS0lOR19QTUxFTiwKK307CisKK3N0YXRpYyBib29sIGt2bV9m d2Z0X2lzX2RlZmluZWRfZmVhdHVyZShlbnVtIHNiaV9md2Z0X2ZlYXR1cmVfdCBmZWF0dXJlKQor eworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoa3ZtX2Z3ZnRfZGVmaW5l ZF9mZWF0dXJlcyk7IGkrKykgeworCQlpZiAoa3ZtX2Z3ZnRfZGVmaW5lZF9mZWF0dXJlc1tpXSA9 PSBmZWF0dXJlKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGt2bV9zYmlfZndmdF9mZWF0dXJlIGZlYXR1cmVzW10gPSB7Cit9 OworCitzdGF0aWMgc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKgora3ZtX3NiaV9md2Z0X2dl dF9jb25maWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHNiaV9md2Z0X2ZlYXR1cmVfdCBm ZWF0dXJlKQoreworCWludCBpOworCXN0cnVjdCBrdm1fc2JpX2Z3ZnQgKmZ3ZnQgPSB2Y3B1X3Rv X2Z3ZnQodmNwdSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmZWF0dXJlcyk7IGkr KykgeworCQlpZiAoZndmdC0+Y29uZmlnc1tpXS5mZWF0dXJlLT5pZCA9PSBmZWF0dXJlKQorCQkJ cmV0dXJuICZmd2Z0LT5jb25maWdzW2ldOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0 aWMgaW50IGt2bV9md2Z0X2dldF9mZWF0dXJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGZl YXR1cmUsCisJCQkJc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKipjb25mKQoreworCXN0cnVj dCBrdm1fc2JpX2Z3ZnRfY29uZmlnICp0Y29uZjsKKworCXRjb25mID0ga3ZtX3NiaV9md2Z0X2dl dF9jb25maWcodmNwdSwgZmVhdHVyZSk7CisJaWYgKCF0Y29uZikgeworCQlpZiAoa3ZtX2Z3ZnRf aXNfZGVmaW5lZF9mZWF0dXJlKGZlYXR1cmUpKQorCQkJcmV0dXJuIFNCSV9FUlJfTk9UX1NVUFBP UlRFRDsKKworCQlyZXR1cm4gU0JJX0VSUl9ERU5JRUQ7CisJfQorCisJaWYgKCF0Y29uZi0+c3Vw cG9ydGVkKQorCQlyZXR1cm4gU0JJX0VSUl9OT1RfU1VQUE9SVEVEOworCisJKmNvbmYgPSB0Y29u ZjsKKworCXJldHVybiBTQklfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBrdm1fc2JpX2Z3ZnRf c2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGZlYXR1cmUsCisJCQkgICAgdW5zaWduZWQg bG9uZyB2YWx1ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBr dm1fc2JpX2Z3ZnRfY29uZmlnICpjb25mOworCisJcmV0ID0ga3ZtX2Z3ZnRfZ2V0X2ZlYXR1cmUo dmNwdSwgZmVhdHVyZSwgJmNvbmYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAo KGZsYWdzICYgflNCSV9GV0ZUX1NFVF9GTEFHX0xPQ0spICE9IDApCisJCXJldHVybiBTQklfRVJS X0lOVkFMSURfUEFSQU07CisKKwlpZiAoY29uZi0+ZmxhZ3MgJiBTQklfRldGVF9TRVRfRkxBR19M T0NLKQorCQlyZXR1cm4gU0JJX0VSUl9ERU5JRURfTE9DS0VEOworCisJY29uZi0+ZmxhZ3MgPSBm bGFnczsKKworCXJldHVybiBjb25mLT5mZWF0dXJlLT5zZXQodmNwdSwgY29uZiwgdmFsdWUpOwor fQorCitzdGF0aWMgaW50IGt2bV9zYmlfZndmdF9nZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1 bnNpZ25lZCBsb25nIGZlYXR1cmUsCisJCQkgICAgdW5zaWduZWQgbG9uZyAqdmFsdWUpCit7CisJ aW50IHJldDsKKwlzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyAqY29uZjsKKworCXJldCA9IGt2 bV9md2Z0X2dldF9mZWF0dXJlKHZjcHUsIGZlYXR1cmUsICZjb25mKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJcmV0dXJuIGNvbmYtPmZlYXR1cmUtPmdldCh2Y3B1LCBjb25mLCB2YWx1 ZSk7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3NiaV9leHRfZndmdF9oYW5kbGVyKHN0cnVjdCBrdm1f dmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1biwKKwkJCQkgICAgc3RydWN0IGt2bV92Y3B1 X3NiaV9yZXR1cm4gKnJldGRhdGEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qga3ZtX2NwdV9jb250 ZXh0ICpjcCA9ICZ2Y3B1LT5hcmNoLmd1ZXN0X2NvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBmdW5j aWQgPSBjcC0+YTY7CisKKwlzd2l0Y2ggKGZ1bmNpZCkgeworCWNhc2UgU0JJX0VYVF9GV0ZUX1NF VDoKKwkJcmV0ID0ga3ZtX3NiaV9md2Z0X3NldCh2Y3B1LCBjcC0+YTAsIGNwLT5hMSwgY3AtPmEy KTsKKwkJYnJlYWs7CisJY2FzZSBTQklfRVhUX0ZXRlRfR0VUOgorCQlyZXQgPSBrdm1fc2JpX2Z3 ZnRfZ2V0KHZjcHUsIGNwLT5hMCwgJnJldGRhdGEtPm91dF92YWwpOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlyZXQgPSBTQklfRVJSX05PVF9TVVBQT1JURUQ7CisJCWJyZWFrOworCX0KKworCXJl dGRhdGEtPmVycl92YWwgPSByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrdm1f c2JpX2V4dF9md2Z0X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1f c2JpX2Z3ZnQgKmZ3ZnQgPSB2Y3B1X3RvX2Z3ZnQodmNwdSk7CisJY29uc3Qgc3RydWN0IGt2bV9z YmlfZndmdF9mZWF0dXJlICpmZWF0dXJlOworCXN0cnVjdCBrdm1fc2JpX2Z3ZnRfY29uZmlnICpj b25mOworCWludCBpOworCisJZndmdC0+Y29uZmlncyA9IGtjYWxsb2MoQVJSQVlfU0laRShmZWF0 dXJlcyksIHNpemVvZihzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyksCisJCQkJR0ZQX0tFUk5F TCk7CisJaWYgKCFmd2Z0LT5jb25maWdzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGZlYXR1cmVzKTsgaSsrKSB7CisJCWZlYXR1cmUgPSAmZmVhdHVy ZXNbaV07CisJCWNvbmYgPSAmZndmdC0+Y29uZmlnc1tpXTsKKwkJaWYgKGZlYXR1cmUtPnN1cHBv cnRlZCkKKwkJCWNvbmYtPnN1cHBvcnRlZCA9IGZlYXR1cmUtPnN1cHBvcnRlZCh2Y3B1KTsKKwkJ ZWxzZQorCQkJY29uZi0+c3VwcG9ydGVkID0gdHJ1ZTsKKworCQljb25mLT5mZWF0dXJlID0gZmVh dHVyZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQga3ZtX3NiaV9leHRfZndm dF9kZWluaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2JpX2Z3ZnQg KmZ3ZnQgPSB2Y3B1X3RvX2Z3ZnQodmNwdSk7CisKKwlrZnJlZShmd2Z0LT5jb25maWdzKTsKK30K Kworc3RhdGljIHZvaWQga3ZtX3NiaV9leHRfZndmdF9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZj cHUpCit7CisJaW50IGk7CisJc3RydWN0IGt2bV9zYmlfZndmdCAqZndmdCA9IHZjcHVfdG9fZndm dCh2Y3B1KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZlYXR1cmVzKTsgaSsrKQor CQlmd2Z0LT5jb25maWdzW2ldLmZsYWdzID0gMDsKK30KKworY29uc3Qgc3RydWN0IGt2bV92Y3B1 X3NiaV9leHRlbnNpb24gdmNwdV9zYmlfZXh0X2Z3ZnQgPSB7CisJLmV4dGlkX3N0YXJ0ID0gU0JJ X0VYVF9GV0ZULAorCS5leHRpZF9lbmQgPSBTQklfRVhUX0ZXRlQsCisJLmhhbmRsZXIgPSBrdm1f c2JpX2V4dF9md2Z0X2hhbmRsZXIsCisJLmluaXQgPSBrdm1fc2JpX2V4dF9md2Z0X2luaXQsCisJ LmRlaW5pdCA9IGt2bV9zYmlfZXh0X2Z3ZnRfZGVpbml0LAorCS5yZXNldCA9IGt2bV9zYmlfZXh0 X2Z3ZnRfcmVzZXQsCit9OwotLSAKMi40OS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2 QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1yaXNjdgo=