Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp2663466ybb; Sun, 5 Apr 2020 13:15:19 -0700 (PDT) X-Google-Smtp-Source: APiQypIGV0iDL7aP52y52VyXMDj5ZCFMcaUlGz7X+sp4/Lw4EO8BzNrLJe5u+bcasIu+kf1+OvBk X-Received: by 2002:a9d:bf7:: with SMTP id 110mr15745084oth.259.1586117718950; Sun, 05 Apr 2020 13:15:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586117718; cv=none; d=google.com; s=arc-20160816; b=jnM/mxgvHCVzsaaa+JfNqnp2s2nLI8EpBn8E4DRNAYyrawRdnKVkuHRQm1H+Ff63cO n/XQXQiOb4wiVO2dyv5kbjsvE7CBf+qy3K6UJbN37wrPpXxx15JKiMPcNXmSTwGF6/a3 GJs7jKJEQC9M6pzigy0iEIamWrE+GYQCFNI99Y0ttgK2khLu65OiPc4fOg8Yka0thEwx MjvXdutMW8cagEL/rR2WChCAfPXUrYBVvWYvCxQxUQ7bN+POH3Za7RAKML/G1jpTYWSI XgCSS1XmefRYWCvG1XFmK8SiGe9/xJA62aqzNHrfU+oTIaU6RpYcfO2HVs1UicXVIcBo khkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:organization:references:in-reply-to :message-id:date:subject:cc:to:from:ironport-sdr:ironport-sdr; bh=yB3Mi3onWnF3Ej0WgxvunZmI5Tl9UxWAid5v2YMXtAk=; b=p+YBP1GghY8FEOPqzos+zWXmXjSYfjd6UZk3UWGgNq+Vv9IdA5jJ73Qsz3mP5KWzfj sUNwF/HiYgakbLu6mxgcRIlGB7tQMvUSPksI56Z8O+M4mzhxtiwebrGStaB6TP9CuG12 zm6cI0QdGJoqQOJXtkb6ySc3T+B/zbAKQWTB2qAdyeQFY2ZVxWdA9l5u4EoLLnPAaLEV X4upr36CLx+AevFtz63uvUhmSjaliDvKhJZNd1MSzPbNyZBnxefjfVPNVQU53wytV7mJ eYen4k6ffr0HBL/SECnT6Zi+keYihVE5/YA7mtda9D4RVNpNwRt0Lc+oaQyaSUKJpvx9 IntQ== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q4si6972996ooo.92.2020.04.05.13.15.07; Sun, 05 Apr 2020 13:15:18 -0700 (PDT) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727868AbgDEUOe (ORCPT + 99 others); Sun, 5 Apr 2020 16:14:34 -0400 Received: from mga01.intel.com ([192.55.52.88]:62225 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726887AbgDEUOd (ORCPT ); Sun, 5 Apr 2020 16:14:33 -0400 IronPort-SDR: bUpZmOI28jS83jQNCOJNvcBJvBtbZRU2rprEspMw5yyPjojQp9SWZavN4Q3nI6waPoJ5rZx/Ju pdH5hwmEGLCw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Apr 2020 13:14:33 -0700 IronPort-SDR: 2Cdh1dh/h0ZMgr+9j++BPCF+87k/ioPd6uo7GjGmCrDWQoCdNK/8pbGiMWA9wOiqOk8V/lZ1EJ J+TAUaaCzAEQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,348,1580803200"; d="scan'208";a="329688385" Received: from ahunter-desktop.fi.intel.com ([10.237.72.87]) by orsmga001.jf.intel.com with ESMTP; 05 Apr 2020 13:14:29 -0700 From: Adrian Hunter To: Peter Zijlstra Cc: Ingo Molnar , Masami Hiramatsu , Steven Rostedt , Borislav Petkov , "H . Peter Anvin" , x86@kernel.org, Mark Rutland , Alexander Shishkin , Mathieu Poirier , Leo Yan , Arnaldo Carvalho de Melo , Jiri Olsa , linux-kernel@vger.kernel.org Subject: [PATCH V6 04/15] kprobes: Add perf ksymbol events for kprobe insn pages Date: Sun, 5 Apr 2020 23:13:16 +0300 Message-Id: <20200405201327.7332-5-adrian.hunter@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200405201327.7332-1-adrian.hunter@intel.com> References: <20200405201327.7332-1-adrian.hunter@intel.com> Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Symbols are needed for tools to describe instruction addresses. Pages allocated for kprobe's purposes need symbols to be created for them. Add such symbols to be visible via perf ksymbol events. Signed-off-by: Adrian Hunter Acked-by: Masami Hiramatsu --- include/uapi/linux/perf_event.h | 5 +++++ kernel/kprobes.c | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h index e5bee6c17b86..e1a4179144a1 100644 --- a/include/uapi/linux/perf_event.h +++ b/include/uapi/linux/perf_event.h @@ -1049,6 +1049,11 @@ enum perf_event_type { enum perf_record_ksymbol_type { PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0, PERF_RECORD_KSYMBOL_TYPE_BPF = 1, + /* + * Out of line code such as kprobe-replaced instructions or optimized + * kprobes. + */ + PERF_RECORD_KSYMBOL_TYPE_OOL = 2, PERF_RECORD_KSYMBOL_TYPE_MAX /* non-ABI */ }; diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 229d1b596690..f880eb2189c0 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -184,6 +185,10 @@ kprobe_opcode_t *__get_insn_slot(struct kprobe_insn_cache *c) kip->cache = c; list_add_rcu(&kip->list, &c->pages); slot = kip->insns; + + /* Record the perf ksymbol register event after adding the page */ + perf_event_ksymbol(PERF_RECORD_KSYMBOL_TYPE_OOL, (u64)kip->insns, + PAGE_SIZE, false, c->sym); out: mutex_unlock(&c->mutex); return slot; @@ -202,6 +207,13 @@ static int collect_one_slot(struct kprobe_insn_page *kip, int idx) * next time somebody inserts a probe. */ if (!list_is_singular(&kip->list)) { + /* + * Record perf ksymbol unregister event before removing + * the page. + */ + perf_event_ksymbol(PERF_RECORD_KSYMBOL_TYPE_OOL, + (u64)kip->insns, PAGE_SIZE, true, + kip->cache->sym); list_del_rcu(&kip->list); synchronize_rcu(); kip->cache->free(kip->insns); -- 2.17.1