]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
perf/x86/intel/pt: Fix pt_topa_entry_for_page() address calculation
authorAdrian Hunter <adrian.hunter@intel.com>
Mon, 24 Jun 2024 20:10:57 +0000 (23:10 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 3 Aug 2024 06:59:42 +0000 (08:59 +0200)
[ Upstream commit 3520b251dcae2b4a27b95cd6f745c54fd658bda5 ]

Currently, perf allocates an array of page pointers which is limited in
size by MAX_PAGE_ORDER. That in turn limits the maximum Intel PT buffer
size to 2GiB. Should that limitation be lifted, the Intel PT driver can
support larger sizes, except for one calculation in
pt_topa_entry_for_page(), which is limited to 32-bits.

Fix pt_topa_entry_for_page() address calculation by adding a cast.

Fixes: 39152ee51b77 ("perf/x86/intel/pt: Get rid of reverse lookup table for ToPA")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20240624201101.60186-4-adrian.hunter@intel.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/x86/events/intel/pt.c

index 14db6d9d318b3c76e091c1a91b9649a56622c3b6..c3259164a8e466fdd57d8ff56f6de0c856ff3a42 100644 (file)
@@ -990,7 +990,7 @@ pt_topa_entry_for_page(struct pt_buffer *buf, unsigned int pg)
         * order allocations, there shouldn't be many of these.
         */
        list_for_each_entry(topa, &buf->tables, list) {
-               if (topa->offset + topa->size > pg << PAGE_SHIFT)
+               if (topa->offset + topa->size > (unsigned long)pg << PAGE_SHIFT)
                        goto found;
        }