From nobody Sun Oct 5 12:46:56 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 D1F96188596; Tue, 5 Aug 2025 00:47:33 +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=1754354855; cv=none; b=JjtLGL21pNIeH2k8jz+fzZgQvd0D1EPS2MiEz1BMOJvOQ606mJHyk4hd08+7rTDTRVbza+tE7p+vRYFlBIghsdFY6eT2unAfJahC9rqWr53i5tugmlFy6pb/yKNlTMyp1HeE3Bf+HlI82FWQGN9U6OUQWAgB9UUQoOLdBf+i96M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754354855; c=relaxed/simple; bh=QLfgBUux07soUI5AicB9psHxrDdj4LIKM6BIPIuHtvU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=O6FtCrixg143NzhH1bwQ1Hw2W/kQ1e/do7yDubeXQ2mViGcYowTOip7ae5aPjKfaKWrWgazhbVyK/Gh1OLOBMnab0L5agPOB7VOSkQFtjOQ7x68MuR5+S6rfDFUL1NodWl4ZtXaWRckgCJi3mzyvyJIcku3UWxYGZZmpZiJ4tcs= 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=J+lTGzji; 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="J+lTGzji" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754354854; x=1785890854; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=QLfgBUux07soUI5AicB9psHxrDdj4LIKM6BIPIuHtvU=; b=J+lTGzjicuxY7tESDiYpJa/Zde45z95zkI0wmZ9hbUdVgVh9IrlBNN7W 4S9fN8Up0Y5hiWwVR91OD1YWVDSc7w+kG4NbbRPxRn99HWwd2GyhKoBGM YEyR50wVSM5qIUarw+CxZ3MS+arFKoe66D6VyvcJKF333xZVf1fk4GFbm lb+9pYLp0eTUDr6p9x3zomOg/PrYBOwivZgWhlv7/0lktU520xiqKaQqV IegXWvXDnO/5g19XdwYQ/GT8nwzZHT2b0xf+nvnyEihcMVCzocxgGjFmW NV8Xf0RH0jfL+31BMgbVLdWGwiz05c+oeMFJNzX5XyWajwnj+/MLed/6I Q==; X-CSE-ConnectionGUID: HpXh7LMUQFWZimM51W5Vng== X-CSE-MsgGUID: P1JykY4EQ9uV8FrkSvk7dQ== X-IronPort-AV: E=McAfee;i="6800,10657,11512"; a="56523826" X-IronPort-AV: E=Sophos;i="6.17,265,1747724400"; d="scan'208";a="56523826" Received: from fmviesa004.fm.intel.com ([10.60.135.144]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Aug 2025 17:47:34 -0700 X-CSE-ConnectionGUID: NIegug8rRhC7XETT3NrBIw== X-CSE-MsgGUID: oI0LrwU9RNeDXAtVAnb78Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,265,1747724400"; d="scan'208";a="169605429" Received: from spr.sh.intel.com ([10.112.230.239]) by fmviesa004.fm.intel.com with ESMTP; 04 Aug 2025 17:47:31 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Kevin Tian , Dapeng Mi , Dapeng Mi Subject: [PATCH 1/5] perf tools kvm: Add missed memory allocation check and free Date: Tue, 5 Aug 2025 08:46:29 +0800 Message-Id: <20250805004633.135904-2-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250805004633.135904-1-dapeng1.mi@linux.intel.com> References: <20250805004633.135904-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 --- tools/perf/builtin-kvm.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 7b15b4a705e4..f78a67a199ff 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -1719,7 +1719,9 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc= , 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); + free(rec_argv); + return ret; } =20 static int @@ -2006,6 +2008,9 @@ static int __cmd_record(const char *file_name, int ar= gc, const char **argv) =20 rec_argc =3D argc + 2; rec_argv =3D calloc(rec_argc + 1, sizeof(char *)); + if (!rec_argv) + return -ENOMEM; + rec_argv[i++] =3D strdup("record"); rec_argv[i++] =3D strdup("-o"); rec_argv[i++] =3D strdup(file_name); @@ -2014,16 +2019,21 @@ static int __cmd_record(const char *file_name, int = argc, const char **argv) =20 BUG_ON(i !=3D rec_argc); =20 - return cmd_record(i, rec_argv); + ret =3D cmd_record(i, rec_argv); + 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 *)); + if (!rec_argv) + return -ENOMEM; + rec_argv[i++] =3D strdup("report"); rec_argv[i++] =3D strdup("-i"); rec_argv[i++] =3D strdup(file_name); @@ -2032,17 +2042,22 @@ static int __cmd_report(const char *file_name, int = argc, const char **argv) =20 BUG_ON(i !=3D rec_argc); =20 - return cmd_report(i, rec_argv); + ret =3D cmd_report(i, rec_argv); + 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 *)); + if (!rec_argv) + return -ENOMEM; + rec_argv[i++] =3D strdup("buildid-list"); rec_argv[i++] =3D strdup("-i"); rec_argv[i++] =3D strdup(file_name); @@ -2051,7 +2066,9 @@ __cmd_buildid_list(const char *file_name, int argc, c= onst char **argv) =20 BUG_ON(i !=3D rec_argc); =20 - return cmd_buildid_list(i, rec_argv); + ret =3D cmd_buildid_list(i, rec_argv); + free(rec_argv); + return ret; } =20 int cmd_kvm(int argc, const char **argv) --=20 2.34.1 From nobody Sun Oct 5 12:46:56 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 BD044199FD0; Tue, 5 Aug 2025 00:47:36 +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=1754354858; cv=none; b=Ztdx1YIIv6bkGwq7pul2y1LFGjRlP9ZzYBFkpFdkfBxinBeUs8mrtFYaWuOkII0Pvk7KuaTiumpLmoslVT6gwBkkBPd0N3qx7DcgomXf31OpR6zZWL1PconmbC2CRN61kbZjx4NqlNMXMN7tfY0evEEo5APFqpBr7KM5zOO/N+I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754354858; c=relaxed/simple; bh=LFNMs8BpbsfIMOfxw5NsEpbTqWjwwtGwi4G+miimsa8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=JadXd0takdAzbSQaHJqJLzNtz6IJWySmmePreROpuzKGLbjh6y/5DXFpfRVCGWGaN1z6HyAI5pEepggZNIKX5X4cipb0Upmzr1n4ee/GxhePQEmYw8xd/QMO7y6kVbxTH8EAm830sxxWkfKgSrTGVbMbHoWbyo+KRbpkE0unPBM= 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=UdGSBosI; 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="UdGSBosI" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754354857; x=1785890857; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=LFNMs8BpbsfIMOfxw5NsEpbTqWjwwtGwi4G+miimsa8=; b=UdGSBosItWiogvtwtMBqSA8BipV/yz+T4/vPbLi7p0JIy3l46F4HrQoR Hom4zYobcDKWCtkIhWYotT5yqmNEMMJyquTSwe0dS6YrxBYSxh7MtNdbU PZNYuBpHDggGdwUMxGJOFNOrNzcy7MBxqc08VCMFTKW+VZKra38Ow93sp Bp1C1FiEiyXFnUIlFxTV+HrQQ6fQ/VNLfh7pKLfaqWhfUTn0+kPupsJy3 wyW5W1i8gP51WA8EQAJMvTpXpM9Xd04g2zwyfwYyNFBKqeN7STBd4FRXh NhzX7dX+X6BpE6BTiEbzNH3fHDeQpQtdYz9ZzeRhKRlp68PpMMS+nKBWK Q==; X-CSE-ConnectionGUID: eacq8WfXT8i0ref8wTK08Q== X-CSE-MsgGUID: E1V8ZEbWQN+Alns5YarZYg== X-IronPort-AV: E=McAfee;i="6800,10657,11512"; a="56523834" X-IronPort-AV: E=Sophos;i="6.17,265,1747724400"; d="scan'208";a="56523834" Received: from fmviesa004.fm.intel.com ([10.60.135.144]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Aug 2025 17:47:37 -0700 X-CSE-ConnectionGUID: Rfzg7QqeQEKaDwD/nG0IDA== X-CSE-MsgGUID: zgkGw/7vRM2spB53FdrLHw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,265,1747724400"; d="scan'208";a="169605451" Received: from spr.sh.intel.com ([10.112.230.239]) by fmviesa004.fm.intel.com with ESMTP; 04 Aug 2025 17:47:34 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Kevin Tian , Dapeng Mi , Dapeng Mi Subject: [PATCH 2/5] perf tools kvm: Fix the potential out of range memory access issue Date: Tue, 5 Aug 2025 08:46:30 +0800 Message-Id: <20250805004633.135904-3-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250805004633.135904-1-dapeng1.mi@linux.intel.com> References: <20250805004633.135904-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 --- tools/perf/builtin-kvm.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index f78a67a199ff..7e48d2437710 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -2002,12 +2002,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; - rec_argv =3D calloc(rec_argc + 1, sizeof(char *)); + /* + * kvm_add_default_arch_event() may add 2 extra options, so + * allocate 2 more pointers in adavance. + */ + rec_argv =3D calloc(rec_argc + 2 + 1, sizeof(char *)); if (!rec_argv) return -ENOMEM; =20 @@ -2019,6 +2019,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) + return -EINVAL; + ret =3D cmd_record(i, rec_argv); free(rec_argv); return ret; --=20 2.34.1 From nobody Sun Oct 5 12:46:56 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 C16BD1419A9; Tue, 5 Aug 2025 00:47:39 +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=1754354861; cv=none; b=K7DcdMQPs2TPyh8LfxxGt95g08FxfXEhl8U0RfNtX2f/uLctWka//obN4FRiBo6P9p9VgRfS0cvG2BUQG4NHKEpEiLQtEyNZtERO0x/cVanDesDcRXA/+cMX4f9jnmkWZUeQsc7J0Uflw+i+2dbGNIMkvXDoO5V5+jT+Z+BI8hs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754354861; c=relaxed/simple; bh=oeuugssJxxfYnDQBivTR+l6U2wpfEbwCtDf6j9CUFwQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=jaPRM1QdGVzCuKe7hg4s647fjmf2pkpQtOIfISpdHCfbKOMrL6FvtAbdQfc+M/CIJjyUglUbSTi1SCaAQp9oXeB1ULSVUpPx+CEgD4es6IaMsU6X376oJ9LsIb9YhjheQR9SABbYEdzggg8WPdOQP8NQ++oc8LZoz5jfvMiq2+w= 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=VfFDjYdZ; 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="VfFDjYdZ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754354860; x=1785890860; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=oeuugssJxxfYnDQBivTR+l6U2wpfEbwCtDf6j9CUFwQ=; b=VfFDjYdZa79ji6gwMPidvLbXKaX5oSVtysnozUp6Lh1X9shjgeX9cBtt aJ0ZKhlWQ0iOGAi5PmO9TFAnDrL7IhNfArAwPNzykJp4nIw8lanxVk8PB 1PhWNy//IBwbQJJ+tJt4kSIX5ib00uQd5TmJuzNs+F6uBXhHaMu7/1wAS 7IZ2SCEFJrr44apOwNXjigCPwwauoeNrM8y3DAT1RrKyCyLarYPaJT5fh LmuKpUvMYlC/ax5L9yaiWYPrm/6dX1I0Yzi/YW92yxYsbcDVh4sZO2yPv Hp+IJqmn/GgblxAhqVaBOx4k2W7sg/HSt9BJVngdJvbR7rzBsSY7il2xC g==; X-CSE-ConnectionGUID: iiE8PI67SF64Bnj5EvuVEg== X-CSE-MsgGUID: R+V9obrqRJmjGKfzCKgbTw== X-IronPort-AV: E=McAfee;i="6800,10657,11512"; a="56523840" X-IronPort-AV: E=Sophos;i="6.17,265,1747724400"; d="scan'208";a="56523840" Received: from fmviesa004.fm.intel.com ([10.60.135.144]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Aug 2025 17:47:40 -0700 X-CSE-ConnectionGUID: b9tPrvM9TBuQwGxSu3FF7g== X-CSE-MsgGUID: cGFrfzA1SVquE4YNsc4CuQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,265,1747724400"; d="scan'208";a="169605458" Received: from spr.sh.intel.com ([10.112.230.239]) by fmviesa004.fm.intel.com with ESMTP; 04 Aug 2025 17:47:37 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Kevin Tian , Dapeng Mi , Dapeng Mi Subject: [PATCH 3/5] perf tools: Add helper x86__is_intel_cpu() Date: Tue, 5 Aug 2025 08:46:31 +0800 Message-Id: <20250805004633.135904-4-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250805004633.135904-1-dapeng1.mi@linux.intel.com> References: <20250805004633.135904-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 --- 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 Sun Oct 5 12:46:56 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 1CA3E188000; Tue, 5 Aug 2025 00:47:43 +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=1754354864; cv=none; b=XVJRz7cjtzby8cq/e5CfryVuO86C2wAhoOrNtIpZxrTz9enlTp0OLrn78+LnLLeiEhE8c9CG6rH4XlZlYUwsmAfwvhAc00fa/nA9ZUnfDtB6XFcf0q5tsMKG2wO1aZ+VVDByGeF9i+A0aIaHbSDqZ/2rPPpNOxDOWHLh8w3K+cA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754354864; c=relaxed/simple; bh=IzdlHI5Ro6VDslLSUBRO1HRkoYye4pQ+c9AMu/X1eoE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=HIBI48oJAffttxCDD69D2ivum8bfF/6W1QHZ+tTkcsrY4l5u4OboIAtFSOteF046L0spxWZ7y0LsiEKA4bbzFWgfFrA/Vy6JW/gbKnsjmKXN0zWsmbbiCZ/dh0PXQQpLcIgAVHHJ9YnCHSRcSqnPuf/pfv/L+Bn68XJ2yVUmIjM= 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=X6Q9GBvA; 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="X6Q9GBvA" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754354864; x=1785890864; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=IzdlHI5Ro6VDslLSUBRO1HRkoYye4pQ+c9AMu/X1eoE=; b=X6Q9GBvARG6zrf2WGWYZgref1oG7vNm691W9pLSVn4RFU0BLBjTSHy5N ajc11UCi4vnQLjdU2eNDxo+AZJngGUVrxHumHx8XHtD6ShLOH7s95zKcw I+czBo+TkJ4mDekVANbB/slfFRsX097fqj6US83icNLzb4KHQJr2swb3/ i7Y5bUlHMWJfzxiww7Q9u/AsW+srgDwILbro8aXYRhmdVvGl5gfRp4mzc KB/etzuNgdgAcFVw9YB/omJocUfxQhedA2noxlz+/XGwmyZxjXCRQ8wCY +9lHpnPUWaKVWc2NcnXKZ3uI0NnxDWaz3pa8zl4KakLWWK29Yh4EueGVR w==; X-CSE-ConnectionGUID: CcHB35WCRRKM4jftXIPHng== X-CSE-MsgGUID: 8OARCoAnSBalzzG3pTNXHA== X-IronPort-AV: E=McAfee;i="6800,10657,11512"; a="56523847" X-IronPort-AV: E=Sophos;i="6.17,265,1747724400"; d="scan'208";a="56523847" Received: from fmviesa004.fm.intel.com ([10.60.135.144]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Aug 2025 17:47:43 -0700 X-CSE-ConnectionGUID: uYUfnBylQh+bf0nfd6TwJw== X-CSE-MsgGUID: KkBycsUxThKNfurZMZYERw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,265,1747724400"; d="scan'208";a="169605472" Received: from spr.sh.intel.com ([10.112.230.239]) by fmviesa004.fm.intel.com with ESMTP; 04 Aug 2025 17:47:40 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Kevin Tian , Dapeng Mi , Dapeng Mi Subject: [PATCH 4/5] perf tools kvm: Use "cycles" to sample guest for "kvm record" on Intel Date: Tue, 5 Aug 2025 08:46:32 +0800 Message-Id: <20250805004633.135904-5-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250805004633.135904-1-dapeng1.mi@linux.intel.com> References: <20250805004633.135904-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 --- tools/perf/arch/x86/util/kvm-stat.c | 46 +++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tools/perf/arch/x86/util/kvm-stat.c b/tools/perf/arch/x86/util= /kvm-stat.c index 424716518b75..cdb5f3e1b5be 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,47 @@ 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 i, j =3D *argc; + + const struct option event_options[] =3D { + OPT_BOOLEAN('e', "event", &event, NULL), + OPT_END() + }; + + if (!x86__is_intel_cpu()) + return 0; + + tmp =3D calloc(j + 1, sizeof(char *)); + if (!tmp) + return -EINVAL; + + 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("-e"); + argv[j++] =3D strdup("cycles"); + *argc +=3D 2; + } + + free(tmp); + return 0; +} --=20 2.34.1 From nobody Sun Oct 5 12:46:56 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 074F21D5CE0; Tue, 5 Aug 2025 00:47:46 +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=1754354867; cv=none; b=kPYMdYsRvbvR6x1ROO9eQstHKjcFeHgNj7gWepjEbyNlYPNtEOdyCeBdKqIuIMxQP3GoniR4krWPet1qEM8RSuBRcbti/nozyuYgHTskZFLAoBGZwm7eyCMb8rcVG9HAfTtC1NOEx4/AvD+S9kMDQwFwx21SqdfUEqRbjrYoLK8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754354867; c=relaxed/simple; bh=vb+WjZ8ROih9VWNeO7ua4iX4AEM72JhLQRXT0CLNnVA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ulmqzXUd5FHDrha/kBjuXO3mRNCaSOtBnmRij2xNuLnazqdxTtSy4BadqJDzae/KOthe7f27V3Jil3KCo2GnCHIfB8lWaxNyNq9Y95v6/cmjTIEGQU1gwldS9kYMbJj42QYlIYkqIWuQKBSiAU6o9ayN0jzGL1TM3h/xZLclJw0= 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=biXRyU09; 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="biXRyU09" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754354867; x=1785890867; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vb+WjZ8ROih9VWNeO7ua4iX4AEM72JhLQRXT0CLNnVA=; b=biXRyU0905gr5BvU/SMpaJr46EIXp8lJCq+SJP91Yl/Z6qnj5v7W1Pai p2cvjtAdRdK9TlDrs7C7lDki50JA9palEYJ8eMk+f9Xt3bRVHAMSOf8oq lOTVqpzGP8Q16bOmDHyjEfHenjd+fR/KrqZpwgLEtSD5foJB3frthInXG zJV65XjiUqA8jhHyYA+oKnIZanETHS9rrVFpCw2h7hcFldB3OADJXZ6S7 mxfimzKStPuptPIgnqn1E40PcOIuLp8a5byU3nV23UFneVR0zSkX9OLFz Hg+XlXw5SX7WyCIS6yXJqME81ylQPDm/lMvlVwnKpTkbWm4nyBYf/vLti g==; X-CSE-ConnectionGUID: l9PsaLUcRNal393PA9Y39Q== X-CSE-MsgGUID: YYuF1p5kSN6KRnJwSbCtaA== X-IronPort-AV: E=McAfee;i="6800,10657,11512"; a="56523859" X-IronPort-AV: E=Sophos;i="6.17,265,1747724400"; d="scan'208";a="56523859" Received: from fmviesa004.fm.intel.com ([10.60.135.144]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Aug 2025 17:47:46 -0700 X-CSE-ConnectionGUID: drsN2BjkThK9T3mWREb0yg== X-CSE-MsgGUID: Ny5WNCWHTcu9S+EpzorcAQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,265,1747724400"; d="scan'208";a="169605490" Received: from spr.sh.intel.com ([10.112.230.239]) by fmviesa004.fm.intel.com with ESMTP; 04 Aug 2025 17:47:43 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Kevin Tian , Dapeng Mi , Dapeng Mi Subject: [PATCH 5/5] perf tools kvm: Use "cycles" to sample guest for "kvm top" on Intel Date: Tue, 5 Aug 2025 08:46:33 +0800 Message-Id: <20250805004633.135904-6-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250805004633.135904-1-dapeng1.mi@linux.intel.com> References: <20250805004633.135904-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 --- tools/perf/builtin-kvm.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 7e48d2437710..d72b40f3df12 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -2075,6 +2075,34 @@ __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 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_argv =3D calloc(argc + 2 + 1, sizeof(char *)); + if (!rec_argv) + return -ENOMEM; + + for (i =3D 0; i < argc; i++) + rec_argv[i] =3D argv[i]; + + BUG_ON(i !=3D argc); + + ret =3D kvm_add_default_arch_event(&i, rec_argv); + if (ret) + return -EINVAL; + + ret =3D cmd_top(i, rec_argv); + free(rec_argv); + + return ret; +} + int cmd_kvm(int argc, const char **argv) { const char *file_name =3D NULL; @@ -2135,7 +2163,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