From nobody Tue Dec 16 08:55:44 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 20E66275AFE; Mon, 11 Aug 2025 05:56:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754891815; cv=none; b=YV5dZk2PtRSVzS/Y0YrrSqn/d6mUZmQZFZlXnUwg6swN/Rn/5HaA7ZaEj7WQyCWwD4IjnO0PLfnfSv8rKR8Crdp/krHJ51cUoLkQ+KOY6FPqdGAf1qY47aFZuoljWKec2M1jQIaisVfuSIup4/tZdQIgF+V0kNLya0JA5vGZcH0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754891815; c=relaxed/simple; bh=qcM6TGJPeWkRUF6ZZeRPFpg13+suD5RKptjZcO9U53I=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=LV/lVQTrIoo3OknthkWHa7cYPAHR64FBk/4Ag7levFqwwtFmUaShxego+KjtQ/6xCZwlGrj1ZBr8d5/iW4st4l3ix8KR8aPav8XymDYmA87RqNoeDCPhpAID61pVwsch2eJ8FGE6/DlTjDEzVokRdcEEHrdRl+ap9rGSO8oWakc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=MCoTdBC6; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="MCoTdBC6" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754891814; x=1786427814; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=qcM6TGJPeWkRUF6ZZeRPFpg13+suD5RKptjZcO9U53I=; b=MCoTdBC6oXk+20efDBIfApSs0c+m6Q+eXKBZ2sUVnQZx1KsbZz8al7Ev fhLI2666oYr4UDrObUTjPsN9IV1wym5/J5xrrsOZLbi0q0FgbqXdnBXYt 6zkir2PA1/I8tKoEWYY6y2yRr2DBl7/A4uX8oIxuHfxrdGFbYMXYM/Ame wm8TxDab3gihzk1dB1ummsKWMr6b0cPomP3nWcJ2HE9UZ2mgb+6LlaGI5 scSQ91IocrQDTQ67x9hbff0H+unqhxZN/LRdbSFpmp94/zg+PqtCOC7RP b9JVljec/t3Pja4EZJiwltYFDgm1tQTqu8M4TXjP7BQ11Qv5EG02Tmg/y g==; X-CSE-ConnectionGUID: pSOdQNCXScuZ+9LdVvEb5A== X-CSE-MsgGUID: 1U05cSEOSCKcw+oGvIk4nA== X-IronPort-AV: E=McAfee;i="6800,10657,11518"; a="57043602" X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="57043602" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Aug 2025 22:56:54 -0700 X-CSE-ConnectionGUID: MoJbtCi2SRC77M2l3xiD2w== X-CSE-MsgGUID: ax+hY/ZNR++4meV8p7ZWIQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="171183704" Received: from spr.sh.intel.com ([10.112.230.239]) by orviesa005.jf.intel.com with ESMTP; 10 Aug 2025 22:56:51 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: Kevin Tian , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dapeng Mi , Dapeng Mi Subject: [Patch v2 1/6] perf tools kvm: Add missed memory allocation check and free Date: Mon, 11 Aug 2025 13:55:41 +0800 Message-Id: <20250811055546.296678-2-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250811055546.296678-1-dapeng1.mi@linux.intel.com> References: <20250811055546.296678-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Current code allocates rec_argv[] array, but doesn't check if the allocation is successful and explicitly free the rec_argv[] array. Add them back. Signed-off-by: Dapeng Mi Acked-by: Namhyung Kim --- tools/perf/builtin-kvm.c | 81 ++++++++++++++++++++++++++++------------ 1 file changed, 58 insertions(+), 23 deletions(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 7b15b4a705e4..9813f1eb56f9 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -1638,9 +1638,11 @@ static int kvm_events_report_vcpu(struct perf_kvm_st= at *kvm) =20 #define STRDUP_FAIL_EXIT(s) \ ({ char *_p; \ - _p =3D strdup(s); \ - if (!_p) \ - return -ENOMEM; \ + _p =3D strdup(s); \ + if (!_p) { \ + ret =3D -ENOMEM; \ + goto EXIT; \ + } \ _p; \ }) =20 @@ -1688,7 +1690,7 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc= , const char **argv) rec_argv[i] =3D STRDUP_FAIL_EXIT(record_args[i]); =20 for (j =3D 0; j < events_tp_size; j++) { - rec_argv[i++] =3D "-e"; + rec_argv[i++] =3D STRDUP_FAIL_EXIT("-e"); rec_argv[i++] =3D STRDUP_FAIL_EXIT(kvm_events_tp[j]); } =20 @@ -1696,7 +1698,7 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc= , const char **argv) rec_argv[i++] =3D STRDUP_FAIL_EXIT(kvm->file_name); =20 for (j =3D 1; j < (unsigned int)argc; j++, i++) - rec_argv[i] =3D argv[j]; + rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); =20 set_option_flag(record_options, 'e', "event", PARSE_OPT_HIDDEN); set_option_flag(record_options, 0, "filter", PARSE_OPT_HIDDEN); @@ -1719,7 +1721,13 @@ kvm_events_record(struct perf_kvm_stat *kvm, int arg= c, const char **argv) set_option_flag(record_options, 0, "transaction", PARSE_OPT_DISABLED); =20 record_usage =3D kvm_stat_record_usage; - return cmd_record(i, rec_argv); + ret =3D cmd_record(i, rec_argv); + +EXIT: + for (i =3D 0; i < rec_argc; i++) + free((void *)rec_argv[i]); + free(rec_argv); + return ret; } =20 static int @@ -2006,52 +2014,79 @@ static int __cmd_record(const char *file_name, int = argc, const char **argv) =20 rec_argc =3D argc + 2; rec_argv =3D calloc(rec_argc + 1, sizeof(char *)); - rec_argv[i++] =3D strdup("record"); - rec_argv[i++] =3D strdup("-o"); - rec_argv[i++] =3D strdup(file_name); + if (!rec_argv) + return -ENOMEM; + + rec_argv[i++] =3D STRDUP_FAIL_EXIT("record"); + rec_argv[i++] =3D STRDUP_FAIL_EXIT("-o"); + rec_argv[i++] =3D STRDUP_FAIL_EXIT(file_name); for (j =3D 1; j < argc; j++, i++) - rec_argv[i] =3D argv[j]; + rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); =20 BUG_ON(i !=3D rec_argc); =20 - return cmd_record(i, rec_argv); + ret =3D cmd_record(i, rec_argv); + +EXIT: + for (i =3D 0; i < rec_argc; i++) + free((void *)rec_argv[i]); + free(rec_argv); + return ret; } =20 static int __cmd_report(const char *file_name, int argc, const char **argv) { - int rec_argc, i =3D 0, j; + int rec_argc, i =3D 0, j, ret; const char **rec_argv; =20 rec_argc =3D argc + 2; rec_argv =3D calloc(rec_argc + 1, sizeof(char *)); - rec_argv[i++] =3D strdup("report"); - rec_argv[i++] =3D strdup("-i"); - rec_argv[i++] =3D strdup(file_name); + if (!rec_argv) + return -ENOMEM; + + rec_argv[i++] =3D STRDUP_FAIL_EXIT("report"); + rec_argv[i++] =3D STRDUP_FAIL_EXIT("-i"); + rec_argv[i++] =3D STRDUP_FAIL_EXIT(file_name); for (j =3D 1; j < argc; j++, i++) - rec_argv[i] =3D argv[j]; + rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); =20 BUG_ON(i !=3D rec_argc); =20 - return cmd_report(i, rec_argv); + ret =3D cmd_report(i, rec_argv); + +EXIT: + for (i =3D 0; i < rec_argc; i++) + free((void *)rec_argv[i]); + free(rec_argv); + return ret; } =20 static int __cmd_buildid_list(const char *file_name, int argc, const char **argv) { - int rec_argc, i =3D 0, j; + int rec_argc, i =3D 0, j, ret; const char **rec_argv; =20 rec_argc =3D argc + 2; rec_argv =3D calloc(rec_argc + 1, sizeof(char *)); - rec_argv[i++] =3D strdup("buildid-list"); - rec_argv[i++] =3D strdup("-i"); - rec_argv[i++] =3D strdup(file_name); + if (!rec_argv) + return -ENOMEM; + + rec_argv[i++] =3D STRDUP_FAIL_EXIT("buildid-list"); + rec_argv[i++] =3D STRDUP_FAIL_EXIT("-i"); + rec_argv[i++] =3D STRDUP_FAIL_EXIT(file_name); for (j =3D 1; j < argc; j++, i++) - rec_argv[i] =3D argv[j]; + rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); =20 BUG_ON(i !=3D rec_argc); =20 - return cmd_buildid_list(i, rec_argv); + ret =3D cmd_buildid_list(i, rec_argv); + +EXIT: + for (i =3D 0; i < rec_argc; i++) + free((void *)rec_argv[i]); + free(rec_argv); + return ret; } =20 int cmd_kvm(int argc, const char **argv) --=20 2.34.1 From nobody Tue Dec 16 08:55:44 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 6BE9E279335; Mon, 11 Aug 2025 05:56:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754891818; cv=none; b=D9uMvh8Om5aAUuufwDiEUU2qTAA+aBX71C+eJHbcw0ofuNqqQRi8ma4eraS3Rkm0B8p5Mq78latQKPQa5lsBdA6vBN/k/RwGKYYktE/uNdWOeiJAQaXSqEnZzM30nOMPIlhZAY8jw1WpMNtH+HTeY7fEcL9ZYdkXT+Fsogy4KC4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754891818; c=relaxed/simple; bh=g9dgtquM4X+diJh1n1m5KYnJL+cMz35zZQk0CTsBkec=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=YEZdsBKtMAsaV0TqkXxhVUZ3nxXN8C9q2erxXvKxWWYw960pHa2XYtUJvxyfhIiR7I8wVAVbkI2WEej5jWfhbh3MTVEVEed6uZmlO+uR1jpuF8k94WcUy8yuW+iQm1k7WsNfo2QowJC8zqxEGVSHyVLBG2IcsWk40clIYkgORis= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=kAEE53fn; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="kAEE53fn" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754891817; x=1786427817; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=g9dgtquM4X+diJh1n1m5KYnJL+cMz35zZQk0CTsBkec=; b=kAEE53fnPtTGP2TkleIJbsMOD81SNLP8Ft+JlPwbT4Rms72JvqxGEBZB MCmWDrDeMuF66j2S3dFm0H+f2IJt0pw3Nqj4E7ggw+wI7ETv1GZnanhkk JvUjESgOk/za2K4Yw4qhGhrQzJmJScRwta4M9FW+e0KuyintOU+A4fmyT R8xcFwScF1GCng/qd0q9Xzl/0HvsfZyHfdYWbDvUVWND/dacBbo0kJ2JQ eUQvcEQEhsOHyv/Xc5Je3ytQL5Z/LsMa8eWFBJ8E3XCZ8qNrEGaLrrqO0 ipfKCDcvq4lu5p43mYSir4lEe1zfyceeM7QXed1GTu9YifR9UX+gvwTBh A==; X-CSE-ConnectionGUID: Of/78T0tSRmHctiH901vKg== X-CSE-MsgGUID: HjE9/Vd4SVulyedr8sCcZQ== X-IronPort-AV: E=McAfee;i="6800,10657,11518"; a="57043608" X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="57043608" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Aug 2025 22:56:57 -0700 X-CSE-ConnectionGUID: nqT2ajA9RXmWVyJKuRnJ7w== X-CSE-MsgGUID: tSUVp9OsSSmpla4k6Jw/9A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="171183712" Received: from spr.sh.intel.com ([10.112.230.239]) by orviesa005.jf.intel.com with ESMTP; 10 Aug 2025 22:56:55 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: Kevin Tian , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dapeng Mi , Dapeng Mi Subject: [Patch v2 2/6] perf tools kwork: Add missed memory allocation check and free Date: Mon, 11 Aug 2025 13:55:42 +0800 Message-Id: <20250811055546.296678-3-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250811055546.296678-1-dapeng1.mi@linux.intel.com> References: <20250811055546.296678-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Same with previous builtin-kvm code, perf_kwork__record() doesn't check the memory allocation and explicitly free the allocated memory. Just fix it. Signed-off-by: Dapeng Mi Acked-by: Namhyung Kim --- tools/perf/builtin-kwork.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c index d2e08de5976d..7f3068264568 100644 --- a/tools/perf/builtin-kwork.c +++ b/tools/perf/builtin-kwork.c @@ -2273,12 +2273,23 @@ static void setup_event_list(struct perf_kwork *kwo= rk, pr_debug("\n"); } =20 +#define STRDUP_FAIL_EXIT(s) \ + ({ char *_p; \ + _p =3D strdup(s); \ + if (!_p) { \ + ret =3D -ENOMEM; \ + goto EXIT; \ + } \ + _p; \ + }) + static int perf_kwork__record(struct perf_kwork *kwork, int argc, const char **argv) { const char **rec_argv; unsigned int rec_argc, i, j; struct kwork_class *class; + int ret; =20 const char *const record_args[] =3D { "record", @@ -2298,17 +2309,17 @@ static int perf_kwork__record(struct perf_kwork *kw= ork, return -ENOMEM; =20 for (i =3D 0; i < ARRAY_SIZE(record_args); i++) - rec_argv[i] =3D strdup(record_args[i]); + rec_argv[i] =3D STRDUP_FAIL_EXIT(record_args[i]); =20 list_for_each_entry(class, &kwork->class_list, list) { for (j =3D 0; j < class->nr_tracepoints; j++) { - rec_argv[i++] =3D strdup("-e"); - rec_argv[i++] =3D strdup(class->tp_handlers[j].name); + rec_argv[i++] =3D STRDUP_FAIL_EXIT("-e"); + rec_argv[i++] =3D STRDUP_FAIL_EXIT(class->tp_handlers[j].name); } } =20 for (j =3D 1; j < (unsigned int)argc; j++, i++) - rec_argv[i] =3D argv[j]; + rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); =20 BUG_ON(i !=3D rec_argc); =20 @@ -2317,7 +2328,13 @@ static int perf_kwork__record(struct perf_kwork *kwo= rk, pr_debug("%s ", rec_argv[j]); pr_debug("\n"); =20 - return cmd_record(i, rec_argv); + ret =3D cmd_record(i, rec_argv); + +EXIT: + for (i =3D 0; i < rec_argc; i++) + free((void *)rec_argv[i]); + free(rec_argv); + return ret; } =20 int cmd_kwork(int argc, const char **argv) --=20 2.34.1 From nobody Tue Dec 16 08:55:44 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 AE24327F198; Mon, 11 Aug 2025 05:57:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754891822; cv=none; b=Ej1+z209X7bwT5016tw6g6Wa3bw9s1AYLnyDv/boxVZEL7018vaNrXryWLvY59LtgmByUJMLBRlGNxh3R+ubVAqooQ0EefNuveA323s+TZZSGPyrGdRPtQ6QaWgnQUX9YbRZ2QRE8EffAR5TEzQl4bLV26GDcH0b6YAsDrQoarc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754891822; c=relaxed/simple; bh=6x8+xmDoFCyGeGPvfKj2sYz5vmSZ2U3waR79YqsXTug=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=LrcMz+FyN49MfYyD8KhByaGQxiweiN/LFeXDcaH+FIa6+Z0wmxs2tlRDyRsmHPZ++74Crt8bpMZF3Xogqkz0Xv8SVoVtxtdjz6+uuRfiGhjc1o8mjHYbmzhvokBehXjfWOyV4t2MR/4n9TdCZU3BxaReVMmlettwCCSoXlUOH24= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=GSAXSzyb; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="GSAXSzyb" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754891820; x=1786427820; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6x8+xmDoFCyGeGPvfKj2sYz5vmSZ2U3waR79YqsXTug=; b=GSAXSzybz6GpQbRln64g5mqvqZJhZHjBKdGwZYiUmeEhsIO2SenpcX2O 5WtDkMNBdCqBnQaAO8Q/h9eELMvLAasWf+0hxo24aIxNGjOC5W1ORgsux byrfLpxi0mrDpcIMVJTXiMQ+udKHzYmUQZ5e2aplQuuiLxOKtPodvN2bH oyLQervU6OuZjM8Iy1+2Dh0puteSc/9kyIpNYiiIiOx2vNIN4V5q1/kPI LCHIQ6ufSfxoXBIWUYSJfjoq65F25hBXmmMuWrodpmrnrSEdii0Sl3rXr 3vz8uXGCj/3EZOSKhYvDVdKb0blmyS0ilzhOlH56qI3TJr9WR2OhSgMuX A==; X-CSE-ConnectionGUID: uukL/QuaQouKQ39YmyGhgg== X-CSE-MsgGUID: pM6txODISm2nxHVwu8YtQQ== X-IronPort-AV: E=McAfee;i="6800,10657,11518"; a="57043615" X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="57043615" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Aug 2025 22:57:00 -0700 X-CSE-ConnectionGUID: gIKeX1amTGWVRoXQ8oS6nQ== X-CSE-MsgGUID: dMMoP2hSRDiSepa/g9Q6gQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="171183724" Received: from spr.sh.intel.com ([10.112.230.239]) by orviesa005.jf.intel.com with ESMTP; 10 Aug 2025 22:56:58 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: Kevin Tian , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dapeng Mi , Dapeng Mi Subject: [Patch v2 3/6] perf tools kvm: Fix the potential out of range memory access issue Date: Mon, 11 Aug 2025 13:55:43 +0800 Message-Id: <20250811055546.296678-4-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250811055546.296678-1-dapeng1.mi@linux.intel.com> References: <20250811055546.296678-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" kvm_add_default_arch_event() helper may add 2 extra options but it directly modifies the original argv[] array. This may cause out of range memory access. Fix this issue. Signed-off-by: Dapeng Mi Acked-by: Namhyung Kim --- tools/perf/builtin-kvm.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 9813f1eb56f9..d297a7b2c088 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -2008,11 +2008,12 @@ static int __cmd_record(const char *file_name, int = argc, const char **argv) int rec_argc, i =3D 0, j, ret; const char **rec_argv; =20 - ret =3D kvm_add_default_arch_event(&argc, argv); - if (ret) - return -EINVAL; - - rec_argc =3D argc + 2; + /* + * Besides the 2 more options "-o" and "filename", + * kvm_add_default_arch_event() may add 2 extra options, + * so allocate 4 more items. + */ + rec_argc =3D argc + 2 + 2; rec_argv =3D calloc(rec_argc + 1, sizeof(char *)); if (!rec_argv) return -ENOMEM; @@ -2025,6 +2026,10 @@ static int __cmd_record(const char *file_name, int a= rgc, const char **argv) =20 BUG_ON(i !=3D rec_argc); =20 + ret =3D kvm_add_default_arch_event(&i, rec_argv); + if (ret) + goto EXIT; + ret =3D cmd_record(i, rec_argv); =20 EXIT: --=20 2.34.1 From nobody Tue Dec 16 08:55:44 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 29B7C285C8C; Mon, 11 Aug 2025 05:57:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754891825; cv=none; b=XIHTF/R71rDl90p3gHekpSspO6fK74JoOyeRv4vVPaxnimG0I6QP2kCz8hzDyF5MOR13d58R+Bx9L3Fsk2EpNRQijwog1Ks8DxUW3+iITw+MZkWiL90nQtLOaiPfAhB/mpZhk8KPW1zfX7HY8s5Nd/aMIhR/5g1QhqJL+s4PVwQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754891825; c=relaxed/simple; bh=oeuugssJxxfYnDQBivTR+l6U2wpfEbwCtDf6j9CUFwQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=bNy3O0PWF1AQrYQjGQh9uGru5dD8dr1hJVko4RmOJqRzUIk5rQB3q87EaCYLACPT6Z7PWQI30HLoPFran9Vi431I6GWJ9ux3mpTwFoUhmJuv7F/NrsuD3QUeTChSBHSlr/Xj6KYMNZ97d9MH0xkoVIw8jzSF4TVH318/gky3Eus= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=a6yQEFE0; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="a6yQEFE0" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754891824; x=1786427824; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=oeuugssJxxfYnDQBivTR+l6U2wpfEbwCtDf6j9CUFwQ=; b=a6yQEFE0FoYJNUlNhvwk88aiFRVu+Q7L8E6cu5nHkyV6lwwzdUI9efbi oXQvI7ZZPkw3YVecvXhwcZ/ZjxxylaNccFKY7MG1MehC47ow1WEBU4r41 tPxu3sW6SrZiwvjCMDoh3+CXfZ7fa8fbsS+WViH9zom0ToedSgAKo97l2 K0Mr38AOXgrgAYUxBiZEGYvOBnFT4Zp9rpC69w+T46kJx6+yTpJWhIem/ Imh36hC9mJcsWIywJWnOI087xpTs1uFEESIzmGzJZ7VReYhul2pIfB6Dr oGCcsoCIbjeaZDITbf2nH92sp7YPGoVcibDw0lUYaXPLEZ2dGx1RdJDtr g==; X-CSE-ConnectionGUID: wiPqMWqnQ6O/Pz1y+qwNSA== X-CSE-MsgGUID: b2n3h2k+TbeiLC6O1Jfeig== X-IronPort-AV: E=McAfee;i="6800,10657,11518"; a="57043623" X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="57043623" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Aug 2025 22:57:04 -0700 X-CSE-ConnectionGUID: e8+7WmzhSViaO9NJznXg5w== X-CSE-MsgGUID: VQsiCvJ2QCu+dz34AvhGBQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="171183760" Received: from spr.sh.intel.com ([10.112.230.239]) by orviesa005.jf.intel.com with ESMTP; 10 Aug 2025 22:57:01 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: Kevin Tian , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dapeng Mi , Dapeng Mi Subject: [Patch v2 4/6] perf tools: Add helper x86__is_intel_cpu() Date: Mon, 11 Aug 2025 13:55:44 +0800 Message-Id: <20250811055546.296678-5-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250811055546.296678-1-dapeng1.mi@linux.intel.com> References: <20250811055546.296678-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add helper x86__is_intel_cpu() to indicate if it's a x86 intel platform. Signed-off-by: Dapeng Mi Acked-by: Namhyung Kim --- tools/perf/util/env.c | 22 ++++++++++++++++++++++ tools/perf/util/env.h | 2 ++ 2 files changed, 24 insertions(+) diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index c8c248754621..f1626d2032cd 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -802,3 +802,25 @@ bool x86__is_amd_cpu(void) =20 return is_amd; } + +bool perf_env__is_x86_intel_cpu(struct perf_env *env) +{ + static int is_intel; /* 0: Uninitialized, 1: Yes, -1: No */ + + if (is_intel =3D=3D 0) + is_intel =3D env->cpuid && strstarts(env->cpuid, "GenuineIntel") ? 1 : -= 1; + + return is_intel >=3D 1 ? true : false; +} + +bool x86__is_intel_cpu(void) +{ + struct perf_env env =3D { .total_mem =3D 0, }; + bool is_intel; + + perf_env__cpuid(&env); + is_intel =3D perf_env__is_x86_intel_cpu(&env); + perf_env__exit(&env); + + return is_intel; +} diff --git a/tools/perf/util/env.h b/tools/perf/util/env.h index e00179787a34..9977b85523a8 100644 --- a/tools/perf/util/env.h +++ b/tools/perf/util/env.h @@ -201,5 +201,7 @@ void perf_env__find_br_cntr_info(struct perf_env *env, =20 bool x86__is_amd_cpu(void); bool perf_env__is_x86_amd_cpu(struct perf_env *env); +bool x86__is_intel_cpu(void); +bool perf_env__is_x86_intel_cpu(struct perf_env *env); =20 #endif /* __PERF_ENV_H */ --=20 2.34.1 From nobody Tue Dec 16 08:55:44 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 A835D29CB57; Mon, 11 Aug 2025 05:57:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754891829; cv=none; b=E2eieNTNCsJavmOd62Pm/vq036JQSkJAOXfrUq95QjLOEmbuNRPNn7pGBfTMfGxU5L8S/A2Oma5mQfmzYKqkbOpkLbbMaq9xCR+CajrhuG3aFrdf6FCRb9XM8cJErHhvT45piR4J5HHLVbyyPl97twrS0Tkk4c3sxI5y0uXwkMs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754891829; c=relaxed/simple; bh=T1MIsdItnWvDIwgcKVi4xFw7vh8r0wsy51C487/uKbo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=OuvtoBA5za78gJjytHaBWzh2BttNE7gLxbK6dtmSk/iR5xW/wJJQWytFwQ7kbEV+Q5frM6mwi99tt06S31WP98/0mZzDINR7bQAaXjvdRoa3H/9KZJCOHCQ1tqgaehMtOIMzPLACc+B0cRqAaT2Lzhssq2PRjkbvOrqLcogzKzY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=j1hIMsi3; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="j1hIMsi3" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754891827; x=1786427827; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=T1MIsdItnWvDIwgcKVi4xFw7vh8r0wsy51C487/uKbo=; b=j1hIMsi38yX31cN1SlqvtJlnY6wXN9zn7fArofdQS/XZ3m0cYbPP0e/P R84avJDsmOJs2ccwvLCQR/esmiFOdfAxbyQjrH02sCjL5c7T7+YEffi40 jhdU0aQ1ARC03szvLLdY2mMCbWdz80VKeftfhHTsZsMe2lcNzRdU6BX8x dKsc61lLPCqZ7oNXITR42/HyAMemnGzHqekR4BdRhjDC4Qko7dwhApqtk B2Qo1ecA7L21LBlPoeFSS9yghRYVsHJZ9LVUQOuS/UEgIaqk2RrbB53Zj omIJYO+YkpUtwVl2sl+QMllJCmV2HHI0vkWKXCZDhJwl89ScF1cH4cvyh g==; X-CSE-ConnectionGUID: CcffUZCUT1m89Att4wSFeA== X-CSE-MsgGUID: U70w3gP3RE2X6w0w6Q2DCA== X-IronPort-AV: E=McAfee;i="6800,10657,11518"; a="57043629" X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="57043629" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Aug 2025 22:57:07 -0700 X-CSE-ConnectionGUID: HlZN8UfGSkqHDVH/LWmG+w== X-CSE-MsgGUID: Ep7hBkqLSvq+cPgY/iOUoQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="171183771" Received: from spr.sh.intel.com ([10.112.230.239]) by orviesa005.jf.intel.com with ESMTP; 10 Aug 2025 22:57:05 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: Kevin Tian , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dapeng Mi , Dapeng Mi Subject: [Patch v2 5/6] perf tools kvm: Use "cycles" to sample guest for "kvm record" on Intel Date: Mon, 11 Aug 2025 13:55:45 +0800 Message-Id: <20250811055546.296678-6-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250811055546.296678-1-dapeng1.mi@linux.intel.com> References: <20250811055546.296678-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" After KVM supports PEBS for guest on Intel platforms (https://lore.kernel.org/all/20220411101946.20262-1-likexu@tencent.com/), host loses the capability to sample guest with PEBS since all PEBS related MSRs are switched to guest value after vm-entry, like IA32_DS_AREA MSR is switched to guest GVA at vm-entry. This would lead to "perf kvm record" fails to sample guest on Intel platforms since "cycles:P" event is used to sample guest by default as below case shows. sudo perf kvm record -a ^C[ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.787 MB perf.data.guest ] So to ensure guest record can be sampled successfully, use "cycles" instead of "cycles:P" to sample guest record by default on Intel platforms. With this patch, the guest record can be sampled successfully. sudo perf kvm record -a ^C[ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.783 MB perf.data.guest (23 samples) ] Reported-by: Kevin Tian Fixes: 634d36f82517 ("perf record: Just use "cycles:P" as the default event= ") Signed-off-by: Dapeng Mi Acked-by: Namhyung Kim --- tools/perf/arch/x86/util/kvm-stat.c | 51 +++++++++++++++++++++++++++++ tools/perf/builtin-kvm.c | 10 ------ tools/perf/util/kvm-stat.h | 10 ++++++ 3 files changed, 61 insertions(+), 10 deletions(-) diff --git a/tools/perf/arch/x86/util/kvm-stat.c b/tools/perf/arch/x86/util= /kvm-stat.c index 424716518b75..bff36f9345ea 100644 --- a/tools/perf/arch/x86/util/kvm-stat.c +++ b/tools/perf/arch/x86/util/kvm-stat.c @@ -3,9 +3,11 @@ #include #include "../../../util/kvm-stat.h" #include "../../../util/evsel.h" +#include "../../../util/env.h" #include #include #include +#include =20 define_exit_reasons_table(vmx_exit_reasons, VMX_EXIT_REASONS); define_exit_reasons_table(svm_exit_reasons, SVM_EXIT_REASONS); @@ -211,3 +213,52 @@ int cpu_isa_init(struct perf_kvm_stat *kvm, const char= *cpuid) =20 return 0; } + +/* + * After KVM supports PEBS for guest on Intel platforms + * (https://lore.kernel.org/all/20220411101946.20262-1-likexu@tencent.com/= ), + * host loses the capability to sample guest with PEBS since all PEBS rela= ted + * MSRs are switched to guest value after vm-entry, like IA32_DS_AREA MSR = is + * switched to guest GVA at vm-entry. This would lead to "perf kvm record" + * fails to sample guest on Intel platforms since "cycles:P" event is used= to + * sample guest by default. + * + * So, to avoid this issue explicitly use "cycles" instead of "cycles:P" e= vent + * by default to sample guest on Intel platforms. + */ +int kvm_add_default_arch_event(int *argc, const char **argv) +{ + const char **tmp; + bool event =3D false; + int ret =3D 0, i, j =3D *argc; + + const struct option event_options[] =3D { + OPT_BOOLEAN('e', "event", &event, NULL), + OPT_BOOLEAN(0, "pfm-events", &event, NULL), + OPT_END() + }; + + if (!x86__is_intel_cpu()) + return 0; + + tmp =3D calloc(j + 1, sizeof(char *)); + if (!tmp) + return -ENOMEM; + + for (i =3D 0; i < j; i++) + tmp[i] =3D argv[i]; + + parse_options(j, tmp, event_options, NULL, PARSE_OPT_KEEP_UNKNOWN); + if (!event) { + argv[j++] =3D STRDUP_FAIL_EXIT("-e"); + argv[j++] =3D STRDUP_FAIL_EXIT("cycles"); + *argc +=3D 2; + } + + free(tmp); + return 0; + +EXIT: + free(tmp); + return ret; +} diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index d297a7b2c088..c0d62add4996 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -1636,16 +1636,6 @@ static int kvm_events_report_vcpu(struct perf_kvm_st= at *kvm) return ret; } =20 -#define STRDUP_FAIL_EXIT(s) \ - ({ char *_p; \ - _p =3D strdup(s); \ - if (!_p) { \ - ret =3D -ENOMEM; \ - goto EXIT; \ - } \ - _p; \ - }) - int __weak setup_kvm_events_tp(struct perf_kvm_stat *kvm __maybe_unused) { return 0; diff --git a/tools/perf/util/kvm-stat.h b/tools/perf/util/kvm-stat.h index 4249542544bb..53db3d56108b 100644 --- a/tools/perf/util/kvm-stat.h +++ b/tools/perf/util/kvm-stat.h @@ -190,5 +190,15 @@ static inline struct kvm_info *kvm_info__new(void) #define kvm_info__zput(ki) do { } while (0) #endif /* HAVE_KVM_STAT_SUPPORT */ =20 +#define STRDUP_FAIL_EXIT(s) \ + ({ char *_p; \ + _p =3D strdup(s); \ + if (!_p) { \ + ret =3D -ENOMEM; \ + goto EXIT; \ + } \ + _p; \ + }) + extern int kvm_add_default_arch_event(int *argc, const char **argv); #endif /* __PERF_KVM_STAT_H */ --=20 2.34.1 From nobody Tue Dec 16 08:55:44 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (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 D73B32BF010; Mon, 11 Aug 2025 05:57:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754891832; cv=none; b=msIoAy+jVVd135IMes2vQK9L7aOfSH9Buk5AGZF+VTscph223RtY1Aln4gqUPMQJ/4mCkUwa9m/ahJgEmjEcbPkFcjSlqQhxh4CQtpC0Q6e61CJ/L86W10kChOFxar8gypkdMYQz4EGICva4Z9edcHGl6ehVC354o6NatCjPFns= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754891832; c=relaxed/simple; bh=6MldIzulSaPRY9KzTb4GmAUEjZN5pjxqmqYwU4caWBI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=jxSHYXhY+yxI308znlKJos0ffJFt1lxLJKy2H8kWcRm3Dktf89xGUsqf+UDDPSXrMc9wwO4h9Jet01yj/cAqrvMEJowqL/dJrwxaeTHPLJb5n6MP9whUGwrDJoL/UTdmwBK7nhnnmPx7tEDdn61RVbLJObSEkAuxG9vHhXZCRu8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=lvJl+dx2; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="lvJl+dx2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754891830; x=1786427830; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6MldIzulSaPRY9KzTb4GmAUEjZN5pjxqmqYwU4caWBI=; b=lvJl+dx2xKcG+V1etuKGeyJucA2EEU2F8a3VexMmotT4bzTVl7TViG5u tso60QCAPY7fsRv82q7DQz7fPtH9tXQ6jK36YkMZS3YIp28uKW/2a0A2J ndJ0isptDpch0AQOqNrln0EPVyn7U3OnBn/XCkMXDC3vgy3fjtSgH5opX qISwh3GP36IVNgMXlZSZJudeB2Pj3ILZ4xfRL6Og8ZEMorf9VUoTnnUE6 nwza9J/9skgsnANySn2ZLGgqN5InkKWeG7f447i+sbrwJ/hRwy+VZ7F1q XHoeJYtF9Xo5KU1pNRYQb+ZrByI36XMbsqUJFXDAscinVtnrl/ZUVUDgH Q==; X-CSE-ConnectionGUID: qCNfIq69TqmMn5YIs0baMg== X-CSE-MsgGUID: KMYTk3uXS+S2FJTATJKE9w== X-IronPort-AV: E=McAfee;i="6800,10657,11518"; a="57043634" X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="57043634" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Aug 2025 22:57:10 -0700 X-CSE-ConnectionGUID: VGQYvMjETtaMCd3OBscLgA== X-CSE-MsgGUID: WuLENUXrRKibdQWcJTAcgQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="171183774" Received: from spr.sh.intel.com ([10.112.230.239]) by orviesa005.jf.intel.com with ESMTP; 10 Aug 2025 22:57:08 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: Kevin Tian , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dapeng Mi , Dapeng Mi Subject: [Patch v2 6/6] perf tools kvm: Use "cycles" to sample guest for "kvm top" on Intel Date: Mon, 11 Aug 2025 13:55:46 +0800 Message-Id: <20250811055546.296678-7-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250811055546.296678-1-dapeng1.mi@linux.intel.com> References: <20250811055546.296678-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As same reason with previous patch, use "cyles" instead of "cycles:P" event by default to sample guest for "perf kvm top" command on Intel platforms. Reported-by: Kevin Tian Fixes: 634d36f82517 ("perf record: Just use "cycles:P" as the default event= ") Signed-off-by: Dapeng Mi Acked-by: Namhyung Kim --- tools/perf/builtin-kvm.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index c0d62add4996..f0f285763f19 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -2084,6 +2084,38 @@ __cmd_buildid_list(const char *file_name, int argc, = const char **argv) return ret; } =20 +static int __cmd_top(int argc, const char **argv) +{ + int rec_argc, i =3D 0, ret; + const char **rec_argv; + + /* + * kvm_add_default_arch_event() may add 2 extra options, so + * allocate 2 more pointers in adavance. + */ + rec_argc =3D argc + 2; + rec_argv =3D calloc(rec_argc + 1, sizeof(char *)); + if (!rec_argv) + return -ENOMEM; + + for (i =3D 0; i < argc; i++) + rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[i]); + + BUG_ON(i !=3D argc); + + ret =3D kvm_add_default_arch_event(&i, rec_argv); + if (ret) + goto EXIT; + + ret =3D cmd_top(i, rec_argv); + +EXIT: + for (i =3D 0; i < rec_argc; i++) + free((void *)rec_argv[i]); + free(rec_argv); + return ret; +} + int cmd_kvm(int argc, const char **argv) { const char *file_name =3D NULL; @@ -2144,7 +2176,7 @@ int cmd_kvm(int argc, const char **argv) else if (strlen(argv[0]) > 2 && strstarts("diff", argv[0])) return cmd_diff(argc, argv); else if (!strcmp(argv[0], "top")) - return cmd_top(argc, argv); + return __cmd_top(argc, argv); else if (strlen(argv[0]) > 2 && strstarts("buildid-list", argv[0])) return __cmd_buildid_list(file_name, argc, argv); #if defined(HAVE_KVM_STAT_SUPPORT) && defined(HAVE_LIBTRACEEVENT) --=20 2.34.1