From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9BDB641203 for ; Tue, 14 Nov 2023 14:13:37 +0000 (UTC) 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="NF+UzazR" Received: from mail-qk1-x731.google.com (mail-qk1-x731.google.com [IPv6:2607:f8b0:4864:20::731]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3C3341BC for ; Tue, 14 Nov 2023 06:13:35 -0800 (PST) Received: by mail-qk1-x731.google.com with SMTP id af79cd13be357-77bbe4702a1so4532485a.0 for ; Tue, 14 Nov 2023 06:13:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1699971214; x=1700576014; 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=SU/g700ZLyLiX8R4aH7M4U3AIKizV9KTngI03z4llSI=; b=NF+UzazRrsyvg27tEbhXJRGKfsndER4vz71rl8AcPbYpjXzQ7CgV7DzVMtY92/F1Ir qQMgfqHGiyEDl81y4g1OrTVIulMmv4B8Sz+z+5MK4hcgcRlzQm27GBxZmFwLun03Vii1 uk/dFsyMqthoypbiwB7clgYhodVLVU3JuS7mK/3V3twGxyTxaytySYKDmNQxlX1+VO8W gmPn8QqltCkjiuhzbuU87MpFNh23CuZhZ81yrigr5xGJ/AUuKY8x1AJeBYazAHINRxma fE6kNQxOiSEFPzECXInqgHIKJVya50L7z8uc0M9AY2+yEwLd4V6HY+fTte703xRtrMe3 TfdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699971214; x=1700576014; 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=SU/g700ZLyLiX8R4aH7M4U3AIKizV9KTngI03z4llSI=; b=HDCiij8eJ2U3ywiJKrGPDNVYerCHSxIyILRT8RfUBWFrTBV1kf0WooIysRYRCqaA7p dTs4OEVNbYMtlmalJjP4Y0ez9c48p/7GZY+qv5CaNbXPpMmVvReMCt4bbas6TVFBUiDT jwg3uptP3wXisotod571WCDDyPJRH6a1B8yCyvhU/cYGkzkpOdeDAV4Ot8HSJOYp/40j /bk9t8RTX4VQ8OT8cdHfK7LhLtBBUzBnDsQ7X1uaxpAbqV9wz1uRkD/zTuZrmt4828cu 6wxZvRd6IFNGNF7fwwl8qlDvuzaDJluPBTSBfNequxG1fBGT1sRyySjR84MvbsaHuT2i PNTw== X-Gm-Message-State: AOJu0YwSCp4pRups/4wVxe4wU7hnL8/x2HQuSEggb+BzRmvzoeprBXRO +vIAj3+tcprBsBCtq75afInTRw== X-Google-Smtp-Source: AGHT+IEsx2T25BKdVYtuC6/nOhv4dKk0otBx5lnACq1YF4ozL1VqFHzj8lfYhBmRkEJIwgc5CSdyeg== X-Received: by 2002:a05:620a:458b:b0:76e:f686:cad5 with SMTP id bp11-20020a05620a458b00b0076ef686cad5mr2470951qkb.5.1699971214316; Tue, 14 Nov 2023 06:13:34 -0800 (PST) Received: from carbon-x1.. ([12.186.190.2]) by smtp.gmail.com with ESMTPSA id m2-20020a05620a220200b00777611164c5sm2701263qkh.106.2023.11.14.06.13.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Nov 2023 06:13:33 -0800 (PST) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Palmer Dabbelt , Paul Walmsley , Rob Herring , Krzysztof Kozlowski , Albert Ou , Jonathan Corbet , Andrew Jones , Evan Green , Conor Dooley , Samuel Ortiz , Jerry Shih , Conor Dooley Subject: [PATCH v4 03/20] riscv: add ISA extension parsing for scalar crypto Date: Tue, 14 Nov 2023 09:12:39 -0500 Message-ID: <20231114141256.126749-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231114141256.126749-1-cleger@rivosinc.com> References: <20231114141256.126749-1-cleger@rivosinc.com> Precedence: bulk X-Mailing-List: linux-doc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Evan Green The Scalar Crypto specification defines Zk as a shorthand for the Zkn, Zkr and Zkt extensions. The same follows for both Zkn, Zks and Zbk, which are all shorthands for various other extensions. The detailed breakdown can be found in their dt-binding entries. Since Zkn also implies the Zbkb, Zbkc and Zbkx extensions, simply passing "zk" through a DT should enable all of Zbkb, Zbkc, Zbkx, Zkn, Zkr and Zkt. For example, setting the "riscv,isa" DT property to "rv64imafdc_zk" should generate the following cpuinfo output: "rv64imafdc_zicntr_zicsr_zifencei_zihpm_zbkb_zbkc_zbkx_zknd_zkne_zknh_zkr_zkt" riscv_isa_ext_data grows a pair of new members, to permit setting the relevant bits for "bundled" extensions, both while parsing the ISA string and the new dedicated extension properties. Co-developed-by: Conor Dooley Signed-off-by: Conor Dooley Signed-off-by: Evan Green Signed-off-by: Clément Léger Acked-by: Conor Dooley --- arch/riscv/include/asm/cpufeature.h | 4 +- arch/riscv/include/asm/hwcap.h | 11 +++ arch/riscv/kernel/cpufeature.c | 118 ++++++++++++++++++++++------ 3 files changed, 109 insertions(+), 24 deletions(-) diff --git a/arch/riscv/include/asm/cpufeature.h b/arch/riscv/include/asm/cpufeature.h index a418c3112cd6..fbdde8b8a47e 100644 --- a/arch/riscv/include/asm/cpufeature.h +++ b/arch/riscv/include/asm/cpufeature.h @@ -59,6 +59,8 @@ struct riscv_isa_ext_data { const unsigned int id; const char *name; const char *property; + const unsigned int *subset_ext_ids; + const unsigned int subset_ext_size; }; extern const struct riscv_isa_ext_data riscv_isa_ext[]; @@ -67,7 +69,7 @@ extern bool riscv_isa_fallback; unsigned long riscv_isa_extension_base(const unsigned long *isa_bitmap); -bool __riscv_isa_extension_available(const unsigned long *isa_bitmap, int bit); +bool __riscv_isa_extension_available(const unsigned long *isa_bitmap, unsigned int bit); #define riscv_isa_extension_available(isa_bitmap, ext) \ __riscv_isa_extension_available(isa_bitmap, RISCV_ISA_EXT_##ext) diff --git a/arch/riscv/include/asm/hwcap.h b/arch/riscv/include/asm/hwcap.h index afa9abc1a0b0..b0857c64bf6e 100644 --- a/arch/riscv/include/asm/hwcap.h +++ b/arch/riscv/include/asm/hwcap.h @@ -58,8 +58,19 @@ #define RISCV_ISA_EXT_SMSTATEEN 43 #define RISCV_ISA_EXT_ZICOND 44 #define RISCV_ISA_EXT_ZBC 45 +#define RISCV_ISA_EXT_ZBKB 46 +#define RISCV_ISA_EXT_ZBKC 47 +#define RISCV_ISA_EXT_ZBKX 48 +#define RISCV_ISA_EXT_ZKND 49 +#define RISCV_ISA_EXT_ZKNE 50 +#define RISCV_ISA_EXT_ZKNH 51 +#define RISCV_ISA_EXT_ZKR 52 +#define RISCV_ISA_EXT_ZKSED 53 +#define RISCV_ISA_EXT_ZKSH 54 +#define RISCV_ISA_EXT_ZKT 55 #define RISCV_ISA_EXT_MAX 64 +#define RISCV_ISA_EXT_INVALID U32_MAX #ifdef CONFIG_RISCV_M_MODE #define RISCV_ISA_EXT_SxAIA RISCV_ISA_EXT_SMAIA diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c index eae14daa5a75..a2871bceaad9 100644 --- a/arch/riscv/kernel/cpufeature.c +++ b/arch/riscv/kernel/cpufeature.c @@ -70,7 +70,7 @@ EXPORT_SYMBOL_GPL(riscv_isa_extension_base); * * NOTE: If isa_bitmap is NULL then Host ISA bitmap will be used. */ -bool __riscv_isa_extension_available(const unsigned long *isa_bitmap, int bit) +bool __riscv_isa_extension_available(const unsigned long *isa_bitmap, unsigned int bit) { const unsigned long *bmap = (isa_bitmap) ? isa_bitmap : riscv_isa; @@ -102,17 +102,53 @@ static bool riscv_isa_extension_check(int id) return false; } return true; + case RISCV_ISA_EXT_INVALID: + return false; } return true; } -#define __RISCV_ISA_EXT_DATA(_name, _id) { \ - .name = #_name, \ - .property = #_name, \ - .id = _id, \ +#define _RISCV_ISA_EXT_DATA(_name, _id, _subset_exts, _subset_exts_size) { \ + .name = #_name, \ + .property = #_name, \ + .id = _id, \ + .subset_ext_ids = _subset_exts, \ + .subset_ext_size = _subset_exts_size \ } +#define __RISCV_ISA_EXT_DATA(_name, _id) _RISCV_ISA_EXT_DATA(_name, _id, NULL, 0) + +/* Used to declare pure "lasso" extension (Zk for instance) */ +#define __RISCV_ISA_EXT_BUNDLE(_name, _bundled_exts) \ + _RISCV_ISA_EXT_DATA(_name, RISCV_ISA_EXT_INVALID, _bundled_exts, ARRAY_SIZE(_bundled_exts)) + +static const unsigned int riscv_zk_bundled_exts[] = { + RISCV_ISA_EXT_ZBKB, + RISCV_ISA_EXT_ZBKC, + RISCV_ISA_EXT_ZBKX, + RISCV_ISA_EXT_ZKND, + RISCV_ISA_EXT_ZKNE, + RISCV_ISA_EXT_ZKR, + RISCV_ISA_EXT_ZKT, +}; + +static const unsigned int riscv_zkn_bundled_exts[] = { + RISCV_ISA_EXT_ZBKB, + RISCV_ISA_EXT_ZBKC, + RISCV_ISA_EXT_ZBKX, + RISCV_ISA_EXT_ZKND, + RISCV_ISA_EXT_ZKNE, + RISCV_ISA_EXT_ZKNH, +}; + +static const unsigned int riscv_zks_bundled_exts[] = { + RISCV_ISA_EXT_ZBKB, + RISCV_ISA_EXT_ZBKC, + RISCV_ISA_EXT_ZKSED, + RISCV_ISA_EXT_ZKSH +}; + /* * The canonical order of ISA extension names in the ISA string is defined in * chapter 27 of the unprivileged specification. @@ -177,7 +213,20 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = { __RISCV_ISA_EXT_DATA(zba, RISCV_ISA_EXT_ZBA), __RISCV_ISA_EXT_DATA(zbb, RISCV_ISA_EXT_ZBB), __RISCV_ISA_EXT_DATA(zbc, RISCV_ISA_EXT_ZBC), + __RISCV_ISA_EXT_DATA(zbkb, RISCV_ISA_EXT_ZBKB), + __RISCV_ISA_EXT_DATA(zbkc, RISCV_ISA_EXT_ZBKC), + __RISCV_ISA_EXT_DATA(zbkx, RISCV_ISA_EXT_ZBKX), __RISCV_ISA_EXT_DATA(zbs, RISCV_ISA_EXT_ZBS), + __RISCV_ISA_EXT_BUNDLE(zk, riscv_zk_bundled_exts), + __RISCV_ISA_EXT_BUNDLE(zkn, riscv_zkn_bundled_exts), + __RISCV_ISA_EXT_DATA(zknd, RISCV_ISA_EXT_ZKND), + __RISCV_ISA_EXT_DATA(zkne, RISCV_ISA_EXT_ZKNE), + __RISCV_ISA_EXT_DATA(zknh, RISCV_ISA_EXT_ZKNH), + __RISCV_ISA_EXT_DATA(zkr, RISCV_ISA_EXT_ZKR), + __RISCV_ISA_EXT_BUNDLE(zks, riscv_zks_bundled_exts), + __RISCV_ISA_EXT_DATA(zkt, RISCV_ISA_EXT_ZKT), + __RISCV_ISA_EXT_DATA(zksed, RISCV_ISA_EXT_ZKSED), + __RISCV_ISA_EXT_DATA(zksh, RISCV_ISA_EXT_ZKSH), __RISCV_ISA_EXT_DATA(smaia, RISCV_ISA_EXT_SMAIA), __RISCV_ISA_EXT_DATA(smstateen, RISCV_ISA_EXT_SMSTATEEN), __RISCV_ISA_EXT_DATA(ssaia, RISCV_ISA_EXT_SSAIA), @@ -190,6 +239,31 @@ const struct riscv_isa_ext_data riscv_isa_ext[] = { const size_t riscv_isa_ext_count = ARRAY_SIZE(riscv_isa_ext); +static void __init match_isa_ext(const struct riscv_isa_ext_data *ext, const char *name, + const char *name_end, struct riscv_isainfo *isainfo) +{ + if ((name_end - name == strlen(ext->name)) && + !strncasecmp(name, ext->name, name_end - name)) { + /* + * If this is a bundle, enable all the ISA extensions that + * comprise the bundle. + */ + if (ext->subset_ext_size) { + for (int i = 0; i < ext->subset_ext_size; i++) { + if (riscv_isa_extension_check(ext->subset_ext_ids[i])) + set_bit(ext->subset_ext_ids[i], isainfo->isa); + } + } + + /* + * This is valid even for bundle extensions which uses the RISCV_ISA_EXT_INVALID id + * (rejected by riscv_isa_extension_check()). + */ + if (riscv_isa_extension_check(ext->id)) + set_bit(ext->id, isainfo->isa); + } +} + static void __init riscv_parse_isa_string(unsigned long *this_hwcap, struct riscv_isainfo *isainfo, unsigned long *isa2hwcap, const char *isa) { @@ -322,14 +396,6 @@ static void __init riscv_parse_isa_string(unsigned long *this_hwcap, struct risc if (*isa == '_') ++isa; -#define SET_ISA_EXT_MAP(name, bit) \ - do { \ - if ((ext_end - ext == strlen(name)) && \ - !strncasecmp(ext, name, strlen(name)) && \ - riscv_isa_extension_check(bit)) \ - set_bit(bit, isainfo->isa); \ - } while (false) \ - if (unlikely(ext_err)) continue; if (!ext_long) { @@ -341,10 +407,8 @@ static void __init riscv_parse_isa_string(unsigned long *this_hwcap, struct risc } } else { for (int i = 0; i < riscv_isa_ext_count; i++) - SET_ISA_EXT_MAP(riscv_isa_ext[i].name, - riscv_isa_ext[i].id); + match_isa_ext(&riscv_isa_ext[i], ext, ext_end, isainfo); } -#undef SET_ISA_EXT_MAP } } @@ -443,18 +507,26 @@ static int __init riscv_fill_hwcap_from_ext_list(unsigned long *isa2hwcap) } for (int i = 0; i < riscv_isa_ext_count; i++) { + const struct riscv_isa_ext_data *ext = &riscv_isa_ext[i]; + if (of_property_match_string(cpu_node, "riscv,isa-extensions", - riscv_isa_ext[i].property) < 0) + ext->property) < 0) continue; - if (!riscv_isa_extension_check(riscv_isa_ext[i].id)) - continue; + if (ext->subset_ext_size) { + for (int j = 0; j < ext->subset_ext_size; j++) { + if (riscv_isa_extension_check(ext->subset_ext_ids[i])) + set_bit(ext->subset_ext_ids[j], isainfo->isa); + } + } - /* Only single letter extensions get set in hwcap */ - if (strnlen(riscv_isa_ext[i].name, 2) == 1) - this_hwcap |= isa2hwcap[riscv_isa_ext[i].id]; + if (riscv_isa_extension_check(ext->id)) { + set_bit(ext->id, isainfo->isa); - set_bit(riscv_isa_ext[i].id, isainfo->isa); + /* Only single letter extensions get set in hwcap */ + if (strnlen(riscv_isa_ext[i].name, 2) == 1) + this_hwcap |= isa2hwcap[riscv_isa_ext[i].id]; + } } of_node_put(cpu_node); -- 2.42.0 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 0D862C07545 for ; Tue, 14 Nov 2023 14:13:50 +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=1Xy31Mck8jw8NAYAE/eFXXGHj6ZkLJHV5ATkj3cOr2U=; b=iAnIb9rwaXhJIq ITvrC3DyxBQJiLoX1vCogM2B95GXkjGYmpy/I/O0QNyBMPkzYLZKILPe9pJtZmtZhdPjZmAJPU7We cYKrdgg0pgAXGMNpDGu5aEroUSOVWDr7mJgE1rSMzQb1sNLNpnjzQfDaI4zn0kOd95qzZ27pu2KPn rK6ERr7HN8fojSg7eJCjCst7MUCBwhdgL8d9A3cswatgAPs/AI/bjXr4Gw/ixfsmVSq7H4JbClkVw oMqZDctkTcF94z1YpKOp6X+0XMxOk0tuLF2Tbur+1+h/w5ngaJAJsqKJva6DZHvljf5ydpxeQ0gSf jlqy98887+gyQbEyCtpw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r2uAg-00G8sj-2j; Tue, 14 Nov 2023 14:13:42 +0000 Received: from mail-qk1-x736.google.com ([2607:f8b0:4864:20::736]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r2uAb-00G8nL-0f for linux-riscv@lists.infradead.org; Tue, 14 Nov 2023 14:13:39 +0000 Received: by mail-qk1-x736.google.com with SMTP id af79cd13be357-77bbe4702a1so4532985a.0 for ; Tue, 14 Nov 2023 06:13:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1699971214; x=1700576014; 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=SU/g700ZLyLiX8R4aH7M4U3AIKizV9KTngI03z4llSI=; b=tdnM5pfW79Gfeu6XEhsVIIBnZYjRLcFBma8V5G8AoviIuLLwRrBu0nTgKSguEnXmbj JknUTzkY84TdwsiJkKSEwuvB6o419cXQXuxN5jdjiH5sTGIwqsryHxkDUoD7nt7+rWSy UsNNDCMAUQp8PHCkjVnNVjrMhZQArh28WQ4zwdpkGpdHnohHS5rAlKF/pAO0BOdfpLp/ 1TBnzyrD8VqepzY8faofNo9pwll0hkBYoHtr0QinIwtfif/BPUAWK1kAqaFgrSV9uXCU 8zTWcYlOfafYh731zH/2lPWjAPlW5y8Ut9aQNFjM/HuXKrP3/ngTHKY6IXvpuGdHXkTT T40A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699971214; x=1700576014; 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=SU/g700ZLyLiX8R4aH7M4U3AIKizV9KTngI03z4llSI=; b=wT+YN9HFcA2FY/PduJwnz/hV98vKSM38yvKcaZ1is2jJcWy4fEXCJkHGvLXd1wDw9R QcxNBhHmKJ8X+VKmY5R/Lo82AQP4IFP58jPQz2YuQfYDV/OkjclFTPrELgrGV/XPiFG1 JNmqI22j3UeMzGvLQ3b9Lz+BW6jnOVSosBgkPZ64S/4tCRwQHh3ua1GZ4OH7ZisEJXjS geXX6f4UvwZSSyue4o3ZBOqP2uHLl5KmaylBA0hivAw+jTtL/Dzyd1SOX5TKg3FHqvf6 ds+cKZtwsLbLGNUemCVrPmBChm4g11rxCXu5vWw8NVv8cNJWyZVMVC97jpIZqdDtSUtl /2OQ== X-Gm-Message-State: AOJu0Yy7wJ9IBHCyxCZB/ru3+iqqdzO+WBzNtHQKA07SfB7bE7v85LUP qoETVstF+2sqbG63HqA5UGlaLei2SM84Au9GMx4FdA== X-Google-Smtp-Source: AGHT+IEsx2T25BKdVYtuC6/nOhv4dKk0otBx5lnACq1YF4ozL1VqFHzj8lfYhBmRkEJIwgc5CSdyeg== X-Received: by 2002:a05:620a:458b:b0:76e:f686:cad5 with SMTP id bp11-20020a05620a458b00b0076ef686cad5mr2470951qkb.5.1699971214316; Tue, 14 Nov 2023 06:13:34 -0800 (PST) Received: from carbon-x1.. ([12.186.190.2]) by smtp.gmail.com with ESMTPSA id m2-20020a05620a220200b00777611164c5sm2701263qkh.106.2023.11.14.06.13.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Nov 2023 06:13:33 -0800 (PST) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Palmer Dabbelt , Paul Walmsley , Rob Herring , Krzysztof Kozlowski , Albert Ou , Jonathan Corbet , Andrew Jones , Evan Green , Conor Dooley , Samuel Ortiz , Jerry Shih , Conor Dooley Subject: [PATCH v4 03/20] riscv: add ISA extension parsing for scalar crypto Date: Tue, 14 Nov 2023 09:12:39 -0500 Message-ID: <20231114141256.126749-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231114141256.126749-1-cleger@rivosinc.com> References: <20231114141256.126749-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231114_061337_245906_415354E8 X-CRM114-Status: GOOD ( 22.75 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-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 RnJvbTogRXZhbiBHcmVlbiA8ZXZhbkByaXZvc2luYy5jb20+CgpUaGUgU2NhbGFyIENyeXB0byBz cGVjaWZpY2F0aW9uIGRlZmluZXMgWmsgYXMgYSBzaG9ydGhhbmQgZm9yIHRoZQpaa24sIFprciBh bmQgWmt0IGV4dGVuc2lvbnMuIFRoZSBzYW1lIGZvbGxvd3MgZm9yIGJvdGggWmtuLCBaa3MgYW5k IFpiaywKd2hpY2ggYXJlIGFsbCBzaG9ydGhhbmRzIGZvciB2YXJpb3VzIG90aGVyIGV4dGVuc2lv bnMuIFRoZSBkZXRhaWxlZApicmVha2Rvd24gY2FuIGJlIGZvdW5kIGluIHRoZWlyIGR0LWJpbmRp bmcgZW50cmllcy4KClNpbmNlIFprbiBhbHNvIGltcGxpZXMgdGhlIFpia2IsIFpia2MgYW5kIFpi a3ggZXh0ZW5zaW9ucywgc2ltcGx5IHBhc3NpbmcKInprIiB0aHJvdWdoIGEgRFQgc2hvdWxkIGVu YWJsZSBhbGwgb2YgWmJrYiwgWmJrYywgWmJreCwgWmtuLCBaa3IgYW5kIFprdC4KRm9yIGV4YW1w bGUsIHNldHRpbmcgdGhlICJyaXNjdixpc2EiIERUIHByb3BlcnR5IHRvICJydjY0aW1hZmRjX3pr IgpzaG91bGQgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBjcHVpbmZvIG91dHB1dDoKInJ2NjRpbWFm ZGNfemljbnRyX3ppY3NyX3ppZmVuY2VpX3ppaHBtX3pia2JfemJrY196Ymt4X3prbmRfemtuZV96 a25oX3prcl96a3QiCgpyaXNjdl9pc2FfZXh0X2RhdGEgZ3Jvd3MgYSBwYWlyIG9mIG5ldyBtZW1i ZXJzLCB0byBwZXJtaXQgc2V0dGluZyB0aGUKcmVsZXZhbnQgYml0cyBmb3IgImJ1bmRsZWQiIGV4 dGVuc2lvbnMsIGJvdGggd2hpbGUgcGFyc2luZyB0aGUgSVNBIHN0cmluZwphbmQgdGhlIG5ldyBk ZWRpY2F0ZWQgZXh0ZW5zaW9uIHByb3BlcnRpZXMuCgpDby1kZXZlbG9wZWQtYnk6IENvbm9yIERv b2xleSA8Y29ub3IuZG9vbGV5QG1pY3JvY2hpcC5jb20+ClNpZ25lZC1vZmYtYnk6IENvbm9yIERv b2xleSA8Y29ub3IuZG9vbGV5QG1pY3JvY2hpcC5jb20+ClNpZ25lZC1vZmYtYnk6IEV2YW4gR3Jl ZW4gPGV2YW5Acml2b3NpbmMuY29tPgpTaWduZWQtb2ZmLWJ5OiBDbMOpbWVudCBMw6lnZXIgPGNs ZWdlckByaXZvc2luYy5jb20+CkFja2VkLWJ5OiBDb25vciBEb29sZXkgPGNvbm9yLmRvb2xleUBt aWNyb2NoaXAuY29tPgotLS0KIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIHwg ICA0ICstCiBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h3Y2FwLmggICAgICB8ICAxMSArKysKIGFy Y2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYyAgICAgIHwgMTE4ICsrKysrKysrKysrKysrKysr KysrKystLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTA5IGluc2VydGlvbnMoKyksIDI0IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5o IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggYTQxOGMzMTEyY2Q2 Li5mYmRkZThiOGE0N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVh dHVyZS5oCisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC01OSw2 ICs1OSw4IEBAIHN0cnVjdCByaXNjdl9pc2FfZXh0X2RhdGEgewogCWNvbnN0IHVuc2lnbmVkIGlu dCBpZDsKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IGNoYXIgKnByb3BlcnR5OworCWNvbnN0 IHVuc2lnbmVkIGludCAqc3Vic2V0X2V4dF9pZHM7CisJY29uc3QgdW5zaWduZWQgaW50IHN1YnNl dF9leHRfc2l6ZTsKIH07CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcmlzY3ZfaXNhX2V4dF9kYXRh IHJpc2N2X2lzYV9leHRbXTsKQEAgLTY3LDcgKzY5LDcgQEAgZXh0ZXJuIGJvb2wgcmlzY3ZfaXNh X2ZhbGxiYWNrOwogCiB1bnNpZ25lZCBsb25nIHJpc2N2X2lzYV9leHRlbnNpb25fYmFzZShjb25z dCB1bnNpZ25lZCBsb25nICppc2FfYml0bWFwKTsKIAotYm9vbCBfX3Jpc2N2X2lzYV9leHRlbnNp b25fYXZhaWxhYmxlKGNvbnN0IHVuc2lnbmVkIGxvbmcgKmlzYV9iaXRtYXAsIGludCBiaXQpOwor Ym9vbCBfX3Jpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKGNvbnN0IHVuc2lnbmVkIGxvbmcg KmlzYV9iaXRtYXAsIHVuc2lnbmVkIGludCBiaXQpOwogI2RlZmluZSByaXNjdl9pc2FfZXh0ZW5z aW9uX2F2YWlsYWJsZShpc2FfYml0bWFwLCBleHQpCVwKIAlfX3Jpc2N2X2lzYV9leHRlbnNpb25f YXZhaWxhYmxlKGlzYV9iaXRtYXAsIFJJU0NWX0lTQV9FWFRfIyNleHQpCiAKZGlmZiAtLWdpdCBh L2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHdjYXAuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20v aHdjYXAuaAppbmRleCBhZmE5YWJjMWEwYjAuLmIwODU3YzY0YmY2ZSAxMDA2NDQKLS0tIGEvYXJj aC9yaXNjdi9pbmNsdWRlL2FzbS9od2NhcC5oCisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20v aHdjYXAuaApAQCAtNTgsOCArNTgsMTkgQEAKICNkZWZpbmUgUklTQ1ZfSVNBX0VYVF9TTVNUQVRF RU4JCTQzCiAjZGVmaW5lIFJJU0NWX0lTQV9FWFRfWklDT05ECQk0NAogI2RlZmluZSBSSVNDVl9J U0FfRVhUX1pCQwkJNDUKKyNkZWZpbmUgUklTQ1ZfSVNBX0VYVF9aQktCCQk0NgorI2RlZmluZSBS SVNDVl9JU0FfRVhUX1pCS0MJCTQ3CisjZGVmaW5lIFJJU0NWX0lTQV9FWFRfWkJLWAkJNDgKKyNk ZWZpbmUgUklTQ1ZfSVNBX0VYVF9aS05ECQk0OQorI2RlZmluZSBSSVNDVl9JU0FfRVhUX1pLTkUJ CTUwCisjZGVmaW5lIFJJU0NWX0lTQV9FWFRfWktOSAkJNTEKKyNkZWZpbmUgUklTQ1ZfSVNBX0VY VF9aS1IJCTUyCisjZGVmaW5lIFJJU0NWX0lTQV9FWFRfWktTRUQJCTUzCisjZGVmaW5lIFJJU0NW X0lTQV9FWFRfWktTSAkJNTQKKyNkZWZpbmUgUklTQ1ZfSVNBX0VYVF9aS1QJCTU1CiAKICNkZWZp bmUgUklTQ1ZfSVNBX0VYVF9NQVgJCTY0CisjZGVmaW5lIFJJU0NWX0lTQV9FWFRfSU5WQUxJRAkJ VTMyX01BWAogCiAjaWZkZWYgQ09ORklHX1JJU0NWX01fTU9ERQogI2RlZmluZSBSSVNDVl9JU0Ff RVhUX1N4QUlBCQlSSVNDVl9JU0FfRVhUX1NNQUlBCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tl cm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMKaW5kZXgg ZWFlMTRkYWE1YTc1Li5hMjg3MWJjZWFhZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva2VybmVs L2NwdWZlYXR1cmUuYworKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMKQEAgLTcw LDcgKzcwLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwocmlzY3ZfaXNhX2V4dGVuc2lvbl9iYXNlKTsK ICAqCiAgKiBOT1RFOiBJZiBpc2FfYml0bWFwIGlzIE5VTEwgdGhlbiBIb3N0IElTQSBiaXRtYXAg d2lsbCBiZSB1c2VkLgogICovCi1ib29sIF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUo Y29uc3QgdW5zaWduZWQgbG9uZyAqaXNhX2JpdG1hcCwgaW50IGJpdCkKK2Jvb2wgX19yaXNjdl9p c2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShjb25zdCB1bnNpZ25lZCBsb25nICppc2FfYml0bWFwLCB1 bnNpZ25lZCBpbnQgYml0KQogewogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmJtYXAgPSAoaXNhX2Jp dG1hcCkgPyBpc2FfYml0bWFwIDogcmlzY3ZfaXNhOwogCkBAIC0xMDIsMTcgKzEwMiw1MyBAQCBz dGF0aWMgYm9vbCByaXNjdl9pc2FfZXh0ZW5zaW9uX2NoZWNrKGludCBpZCkKIAkJCXJldHVybiBm YWxzZTsKIAkJfQogCQlyZXR1cm4gdHJ1ZTsKKwljYXNlIFJJU0NWX0lTQV9FWFRfSU5WQUxJRDoK KwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCXJldHVybiB0cnVlOwogfQogCi0jZGVmaW5lIF9fUklT Q1ZfSVNBX0VYVF9EQVRBKF9uYW1lLCBfaWQpIHsJXAotCS5uYW1lID0gI19uYW1lLAkJCQlcCi0J LnByb3BlcnR5ID0gI19uYW1lLAkJCVwKLQkuaWQgPSBfaWQsCQkJCVwKKyNkZWZpbmUgX1JJU0NW X0lTQV9FWFRfREFUQShfbmFtZSwgX2lkLCBfc3Vic2V0X2V4dHMsIF9zdWJzZXRfZXh0c19zaXpl KSB7CVwKKwkubmFtZSA9ICNfbmFtZSwJCQkJCQkJCVwKKwkucHJvcGVydHkgPSAjX25hbWUsCQkJ CQkJCVwKKwkuaWQgPSBfaWQsCQkJCQkJCQlcCisJLnN1YnNldF9leHRfaWRzID0gX3N1YnNldF9l eHRzLAkJCQkJCVwKKwkuc3Vic2V0X2V4dF9zaXplID0gX3N1YnNldF9leHRzX3NpemUJCQkJCVwK IH0KIAorI2RlZmluZSBfX1JJU0NWX0lTQV9FWFRfREFUQShfbmFtZSwgX2lkKSBfUklTQ1ZfSVNB X0VYVF9EQVRBKF9uYW1lLCBfaWQsIE5VTEwsIDApCisKKy8qIFVzZWQgdG8gZGVjbGFyZSBwdXJl ICJsYXNzbyIgZXh0ZW5zaW9uIChaayBmb3IgaW5zdGFuY2UpICovCisjZGVmaW5lIF9fUklTQ1Zf SVNBX0VYVF9CVU5ETEUoX25hbWUsIF9idW5kbGVkX2V4dHMpIFwKKwlfUklTQ1ZfSVNBX0VYVF9E QVRBKF9uYW1lLCBSSVNDVl9JU0FfRVhUX0lOVkFMSUQsIF9idW5kbGVkX2V4dHMsIEFSUkFZX1NJ WkUoX2J1bmRsZWRfZXh0cykpCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmlzY3Zfemtf YnVuZGxlZF9leHRzW10gPSB7CisJUklTQ1ZfSVNBX0VYVF9aQktCLAorCVJJU0NWX0lTQV9FWFRf WkJLQywKKwlSSVNDVl9JU0FfRVhUX1pCS1gsCisJUklTQ1ZfSVNBX0VYVF9aS05ELAorCVJJU0NW X0lTQV9FWFRfWktORSwKKwlSSVNDVl9JU0FfRVhUX1pLUiwKKwlSSVNDVl9JU0FfRVhUX1pLVCwK K307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmlzY3ZfemtuX2J1bmRsZWRfZXh0c1td ID0geworCVJJU0NWX0lTQV9FWFRfWkJLQiwKKwlSSVNDVl9JU0FfRVhUX1pCS0MsCisJUklTQ1Zf SVNBX0VYVF9aQktYLAorCVJJU0NWX0lTQV9FWFRfWktORCwKKwlSSVNDVl9JU0FfRVhUX1pLTkUs CisJUklTQ1ZfSVNBX0VYVF9aS05ILAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBy aXNjdl96a3NfYnVuZGxlZF9leHRzW10gPSB7CisJUklTQ1ZfSVNBX0VYVF9aQktCLAorCVJJU0NW X0lTQV9FWFRfWkJLQywKKwlSSVNDVl9JU0FfRVhUX1pLU0VELAorCVJJU0NWX0lTQV9FWFRfWktT SAorfTsKKwogLyoKICAqIFRoZSBjYW5vbmljYWwgb3JkZXIgb2YgSVNBIGV4dGVuc2lvbiBuYW1l cyBpbiB0aGUgSVNBIHN0cmluZyBpcyBkZWZpbmVkIGluCiAgKiBjaGFwdGVyIDI3IG9mIHRoZSB1 bnByaXZpbGVnZWQgc3BlY2lmaWNhdGlvbi4KQEAgLTE3Nyw3ICsyMTMsMjAgQEAgY29uc3Qgc3Ry dWN0IHJpc2N2X2lzYV9leHRfZGF0YSByaXNjdl9pc2FfZXh0W10gPSB7CiAJX19SSVNDVl9JU0Ff RVhUX0RBVEEoemJhLCBSSVNDVl9JU0FfRVhUX1pCQSksCiAJX19SSVNDVl9JU0FfRVhUX0RBVEEo emJiLCBSSVNDVl9JU0FfRVhUX1pCQiksCiAJX19SSVNDVl9JU0FfRVhUX0RBVEEoemJjLCBSSVND Vl9JU0FfRVhUX1pCQyksCisJX19SSVNDVl9JU0FfRVhUX0RBVEEoemJrYiwgUklTQ1ZfSVNBX0VY VF9aQktCKSwKKwlfX1JJU0NWX0lTQV9FWFRfREFUQSh6YmtjLCBSSVNDVl9JU0FfRVhUX1pCS0Mp LAorCV9fUklTQ1ZfSVNBX0VYVF9EQVRBKHpia3gsIFJJU0NWX0lTQV9FWFRfWkJLWCksCiAJX19S SVNDVl9JU0FfRVhUX0RBVEEoemJzLCBSSVNDVl9JU0FfRVhUX1pCUyksCisJX19SSVNDVl9JU0Ff RVhUX0JVTkRMRSh6aywgcmlzY3ZfemtfYnVuZGxlZF9leHRzKSwKKwlfX1JJU0NWX0lTQV9FWFRf QlVORExFKHprbiwgcmlzY3ZfemtuX2J1bmRsZWRfZXh0cyksCisJX19SSVNDVl9JU0FfRVhUX0RB VEEoemtuZCwgUklTQ1ZfSVNBX0VYVF9aS05EKSwKKwlfX1JJU0NWX0lTQV9FWFRfREFUQSh6a25l LCBSSVNDVl9JU0FfRVhUX1pLTkUpLAorCV9fUklTQ1ZfSVNBX0VYVF9EQVRBKHprbmgsIFJJU0NW X0lTQV9FWFRfWktOSCksCisJX19SSVNDVl9JU0FfRVhUX0RBVEEoemtyLCBSSVNDVl9JU0FfRVhU X1pLUiksCisJX19SSVNDVl9JU0FfRVhUX0JVTkRMRSh6a3MsIHJpc2N2X3prc19idW5kbGVkX2V4 dHMpLAorCV9fUklTQ1ZfSVNBX0VYVF9EQVRBKHprdCwgUklTQ1ZfSVNBX0VYVF9aS1QpLAorCV9f UklTQ1ZfSVNBX0VYVF9EQVRBKHprc2VkLCBSSVNDVl9JU0FfRVhUX1pLU0VEKSwKKwlfX1JJU0NW X0lTQV9FWFRfREFUQSh6a3NoLCBSSVNDVl9JU0FfRVhUX1pLU0gpLAogCV9fUklTQ1ZfSVNBX0VY VF9EQVRBKHNtYWlhLCBSSVNDVl9JU0FfRVhUX1NNQUlBKSwKIAlfX1JJU0NWX0lTQV9FWFRfREFU QShzbXN0YXRlZW4sIFJJU0NWX0lTQV9FWFRfU01TVEFURUVOKSwKIAlfX1JJU0NWX0lTQV9FWFRf REFUQShzc2FpYSwgUklTQ1ZfSVNBX0VYVF9TU0FJQSksCkBAIC0xOTAsNiArMjM5LDMxIEBAIGNv bnN0IHN0cnVjdCByaXNjdl9pc2FfZXh0X2RhdGEgcmlzY3ZfaXNhX2V4dFtdID0gewogCiBjb25z dCBzaXplX3QgcmlzY3ZfaXNhX2V4dF9jb3VudCA9IEFSUkFZX1NJWkUocmlzY3ZfaXNhX2V4dCk7 CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBtYXRjaF9pc2FfZXh0KGNvbnN0IHN0cnVjdCByaXNjdl9p c2FfZXh0X2RhdGEgKmV4dCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgY29uc3QgY2hhciAqbmFt ZV9lbmQsIHN0cnVjdCByaXNjdl9pc2FpbmZvICppc2FpbmZvKQoreworCWlmICgobmFtZV9lbmQg LSBuYW1lID09IHN0cmxlbihleHQtPm5hbWUpKSAmJgorCSAgICAgIXN0cm5jYXNlY21wKG5hbWUs IGV4dC0+bmFtZSwgbmFtZV9lbmQgLSBuYW1lKSkgeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEg YnVuZGxlLCBlbmFibGUgYWxsIHRoZSBJU0EgZXh0ZW5zaW9ucyB0aGF0CisJCSAqIGNvbXByaXNl IHRoZSBidW5kbGUuCisJCSAqLworCQlpZiAoZXh0LT5zdWJzZXRfZXh0X3NpemUpIHsKKwkJCWZv ciAoaW50IGkgPSAwOyBpIDwgZXh0LT5zdWJzZXRfZXh0X3NpemU7IGkrKykgeworCQkJCWlmIChy aXNjdl9pc2FfZXh0ZW5zaW9uX2NoZWNrKGV4dC0+c3Vic2V0X2V4dF9pZHNbaV0pKQorCQkJCQlz ZXRfYml0KGV4dC0+c3Vic2V0X2V4dF9pZHNbaV0sIGlzYWluZm8tPmlzYSk7CisJCQl9CisJCX0K KworCQkvKgorCQkgKiBUaGlzIGlzIHZhbGlkIGV2ZW4gZm9yIGJ1bmRsZSBleHRlbnNpb25zIHdo aWNoIHVzZXMgdGhlIFJJU0NWX0lTQV9FWFRfSU5WQUxJRCBpZAorCQkgKiAocmVqZWN0ZWQgYnkg cmlzY3ZfaXNhX2V4dGVuc2lvbl9jaGVjaygpKS4KKwkJICovCisJCWlmIChyaXNjdl9pc2FfZXh0 ZW5zaW9uX2NoZWNrKGV4dC0+aWQpKQorCQkJc2V0X2JpdChleHQtPmlkLCBpc2FpbmZvLT5pc2Ep OworCX0KK30KKwogc3RhdGljIHZvaWQgX19pbml0IHJpc2N2X3BhcnNlX2lzYV9zdHJpbmcodW5z aWduZWQgbG9uZyAqdGhpc19od2NhcCwgc3RydWN0IHJpc2N2X2lzYWluZm8gKmlzYWluZm8sCiAJ CQkJCSAgdW5zaWduZWQgbG9uZyAqaXNhMmh3Y2FwLCBjb25zdCBjaGFyICppc2EpCiB7CkBAIC0z MjIsMTQgKzM5Niw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCByaXNjdl9wYXJzZV9pc2Ffc3RyaW5n KHVuc2lnbmVkIGxvbmcgKnRoaXNfaHdjYXAsIHN0cnVjdCByaXNjCiAJCWlmICgqaXNhID09ICdf JykKIAkJCSsraXNhOwogCi0jZGVmaW5lIFNFVF9JU0FfRVhUX01BUChuYW1lLCBiaXQpCQkJCQkJ XAotCQlkbyB7CQkJCQkJCQlcCi0JCQlpZiAoKGV4dF9lbmQgLSBleHQgPT0gc3RybGVuKG5hbWUp KSAmJgkJCVwKLQkJCSAgICAgIXN0cm5jYXNlY21wKGV4dCwgbmFtZSwgc3RybGVuKG5hbWUpKSAm JgkJXAotCQkJICAgICByaXNjdl9pc2FfZXh0ZW5zaW9uX2NoZWNrKGJpdCkpCQkJXAotCQkJCXNl dF9iaXQoYml0LCBpc2FpbmZvLT5pc2EpOwkJCVwKLQkJfSB3aGlsZSAoZmFsc2UpCQkJCQkJCVwK LQogCQlpZiAodW5saWtlbHkoZXh0X2VycikpCiAJCQljb250aW51ZTsKIAkJaWYgKCFleHRfbG9u ZykgewpAQCAtMzQxLDEwICs0MDcsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfcGFyc2Vf aXNhX3N0cmluZyh1bnNpZ25lZCBsb25nICp0aGlzX2h3Y2FwLCBzdHJ1Y3QgcmlzYwogCQkJfQog CQl9IGVsc2UgewogCQkJZm9yIChpbnQgaSA9IDA7IGkgPCByaXNjdl9pc2FfZXh0X2NvdW50OyBp KyspCi0JCQkJU0VUX0lTQV9FWFRfTUFQKHJpc2N2X2lzYV9leHRbaV0ubmFtZSwKLQkJCQkJCXJp c2N2X2lzYV9leHRbaV0uaWQpOworCQkJCW1hdGNoX2lzYV9leHQoJnJpc2N2X2lzYV9leHRbaV0s IGV4dCwgZXh0X2VuZCwgaXNhaW5mbyk7CiAJCX0KLSN1bmRlZiBTRVRfSVNBX0VYVF9NQVAKIAl9 CiB9CiAKQEAgLTQ0MywxOCArNTA3LDI2IEBAIHN0YXRpYyBpbnQgX19pbml0IHJpc2N2X2ZpbGxf aHdjYXBfZnJvbV9leHRfbGlzdCh1bnNpZ25lZCBsb25nICppc2EyaHdjYXApCiAJCX0KIAogCQlm b3IgKGludCBpID0gMDsgaSA8IHJpc2N2X2lzYV9leHRfY291bnQ7IGkrKykgeworCQkJY29uc3Qg c3RydWN0IHJpc2N2X2lzYV9leHRfZGF0YSAqZXh0ID0gJnJpc2N2X2lzYV9leHRbaV07CisKIAkJ CWlmIChvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcoY3B1X25vZGUsICJyaXNjdixpc2EtZXh0ZW5z aW9ucyIsCi0JCQkJCQkgICAgIHJpc2N2X2lzYV9leHRbaV0ucHJvcGVydHkpIDwgMCkKKwkJCQkJ CSAgICAgZXh0LT5wcm9wZXJ0eSkgPCAwKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoIXJpc2N2 X2lzYV9leHRlbnNpb25fY2hlY2socmlzY3ZfaXNhX2V4dFtpXS5pZCkpCi0JCQkJY29udGludWU7 CisJCQlpZiAoZXh0LT5zdWJzZXRfZXh0X3NpemUpIHsKKwkJCQlmb3IgKGludCBqID0gMDsgaiA8 IGV4dC0+c3Vic2V0X2V4dF9zaXplOyBqKyspIHsKKwkJCQkJaWYgKHJpc2N2X2lzYV9leHRlbnNp b25fY2hlY2soZXh0LT5zdWJzZXRfZXh0X2lkc1tpXSkpCisJCQkJCQlzZXRfYml0KGV4dC0+c3Vi c2V0X2V4dF9pZHNbal0sIGlzYWluZm8tPmlzYSk7CisJCQkJfQorCQkJfQogCi0JCQkvKiBPbmx5 IHNpbmdsZSBsZXR0ZXIgZXh0ZW5zaW9ucyBnZXQgc2V0IGluIGh3Y2FwICovCi0JCQlpZiAoc3Ry bmxlbihyaXNjdl9pc2FfZXh0W2ldLm5hbWUsIDIpID09IDEpCi0JCQkJdGhpc19od2NhcCB8PSBp c2EyaHdjYXBbcmlzY3ZfaXNhX2V4dFtpXS5pZF07CisJCQlpZiAocmlzY3ZfaXNhX2V4dGVuc2lv bl9jaGVjayhleHQtPmlkKSkgeworCQkJCXNldF9iaXQoZXh0LT5pZCwgaXNhaW5mby0+aXNhKTsK IAotCQkJc2V0X2JpdChyaXNjdl9pc2FfZXh0W2ldLmlkLCBpc2FpbmZvLT5pc2EpOworCQkJCS8q IE9ubHkgc2luZ2xlIGxldHRlciBleHRlbnNpb25zIGdldCBzZXQgaW4gaHdjYXAgKi8KKwkJCQlp ZiAoc3RybmxlbihyaXNjdl9pc2FfZXh0W2ldLm5hbWUsIDIpID09IDEpCisJCQkJCXRoaXNfaHdj YXAgfD0gaXNhMmh3Y2FwW3Jpc2N2X2lzYV9leHRbaV0uaWRdOworCQkJfQogCQl9CiAKIAkJb2Zf bm9kZV9wdXQoY3B1X25vZGUpOwotLSAKMi40Mi4wCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJp c2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1yaXNjdgo=