Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp685765pxj; Fri, 28 May 2021 13:03:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwkzskWji6gbNcIb9CjMd35qaftRgEs8DxyK8q4ehpOa2FV1q7gIm1R44bwu5plz46w0117 X-Received: by 2002:a6b:b7cb:: with SMTP id h194mr8388262iof.139.1622232217465; Fri, 28 May 2021 13:03:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622232217; cv=none; d=google.com; s=arc-20160816; b=skiK5pQ0dkCDmh+ogedB91ZzzQGaYc5s0dV07RRBog2uS23xV2diGcLkpWxACj6Iaj +rbSZCycR4xRF9uHF24sXAuI/DOjAoj4AHJYohW9mTqUpgAWLkAAlBHsj7WMVTJnYofn JOp4gxKNji9gGn5nui0r/YnIjgRx2NvNq1FGmY2IITeHJA2vypM/Xh86DK6U4jjyOCWf v/lwlKyAStO8pYcaoQGZttIOnLGVSDzFiwqWrY2+C1BEwnz1OS5SoIuDdPG1TEnuf4LW zT1elG7C60txyP0s9LtgyGdwTPJXM/WgkbkhpVJaPBuKoMbT0APE2P5eoGZkjNM1/WAJ 1Azw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=8CjTgaGzpx1tYGvhyBdGCwHJ4sxt2qfBMHTKvcLBoYI=; b=PRES1rUyOlyrDbdRqd+m8lY1/uNNpH4NbqNx/2hHxFeJEY7iJiGyx3NCxmb48K5mvk /2yiNra8xXrjuFoxUI+CWzmI9Sgu+Ak3PDCR2baTIVjyT5aLBkIDw6bjt+BG7DuyqwK9 8Ln+JpeefMZ1nQ572Iwin+8ULeXnkI5rk/TcyLJQ4xP2c76/M/tbkqxax0L7sKz+VDds myQ+HDCoC+bGv9qWEV+3ThD8xU2RygrjlEh81NXTqe97PfPlo8CaW1tV2W2h4tV/qgBH v+5ft4MlXtg3nd/xV/CA4ecnuIt/5zSfrqTAhzXSQqYWlNvHp9WSeTTSzKFQiaaPgJPM xNuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=guVGVqm5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g19si7156598iow.22.2021.05.28.13.03.22; Fri, 28 May 2021 13:03:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=guVGVqm5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229612AbhE1UEW (ORCPT + 99 others); Fri, 28 May 2021 16:04:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51216 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229606AbhE1UEV (ORCPT ); Fri, 28 May 2021 16:04:21 -0400 Received: from mail-lj1-x229.google.com (mail-lj1-x229.google.com [IPv6:2a00:1450:4864:20::229]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1DD13C061574 for ; Fri, 28 May 2021 13:02:46 -0700 (PDT) Received: by mail-lj1-x229.google.com with SMTP id v5so6704444ljg.12 for ; Fri, 28 May 2021 13:02:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=8CjTgaGzpx1tYGvhyBdGCwHJ4sxt2qfBMHTKvcLBoYI=; b=guVGVqm5w4Gp5nI7wKkyRYFCD9Lg0ZOgq/cUtfOp2H4QhlW35tXSAzsOj5EZIRWbOG nnMcXcFUWE3Too9xx42l0SmsRo5hOUkH8gbP27+ooNGJcv0nzRsViNgZkaaII/xBCzwX Q1wMhkTUseZPtOBWqvKGKmFFDZTlTI6DeTcZvhiAns77XwdKe5+6V7pLgWQWUJGx9hpN 1LqHVaV7gNXs0Xeyuf8vul2C8lD93CIB4VS9ofqgAY2WXSTapuTYXLGz/jyrxMOAFMRI DKq4FrBu8qnGUCp58TmUUohzp8gQeVTMA8Na5PhWQ1run7itfzx8qYb0Kt4PWbV+0Q1N RORg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=8CjTgaGzpx1tYGvhyBdGCwHJ4sxt2qfBMHTKvcLBoYI=; b=CK4Xh+DdbDKCgKvZPBx3omlbDykSnDncLiX5pPYW9SMOL57oqpHwws9XNxbYprIIgl DbEQ6DSi5ynY0gLmvSd8naZS1RH/mnsNBOS6ch1F0CsL6WRDBjP+N6M4msWO2AIz7sBr pP6eRj/4dmkv3qwLM3KfmBsGvTThGk7pMizIOxR6WyUaUQUXWfNkiRay8Wfj2e+hfCgr s/TaT5JH88n8S6sdFsgUmHB+qHZdKvByHGbc2JxC0UjPh2adOaOQksQ2zHzY6SN7E24o SRJRExf9osPKJ9a4rgH6FT3mdsjmCf9v/knvL6jkkjh9ukn7V95vbulztymoceVe2fXN 0jGg== X-Gm-Message-State: AOAM531nnbWff7koQhlrX0Wfl3Yx+DSWbPKv7vlOCsYy2ekwHy01mzdr Tf6etuLcCUNLUtVr4W2DIcE= X-Received: by 2002:a05:651c:4c6:: with SMTP id e6mr7853378lji.326.1622232164523; Fri, 28 May 2021 13:02:44 -0700 (PDT) Received: from HyperiorArchMachine.bb.dnainternet.fi (dcx7x4yg81q1---xrfn1y-3.rev.dnainternet.fi. [2001:14ba:14f7:3c00:bcab:6bff:fe6e:22ea]) by smtp.gmail.com with ESMTPSA id h29sm600263lfv.230.2021.05.28.13.02.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 May 2021 13:02:44 -0700 (PDT) From: Jarmo Tiitto To: samitolvanen@google.com Cc: jeyu@kernel.org, nathan@kernel.org, ndesaulniers@google.com, clang-built-linux@googlegroups.com, linux-kernel@vger.kernel.org, Jarmo Tiitto Subject: [PATCH 1/6] pgo: modules Expose module sections for clang PGO instumentation. Date: Fri, 28 May 2021 23:01:33 +0300 Message-Id: <20210528200133.459022-1-jarmo.tiitto@gmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch series enables reading PGO profile data for modules. It also contains some changes to instrumentation code to fixup flaws when profile data is serialized from loaded modules. To be able to export clang PGO profile data from modules into user space we need to expose __llvm_prf_xxx sections from loaded modules. This data is used by pgo/instrument.c and pgo/fs_mod.c in following patches. ==== The patch is based on Sami Tolvanen's earlier code: [1] Patch https://lore.kernel.org/linux-doc/20210407211704.367039-1-morbo@google.com/ and kernel v5.13-rc3 was used as starting point for my changes. Be kind, I'm an kernel newbie and this is my first git send-mail. :-) [1] https://patchwork.kernel.org/project/linux-kbuild/patch/20210407211704.367039-1-morbo@google.com/ ==== Signed-off-by: Jarmo Tiitto --- include/linux/module.h | 12 +++++++++++- kernel/module.c | 8 +++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/include/linux/module.h b/include/linux/module.h index 8100bb477d86..2aa1e1fe4afa 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -504,7 +504,6 @@ struct module { /* Elf information */ struct klp_modinfo *klp_info; #endif - #ifdef CONFIG_MODULE_UNLOAD /* What modules depend on me? */ struct list_head source_list; @@ -527,6 +526,17 @@ struct module { struct error_injection_entry *ei_funcs; unsigned int num_ei_funcs; #endif +#ifdef CONFIG_PGO_CLANG + /* Clang PGO llvm_prf_xxx sections */ + void *prf_data; /* struct llvm_prf_data */ + int prf_data_size; + u64 *prf_cnts; + int prf_cnts_num; + const char *prf_names; + int prf_names_num; + void *prf_vnds; /* struct llvm_prf_value_node */ + int prf_vnds_size; +#endif } ____cacheline_aligned __randomize_layout; #ifndef MODULE_ARCH_INIT #define MODULE_ARCH_INIT {} diff --git a/kernel/module.c b/kernel/module.c index 7e78dfabca97..e49de3b95d87 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -3342,7 +3342,13 @@ static int find_module_sections(struct module *mod, struct load_info *info) info->debug = section_objs(info, "__dyndbg", sizeof(*info->debug), &info->num_debug); - +#ifdef CONFIG_PGO_CLANG + /* Grab module sections for Clang PGO profiler to hook into */ + mod->prf_data = section_objs(info, "__llvm_prf_data", 1, &mod->prf_data_size); + mod->prf_cnts = section_objs(info, "__llvm_prf_cnts", sizeof(u64), &mod->prf_cnts_num); + mod->prf_names = section_objs(info, "__llvm_prf_names", sizeof(char), &mod->prf_names_num); + mod->prf_vnds = section_objs(info, "__llvm_prf_vnds", 1, &mod->prf_vnds_size); +#endif return 0; } -- 2.31.1