| From de92d704b1cad8ae3471f26569afd8a936ad3a3f Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 25 Jul 2020 19:51:10 +0100 |
| Subject: locking/lockdep: Fix overflow in presentation of average lock-time |
| |
| From: Chris Wilson <chris@chris-wilson.co.uk> |
| |
| [ Upstream commit a7ef9b28aa8d72a1656fa6f0a01bbd1493886317 ] |
| |
| Though the number of lock-acquisitions is tracked as unsigned long, this |
| is passed as the divisor to div_s64() which interprets it as a s32, |
| giving nonsense values with more than 2 billion acquisitons. E.g. |
| |
| acquisitions holdtime-min holdtime-max holdtime-total holdtime-avg |
| ------------------------------------------------------------------------- |
| 2350439395 0.07 353.38 649647067.36 0.-32 |
| |
| Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Link: https://lore.kernel.org/r/20200725185110.11588-1-chris@chris-wilson.co.uk |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| kernel/locking/lockdep_proc.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/kernel/locking/lockdep_proc.c b/kernel/locking/lockdep_proc.c |
| index 75d80809c48c9..09bad6cbb95cf 100644 |
| --- a/kernel/locking/lockdep_proc.c |
| +++ b/kernel/locking/lockdep_proc.c |
| @@ -425,7 +425,7 @@ static void seq_lock_time(struct seq_file *m, struct lock_time *lt) |
| seq_time(m, lt->min); |
| seq_time(m, lt->max); |
| seq_time(m, lt->total); |
| - seq_time(m, lt->nr ? div_s64(lt->total, lt->nr) : 0); |
| + seq_time(m, lt->nr ? div64_u64(lt->total, lt->nr) : 0); |
| } |
| |
| static void seq_stats(struct seq_file *m, struct lock_stat_data *data) |
| -- |
| 2.25.1 |
| |