From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 287742144DD; Wed, 4 Dec 2024 17:01:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733331695; cv=none; b=mXP9us9/ZdCMdKTF9uAIxh/c0y7WgdGTnbYCzUsbQ2kN5w4yt9OSkr7S3Rwcpt3deD4tH0l4nKPC+RkQrqp0pXgiPvUfTYDZiebVpBWisHcj/nebDaL7i5NNCET/qtrC1NMB3ycJccPhmwIqCyZlI9RSx0Hn5iUVpbaAi4a8+sE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733331695; c=relaxed/simple; bh=eEfkJhH6FdP+1Is7PmzyO0G+qQ0szLVAi1152B2Um/U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dq47qlpLdR/jILv9Snt2KqpAef41iBgdOiGImyLzHFU6D4Xe5pZMoOkWCtIptrRwGbVV5dBukXPpAhqi05TwoA2p0hnFk2ogV3hEOnrnRXc3FZAslikIl4AZeJ7YZWYLRWQL13XLg5Q/4hQy+bGvnkFWmLbpzCXQVLJCpX5f7Fw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mj8zBi6p; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mj8zBi6p" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DE4DFC4CED1; Wed, 4 Dec 2024 17:01:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1733331695; bh=eEfkJhH6FdP+1Is7PmzyO0G+qQ0szLVAi1152B2Um/U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mj8zBi6p2r5/ov6+vctXMUKiReJW3g+2zqRo/q/Hrt4S183Tpq9olEvYBi8mrRMSv 4oPcPqHBsShfa0uUiWc/DeOkNUjV+8k9QmyhMRCAxWNkanCuka8VXio4hkIBEEL3vx t+RwveE500So82fmGiUiNm/0DjoydKzdv0vYIr8Twq9E8BHWlAWMYA8Jeh1b4LkMpT n64WwHychWx1Mqx/0IzY2hhsQETPuEf2Fm5kWHM2GMjXMsCIxbwrHu4/afr75qweCq E99fH29xkHf3urNm7Qf/zMZdt7TBR7h/Kw6K9NzINuy2oJnIPguj3icIgUYSLT3zF+ zOgVf81b4TW9Q== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Tomas Glozar , Attila Fazekas , Steven Rostedt , Sasha Levin , bristot@kernel.org, jkacur@redhat.com, ezulian@redhat.com, linux-trace-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 6.6 05/24] rtla/timerlat: Make timerlat_top_cpu->*_count unsigned long long Date: Wed, 4 Dec 2024 10:49:25 -0500 Message-ID: <20241204155003.2213733-5-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241204155003.2213733-1-sashal@kernel.org> References: <20241204155003.2213733-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.6.63 Content-Transfer-Encoding: 8bit From: Tomas Glozar [ Upstream commit 4eba4723c5254ba8251ecb7094a5078d5c300646 ] Most fields of struct timerlat_top_cpu are unsigned long long, but the fields {irq,thread,user}_count are int (32-bit signed). This leads to overflow when tracing on a large number of CPUs for a long enough time: $ rtla timerlat top -a20 -c 1-127 -d 12h ... 0 12:00:00 | IRQ Timer Latency (us) | Thread Timer Latency (us) CPU COUNT | cur min avg max | cur min avg max 1 #43200096 | 0 0 1 2 | 3 2 6 12 ... 127 #43200096 | 0 0 1 2 | 3 2 5 11 ALL #119144 e4 | 0 5 4 | 2 28 16 The average latency should be 0-1 for IRQ and 5-6 for thread, but is reported as 5 and 28, about 4 to 5 times more, due to the count overflowing when summed over all CPUs: 43200096 * 127 = 5486412192, however, 1191444898 (= 5486412192 mod MAX_INT) is reported instead, as seen on the last line of the output, and the averages are thus ~4.6 times higher than they should be (5486412192 / 1191444898 = ~4.6). Fix the issue by changing {irq,thread,user}_count fields to unsigned long long, similarly to other fields in struct timerlat_top_cpu and to the count variable in timerlat_top_print_sum. Link: https://lore.kernel.org/20241011121015.2868751-1-tglozar@redhat.com Reported-by: Attila Fazekas Signed-off-by: Tomas Glozar Signed-off-by: Steven Rostedt (Google) Signed-off-by: Sasha Levin --- tools/tracing/rtla/src/timerlat_top.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/tracing/rtla/src/timerlat_top.c b/tools/tracing/rtla/src/timerlat_top.c index a84f43857de14..0915092057f85 100644 --- a/tools/tracing/rtla/src/timerlat_top.c +++ b/tools/tracing/rtla/src/timerlat_top.c @@ -49,9 +49,9 @@ struct timerlat_top_params { }; struct timerlat_top_cpu { - int irq_count; - int thread_count; - int user_count; + unsigned long long irq_count; + unsigned long long thread_count; + unsigned long long user_count; unsigned long long cur_irq; unsigned long long min_irq; @@ -237,7 +237,7 @@ static void timerlat_top_print(struct osnoise_tool *top, int cpu) /* * Unless trace is being lost, IRQ counter is always the max. */ - trace_seq_printf(s, "%3d #%-9d |", cpu, cpu_data->irq_count); + trace_seq_printf(s, "%3d #%-9llu |", cpu, cpu_data->irq_count); if (!cpu_data->irq_count) { trace_seq_printf(s, "%s %s %s %s |", no_value, no_value, no_value, no_value); -- 2.43.0