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 D91DDE77199 for ; Mon, 6 Jan 2025 15:51:08 +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=vJL8Omp8+PmoRBi3Oy53EIOpF5cyjFWV1ww4wwz/tKs=; b=vEhF9ki/YyS1qa 5XYtANAXcJ1XOacx0t0G0SXHWeYtDL3rPQ+iHaZ7TmZiVt3qi3y2StxCPiBHlGgZ4fjVT5XnoamRC H9SH+L2J9BAGuA0Ti/wd0mpTW9Vc39MqxHl4ix9xaxOFUQTSA/vQ9uKGMg/Qh84VDxaz6mhLGKw1H EP48kgHHbZsgYzjmS/SekIrHD1nGcFzvTcGwhWbVUkozLY4Jewz9v2ohV1rackICp8+IF3AMzvgMd Zq6rJTmHde9W+sZg0y9kkhSlUE6GLIsM+ULw//1Was+HwznU/ua/AP+r8qKEDKgHvoJIVlvJFJtRn 2uBUrRRtrJDNDdggqmiA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tUpNf-00000001qYt-0tw7; Mon, 06 Jan 2025 15:51:03 +0000 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tUpMC-00000001q7B-1Aln for linux-riscv@lists.infradead.org; Mon, 06 Jan 2025 15:49:33 +0000 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-2164b1f05caso204843285ad.3 for ; Mon, 06 Jan 2025 07:49:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1736178571; x=1736783371; 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=pmv3FPl4GV//dUdGFHsJuNQdfa6373N/9drpleSw3Cw=; b=jOmfHge5kEZ2+FE/2JBLsrPVrVBf+g5SPV/DccunNKAbUj+v4QHt6T3ej9AlrlmaoD FmWqfplNd8OwUPS1ybMs1URkpBxPwvD6+GW2V8u42mPj0mAjLtGQKgBvycqk7ye/8RUB exU7EvkqFeTzopR3IXR3MBK2wQN4Mq002z+Luvq3L8zL7cdko/F5h53SZ21EbCIF5aUB dVQy4A+OiBkIwIA5yisUZDV/UH/6sEw3imac3h4ZshB69++QBUtO82WD8hIjvXEjMVcs MsKo1+aRj/fSvnaCUBbcvqlNLCs44Y2yzWFAia15fTFiPHIFrJ3gVuwf5n3WVc1LkUFe fwdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736178571; x=1736783371; 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=pmv3FPl4GV//dUdGFHsJuNQdfa6373N/9drpleSw3Cw=; b=mbmWSbTUEHFhY2aLkrf2ug6Lz8GEB8rOJLbjeIeCZj6JAfXj8AtFDmHsGNGhBMMoa7 H3Ex9dvGxnTEqPZH1U4ED1zj9STVOWg1FpYjAEGvB5myOd6QtmOKXW3DIdJSly49AnnR rFWkU5s81DAF3+wZ7KLnzOeJAtV36ZUFBDTa9yWJ98fz7GQN70+pynx9zzYKiHY7yc2T qLXnW8wTV9Np8B9M9IQEOHuCe916b+bBCs0HVduulUNGk1bFq2e2t+xOjgo/ZZb2B342 Z/szJpaV7UEsBfFKIjdMxhdZ3NAb4cdmUQKvLCB+sVDItocIuQ6L4VSZ4APZpZwOa4u5 vMIA== X-Forwarded-Encrypted: i=1; AJvYcCV4IqPDITeJ3M2XClBgMb2N0k5jLI9XV5WfbIFHV1/18pwIop2e1kapmAMiGs7SGVxAqyPXXkIiOdgb7Q==@lists.infradead.org X-Gm-Message-State: AOJu0YzxwCcxzmpn3f74PugOeJer1nTAL3Zkil24ifhR7h5WMUrN9/mz FNirf8PFcoTJ20HhVwTwNhppaqTQBxJ0LiCZHE912FRtdZKBCgaYDt7SH2JjZ4o= X-Gm-Gg: ASbGncvJ2JZNnXcYVgubuBwwyCly2QwF4YRyxT0KffLbF5d8Yo/ZxyTOHMJIyaVGtVi qErMpzrJlQzTGbJXBVJYk4fhb7wasjGv7cHre52Ko1M5L6cj5OB29llGqKM9kwlMpXujRGH4Yv+ DCMUAy8l/BwASha6T9T8L8UGYnhbEOw0MCEw/hqq+H+E+aTeW6my2j6PmnI+FMY2U6Is/Gi1T/S NU/T/PsmGpTaiFLdv4GokbtxBh3R8ZBe9H5eTLiMR/0S6j4doz79Ty4oA== X-Google-Smtp-Source: AGHT+IHmlaHSPqFlwypLhD4uQLLN0+z7Y6gy5e30raQNWiHTPxZ57UoHgVMO9gETG3Wu9LX0cFWz9w== X-Received: by 2002:a17:90a:da8e:b0:2ee:9d65:65a7 with SMTP id 98e67ed59e1d1-2f452ec6ff3mr89290918a91.29.1736178571339; Mon, 06 Jan 2025 07:49:31 -0800 (PST) Received: from carbon-x1.. ([2a01:e0a:e17:9700:16d2:7456:6634:9626]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-219dc9f6967sm292479535ad.214.2025.01.06.07.49.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Jan 2025 07:49:30 -0800 (PST) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , Anup Patel , Atish Patra , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= Subject: [PATCH 4/6] RISC-V: KVM: add support for FWFT SBI extension Date: Mon, 6 Jan 2025 16:48:41 +0100 Message-ID: <20250106154847.1100344-5-cleger@rivosinc.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250106154847.1100344-1-cleger@rivosinc.com> References: <20250106154847.1100344-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250106_074932_318434_587439B1 X-CRM114-Status: GOOD ( 23.57 ) 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 Y2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpX2Z3ZnQuaCB8ICAzNyArKysrKwogYXJj aC9yaXNjdi9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oICAgICAgICAgIHwgICAxICsKIGFyY2gvcmlz Y3Yva3ZtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBhcmNoL3Jpc2N2L2t2 bS92Y3B1X3NiaS5jICAgICAgICAgICAgICAgICAgfCAgIDQgKwogYXJjaC9yaXNjdi9rdm0vdmNw dV9zYmlfZndmdC5jICAgICAgICAgICAgIHwgMTc2ICsrKysrKysrKysrKysrKysrKysrKwogNyBm aWxlcyBjaGFuZ2VkLCAyMjQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gv cmlzY3YvaW5jbHVkZS9hc20va3ZtX3ZjcHVfc2JpX2Z3ZnQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX2Z3ZnQuYwoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yv aW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3Qu aAppbmRleCAzNWVhYjZlMGY0YWUuLjliZDA0NmVkNzkwNyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNj di9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3Zt X2hvc3QuaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9rdm1fdmNwdV9mcC5oPgog I2luY2x1ZGUgPGFzbS9rdm1fdmNwdV9pbnNuLmg+CiAjaW5jbHVkZSA8YXNtL2t2bV92Y3B1X3Ni aS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fdmNwdV9zYmlfZndmdC5oPgogI2luY2x1ZGUgPGFzbS9r dm1fdmNwdV90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9rdm1fdmNwdV9wbXUuaD4KIApAQCAtMjc2 LDYgKzI3Nyw5IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAkvKiBQZXJmb3JtYW5jZSBtb25p dG9yaW5nIGNvbnRleHQgKi8KIAlzdHJ1Y3Qga3ZtX3BtdSBwbXVfY29udGV4dDsKIAorCS8qIEZp cm13YXJlIGZlYXR1cmUgU0JJIGV4dGVuc2lvbiBjb250ZXh0ICovCisJc3RydWN0IGt2bV9zYmlf ZndmdCBmd2Z0X2NvbnRleHQ7CisKIAkvKiAnc3RhdGljJyBjb25maWd1cmF0aW9ucyB3aGljaCBh cmUgc2V0IG9ubHkgb25jZSAqLwogCXN0cnVjdCBrdm1fdmNwdV9jb25maWcgY2ZnOwogCmRpZmYg LS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV92Y3B1X3NiaS5oIGIvYXJjaC9yaXNj di9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmkuaAppbmRleCA4YzQ2NWNlOTBlNzMuLjdmZjIwMGEx YWQzYiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fdmNwdV9zYmkuaAor KysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV92Y3B1X3NiaS5oCkBAIC05NSw2ICs5NSw3 IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX2V4dGVuc2lvbiB2Y3B1X3NiaV9l eHRfc3JzdDsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX2V4dGVuc2lvbiB2Y3B1 X3NiaV9leHRfaHNtOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9zYmlfZXh0ZW5zaW9u IHZjcHVfc2JpX2V4dF9kYmNuOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9zYmlfZXh0 ZW5zaW9uIHZjcHVfc2JpX2V4dF9zdGE7CitleHRlcm4gY29uc3Qgc3RydWN0IGt2bV92Y3B1X3Ni aV9leHRlbnNpb24gdmNwdV9zYmlfZXh0X2Z3ZnQ7CiBleHRlcm4gY29uc3Qgc3RydWN0IGt2bV92 Y3B1X3NiaV9leHRlbnNpb24gdmNwdV9zYmlfZXh0X2V4cGVyaW1lbnRhbDsKIGV4dGVybiBjb25z dCBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX2V4dGVuc2lvbiB2Y3B1X3NiaV9leHRfdmVuZG9yOwogCmRp ZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV92Y3B1X3NiaV9md2Z0LmggYi9h cmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV92Y3B1X3NiaV9md2Z0LmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41NzgyNTE3ZjZlMDgKLS0tIC9kZXYvbnVsbAorKysg Yi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV92Y3B1X3NiaV9md2Z0LmgKQEAgLTAsMCArMSwz NyBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoKKyAq IENvcHlyaWdodCAoYykgMjAyNSBSaXZvcyBJbmMuCisgKgorICogQXV0aG9yczoKKyAqICAgICBD bMOpbWVudCBMw6lnZXIgPGNsZWdlckByaXZvc2luYy5jb20+CisgKi8KKworI2lmbmRlZiBfX0tW TV9WQ1BVX1JJU0NWX0ZXRlRfSAorI2RlZmluZSBfX0tWTV9WQ1BVX1JJU0NWX0ZXRlRfSAorCisj aW5jbHVkZSA8YXNtL3NiaS5oPgorCitzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZzsKK3N0cnVj dCBrdm1fdmNwdTsKKworc3RydWN0IGt2bV9zYmlfZndmdF9mZWF0dXJlIHsKKwllbnVtIHNiaV9m d2Z0X2ZlYXR1cmVfdCBpZDsKKwlib29sICgqc3VwcG9ydGVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZj cHUpOworCWludCAoKnNldCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NiaV9m d2Z0X2NvbmZpZyAqY29uZiwgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CisJaW50ICgqZ2V0KShzdHJ1 Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc2JpX2Z3ZnRfY29uZmlnICpjb25mLCB1bnNp Z25lZCBsb25nICp2YWx1ZSk7Cit9OworCitzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyB7CisJ Y29uc3Qgc3RydWN0IGt2bV9zYmlfZndmdF9mZWF0dXJlICpmZWF0dXJlOworCWJvb2wgc3VwcG9y dGVkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cit9OworCisvKiBGV0ZUIGRhdGEgc3RydWN0dXJl IHBlciB2Y3B1ICovCitzdHJ1Y3Qga3ZtX3NiaV9md2Z0IHsKKwlzdHJ1Y3Qga3ZtX3NiaV9md2Z0 X2NvbmZpZyAqY29uZmlnczsKK307CisKKyNkZWZpbmUgdmNwdV90b19md2Z0KHZjcHUpICgmKHZj cHUpLT5hcmNoLmZ3ZnRfY29udGV4dCkKKworI2VuZGlmIC8qICFfX0tWTV9WQ1BVX1JJU0NWX0ZX RlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIv YXJjaC9yaXNjdi9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCmluZGV4IDM0ODJjOWE3M2QxYi4uMDgx MzE0NWE2MjcyIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgK KysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC0xOTgsNiArMTk4LDcg QEAgZW51bSBLVk1fUklTQ1ZfU0JJX0VYVF9JRCB7CiAJS1ZNX1JJU0NWX1NCSV9FWFRfVkVORE9S LAogCUtWTV9SSVNDVl9TQklfRVhUX0RCQ04sCiAJS1ZNX1JJU0NWX1NCSV9FWFRfU1RBLAorCUtW TV9SSVNDVl9TQklfRVhUX0ZXRlQsCiAJS1ZNX1JJU0NWX1NCSV9FWFRfTUFYLAogfTsKIApkaWZm IC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGUgYi9hcmNoL3Jpc2N2L2t2bS9NYWtlZmls ZQppbmRleCAwZmIxODQwYzNlMGEuLmVjZTZiMTE5OTEzYSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNj di9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGUKQEAgLTMyLDYgKzMy LDcgQEAga3ZtLXkgKz0gdmNwdV9zYmlfcmVwbGFjZS5vCiBrdm0teSArPSB2Y3B1X3NiaV9zdGEu bwoga3ZtLSQoQ09ORklHX1JJU0NWX1NCSV9WMDEpICs9IHZjcHVfc2JpX3YwMS5vCiBrdm0teSAr PSB2Y3B1X3N3aXRjaC5vCitrdm0teSArPSB2Y3B1X3NiaV9md2Z0Lm8KIGt2bS15ICs9IHZjcHVf dGltZXIubwoga3ZtLXkgKz0gdmNwdV92ZWN0b3Iubwoga3ZtLXkgKz0gdm0ubwpkaWZmIC0tZ2l0 IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmkuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpLmMK aW5kZXggZDJkYmIwNzYyMDcyLi41YmY2YzkyY2NhNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yv a3ZtL3ZjcHVfc2JpLmMKKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmkuYwpAQCAtNzQsNiAr NzQsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fcmlzY3Zfc2JpX2V4dGVuc2lvbl9lbnRy eSBzYmlfZXh0W10gPSB7CiAJCS5leHRfaWR4ID0gS1ZNX1JJU0NWX1NCSV9FWFRfU1RBLAogCQku ZXh0X3B0ciA9ICZ2Y3B1X3NiaV9leHRfc3RhLAogCX0sCisJeworCQkuZXh0X2lkeCA9IEtWTV9S SVNDVl9TQklfRVhUX0ZXRlQsCisJCS5leHRfcHRyID0gJnZjcHVfc2JpX2V4dF9md2Z0LAorCX0s CiAJewogCQkuZXh0X2lkeCA9IEtWTV9SSVNDVl9TQklfRVhUX0VYUEVSSU1FTlRBTCwKIAkJLmV4 dF9wdHIgPSAmdmNwdV9zYmlfZXh0X2V4cGVyaW1lbnRhbCwKZGlmZiAtLWdpdCBhL2FyY2gvcmlz Y3Yva3ZtL3ZjcHVfc2JpX2Z3ZnQuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX2Z3ZnQuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU1NDMzZTgwNWJhYQotLS0g L2Rldi9udWxsCisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX2Z3ZnQuYwpAQCAtMCwwICsx LDE3NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMjUgUml2b3MgSW5jLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICAgQ2zDqW1l bnQgTMOpZ2VyIDxjbGVnZXJAcml2b3NpbmMuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9l cnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0 Lmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vc2JpLmg+Cisj aW5jbHVkZSA8YXNtL2t2bV92Y3B1X3NiaS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fdmNwdV9zYmlf ZndmdC5oPgorCitzdGF0aWMgY29uc3QgZW51bSBzYmlfZndmdF9mZWF0dXJlX3Qga3ZtX2Z3ZnRf ZGVmaW5lZF9mZWF0dXJlc1tdID0geworCVNCSV9GV0ZUX01JU0FMSUdORURfRVhDX0RFTEVHLAor CVNCSV9GV0ZUX0xBTkRJTkdfUEFELAorCVNCSV9GV0ZUX1NIQURPV19TVEFDSywKKwlTQklfRldG VF9ET1VCTEVfVFJBUCwKKwlTQklfRldGVF9QVEVfQURfSFdfVVBEQVRJTkcsCisJU0JJX0ZXRlRf UE9JTlRFUl9NQVNLSU5HX1BNTEVOLAorfTsKKworc3RhdGljIGJvb2wga3ZtX2Z3ZnRfaXNfZGVm aW5lZF9mZWF0dXJlKGVudW0gc2JpX2Z3ZnRfZmVhdHVyZV90IGZlYXR1cmUpCit7CisJaW50IGk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShrdm1fZndmdF9kZWZpbmVkX2ZlYXR1cmVz KTsgaSsrKSB7CisJCWlmIChrdm1fZndmdF9kZWZpbmVkX2ZlYXR1cmVzW2ldID09IGZlYXR1cmUp CisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2ZlYXR1cmUgZmVhdHVyZXNbXSA9IHsKK307CisKK3N0YXRp YyBzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyAqCitrdm1fc2JpX2Z3ZnRfZ2V0X2NvbmZpZyhz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gc2JpX2Z3ZnRfZmVhdHVyZV90IGZlYXR1cmUpCit7 CisJaW50IGkgPSAwOworCXN0cnVjdCBrdm1fc2JpX2Z3ZnQgKmZ3ZnQgPSB2Y3B1X3RvX2Z3ZnQo dmNwdSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmZWF0dXJlcyk7IGkrKykgewor CQlpZiAoZndmdC0+Y29uZmlnc1tpXS5mZWF0dXJlLT5pZCA9PSBmZWF0dXJlKQorCQkJcmV0dXJu ICZmd2Z0LT5jb25maWdzW2ldOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50 IGt2bV9md2Z0X2dldF9mZWF0dXJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQllbnVtIHNi aV9md2Z0X2ZlYXR1cmVfdCBmZWF0dXJlLAorCQkJCXN0cnVjdCBrdm1fc2JpX2Z3ZnRfY29uZmln ICoqY29uZikKK3sKKwlzdHJ1Y3Qga3ZtX3NiaV9md2Z0X2NvbmZpZyAqdGNvbmY7CisKKwl0Y29u ZiA9IGt2bV9zYmlfZndmdF9nZXRfY29uZmlnKHZjcHUsIGZlYXR1cmUpOworCWlmICghdGNvbmYp IHsKKwkJaWYgKGt2bV9md2Z0X2lzX2RlZmluZWRfZmVhdHVyZShmZWF0dXJlKSkKKwkJCXJldHVy biBTQklfRVJSX05PVF9TVVBQT1JURUQ7CisKKwkJcmV0dXJuIFNCSV9FUlJfREVOSUVEOworCX0K KworCWlmICghdGNvbmYtPnN1cHBvcnRlZCkKKwkJcmV0dXJuIFNCSV9FUlJfTk9UX1NVUFBPUlRF RDsKKworCSpjb25mID0gdGNvbmY7CisKKwlyZXR1cm4gU0JJX1NVQ0NFU1M7Cit9CisKK3N0YXRp YyBpbnQga3ZtX3NiaV9md2Z0X3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgZW51 bSBzYmlfZndmdF9mZWF0dXJlX3QgZmVhdHVyZSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIHZhbHVl LCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWludCByZXQ7CisJc3RydWN0IGt2bV9zYmlfZndm dF9jb25maWcgKmNvbmY7CisKKwlyZXQgPSBrdm1fZndmdF9nZXRfZmVhdHVyZSh2Y3B1LCBmZWF0 dXJlLCAmY29uZik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgoZmxhZ3MgJiB+ U0JJX0ZXRlRfU0VUX0ZMQUdfTE9DSykgIT0gMCkKKwkJcmV0dXJuIFNCSV9FUlJfSU5WQUxJRF9Q QVJBTTsKKworCWlmIChjb25mLT5mbGFncyAmIFNCSV9GV0ZUX1NFVF9GTEFHX0xPQ0spCisJCXJl dHVybiBTQklfRVJSX0RFTklFRDsKKworCWNvbmYtPmZsYWdzID0gZmxhZ3M7CisKKwlyZXR1cm4g Y29uZi0+ZmVhdHVyZS0+c2V0KHZjcHUsIGNvbmYsIHZhbHVlKTsKK30KKworc3RhdGljIGludCBr dm1fc2JpX2Z3ZnRfZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSAgICBlbnVtIHNiaV9m d2Z0X2ZlYXR1cmVfdCBmZWF0dXJlLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKnZhbHVlKQorewor CWludCByZXQ7CisJc3RydWN0IGt2bV9zYmlfZndmdF9jb25maWcgKmNvbmY7CisKKwlyZXQgPSBr dm1fZndmdF9nZXRfZmVhdHVyZSh2Y3B1LCBmZWF0dXJlLCAmY29uZik7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldHVybiBjb25mLT5mZWF0dXJlLT5nZXQodmNwdSwgY29uZiwgdmFs dWUpOworfQorCitzdGF0aWMgaW50IGt2bV9zYmlfZXh0X2Z3ZnRfaGFuZGxlcihzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4sCisJCQkJICAgIHN0cnVjdCBrdm1fdmNw dV9zYmlfcmV0dXJuICpyZXRkYXRhKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBrdm1fY3B1 X2NvbnRleHQgKmNwID0gJnZjcHUtPmFyY2guZ3Vlc3RfY29udGV4dDsKKwl1bnNpZ25lZCBsb25n IGZ1bmNpZCA9IGNwLT5hNjsKKworCXN3aXRjaCAoZnVuY2lkKSB7CisJY2FzZSBTQklfRVhUX0ZX RlRfU0VUOgorCQlyZXQgPSBrdm1fc2JpX2Z3ZnRfc2V0KHZjcHUsIGNwLT5hMCwgY3AtPmExLCBj cC0+YTIpOworCQlicmVhazsKKwljYXNlIFNCSV9FWFRfRldGVF9HRVQ6CisJCXJldCA9IGt2bV9z YmlfZndmdF9nZXQodmNwdSwgY3AtPmEwLCAmcmV0ZGF0YS0+b3V0X3ZhbCk7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCXJldCA9IFNCSV9FUlJfTk9UX1NVUFBPUlRFRDsKKwkJYnJlYWs7CisJfQor CisJcmV0ZGF0YS0+ZXJyX3ZhbCA9IHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGt2bV9zYmlfZXh0X2Z3ZnRfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0 IGt2bV9zYmlfZndmdCAqZndmdCA9IHZjcHVfdG9fZndmdCh2Y3B1KTsKKwljb25zdCBzdHJ1Y3Qg a3ZtX3NiaV9md2Z0X2ZlYXR1cmUgKmZlYXR1cmU7CisJc3RydWN0IGt2bV9zYmlfZndmdF9jb25m aWcgKmNvbmY7CisJaW50IGk7CisKKwlmd2Z0LT5jb25maWdzID0ga2NhbGxvYyhBUlJBWV9TSVpF KGZlYXR1cmVzKSwgc2l6ZW9mKHN0cnVjdCBrdm1fc2JpX2Z3ZnRfY29uZmlnKSwKKwkJCQlHRlBf S0VSTkVMKTsKKwlpZiAoIWZ3ZnQtPmNvbmZpZ3MpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmVhdHVyZXMpOyBpKyspIHsKKwkJZmVhdHVyZSA9ICZm ZWF0dXJlc1tpXTsKKwkJY29uZiA9ICZmd2Z0LT5jb25maWdzW2ldOworCQlpZiAoZmVhdHVyZS0+ c3VwcG9ydGVkKQorCQkJY29uZi0+c3VwcG9ydGVkID0gZmVhdHVyZS0+c3VwcG9ydGVkKHZjcHUp OworCQllbHNlCisJCQljb25mLT5zdXBwb3J0ZWQgPSB0cnVlOworCisJCWNvbmYtPmZlYXR1cmUg PSBmZWF0dXJlOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBrdm1fc2JpX2V4 dF9md2Z0X2RlaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9zYmlf ZndmdCAqZndmdCA9IHZjcHVfdG9fZndmdCh2Y3B1KTsKKworCWtmcmVlKGZ3ZnQtPmNvbmZpZ3Mp OworfQorCitjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX2V4dGVuc2lvbiB2Y3B1X3NiaV9leHRf ZndmdCA9IHsKKwkuZXh0aWRfc3RhcnQgPSBTQklfRVhUX0ZXRlQsCisJLmV4dGlkX2VuZCA9IFNC SV9FWFRfRldGVCwKKwkuaGFuZGxlciA9IGt2bV9zYmlfZXh0X2Z3ZnRfaGFuZGxlciwKKwkuaW5p dCA9IGt2bV9zYmlfZXh0X2Z3ZnRfaW5pdCwKKwkuZGVpbml0ID0ga3ZtX3NiaV9leHRfZndmdF9k ZWluaXQsCit9OwotLSAKMi40Ny4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1yaXNjdgo=