Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp1775598imj; Fri, 8 Feb 2019 07:11:21 -0800 (PST) X-Google-Smtp-Source: AHgI3IbkVu2O9siVJZYTkLHUOuuqyr6Bm2PFkQxz3Afel1vk5+kxkzHIHSP1Rpk2G5run2wlgBR3 X-Received: by 2002:aa7:8042:: with SMTP id y2mr9611087pfm.39.1549638681370; Fri, 08 Feb 2019 07:11:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549638681; cv=none; d=google.com; s=arc-20160816; b=wYeELAiRm4jrH/28TyfrTgv8QwWitoQpnQKv3QAe4UHFl45bgvzjt/HRAUurn0DUoP sDFOIWMF6K8VfpDNGDDqplkUlp4Q17qAXcvj1MVADN2NHnVFZIHJ6gVmKAFco5I09qgA jv4LcPPB1flWAn/TZZkYvSifFk6CKSv2MUKsIFEpllViMJ+o8//u0zHN9pILapokG1gJ NrfdV3q6mjtyzU5uV/LulS7xK3Y7erK972jBEPOJMSvT+fMEs5saOQ5mFBXcAx7HhTLt XecWjs7+bRyyjBkIG67sv94yyBi5jHA8qPC9aqvlKcfJ3imMBXT2kWWKm/L/YEh4Ncb/ mMhg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:from:date:message-id:references :in-reply-to:subject:cc:to; bh=u5deY7nIp8p0TaPc+MYTZr7jgSMktdqt0g4G4u+Z2QY=; b=FQr54WmWingsellkV+TK7xlk515kmnjqfndqR2JyUYXqokWyfz666CZTSLylgj7Nkz Hd97GPT2ZgEK+ZOHSJWe6HVV9Jf6yKWhgxH1xYPD+/ipYOfuxPehavp6yOZs4xcL6mc6 DfFnFBh59jaz+UFvip5+T8oJbyGBV/DJA7LDRrAEzKM0lypgu1RFLzRlbGrtfz63sLxl +GSxXTbzwuqMdyjAEvkvF7oUYJxGTzK08qc6+DYOeYahnYZj2tJm2W52R4Ai1m9FDZ/l VWYROhcOd3wgY6jeR5a0HIrGWc1XZ7dy4nrzHjuwcLvkRl3/Uk8/p1JqGShCpRNdilXf Z0Iw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p4si2680769pli.432.2019.02.08.07.11.05; Fri, 08 Feb 2019 07:11:21 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728061AbfBHPK1 (ORCPT + 99 others); Fri, 8 Feb 2019 10:10:27 -0500 Received: from verein.lst.de ([213.95.11.211]:42883 "EHLO newverein.lst.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728037AbfBHPKZ (ORCPT ); Fri, 8 Feb 2019 10:10:25 -0500 Received: by newverein.lst.de (Postfix, from userid 2005) id 676A168DEE; Fri, 8 Feb 2019 16:10:24 +0100 (CET) To: Mark Rutland , Will Deacon , Catalin Marinas , Julien Thierry , Steven Rostedt , Josh Poimboeuf , Ingo Molnar , Ard Biesheuvel , Arnd Bergmann , AKASHI Takahiro , Amit Daniel Kachhap Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, live-patching@vger.kernel.org Subject: [PATCH v8 5/5] arm64: use -fpatchable-function-entry if available In-Reply-To: <20190208150826.44EBC68DD2@newverein.lst.de> References: <20190208150826.44EBC68DD2@newverein.lst.de> Message-Id: <20190208151024.676A168DEE@newverein.lst.de> Date: Fri, 8 Feb 2019 16:10:24 +0100 (CET) From: duwe@lst.de (Torsten Duwe) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Test whether gcc supports -fpatchable-function-entry and use it to promote DYNAMIC_FTRACE to DYNAMIC_FTRACE_WITH_REGS. Amend support for the new object section that holds the locations (__patchable_function_entries) and define a proper "notrace" attribute to switch it off. Signed-off-by: Torsten Duwe --- arch/arm64/Kconfig | 2 ++ arch/arm64/Makefile | 5 +++++ include/asm-generic/vmlinux.lds.h | 1 + include/linux/compiler_types.h | 2 ++ kernel/module.c | 7 ++++++- 5 files changed, 16 insertions(+), 1 deletion(-) --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -132,6 +132,8 @@ config ARM64 select HAVE_DEBUG_KMEMLEAK select HAVE_DMA_CONTIGUOUS select HAVE_DYNAMIC_FTRACE + select HAVE_DYNAMIC_FTRACE_WITH_REGS \ + if $(cc-option,-fpatchable-function-entry=2) select HAVE_EFFICIENT_UNALIGNED_ACCESS select HAVE_FTRACE_MCOUNT_RECORD select HAVE_FUNCTION_TRACER --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile @@ -89,6 +89,11 @@ ifeq ($(CONFIG_ARM64_MODULE_PLTS),y) KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/arm64/kernel/module.lds endif +ifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_REGS),y) + KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FENTRY + CC_FLAGS_FTRACE := -fpatchable-function-entry=2 +endif + # Default value head-y := arch/arm64/kernel/head.o --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -113,6 +113,7 @@ #define MCOUNT_REC() . = ALIGN(8); \ __start_mcount_loc = .; \ KEEP(*(__mcount_loc)) \ + KEEP(*(__patchable_function_entries)) \ __stop_mcount_loc = .; #else #define MCOUNT_REC() --- a/include/linux/compiler_types.h +++ b/include/linux/compiler_types.h @@ -112,6 +112,8 @@ struct ftrace_likely_data { #if defined(CC_USING_HOTPATCH) #define notrace __attribute__((hotpatch(0, 0))) +#elif defined(CC_USING_PATCHABLE_FENTRY) +#define notrace __attribute__((patchable_function_entry(0))) #else #define notrace __attribute__((__no_instrument_function__)) #endif --- a/kernel/module.c +++ b/kernel/module.c @@ -3122,7 +3122,12 @@ static int find_module_sections(struct m #endif #ifdef CONFIG_FTRACE_MCOUNT_RECORD /* sechdrs[0].sh_size is always zero */ - mod->ftrace_callsites = section_objs(info, "__mcount_loc", + mod->ftrace_callsites = section_objs(info, +#ifdef CC_USING_PATCHABLE_FENTRY + "__patchable_function_entries", +#else + "__mcount_loc", +#endif sizeof(*mod->ftrace_callsites), &mod->num_ftrace_callsites); #endif