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 X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BC924C433E1 for ; Wed, 8 Jul 2020 21:10:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 89DAF20658 for ; Wed, 8 Jul 2020 21:10:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YbRsINFQ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726169AbgGHVKQ (ORCPT ); Wed, 8 Jul 2020 17:10:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55890 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725787AbgGHVKP (ORCPT ); Wed, 8 Jul 2020 17:10:15 -0400 Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 30DCBC061A0B; Wed, 8 Jul 2020 14:10:15 -0700 (PDT) Received: by mail-wm1-x344.google.com with SMTP id f18so4599503wml.3; Wed, 08 Jul 2020 14:10:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BRdWrZGotFU/V/N69RBCWuEXsKoewH6WQsweVR7ALZI=; b=YbRsINFQuj4rsIvUK1OvMoLvTYf9ohCqUDZGyBsOUBI3xxHIV+sh/Njeh0iTFSfrm7 nf2DXUHUvXzafp9O+7dfPtZWLreUJkV7xdBl9yr1xSMjbrDpILgJ7cmk8GUwE45rdFvk 7+CIS4sSr7qsGv2SYKoAsRWs1ERetwZ6R2d70aPbkxz3tv7n+UvK2nuSZk4QB+OP5rLb JzTk7d1DU4nNJuvteFyS03a3Y7A1fkarmms0pCRX+2RLyA5oTERnh4J3Y95M3CdfIXWp aLbbh1t0UXAEekvcWViq+7HAn1MfESw1eamf8rR3WjF+ZYAdSXjKU7kiyPaOOwVn1/UT EJ9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=BRdWrZGotFU/V/N69RBCWuEXsKoewH6WQsweVR7ALZI=; b=geybeQ7rhn/aTSoNGX4x7PFEN4Qq/zTVx0YUQTW80veZ+Vlq8vmCDhXigGiyKaWVHZ uS4Vrb47CARp9Xe8g8vaL7KDOnM72v8OB1cRkHATbZIygZ1CZOKymkjlEptZLCGZSMc9 6U2fIc/0h75uT5a2j2B525EOzGp51SsLsoElBsLE84bMZUIqVsv7G85Jo1l4W8Nz4hYe JuEXb9bpYDAWtoaLitMk+h7xde8YR3fivPlAHgG8KbRdbtdOrS2qdGxFkoHITA0D8fob TaIBOvGCe2vODJSC8HxkJgpxSwV7pgm9hTNxciSRYioj45RAH3lbP2CJr+rBx8Z7Kj/9 XXVA== X-Gm-Message-State: AOAM530sLBb17UGtGvc5TzwJSOFBLlwujv8yz40TMrFXj1R9gF8GSDPX nB8Yq3GX3IoEB/Y1gphBXcg= X-Google-Smtp-Source: ABdhPJwkstX8Sj2urYCU2SdzhkKIKmrEBrTXDdHq8hml/jbRvgiqZRnT5smUI7pFxM091Bbt5K6WzA== X-Received: by 2002:a1c:4804:: with SMTP id v4mr11080060wma.139.1594242613783; Wed, 08 Jul 2020 14:10:13 -0700 (PDT) Received: from localhost.localdomain ([80.71.140.73]) by smtp.gmail.com with ESMTPSA id u23sm1971515wru.94.2020.07.08.14.10.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jul 2020 14:10:13 -0700 (PDT) From: Emil Renner Berthing To: linux-riscv@lists.infradead.org Cc: Emil Renner Berthing , Palmer Dabbelt , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , Paul Walmsley , Jonathan Corbet , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/2] riscv: Add jump-label implementation Date: Wed, 8 Jul 2020 23:09:48 +0200 Message-Id: <20200708210948.34197-2-kernel@esmil.dk> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200708210948.34197-1-kernel@esmil.dk> References: <20200708210948.34197-1-kernel@esmil.dk> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-doc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-doc@vger.kernel.org Add jump-label implementation based on the ARM64 version and add CONFIG_JUMP_LABEL=y to the defconfigs. Signed-off-by: Emil Renner Berthing Reviewed-by: Björn Töpel --- Tested on the HiFive Unleashed board. Changes since v1: - WARN and give up gracefully if the jump offset cannot be represented in a JAL instruction. - Add missing braces. - Add CONFIG_JUMP_LABEL=y to defconfigs. All suggested by Björn Töpel. Changes since RFC: - Use RISCV_PTR and RISCV_LGPTR macros to match struct jump_table also in 32bit kernels. - Remove unneeded branch ? 1 : 0, thanks Björn - Fix \n\n instead of \n\t mistake .../core/jump-labels/arch-support.txt | 2 +- arch/riscv/Kconfig | 2 + arch/riscv/configs/defconfig | 1 + arch/riscv/configs/nommu_k210_defconfig | 1 + arch/riscv/configs/nommu_virt_defconfig | 1 + arch/riscv/configs/rv32_defconfig | 1 + arch/riscv/include/asm/jump_label.h | 59 +++++++++++++++++++ arch/riscv/kernel/Makefile | 2 + arch/riscv/kernel/jump_label.c | 49 +++++++++++++++ 9 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 arch/riscv/include/asm/jump_label.h create mode 100644 arch/riscv/kernel/jump_label.c diff --git a/Documentation/features/core/jump-labels/arch-support.txt b/Documentation/features/core/jump-labels/arch-support.txt index 632a1c7aefa2..760243d18ed7 100644 --- a/Documentation/features/core/jump-labels/arch-support.txt +++ b/Documentation/features/core/jump-labels/arch-support.txt @@ -23,7 +23,7 @@ | openrisc: | TODO | | parisc: | ok | | powerpc: | ok | - | riscv: | TODO | + | riscv: | ok | | s390: | ok | | sh: | TODO | | sparc: | ok | diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index fd639937e251..d2f5c53fdc19 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -46,6 +46,8 @@ config RISCV select GENERIC_TIME_VSYSCALL if MMU && 64BIT select HANDLE_DOMAIN_IRQ select HAVE_ARCH_AUDITSYSCALL + select HAVE_ARCH_JUMP_LABEL + select HAVE_ARCH_JUMP_LABEL_RELATIVE select HAVE_ARCH_KASAN if MMU && 64BIT select HAVE_ARCH_KGDB select HAVE_ARCH_KGDB_QXFER_PKT diff --git a/arch/riscv/configs/defconfig b/arch/riscv/configs/defconfig index 4da4886246a4..d58c93efb603 100644 --- a/arch/riscv/configs/defconfig +++ b/arch/riscv/configs/defconfig @@ -17,6 +17,7 @@ CONFIG_BPF_SYSCALL=y CONFIG_SOC_SIFIVE=y CONFIG_SOC_VIRT=y CONFIG_SMP=y +CONFIG_JUMP_LABEL=y CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y CONFIG_NET=y diff --git a/arch/riscv/configs/nommu_k210_defconfig b/arch/riscv/configs/nommu_k210_defconfig index b48138e329ea..cd1df62b13c7 100644 --- a/arch/riscv/configs/nommu_k210_defconfig +++ b/arch/riscv/configs/nommu_k210_defconfig @@ -33,6 +33,7 @@ CONFIG_SMP=y CONFIG_NR_CPUS=2 CONFIG_CMDLINE="earlycon console=ttySIF0" CONFIG_CMDLINE_FORCE=y +CONFIG_JUMP_LABEL=y # CONFIG_BLOCK is not set CONFIG_BINFMT_FLAT=y # CONFIG_COREDUMP is not set diff --git a/arch/riscv/configs/nommu_virt_defconfig b/arch/riscv/configs/nommu_virt_defconfig index cf74e179bf90..f27596e9663e 100644 --- a/arch/riscv/configs/nommu_virt_defconfig +++ b/arch/riscv/configs/nommu_virt_defconfig @@ -30,6 +30,7 @@ CONFIG_MAXPHYSMEM_2GB=y CONFIG_SMP=y CONFIG_CMDLINE="root=/dev/vda rw earlycon=uart8250,mmio,0x10000000,115200n8 console=ttyS0" CONFIG_CMDLINE_FORCE=y +CONFIG_JUMP_LABEL=y # CONFIG_BLK_DEV_BSG is not set CONFIG_PARTITION_ADVANCED=y # CONFIG_MSDOS_PARTITION is not set diff --git a/arch/riscv/configs/rv32_defconfig b/arch/riscv/configs/rv32_defconfig index 05bbf5240569..3a55f0e00d6c 100644 --- a/arch/riscv/configs/rv32_defconfig +++ b/arch/riscv/configs/rv32_defconfig @@ -17,6 +17,7 @@ CONFIG_BPF_SYSCALL=y CONFIG_SOC_VIRT=y CONFIG_ARCH_RV32I=y CONFIG_SMP=y +CONFIG_JUMP_LABEL=y CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y CONFIG_NET=y diff --git a/arch/riscv/include/asm/jump_label.h b/arch/riscv/include/asm/jump_label.h new file mode 100644 index 000000000000..d5fb342bfccf --- /dev/null +++ b/arch/riscv/include/asm/jump_label.h @@ -0,0 +1,59 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2020 Emil Renner Berthing + * + * Based on arch/arm64/include/asm/jump_label.h + */ +#ifndef __ASM_JUMP_LABEL_H +#define __ASM_JUMP_LABEL_H + +#ifndef __ASSEMBLY__ + +#include + +#define JUMP_LABEL_NOP_SIZE 4 + +static __always_inline bool arch_static_branch(struct static_key *key, + bool branch) +{ + asm_volatile_goto( + " .option push \n\t" + " .option norelax \n\t" + " .option norvc \n\t" + "1: nop \n\t" + " .option pop \n\t" + " .pushsection __jump_table, \"aw\" \n\t" + " .align " RISCV_LGPTR " \n\t" + " .long 1b - ., %l[label] - . \n\t" + " " RISCV_PTR " %0 - . \n\t" + " .popsection \n\t" + : : "i"(&((char *)key)[branch]) : : label); + + return false; +label: + return true; +} + +static __always_inline bool arch_static_branch_jump(struct static_key *key, + bool branch) +{ + asm_volatile_goto( + " .option push \n\t" + " .option norelax \n\t" + " .option norvc \n\t" + "1: jal zero, %l[label] \n\t" + " .option pop \n\t" + " .pushsection __jump_table, \"aw\" \n\t" + " .align " RISCV_LGPTR " \n\t" + " .long 1b - ., %l[label] - . \n\t" + " " RISCV_PTR " %0 - . \n\t" + " .popsection \n\t" + : : "i"(&((char *)key)[branch]) : : label); + + return false; +label: + return true; +} + +#endif /* __ASSEMBLY__ */ +#endif /* __ASM_JUMP_LABEL_H */ diff --git a/arch/riscv/kernel/Makefile b/arch/riscv/kernel/Makefile index b355cf485671..a5287ab9f7f2 100644 --- a/arch/riscv/kernel/Makefile +++ b/arch/riscv/kernel/Makefile @@ -53,4 +53,6 @@ endif obj-$(CONFIG_HOTPLUG_CPU) += cpu-hotplug.o obj-$(CONFIG_KGDB) += kgdb.o +obj-$(CONFIG_JUMP_LABEL) += jump_label.o + clean: diff --git a/arch/riscv/kernel/jump_label.c b/arch/riscv/kernel/jump_label.c new file mode 100644 index 000000000000..1bab1abc1aa5 --- /dev/null +++ b/arch/riscv/kernel/jump_label.c @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2020 Emil Renner Berthing + * + * Based on arch/arm64/kernel/jump_label.c + */ +#include +#include +#include +#include + +#define RISCV_INSN_NOP 0x00000013U +#define RISCV_INSN_JAL 0x0000006fU + +void arch_jump_label_transform(struct jump_entry *entry, + enum jump_label_type type) +{ + void *addr = (void *)jump_entry_code(entry); + u32 insn; + + if (type == JUMP_LABEL_JMP) { + long offset = jump_entry_target(entry) - jump_entry_code(entry); + + if (WARN_ON(offset & 1 || offset < -524288 || offset >= 524288)) + return; + + insn = RISCV_INSN_JAL | + (((u32)offset & GENMASK(19, 12)) << (12 - 12)) | + (((u32)offset & GENMASK(11, 11)) << (20 - 11)) | + (((u32)offset & GENMASK(10, 1)) << (21 - 1)) | + (((u32)offset & GENMASK(20, 20)) << (31 - 20)); + } else { + insn = RISCV_INSN_NOP; + } + + patch_text_nosync(addr, &insn, sizeof(insn)); +} + +void arch_jump_label_transform_static(struct jump_entry *entry, + enum jump_label_type type) +{ + /* + * We use the same instructions in the arch_static_branch and + * arch_static_branch_jump inline functions, so there's no + * need to patch them up here. + * The core will call arch_jump_label_transform when those + * instructions need to be replaced. + */ +} -- 2.27.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 X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 082A9C433E0 for ; Wed, 8 Jul 2020 21:10:34 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C19DE20658 for ; Wed, 8 Jul 2020 21:10:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="t5Bvgx2G"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YbRsINFQ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C19DE20658 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=esmil.dk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=TK+SiouyjPXBKwwXzy1SIU30y2RhYTBtnHeWVnOPf8M=; b=t5Bvgx2G12djTQFZBP3GA/+36 AgnSeF4jy7QCcumlnHuJZT/JJz+yIi39zLT1imA1xBDCxuMW2DAE0s6QyTxeFuQJ4WGuuK+gj3gC5 fgX2rAYWjxl+7KRcsiChGX9sM5C9+Ehmtll4mkwxG6FnQAzKy8NCr9BjPOA1/swrCl3jFea9X6bUr nHaSqU1eaQFWhv4TyWMdizHIlGwyPdTebqg2IKrXcKuhRWS/huEfKVIjprHnZhWHqiZX745bjWSKA eRWdxfc3P+0YDp0/FHQjQtLf3KU34fYDKpmq6zlzYYPTdA5AVxFbDbF5Mi1vDefE0gPWf5cWgadPe NDGYqkMng==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jtHKd-0003Q6-56; Wed, 08 Jul 2020 21:10:19 +0000 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jtHKZ-0003Oy-JQ for linux-riscv@lists.infradead.org; Wed, 08 Jul 2020 21:10:17 +0000 Received: by mail-wm1-x344.google.com with SMTP id o2so4601757wmh.2 for ; Wed, 08 Jul 2020 14:10:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BRdWrZGotFU/V/N69RBCWuEXsKoewH6WQsweVR7ALZI=; b=YbRsINFQuj4rsIvUK1OvMoLvTYf9ohCqUDZGyBsOUBI3xxHIV+sh/Njeh0iTFSfrm7 nf2DXUHUvXzafp9O+7dfPtZWLreUJkV7xdBl9yr1xSMjbrDpILgJ7cmk8GUwE45rdFvk 7+CIS4sSr7qsGv2SYKoAsRWs1ERetwZ6R2d70aPbkxz3tv7n+UvK2nuSZk4QB+OP5rLb JzTk7d1DU4nNJuvteFyS03a3Y7A1fkarmms0pCRX+2RLyA5oTERnh4J3Y95M3CdfIXWp aLbbh1t0UXAEekvcWViq+7HAn1MfESw1eamf8rR3WjF+ZYAdSXjKU7kiyPaOOwVn1/UT EJ9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=BRdWrZGotFU/V/N69RBCWuEXsKoewH6WQsweVR7ALZI=; b=M6Jo9trIC2w4MqCpnQWAP/3l46UXoB2o9i60QlgZwVKg0Ug2XWSSIik7Dlzn2Lwrq+ M4falm1Z/lmy8w86q/kaSBJM9B5WGmO+oGr1OCz26GpUMukyxXUXGKzMEr6K46Yue6KQ cPTAkVQR36K2O6cayOQ23uLzwfLhD0aRCnK4duLjtvy2qeAbbdqzureZFWVSgPNf6LAU aH/bEPFZ7Bso/1eChY4xMalw5QOg04b+d97fTq136EWd+CvFTi2tN+nClLbkCwbGMimw mrWs2WRJLDlPN6ze90kpJdY4iBrEWi3687PGBototm0GN/QN8KF7M0/HBKMWgr6v4hz2 INnA== X-Gm-Message-State: AOAM530nPspAMWC8XkODEtjOgnAlN41wcsW0RqOwusOl5ronvfG/KLJs kUJTdwaLhJaPI1AGkXHPt9ssycB3Gh385Q== X-Google-Smtp-Source: ABdhPJwkstX8Sj2urYCU2SdzhkKIKmrEBrTXDdHq8hml/jbRvgiqZRnT5smUI7pFxM091Bbt5K6WzA== X-Received: by 2002:a1c:4804:: with SMTP id v4mr11080060wma.139.1594242613783; Wed, 08 Jul 2020 14:10:13 -0700 (PDT) Received: from localhost.localdomain ([80.71.140.73]) by smtp.gmail.com with ESMTPSA id u23sm1971515wru.94.2020.07.08.14.10.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jul 2020 14:10:13 -0700 (PDT) From: Emil Renner Berthing To: linux-riscv@lists.infradead.org Subject: [PATCH v2 2/2] riscv: Add jump-label implementation Date: Wed, 8 Jul 2020 23:09:48 +0200 Message-Id: <20200708210948.34197-2-kernel@esmil.dk> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200708210948.34197-1-kernel@esmil.dk> References: <20200708210948.34197-1-kernel@esmil.dk> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200708_171015_668967_726CEC17 X-CRM114-Status: GOOD ( 20.36 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Emil Renner Berthing , Jonathan Corbet , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Palmer Dabbelt , Paul Walmsley 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 QWRkIGp1bXAtbGFiZWwgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIEFSTTY0IHZlcnNpb24K YW5kIGFkZCBDT05GSUdfSlVNUF9MQUJFTD15IHRvIHRoZSBkZWZjb25maWdzLgoKU2lnbmVkLW9m Zi1ieTogRW1pbCBSZW5uZXIgQmVydGhpbmcgPGtlcm5lbEBlc21pbC5kaz4KUmV2aWV3ZWQtYnk6 IEJqw7ZybiBUw7ZwZWwgPGJqb3JuLnRvcGVsQGdtYWlsLmNvbT4KLS0tCgpUZXN0ZWQgb24gdGhl IEhpRml2ZSBVbmxlYXNoZWQgYm9hcmQuCgpDaGFuZ2VzIHNpbmNlIHYxOgotIFdBUk4gYW5kIGdp dmUgdXAgZ3JhY2VmdWxseSBpZiB0aGUganVtcCBvZmZzZXQgY2Fubm90IGJlCiAgcmVwcmVzZW50 ZWQgaW4gYSBKQUwgaW5zdHJ1Y3Rpb24uCi0gQWRkIG1pc3NpbmcgYnJhY2VzLgotIEFkZCBDT05G SUdfSlVNUF9MQUJFTD15IHRvIGRlZmNvbmZpZ3MuCgpBbGwgc3VnZ2VzdGVkIGJ5IEJqw7ZybiBU w7ZwZWwuCgpDaGFuZ2VzIHNpbmNlIFJGQzoKLSBVc2UgUklTQ1ZfUFRSIGFuZCBSSVNDVl9MR1BU UiBtYWNyb3MgdG8gbWF0Y2ggc3RydWN0IGp1bXBfdGFibGUKICBhbHNvIGluIDMyYml0IGtlcm5l bHMuCi0gUmVtb3ZlIHVubmVlZGVkIGJyYW5jaCA/IDEgOiAwLCB0aGFua3MgQmrDtnJuCi0gRml4 IFxuXG4gaW5zdGVhZCBvZiBcblx0IG1pc3Rha2UKCiAuLi4vY29yZS9qdW1wLWxhYmVscy9hcmNo LXN1cHBvcnQudHh0ICAgICAgICAgfCAgMiArLQogYXJjaC9yaXNjdi9LY29uZmlnICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDIgKwogYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZyAg ICAgICAgICAgICAgICAgIHwgIDEgKwogYXJjaC9yaXNjdi9jb25maWdzL25vbW11X2syMTBfZGVm Y29uZmlnICAgICAgIHwgIDEgKwogYXJjaC9yaXNjdi9jb25maWdzL25vbW11X3ZpcnRfZGVmY29u ZmlnICAgICAgIHwgIDEgKwogYXJjaC9yaXNjdi9jb25maWdzL3J2MzJfZGVmY29uZmlnICAgICAg ICAgICAgIHwgIDEgKwogYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmggICAgICAg ICAgIHwgNTkgKysrKysrKysrKysrKysrKysrKwogYXJjaC9yaXNjdi9rZXJuZWwvTWFrZWZpbGUg ICAgICAgICAgICAgICAgICAgIHwgIDIgKwogYXJjaC9yaXNjdi9rZXJuZWwvanVtcF9sYWJlbC5j ICAgICAgICAgICAgICAgIHwgNDkgKysrKysrKysrKysrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDEx NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9y aXNjdi9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3Jp c2N2L2tlcm5lbC9qdW1wX2xhYmVsLmMKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1 cmVzL2NvcmUvanVtcC1sYWJlbHMvYXJjaC1zdXBwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZmVh dHVyZXMvY29yZS9qdW1wLWxhYmVscy9hcmNoLXN1cHBvcnQudHh0CmluZGV4IDYzMmExYzdhZWZh Mi4uNzYwMjQzZDE4ZWQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmVzL2NvcmUv anVtcC1sYWJlbHMvYXJjaC1zdXBwb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmVz L2NvcmUvanVtcC1sYWJlbHMvYXJjaC1zdXBwb3J0LnR4dApAQCAtMjMsNyArMjMsNyBAQAogICAg IHwgICAgb3BlbnJpc2M6IHwgVE9ETyB8CiAgICAgfCAgICAgIHBhcmlzYzogfCAgb2sgIHwKICAg ICB8ICAgICBwb3dlcnBjOiB8ICBvayAgfAotICAgIHwgICAgICAgcmlzY3Y6IHwgVE9ETyB8Cisg ICAgfCAgICAgICByaXNjdjogfCAgb2sgIHwKICAgICB8ICAgICAgICBzMzkwOiB8ICBvayAgfAog ICAgIHwgICAgICAgICAgc2g6IHwgVE9ETyB8CiAgICAgfCAgICAgICBzcGFyYzogfCAgb2sgIHwK ZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvS2NvbmZpZyBiL2FyY2gvcmlzY3YvS2NvbmZpZwppbmRl eCBmZDYzOTkzN2UyNTEuLmQyZjVjNTNmZGMxOSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9LY29u ZmlnCisrKyBiL2FyY2gvcmlzY3YvS2NvbmZpZwpAQCAtNDYsNiArNDYsOCBAQCBjb25maWcgUklT Q1YKIAlzZWxlY3QgR0VORVJJQ19USU1FX1ZTWVNDQUxMIGlmIE1NVSAmJiA2NEJJVAogCXNlbGVj dCBIQU5ETEVfRE9NQUlOX0lSUQogCXNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMCisJc2Vs ZWN0IEhBVkVfQVJDSF9KVU1QX0xBQkVMCisJc2VsZWN0IEhBVkVfQVJDSF9KVU1QX0xBQkVMX1JF TEFUSVZFCiAJc2VsZWN0IEhBVkVfQVJDSF9LQVNBTiBpZiBNTVUgJiYgNjRCSVQKIAlzZWxlY3Qg SEFWRV9BUkNIX0tHREIKIAlzZWxlY3QgSEFWRV9BUkNIX0tHREJfUVhGRVJfUEtUCmRpZmYgLS1n aXQgYS9hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnIGIvYXJjaC9yaXNjdi9jb25maWdzL2Rl ZmNvbmZpZwppbmRleCA0ZGE0ODg2MjQ2YTQuLmQ1OGM5M2VmYjYwMyAxMDA2NDQKLS0tIGEvYXJj aC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZworKysgYi9hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29u ZmlnCkBAIC0xNyw2ICsxNyw3IEBAIENPTkZJR19CUEZfU1lTQ0FMTD15CiBDT05GSUdfU09DX1NJ RklWRT15CiBDT05GSUdfU09DX1ZJUlQ9eQogQ09ORklHX1NNUD15CitDT05GSUdfSlVNUF9MQUJF TD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTkVU PXkKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvY29uZmlncy9ub21tdV9rMjEwX2RlZmNvbmZpZyBi L2FyY2gvcmlzY3YvY29uZmlncy9ub21tdV9rMjEwX2RlZmNvbmZpZwppbmRleCBiNDgxMzhlMzI5 ZWEuLmNkMWRmNjJiMTNjNyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9jb25maWdzL25vbW11X2sy MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvcmlzY3YvY29uZmlncy9ub21tdV9rMjEwX2RlZmNvbmZp ZwpAQCAtMzMsNiArMzMsNyBAQCBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKIENPTkZJ R19DTURMSU5FPSJlYXJseWNvbiBjb25zb2xlPXR0eVNJRjAiCiBDT05GSUdfQ01ETElORV9GT1JD RT15CitDT05GSUdfSlVNUF9MQUJFTD15CiAjIENPTkZJR19CTE9DSyBpcyBub3Qgc2V0CiBDT05G SUdfQklORk1UX0ZMQVQ9eQogIyBDT05GSUdfQ09SRURVTVAgaXMgbm90IHNldApkaWZmIC0tZ2l0 IGEvYXJjaC9yaXNjdi9jb25maWdzL25vbW11X3ZpcnRfZGVmY29uZmlnIGIvYXJjaC9yaXNjdi9j b25maWdzL25vbW11X3ZpcnRfZGVmY29uZmlnCmluZGV4IGNmNzRlMTc5YmY5MC4uZjI3NTk2ZTk2 NjNlIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2NvbmZpZ3Mvbm9tbXVfdmlydF9kZWZjb25maWcK KysrIGIvYXJjaC9yaXNjdi9jb25maWdzL25vbW11X3ZpcnRfZGVmY29uZmlnCkBAIC0zMCw2ICsz MCw3IEBAIENPTkZJR19NQVhQSFlTTUVNXzJHQj15CiBDT05GSUdfU01QPXkKIENPTkZJR19DTURM SU5FPSJyb290PS9kZXYvdmRhIHJ3IGVhcmx5Y29uPXVhcnQ4MjUwLG1taW8sMHgxMDAwMDAwMCwx MTUyMDBuOCBjb25zb2xlPXR0eVMwIgogQ09ORklHX0NNRExJTkVfRk9SQ0U9eQorQ09ORklHX0pV TVBfTEFCRUw9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogQ09ORklHX1BBUlRJ VElPTl9BRFZBTkNFRD15CiAjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldApkaWZm IC0tZ2l0IGEvYXJjaC9yaXNjdi9jb25maWdzL3J2MzJfZGVmY29uZmlnIGIvYXJjaC9yaXNjdi9j b25maWdzL3J2MzJfZGVmY29uZmlnCmluZGV4IDA1YmJmNTI0MDU2OS4uM2E1NWYwZTAwZDZjIDEw MDY0NAotLS0gYS9hcmNoL3Jpc2N2L2NvbmZpZ3MvcnYzMl9kZWZjb25maWcKKysrIGIvYXJjaC9y aXNjdi9jb25maWdzL3J2MzJfZGVmY29uZmlnCkBAIC0xNyw2ICsxNyw3IEBAIENPTkZJR19CUEZf U1lTQ0FMTD15CiBDT05GSUdfU09DX1ZJUlQ9eQogQ09ORklHX0FSQ0hfUlYzMkk9eQogQ09ORklH X1NNUD15CitDT05GSUdfSlVNUF9MQUJFTD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9E VUxFX1VOTE9BRD15CiBDT05GSUdfTkVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVk ZS9hc20vanVtcF9sYWJlbC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kNWZiMzQyYmZjY2YKLS0t IC9kZXYvbnVsbAorKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaApAQCAt MCwwICsxLDU5IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICov CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEVtaWwgUmVubmVyIEJlcnRoaW5nCisgKgorICog QmFzZWQgb24gYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKKyAqLworI2lmbmRl ZiBfX0FTTV9KVU1QX0xBQkVMX0gKKyNkZWZpbmUgX19BU01fSlVNUF9MQUJFTF9ICisKKyNpZm5k ZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEpV TVBfTEFCRUxfTk9QX1NJWkUgNAorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgYXJjaF9z dGF0aWNfYnJhbmNoKHN0cnVjdCBzdGF0aWNfa2V5ICprZXksCisJCQkJCSAgICAgICBib29sIGJy YW5jaCkKK3sKKwlhc21fdm9sYXRpbGVfZ290bygKKwkJIgkub3B0aW9uIHB1c2gJCQkJXG5cdCIK KwkJIgkub3B0aW9uIG5vcmVsYXgJCQkJXG5cdCIKKwkJIgkub3B0aW9uIG5vcnZjCQkJCVxuXHQi CisJCSIxOglub3AJCQkJCVxuXHQiCisJCSIJLm9wdGlvbiBwb3AJCQkJXG5cdCIKKwkJIgkucHVz aHNlY3Rpb24JX19qdW1wX3RhYmxlLCBcImF3XCIJXG5cdCIKKwkJIgkuYWxpZ24JCSIgUklTQ1Zf TEdQVFIgIgkJXG5cdCIKKwkJIgkubG9uZwkJMWIgLSAuLCAlbFtsYWJlbF0gLSAuCVxuXHQiCisJ CSIJIiBSSVNDVl9QVFIgIgklMCAtIC4JCQlcblx0IgorCQkiCS5wb3BzZWN0aW9uCQkJCVxuXHQi CisJCTogIDogICJpIigmKChjaGFyICopa2V5KVticmFuY2hdKSA6ICA6IGxhYmVsKTsKKworCXJl dHVybiBmYWxzZTsKK2xhYmVsOgorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgX19hbHdheXNf aW5saW5lIGJvb2wgYXJjaF9zdGF0aWNfYnJhbmNoX2p1bXAoc3RydWN0IHN0YXRpY19rZXkgKmtl eSwKKwkJCQkJCSAgICBib29sIGJyYW5jaCkKK3sKKwlhc21fdm9sYXRpbGVfZ290bygKKwkJIgku b3B0aW9uIHB1c2gJCQkJXG5cdCIKKwkJIgkub3B0aW9uIG5vcmVsYXgJCQkJXG5cdCIKKwkJIgku b3B0aW9uIG5vcnZjCQkJCVxuXHQiCisJCSIxOglqYWwJCXplcm8sICVsW2xhYmVsXQkJXG5cdCIK KwkJIgkub3B0aW9uIHBvcAkJCQlcblx0IgorCQkiCS5wdXNoc2VjdGlvbglfX2p1bXBfdGFibGUs IFwiYXdcIglcblx0IgorCQkiCS5hbGlnbgkJIiBSSVNDVl9MR1BUUiAiCQlcblx0IgorCQkiCS5s b25nCQkxYiAtIC4sICVsW2xhYmVsXSAtIC4JXG5cdCIKKwkJIgkiIFJJU0NWX1BUUiAiCSUwIC0g LgkJCVxuXHQiCisJCSIJLnBvcHNlY3Rpb24JCQkJXG5cdCIKKwkJOiAgOiAgImkiKCYoKGNoYXIg KilrZXkpW2JyYW5jaF0pIDogIDogbGFiZWwpOworCisJcmV0dXJuIGZhbHNlOworbGFiZWw6CisJ cmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZiAgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYJLyog X19BU01fSlVNUF9MQUJFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9NYWtl ZmlsZSBiL2FyY2gvcmlzY3Yva2VybmVsL01ha2VmaWxlCmluZGV4IGIzNTVjZjQ4NTY3MS4uYTUy ODdhYjlmN2YyIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9h cmNoL3Jpc2N2L2tlcm5lbC9NYWtlZmlsZQpAQCAtNTMsNCArNTMsNiBAQCBlbmRpZgogb2JqLSQo Q09ORklHX0hPVFBMVUdfQ1BVKQkrPSBjcHUtaG90cGx1Zy5vCiBvYmotJChDT05GSUdfS0dEQikJ CSs9IGtnZGIubwogCitvYmotJChDT05GSUdfSlVNUF9MQUJFTCkJKz0ganVtcF9sYWJlbC5vCisK IGNsZWFuOgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvanVtcF9sYWJlbC5jIGIvYXJj aC9yaXNjdi9rZXJuZWwvanVtcF9sYWJlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uMWJhYjFhYmMxYWE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9yaXNjdi9r ZXJuZWwvanVtcF9sYWJlbC5jCkBAIC0wLDAgKzEsNDkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgRW1pbCBSZW5u ZXIgQmVydGhpbmcKKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybTY0L2tlcm5lbC9qdW1wX2xhYmVs LmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2p1bXBf bGFiZWwuaD4KKyNpbmNsdWRlIDxhc20vYnVnLmg+CisjaW5jbHVkZSA8YXNtL3BhdGNoLmg+CisK KyNkZWZpbmUgUklTQ1ZfSU5TTl9OT1AgMHgwMDAwMDAxM1UKKyNkZWZpbmUgUklTQ1ZfSU5TTl9K QUwgMHgwMDAwMDA2ZlUKKwordm9pZCBhcmNoX2p1bXBfbGFiZWxfdHJhbnNmb3JtKHN0cnVjdCBq dW1wX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgICBlbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlKQor eworCXZvaWQgKmFkZHIgPSAodm9pZCAqKWp1bXBfZW50cnlfY29kZShlbnRyeSk7CisJdTMyIGlu c247CisKKwlpZiAodHlwZSA9PSBKVU1QX0xBQkVMX0pNUCkgeworCQlsb25nIG9mZnNldCA9IGp1 bXBfZW50cnlfdGFyZ2V0KGVudHJ5KSAtIGp1bXBfZW50cnlfY29kZShlbnRyeSk7CisKKwkJaWYg KFdBUk5fT04ob2Zmc2V0ICYgMSB8fCBvZmZzZXQgPCAtNTI0Mjg4IHx8IG9mZnNldCA+PSA1MjQy ODgpKQorCQkJcmV0dXJuOworCisJCWluc24gPSBSSVNDVl9JTlNOX0pBTCB8CisJCQkoKCh1MzIp b2Zmc2V0ICYgR0VOTUFTSygxOSwgMTIpKSA8PCAoMTIgLSAxMikpIHwKKwkJCSgoKHUzMilvZmZz ZXQgJiBHRU5NQVNLKDExLCAxMSkpIDw8ICgyMCAtIDExKSkgfAorCQkJKCgodTMyKW9mZnNldCAm IEdFTk1BU0soMTAsICAxKSkgPDwgKDIxIC0gIDEpKSB8CisJCQkoKCh1MzIpb2Zmc2V0ICYgR0VO TUFTSygyMCwgMjApKSA8PCAoMzEgLSAyMCkpOworCX0gZWxzZSB7CisJCWluc24gPSBSSVNDVl9J TlNOX05PUDsKKwl9CisKKwlwYXRjaF90ZXh0X25vc3luYyhhZGRyLCAmaW5zbiwgc2l6ZW9mKGlu c24pKTsKK30KKwordm9pZCBhcmNoX2p1bXBfbGFiZWxfdHJhbnNmb3JtX3N0YXRpYyhzdHJ1Y3Qg anVtcF9lbnRyeSAqZW50cnksCisJCQkJICAgICAgZW51bSBqdW1wX2xhYmVsX3R5cGUgdHlwZSkK K3sKKwkvKgorCSAqIFdlIHVzZSB0aGUgc2FtZSBpbnN0cnVjdGlvbnMgaW4gdGhlIGFyY2hfc3Rh dGljX2JyYW5jaCBhbmQKKwkgKiBhcmNoX3N0YXRpY19icmFuY2hfanVtcCBpbmxpbmUgZnVuY3Rp b25zLCBzbyB0aGVyZSdzIG5vCisJICogbmVlZCB0byBwYXRjaCB0aGVtIHVwIGhlcmUuCisJICog VGhlIGNvcmUgd2lsbCBjYWxsIGFyY2hfanVtcF9sYWJlbF90cmFuc2Zvcm0gIHdoZW4gdGhvc2UK KwkgKiBpbnN0cnVjdGlvbnMgbmVlZCB0byBiZSByZXBsYWNlZC4KKwkgKi8KK30KLS0gCjIuMjcu MAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK