]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Dec 2021 14:10:10 +0000 (15:10 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Dec 2021 14:10:10 +0000 (15:10 +0100)
added patches:
arm-extend-pfn_valid-to-take-into-account-freed-memory-map-alignment.patch
arm-ioremap-don-t-abuse-pfn_valid-to-check-if-pfn-is-in-ram.patch
memblock-align-freed-memory-map-on-pageblock-boundaries-with-sparsemem.patch
memblock-ensure-there-is-no-overflow-in-memblock_overlaps_region.patch
memblock-free_unused_memmap-use-pageblock-units-instead-of-max_order.patch
perf-inject-fix-itrace-space-allowed-for-new-attributes.patch
perf-intel-pt-fix-error-timestamp-setting-on-the-decoder-error-path.patch
perf-intel-pt-fix-intel_pt_fup_event-assumptions-about-setting-state-type.patch
perf-intel-pt-fix-missing-instruction-events-with-q-option.patch
perf-intel-pt-fix-next-err-value-walking-trace.patch
perf-intel-pt-fix-some-pge-packet-generation-enable-control-flow-packets-usage.patch
perf-intel-pt-fix-state-setting-when-receiving-overflow-ovf-packet.patch
perf-intel-pt-fix-sync-state-when-a-psb-synchronization-packet-is-found.patch

14 files changed:
queue-5.10/arm-extend-pfn_valid-to-take-into-account-freed-memory-map-alignment.patch [new file with mode: 0644]
queue-5.10/arm-ioremap-don-t-abuse-pfn_valid-to-check-if-pfn-is-in-ram.patch [new file with mode: 0644]
queue-5.10/memblock-align-freed-memory-map-on-pageblock-boundaries-with-sparsemem.patch [new file with mode: 0644]
queue-5.10/memblock-ensure-there-is-no-overflow-in-memblock_overlaps_region.patch [new file with mode: 0644]
queue-5.10/memblock-free_unused_memmap-use-pageblock-units-instead-of-max_order.patch [new file with mode: 0644]
queue-5.10/perf-inject-fix-itrace-space-allowed-for-new-attributes.patch [new file with mode: 0644]
queue-5.10/perf-intel-pt-fix-error-timestamp-setting-on-the-decoder-error-path.patch [new file with mode: 0644]
queue-5.10/perf-intel-pt-fix-intel_pt_fup_event-assumptions-about-setting-state-type.patch [new file with mode: 0644]
queue-5.10/perf-intel-pt-fix-missing-instruction-events-with-q-option.patch [new file with mode: 0644]
queue-5.10/perf-intel-pt-fix-next-err-value-walking-trace.patch [new file with mode: 0644]
queue-5.10/perf-intel-pt-fix-some-pge-packet-generation-enable-control-flow-packets-usage.patch [new file with mode: 0644]
queue-5.10/perf-intel-pt-fix-state-setting-when-receiving-overflow-ovf-packet.patch [new file with mode: 0644]
queue-5.10/perf-intel-pt-fix-sync-state-when-a-psb-synchronization-packet-is-found.patch [new file with mode: 0644]
queue-5.10/series

diff --git a/queue-5.10/arm-extend-pfn_valid-to-take-into-account-freed-memory-map-alignment.patch b/queue-5.10/arm-extend-pfn_valid-to-take-into-account-freed-memory-map-alignment.patch
new file mode 100644 (file)
index 0000000..c4a274f
--- /dev/null
@@ -0,0 +1,57 @@
+From foo@baz Wed Dec 15 03:01:20 PM CET 2021
+From: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
+Date: Mon, 13 Dec 2021 17:41:34 +0800
+Subject: arm: extend pfn_valid to take into account freed memory map alignment
+To: <stable@vger.kernel.org>
+Cc: <rppt@kernel.org>, <akpm@linux-foundation.org>, <linux-arm-kernel@lists.infradead.org>, <linux-kernel@vger.kernel.org>, <linux-mm@kvack.org>, <linux@armlinux.org.uk>, <rppt@linux.ibm.com>, <tony@atomide.com>, <wangkefeng.wang@huawei.com>, <mark-pk.tsai@mediatek.com>, <yj.chiang@mediatek.com>
+Message-ID: <20211213094135.1798-5-mark-pk.tsai@mediatek.com>
+
+From: Mike Rapoport <rppt@linux.ibm.com>
+
+[ Upstream commit a4d5613c4dc6d413e0733e37db9d116a2a36b9f3 ]
+
+When unused memory map is freed the preserved part of the memory map is
+extended to match pageblock boundaries because lots of core mm
+functionality relies on homogeneity of the memory map within pageblock
+boundaries.
+
+Since pfn_valid() is used to check whether there is a valid memory map
+entry for a PFN, make it return true also for PFNs that have memory map
+entries even if there is no actual memory populated there.
+
+Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
+Tested-by: Kefeng Wang <wangkefeng.wang@huawei.com>
+Tested-by: Tony Lindgren <tony@atomide.com>
+Link: https://lore.kernel.org/lkml/20210630071211.21011-1-rppt@kernel.org/
+Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm/mm/init.c |   13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+--- a/arch/arm/mm/init.c
++++ b/arch/arm/mm/init.c
+@@ -125,11 +125,22 @@ static void __init zone_sizes_init(unsig
+ int pfn_valid(unsigned long pfn)
+ {
+       phys_addr_t addr = __pfn_to_phys(pfn);
++      unsigned long pageblock_size = PAGE_SIZE * pageblock_nr_pages;
+       if (__phys_to_pfn(addr) != pfn)
+               return 0;
+-      return memblock_is_map_memory(addr);
++      /*
++       * If address less than pageblock_size bytes away from a present
++       * memory chunk there still will be a memory map entry for it
++       * because we round freed memory map to the pageblock boundaries.
++       */
++      if (memblock_overlaps_region(&memblock.memory,
++                                   ALIGN_DOWN(addr, pageblock_size),
++                                   pageblock_size))
++              return 1;
++
++      return 0;
+ }
+ EXPORT_SYMBOL(pfn_valid);
+ #endif
diff --git a/queue-5.10/arm-ioremap-don-t-abuse-pfn_valid-to-check-if-pfn-is-in-ram.patch b/queue-5.10/arm-ioremap-don-t-abuse-pfn_valid-to-check-if-pfn-is-in-ram.patch
new file mode 100644 (file)
index 0000000..2493f99
--- /dev/null
@@ -0,0 +1,111 @@
+From foo@baz Wed Dec 15 03:01:20 PM CET 2021
+From: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
+Date: Mon, 13 Dec 2021 17:41:35 +0800
+Subject: arm: ioremap: don't abuse pfn_valid() to check if pfn is in RAM
+To: <stable@vger.kernel.org>
+Cc: <rppt@kernel.org>, <akpm@linux-foundation.org>, <linux-arm-kernel@lists.infradead.org>, <linux-kernel@vger.kernel.org>, <linux-mm@kvack.org>, <linux@armlinux.org.uk>, <rppt@linux.ibm.com>, <tony@atomide.com>, <wangkefeng.wang@huawei.com>, <mark-pk.tsai@mediatek.com>, <yj.chiang@mediatek.com>
+Message-ID: <20211213094135.1798-6-mark-pk.tsai@mediatek.com>
+
+From: Mike Rapoport <rppt@linux.ibm.com>
+
+commit 024591f9a6e0164ec23301784d1e6d8f6cacbe59 upstream.
+[ Upstream commit 024591f9a6e0164ec23301784d1e6d8f6cacbe59 ]
+
+The semantics of pfn_valid() is to check presence of the memory map for a
+PFN and not whether a PFN is in RAM. The memory map may be present for a
+hole in the physical memory and if such hole corresponds to an MMIO range,
+__arm_ioremap_pfn_caller() will produce a WARN() and fail:
+
+[    2.863406] WARNING: CPU: 0 PID: 1 at arch/arm/mm/ioremap.c:287 __arm_ioremap_pfn_caller+0xf0/0x1dc
+[    2.864812] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.13.0-09882-ga180bd1d7e16 #1
+[    2.865263] Hardware name: Generic DT based system
+[    2.865711] Backtrace:
+[    2.866063] [<80b07e58>] (dump_backtrace) from [<80b080ac>] (show_stack+0x20/0x24)
+[    2.866633]  r7:00000009 r6:0000011f r5:60000153 r4:80ddd1c0
+[    2.866922] [<80b0808c>] (show_stack) from [<80b18df0>] (dump_stack_lvl+0x58/0x74)
+[    2.867117] [<80b18d98>] (dump_stack_lvl) from [<80b18e20>] (dump_stack+0x14/0x1c)
+[    2.867309]  r5:80118cac r4:80dc6774
+[    2.867404] [<80b18e0c>] (dump_stack) from [<80122fcc>] (__warn+0xe4/0x150)
+[    2.867583] [<80122ee8>] (__warn) from [<80b08850>] (warn_slowpath_fmt+0x88/0xc0)
+[    2.867774]  r7:0000011f r6:80dc6774 r5:00000000 r4:814c4000
+[    2.867917] [<80b087cc>] (warn_slowpath_fmt) from [<80118cac>] (__arm_ioremap_pfn_caller+0xf0/0x1dc)
+[    2.868158]  r9:00000001 r8:9ef00000 r7:80e8b0d4 r6:0009ef00 r5:00000000 r4:00100000
+[    2.868346] [<80118bbc>] (__arm_ioremap_pfn_caller) from [<80118df8>] (__arm_ioremap_caller+0x60/0x68)
+[    2.868581]  r9:9ef00000 r8:821b6dc0 r7:00100000 r6:00000000 r5:815d1010 r4:80118d98
+[    2.868761] [<80118d98>] (__arm_ioremap_caller) from [<80118fcc>] (ioremap+0x28/0x30)
+[    2.868958] [<80118fa4>] (ioremap) from [<8062871c>] (__devm_ioremap_resource+0x154/0x1c8)
+[    2.869169]  r5:815d1010 r4:814c5d2c
+[    2.869263] [<806285c8>] (__devm_ioremap_resource) from [<8062899c>] (devm_ioremap_resource+0x14/0x18)
+[    2.869495]  r9:9e9f57a0 r8:814c4000 r7:815d1000 r6:815d1010 r5:8177c078 r4:815cf400
+[    2.869676] [<80628988>] (devm_ioremap_resource) from [<8091c6e4>] (fsi_master_acf_probe+0x1a8/0x5d8)
+[    2.869909] [<8091c53c>] (fsi_master_acf_probe) from [<80723dbc>] (platform_probe+0x68/0xc8)
+[    2.870124]  r9:80e9dadc r8:00000000 r7:815d1010 r6:810c1000 r5:815d1010 r4:00000000
+[    2.870306] [<80723d54>] (platform_probe) from [<80721208>] (really_probe+0x1cc/0x470)
+[    2.870512]  r7:815d1010 r6:810c1000 r5:00000000 r4:815d1010
+[    2.870651] [<8072103c>] (really_probe) from [<807215cc>] (__driver_probe_device+0x120/0x1fc)
+[    2.870872]  r7:815d1010 r6:810c1000 r5:810c1000 r4:815d1010
+[    2.871013] [<807214ac>] (__driver_probe_device) from [<807216e8>] (driver_probe_device+0x40/0xd8)
+[    2.871244]  r9:80e9dadc r8:00000000 r7:815d1010 r6:810c1000 r5:812feaa0 r4:812fe994
+[    2.871428] [<807216a8>] (driver_probe_device) from [<80721a58>] (__driver_attach+0xa8/0x1d4)
+[    2.871647]  r9:80e9dadc r8:00000000 r7:00000000 r6:810c1000 r5:815d1054 r4:815d1010
+[    2.871830] [<807219b0>] (__driver_attach) from [<8071ee8c>] (bus_for_each_dev+0x88/0xc8)
+[    2.872040]  r7:00000000 r6:814c4000 r5:807219b0 r4:810c1000
+[    2.872194] [<8071ee04>] (bus_for_each_dev) from [<80722208>] (driver_attach+0x28/0x30)
+[    2.872418]  r7:810a2aa0 r6:00000000 r5:821b6000 r4:810c1000
+[    2.872570] [<807221e0>] (driver_attach) from [<8071f80c>] (bus_add_driver+0x114/0x200)
+[    2.872788] [<8071f6f8>] (bus_add_driver) from [<80722ec4>] (driver_register+0x98/0x128)
+[    2.873011]  r7:81011d0c r6:814c4000 r5:00000000 r4:810c1000
+[    2.873167] [<80722e2c>] (driver_register) from [<80725240>] (__platform_driver_register+0x2c/0x34)
+[    2.873408]  r5:814dcb80 r4:80f2a764
+[    2.873513] [<80725214>] (__platform_driver_register) from [<80f2a784>] (fsi_master_acf_init+0x20/0x28)
+[    2.873766] [<80f2a764>] (fsi_master_acf_init) from [<80f014a8>] (do_one_initcall+0x108/0x290)
+[    2.874007] [<80f013a0>] (do_one_initcall) from [<80f01840>] (kernel_init_freeable+0x1ac/0x230)
+[    2.874248]  r9:80e9dadc r8:80f3987c r7:80f3985c r6:00000007 r5:814dcb80 r4:80f627a4
+[    2.874456] [<80f01694>] (kernel_init_freeable) from [<80b19f44>] (kernel_init+0x20/0x138)
+[    2.874691]  r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:80b19f24
+[    2.874894]  r4:00000000
+[    2.874977] [<80b19f24>] (kernel_init) from [<80100170>] (ret_from_fork+0x14/0x24)
+[    2.875231] Exception stack(0x814c5fb0 to 0x814c5ff8)
+[    2.875535] 5fa0:                                     00000000 00000000 00000000 00000000
+[    2.875849] 5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
+[    2.876133] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
+[    2.876363]  r5:80b19f24 r4:00000000
+[    2.876683] ---[ end trace b2f74b8536829970 ]---
+[    2.876911] fsi-master-acf gpio-fsi: ioremap failed for resource [mem 0x9ef00000-0x9effffff]
+[    2.877492] fsi-master-acf gpio-fsi: Error -12 mapping coldfire memory
+[    2.877689] fsi-master-acf: probe of gpio-fsi failed with error -12
+
+Use memblock_is_map_memory() instead of pfn_valid() to check if a PFN is in
+RAM or not.
+
+Reported-by: Guenter Roeck <linux@roeck-us.net>
+Fixes: a4d5613c4dc6 ("arm: extend pfn_valid to take into account freed memory map alignment")
+Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
+Tested-by: Guenter Roeck <linux@roeck-us.net>
+Link: https://lore.kernel.org/lkml/20210630071211.21011-1-rppt@kernel.org/
+Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm/mm/ioremap.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/arch/arm/mm/ioremap.c
++++ b/arch/arm/mm/ioremap.c
+@@ -27,6 +27,7 @@
+ #include <linux/vmalloc.h>
+ #include <linux/io.h>
+ #include <linux/sizes.h>
++#include <linux/memblock.h>
+ #include <asm/cp15.h>
+ #include <asm/cputype.h>
+@@ -284,7 +285,8 @@ static void __iomem * __arm_ioremap_pfn_
+        * Don't allow RAM to be mapped with mismatched attributes - this
+        * causes problems with ARMv6+
+        */
+-      if (WARN_ON(pfn_valid(pfn) && mtype != MT_MEMORY_RW))
++      if (WARN_ON(memblock_is_map_memory(PFN_PHYS(pfn)) &&
++                  mtype != MT_MEMORY_RW))
+               return NULL;
+       area = get_vm_area_caller(size, VM_IOREMAP, caller);
diff --git a/queue-5.10/memblock-align-freed-memory-map-on-pageblock-boundaries-with-sparsemem.patch b/queue-5.10/memblock-align-freed-memory-map-on-pageblock-boundaries-with-sparsemem.patch
new file mode 100644 (file)
index 0000000..99aa51e
--- /dev/null
@@ -0,0 +1,61 @@
+From foo@baz Wed Dec 15 03:01:20 PM CET 2021
+From: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
+Date: Mon, 13 Dec 2021 17:41:32 +0800
+Subject: memblock: align freed memory map on pageblock boundaries with SPARSEMEM
+To: <stable@vger.kernel.org>
+Cc: <rppt@kernel.org>, <akpm@linux-foundation.org>, <linux-arm-kernel@lists.infradead.org>, <linux-kernel@vger.kernel.org>, <linux-mm@kvack.org>, <linux@armlinux.org.uk>, <rppt@linux.ibm.com>, <tony@atomide.com>, <wangkefeng.wang@huawei.com>, <mark-pk.tsai@mediatek.com>, <yj.chiang@mediatek.com>
+Message-ID: <20211213094135.1798-3-mark-pk.tsai@mediatek.com>
+
+From: Mike Rapoport <rppt@linux.ibm.com>
+
+[ Upstream commit f921f53e089a12a192808ac4319f28727b35dc0f ]
+
+When CONFIG_SPARSEMEM=y the ranges of the memory map that are freed are not
+aligned to the pageblock boundaries which breaks assumptions about
+homogeneity of the memory map throughout core mm code.
+
+Make sure that the freed memory map is always aligned on pageblock
+boundaries regardless of the memory model selection.
+
+Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
+Tested-by: Tony Lindgren <tony@atomide.com>
+Link: https://lore.kernel.org/lkml/20210630071211.21011-1-rppt@kernel.org/
+[backport upstream modification in mm/memblock.c to arch/arm/mm/init.c]
+Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm/mm/init.c |    8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+--- a/arch/arm/mm/init.c
++++ b/arch/arm/mm/init.c
+@@ -313,14 +313,14 @@ static void __init free_unused_memmap(vo
+                */
+               start = min(start,
+                                ALIGN(prev_end, PAGES_PER_SECTION));
+-#else
++#endif
+               /*
+                * Align down here since many operations in VM subsystem
+                * presume that there are no holes in the memory map inside
+                * a pageblock
+                */
+               start = round_down(start, pageblock_nr_pages);
+-#endif
++
+               /*
+                * If we had a previous bank, and there is a space
+                * between the current bank and the previous, free it.
+@@ -337,9 +337,11 @@ static void __init free_unused_memmap(vo
+       }
+ #ifdef CONFIG_SPARSEMEM
+-      if (!IS_ALIGNED(prev_end, PAGES_PER_SECTION))
++      if (!IS_ALIGNED(prev_end, PAGES_PER_SECTION)) {
++              prev_end = ALIGN(end, pageblock_nr_pages);
+               free_memmap(prev_end,
+                           ALIGN(prev_end, PAGES_PER_SECTION));
++      }
+ #endif
+ }
diff --git a/queue-5.10/memblock-ensure-there-is-no-overflow-in-memblock_overlaps_region.patch b/queue-5.10/memblock-ensure-there-is-no-overflow-in-memblock_overlaps_region.patch
new file mode 100644 (file)
index 0000000..28d4978
--- /dev/null
@@ -0,0 +1,49 @@
+From foo@baz Wed Dec 15 03:01:20 PM CET 2021
+From: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
+Date: Mon, 13 Dec 2021 17:41:33 +0800
+Subject: memblock: ensure there is no overflow in memblock_overlaps_region()
+To: <stable@vger.kernel.org>
+Cc: <rppt@kernel.org>, <akpm@linux-foundation.org>, <linux-arm-kernel@lists.infradead.org>, <linux-kernel@vger.kernel.org>, <linux-mm@kvack.org>, <linux@armlinux.org.uk>, <rppt@linux.ibm.com>, <tony@atomide.com>, <wangkefeng.wang@huawei.com>, <mark-pk.tsai@mediatek.com>, <yj.chiang@mediatek.com>
+Message-ID: <20211213094135.1798-4-mark-pk.tsai@mediatek.com>
+
+From: Mike Rapoport <rppt@linux.ibm.com>
+
+[ Upstream commit 023accf5cdc1e504a9b04187ec23ff156fe53d90 ]
+
+There maybe an overflow in memblock_overlaps_region() if it is called with
+base and size such that
+
+       base + size > PHYS_ADDR_MAX
+
+Make sure that memblock_overlaps_region() caps the size to prevent such
+overflow and remove now duplicated call to memblock_cap_size() from
+memblock_is_region_reserved().
+
+Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
+Tested-by: Tony Lindgren <tony@atomide.com>
+Link: https://lore.kernel.org/lkml/20210630071211.21011-1-rppt@kernel.org/
+Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ mm/memblock.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/mm/memblock.c
++++ b/mm/memblock.c
+@@ -182,6 +182,8 @@ bool __init_memblock memblock_overlaps_r
+ {
+       unsigned long i;
++      memblock_cap_size(base, &size);
++
+       for (i = 0; i < type->cnt; i++)
+               if (memblock_addrs_overlap(base, size, type->regions[i].base,
+                                          type->regions[i].size))
+@@ -1792,7 +1794,6 @@ bool __init_memblock memblock_is_region_
+  */
+ bool __init_memblock memblock_is_region_reserved(phys_addr_t base, phys_addr_t size)
+ {
+-      memblock_cap_size(base, &size);
+       return memblock_overlaps_region(&memblock.reserved, base, size);
+ }
diff --git a/queue-5.10/memblock-free_unused_memmap-use-pageblock-units-instead-of-max_order.patch b/queue-5.10/memblock-free_unused_memmap-use-pageblock-units-instead-of-max_order.patch
new file mode 100644 (file)
index 0000000..779f016
--- /dev/null
@@ -0,0 +1,72 @@
+From foo@baz Wed Dec 15 03:01:20 PM CET 2021
+From: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
+Date: Mon, 13 Dec 2021 17:41:31 +0800
+Subject: memblock: free_unused_memmap: use pageblock units instead of MAX_ORDER
+To: <stable@vger.kernel.org>
+Cc: <rppt@kernel.org>, <akpm@linux-foundation.org>, <linux-arm-kernel@lists.infradead.org>, <linux-kernel@vger.kernel.org>, <linux-mm@kvack.org>, <linux@armlinux.org.uk>, <rppt@linux.ibm.com>, <tony@atomide.com>, <wangkefeng.wang@huawei.com>, <mark-pk.tsai@mediatek.com>, <yj.chiang@mediatek.com>
+Message-ID: <20211213094135.1798-2-mark-pk.tsai@mediatek.com>
+
+From: Mike Rapoport <rppt@linux.ibm.com>
+
+[ Upstream commit e2a86800d58639b3acde7eaeb9eb393dca066e08 ]
+
+The code that frees unused memory map uses rounds start and end of the
+holes that are freed to MAX_ORDER_NR_PAGES to preserve continuity of the
+memory map for MAX_ORDER regions.
+
+Lots of core memory management functionality relies on homogeneity of the
+memory map within each pageblock which size may differ from MAX_ORDER in
+certain configurations.
+
+Although currently, for the architectures that use free_unused_memmap(),
+pageblock_order and MAX_ORDER are equivalent, it is cleaner to have common
+notation thought mm code.
+
+Replace MAX_ORDER_NR_PAGES with pageblock_nr_pages and update the comments
+to make it more clear why the alignment to pageblock boundaries is
+required.
+
+Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
+Tested-by: Tony Lindgren <tony@atomide.com>
+Link: https://lore.kernel.org/lkml/20210630071211.21011-1-rppt@kernel.org/
+[backport upstream modification in mm/memblock.c to arch/arm/mm/init.c]
+Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm/mm/init.c |   16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+--- a/arch/arm/mm/init.c
++++ b/arch/arm/mm/init.c
+@@ -315,11 +315,11 @@ static void __init free_unused_memmap(vo
+                                ALIGN(prev_end, PAGES_PER_SECTION));
+ #else
+               /*
+-               * Align down here since the VM subsystem insists that the
+-               * memmap entries are valid from the bank start aligned to
+-               * MAX_ORDER_NR_PAGES.
++               * Align down here since many operations in VM subsystem
++               * presume that there are no holes in the memory map inside
++               * a pageblock
+                */
+-              start = round_down(start, MAX_ORDER_NR_PAGES);
++              start = round_down(start, pageblock_nr_pages);
+ #endif
+               /*
+                * If we had a previous bank, and there is a space
+@@ -329,11 +329,11 @@ static void __init free_unused_memmap(vo
+                       free_memmap(prev_end, start);
+               /*
+-               * Align up here since the VM subsystem insists that the
+-               * memmap entries are valid from the bank end aligned to
+-               * MAX_ORDER_NR_PAGES.
++               * Align up here since many operations in VM subsystem
++               * presume that there are no holes in the memory map inside
++               * a pageblock
+                */
+-              prev_end = ALIGN(end, MAX_ORDER_NR_PAGES);
++              prev_end = ALIGN(end, pageblock_nr_pages);
+       }
+ #ifdef CONFIG_SPARSEMEM
diff --git a/queue-5.10/perf-inject-fix-itrace-space-allowed-for-new-attributes.patch b/queue-5.10/perf-inject-fix-itrace-space-allowed-for-new-attributes.patch
new file mode 100644 (file)
index 0000000..910f28f
--- /dev/null
@@ -0,0 +1,41 @@
+From foo@baz Wed Dec 15 02:59:52 PM CET 2021
+From: Adrian Hunter <adrian.hunter@intel.com>
+Date: Mon, 13 Dec 2021 17:45:41 +0200
+Subject: perf inject: Fix itrace space allowed for new attributes
+To: stable@vger.kernel.org
+Message-ID: <20211213154548.122728-2-adrian.hunter@intel.com>
+
+From: Adrian Hunter <adrian.hunter@intel.com>
+
+commit c29d9792607e67ed8a3f6e9db0d96836d885a8c5 upstream.
+
+The space allowed for new attributes can be too small if existing header
+information is large. That can happen, for example, if there are very
+many CPUs, due to having an event ID per CPU per event being stored in the
+header information.
+
+Fix by adding the existing header.data_offset. Also increase the extra
+space allowed to 8KiB and align to a 4KiB boundary for neatness.
+
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Jiri Olsa <jolsa@redhat.com>
+Link: http://lore.kernel.org/lkml/20211125071457.2066863-1-adrian.hunter@intel.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+[Adrian: Backport to v5.10]
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/perf/builtin-inject.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/tools/perf/builtin-inject.c
++++ b/tools/perf/builtin-inject.c
+@@ -752,7 +752,7 @@ static int __cmd_inject(struct perf_inje
+               inject->tool.ordered_events = true;
+               inject->tool.ordering_requires_timestamps = true;
+               /* Allow space in the header for new attributes */
+-              output_data_offset = 4096;
++              output_data_offset = roundup(8192 + session->header.data_offset, 4096);
+               if (inject->strip)
+                       strip_init(inject);
+       }
diff --git a/queue-5.10/perf-intel-pt-fix-error-timestamp-setting-on-the-decoder-error-path.patch b/queue-5.10/perf-intel-pt-fix-error-timestamp-setting-on-the-decoder-error-path.patch
new file mode 100644 (file)
index 0000000..e318719
--- /dev/null
@@ -0,0 +1,37 @@
+From foo@baz Wed Dec 15 02:59:52 PM CET 2021
+From: Adrian Hunter <adrian.hunter@intel.com>
+Date: Mon, 13 Dec 2021 17:45:48 +0200
+Subject: perf intel-pt: Fix error timestamp setting on the decoder error path
+To: stable@vger.kernel.org
+Message-ID: <20211213154548.122728-9-adrian.hunter@intel.com>
+
+From: Adrian Hunter <adrian.hunter@intel.com>
+
+commit 6665b8e4836caa8023cbc7e53733acd234969c8c upstream.
+
+An error timestamp shows the last known timestamp for the queue, but this
+is not updated on the error path. Fix by setting it.
+
+Fixes: f4aa081949e7b6 ("perf tools: Add Intel PT decoder")
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Jiri Olsa <jolsa@redhat.com>
+Cc: stable@vger.kernel.org # v5.15+
+Link: https://lore.kernel.org/r/20211210162303.2288710-8-adrian.hunter@intel.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+[Adrian: Backport to v5.10]
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/perf/util/intel-pt.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/tools/perf/util/intel-pt.c
++++ b/tools/perf/util/intel-pt.c
+@@ -2271,6 +2271,7 @@ static int intel_pt_run_decoder(struct i
+                               ptq->sync_switch = false;
+                               intel_pt_next_tid(pt, ptq);
+                       }
++                      ptq->timestamp = state->est_timestamp;
+                       if (pt->synth_opts.errors) {
+                               err = intel_ptq_synth_error(ptq, state);
+                               if (err)
diff --git a/queue-5.10/perf-intel-pt-fix-intel_pt_fup_event-assumptions-about-setting-state-type.patch b/queue-5.10/perf-intel-pt-fix-intel_pt_fup_event-assumptions-about-setting-state-type.patch
new file mode 100644 (file)
index 0000000..016d882
--- /dev/null
@@ -0,0 +1,108 @@
+From foo@baz Wed Dec 15 02:59:52 PM CET 2021
+From: Adrian Hunter <adrian.hunter@intel.com>
+Date: Mon, 13 Dec 2021 17:45:44 +0200
+Subject: perf intel-pt: Fix intel_pt_fup_event() assumptions about setting state type
+To: stable@vger.kernel.org
+Message-ID: <20211213154548.122728-5-adrian.hunter@intel.com>
+
+From: Adrian Hunter <adrian.hunter@intel.com>
+
+commit 4c761d805bb2d2ead1b9baaba75496152b394c80 upstream.
+
+intel_pt_fup_event() assumes it can overwrite the state type if there has
+been an FUP event, but this is an unnecessary and unexpected constraint on
+callers.
+
+Fix by touching only the state type flags that are affected by an FUP
+event.
+
+Fixes: a472e65fc490a ("perf intel-pt: Add decoder support for ptwrite and power event packets")
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Jiri Olsa <jolsa@redhat.com>
+Cc: stable@vger.kernel.org # v5.15+
+Link: https://lore.kernel.org/r/20211210162303.2288710-4-adrian.hunter@intel.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+[Adrian: Backport to v5.10]
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/perf/util/intel-pt-decoder/intel-pt-decoder.c |   32 ++++++++------------
+ 1 file changed, 13 insertions(+), 19 deletions(-)
+
+--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
++++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+@@ -1114,61 +1114,55 @@ out_no_progress:
+ static bool intel_pt_fup_event(struct intel_pt_decoder *decoder)
+ {
++      enum intel_pt_sample_type type = decoder->state.type;
+       bool ret = false;
++      decoder->state.type &= ~INTEL_PT_BRANCH;
++
+       if (decoder->set_fup_tx_flags) {
+               decoder->set_fup_tx_flags = false;
+               decoder->tx_flags = decoder->fup_tx_flags;
+-              decoder->state.type = INTEL_PT_TRANSACTION;
++              decoder->state.type |= INTEL_PT_TRANSACTION;
+               if (decoder->fup_tx_flags & INTEL_PT_ABORT_TX)
+                       decoder->state.type |= INTEL_PT_BRANCH;
+-              decoder->state.from_ip = decoder->ip;
+-              decoder->state.to_ip = 0;
+               decoder->state.flags = decoder->fup_tx_flags;
+-              return true;
++              ret = true;
+       }
+       if (decoder->set_fup_ptw) {
+               decoder->set_fup_ptw = false;
+-              decoder->state.type = INTEL_PT_PTW;
++              decoder->state.type |= INTEL_PT_PTW;
+               decoder->state.flags |= INTEL_PT_FUP_IP;
+-              decoder->state.from_ip = decoder->ip;
+-              decoder->state.to_ip = 0;
+               decoder->state.ptw_payload = decoder->fup_ptw_payload;
+-              return true;
++              ret = true;
+       }
+       if (decoder->set_fup_mwait) {
+               decoder->set_fup_mwait = false;
+-              decoder->state.type = INTEL_PT_MWAIT_OP;
+-              decoder->state.from_ip = decoder->ip;
+-              decoder->state.to_ip = 0;
++              decoder->state.type |= INTEL_PT_MWAIT_OP;
+               decoder->state.mwait_payload = decoder->fup_mwait_payload;
+               ret = true;
+       }
+       if (decoder->set_fup_pwre) {
+               decoder->set_fup_pwre = false;
+               decoder->state.type |= INTEL_PT_PWR_ENTRY;
+-              decoder->state.type &= ~INTEL_PT_BRANCH;
+-              decoder->state.from_ip = decoder->ip;
+-              decoder->state.to_ip = 0;
+               decoder->state.pwre_payload = decoder->fup_pwre_payload;
+               ret = true;
+       }
+       if (decoder->set_fup_exstop) {
+               decoder->set_fup_exstop = false;
+               decoder->state.type |= INTEL_PT_EX_STOP;
+-              decoder->state.type &= ~INTEL_PT_BRANCH;
+               decoder->state.flags |= INTEL_PT_FUP_IP;
+-              decoder->state.from_ip = decoder->ip;
+-              decoder->state.to_ip = 0;
+               ret = true;
+       }
+       if (decoder->set_fup_bep) {
+               decoder->set_fup_bep = false;
+               decoder->state.type |= INTEL_PT_BLK_ITEMS;
+-              decoder->state.type &= ~INTEL_PT_BRANCH;
++              ret = true;
++      }
++      if (ret) {
+               decoder->state.from_ip = decoder->ip;
+               decoder->state.to_ip = 0;
+-              ret = true;
++      } else {
++              decoder->state.type = type;
+       }
+       return ret;
+ }
diff --git a/queue-5.10/perf-intel-pt-fix-missing-instruction-events-with-q-option.patch b/queue-5.10/perf-intel-pt-fix-missing-instruction-events-with-q-option.patch
new file mode 100644 (file)
index 0000000..95ad469
--- /dev/null
@@ -0,0 +1,65 @@
+From foo@baz Wed Dec 15 02:59:52 PM CET 2021
+From: Adrian Hunter <adrian.hunter@intel.com>
+Date: Mon, 13 Dec 2021 17:45:47 +0200
+Subject: perf intel-pt: Fix missing 'instruction' events with 'q' option
+To: stable@vger.kernel.org
+Message-ID: <20211213154548.122728-8-adrian.hunter@intel.com>
+
+From: Adrian Hunter <adrian.hunter@intel.com>
+
+commit a882cc94971093e146ffa1163b140ad956236754 upstream.
+
+FUP packets contain IP information, which makes them also an 'instruction'
+event in 'hop' mode i.e. the itrace 'q' option.  That wasn't happening, so
+restructure the logic so that FUP events are added along with appropriate
+'instruction' and 'branch' events.
+
+Fixes: 7c1b16ba0e26e6 ("perf intel-pt: Add support for decoding FUP/TIP only")
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Jiri Olsa <jolsa@redhat.com>
+Cc: stable@vger.kernel.org # v5.15+
+Link: https://lore.kernel.org/r/20211210162303.2288710-7-adrian.hunter@intel.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+[Adrian: Backport to v5.10]
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/perf/util/intel-pt-decoder/intel-pt-decoder.c |   11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
++++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+@@ -1954,6 +1954,8 @@ static int intel_pt_scan_for_psb(struct
+ /* Hop mode: Ignore TNT, do not walk code, but get ip from FUPs and TIPs */
+ static int intel_pt_hop_trace(struct intel_pt_decoder *decoder, bool *no_tip, int *err)
+ {
++      *err = 0;
++
+       /* Leap from PSB to PSB, getting ip from FUP within PSB+ */
+       if (decoder->leap && !decoder->in_psb && decoder->packet.type != INTEL_PT_PSB) {
+               *err = intel_pt_scan_for_psb(decoder);
+@@ -1988,18 +1990,21 @@ static int intel_pt_hop_trace(struct int
+               if (!decoder->packet.count)
+                       return HOP_IGNORE;
+               intel_pt_set_ip(decoder);
+-              if (intel_pt_fup_event(decoder))
+-                      return HOP_RETURN;
++              if (decoder->set_fup_mwait || decoder->set_fup_pwre)
++                      *no_tip = true;
+               if (!decoder->branch_enable || !decoder->pge)
+                       *no_tip = true;
+               if (*no_tip) {
+                       decoder->state.type = INTEL_PT_INSTRUCTION;
+                       decoder->state.from_ip = decoder->ip;
+                       decoder->state.to_ip = 0;
++                      intel_pt_fup_event(decoder);
+                       return HOP_RETURN;
+               }
++              intel_pt_fup_event(decoder);
++              decoder->state.type |= INTEL_PT_INSTRUCTION | INTEL_PT_BRANCH;
+               *err = intel_pt_walk_fup_tip(decoder);
+-              if (!*err)
++              if (!*err && decoder->state.to_ip)
+                       decoder->pkt_state = INTEL_PT_STATE_RESAMPLE;
+               return HOP_RETURN;
diff --git a/queue-5.10/perf-intel-pt-fix-next-err-value-walking-trace.patch b/queue-5.10/perf-intel-pt-fix-next-err-value-walking-trace.patch
new file mode 100644 (file)
index 0000000..f1f136f
--- /dev/null
@@ -0,0 +1,37 @@
+From foo@baz Wed Dec 15 02:59:52 PM CET 2021
+From: Adrian Hunter <adrian.hunter@intel.com>
+Date: Mon, 13 Dec 2021 17:45:46 +0200
+Subject: perf intel-pt: Fix next 'err' value, walking trace
+To: stable@vger.kernel.org
+Message-ID: <20211213154548.122728-7-adrian.hunter@intel.com>
+
+From: Adrian Hunter <adrian.hunter@intel.com>
+
+commit a32e6c5da599dbf49e60622a4dfb5b9b40ece029 upstream.
+
+Code after label 'next:' in intel_pt_walk_trace() assumes 'err' is zero,
+but it may not be, if arrived at via a 'goto'. Ensure it is zero.
+
+Fixes: 7c1b16ba0e26e6 ("perf intel-pt: Add support for decoding FUP/TIP only")
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Jiri Olsa <jolsa@redhat.com>
+Cc: stable@vger.kernel.org # v5.15+
+Link: https://lore.kernel.org/r/20211210162303.2288710-6-adrian.hunter@intel.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+[Adrian: Backport to v5.10]
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/perf/util/intel-pt-decoder/intel-pt-decoder.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
++++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+@@ -2068,6 +2068,7 @@ static int intel_pt_walk_trace(struct in
+               if (err)
+                       return err;
+ next:
++              err = 0;
+               if (decoder->cyc_threshold) {
+                       if (decoder->sample_cyc && last_packet_type != INTEL_PT_CYC)
+                               decoder->sample_cyc = false;
diff --git a/queue-5.10/perf-intel-pt-fix-some-pge-packet-generation-enable-control-flow-packets-usage.patch b/queue-5.10/perf-intel-pt-fix-some-pge-packet-generation-enable-control-flow-packets-usage.patch
new file mode 100644 (file)
index 0000000..0998590
--- /dev/null
@@ -0,0 +1,60 @@
+From foo@baz Wed Dec 15 02:59:52 PM CET 2021
+From: Adrian Hunter <adrian.hunter@intel.com>
+Date: Mon, 13 Dec 2021 17:45:42 +0200
+Subject: perf intel-pt: Fix some PGE (packet generation enable/control flow packets) usage
+To: stable@vger.kernel.org
+Message-ID: <20211213154548.122728-3-adrian.hunter@intel.com>
+
+From: Adrian Hunter <adrian.hunter@intel.com>
+
+commit 057ae59f5a1d924511beb1b09f395bdb316cfd03 upstream.
+
+Packet generation enable (PGE) refers to whether control flow (COFI)
+packets are being produced.
+
+PGE may be false even when branch-tracing is enabled, due to being
+out-of-context, or outside a filter address range.  Fix some missing PGE
+usage.
+
+Fixes: 7c1b16ba0e26e6 ("perf intel-pt: Add support for decoding FUP/TIP only")
+Fixes: 839598176b0554 ("perf intel-pt: Allow decoding with branch tracing disabled")
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Jiri Olsa <jolsa@redhat.com>
+Cc: stable@vger.kernel.org # v5.15+
+Link: https://lore.kernel.org/r/20211210162303.2288710-2-adrian.hunter@intel.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+[Adrian: Backport to v5.10]
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/perf/util/intel-pt-decoder/intel-pt-decoder.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
++++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+@@ -1949,6 +1949,7 @@ static int intel_pt_hop_trace(struct int
+               return HOP_IGNORE;
+       case INTEL_PT_TIP_PGD:
++              decoder->pge = false;
+               if (!decoder->packet.count)
+                       return HOP_IGNORE;
+               intel_pt_set_ip(decoder);
+@@ -1972,7 +1973,7 @@ static int intel_pt_hop_trace(struct int
+               intel_pt_set_ip(decoder);
+               if (intel_pt_fup_event(decoder))
+                       return HOP_RETURN;
+-              if (!decoder->branch_enable)
++              if (!decoder->branch_enable || !decoder->pge)
+                       *no_tip = true;
+               if (*no_tip) {
+                       decoder->state.type = INTEL_PT_INSTRUCTION;
+@@ -2124,7 +2125,7 @@ next:
+                               break;
+                       }
+                       intel_pt_set_last_ip(decoder);
+-                      if (!decoder->branch_enable) {
++                      if (!decoder->branch_enable || !decoder->pge) {
+                               decoder->ip = decoder->last_ip;
+                               if (intel_pt_fup_event(decoder))
+                                       return 0;
diff --git a/queue-5.10/perf-intel-pt-fix-state-setting-when-receiving-overflow-ovf-packet.patch b/queue-5.10/perf-intel-pt-fix-state-setting-when-receiving-overflow-ovf-packet.patch
new file mode 100644 (file)
index 0000000..fddc148
--- /dev/null
@@ -0,0 +1,110 @@
+From foo@baz Wed Dec 15 02:59:52 PM CET 2021
+From: Adrian Hunter <adrian.hunter@intel.com>
+Date: Mon, 13 Dec 2021 17:45:45 +0200
+Subject: perf intel-pt: Fix state setting when receiving overflow (OVF) packet
+To: stable@vger.kernel.org
+Message-ID: <20211213154548.122728-6-adrian.hunter@intel.com>
+
+From: Adrian Hunter <adrian.hunter@intel.com>
+
+commit c79ee2b2160909889df67c8801352d3e69d43a1a upstream.
+
+An overflow (OVF packet) is treated as an error because it represents a
+loss of trace data, but there is no loss of synchronization, so the packet
+state should be INTEL_PT_STATE_IN_SYNC not INTEL_PT_STATE_ERR_RESYNC.
+
+To support that, some additional variables must be reset, and the FUP
+packet that may follow OVF is treated as an FUP event.
+
+Fixes: f4aa081949e7b6 ("perf tools: Add Intel PT decoder")
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Jiri Olsa <jolsa@redhat.com>
+Cc: stable@vger.kernel.org # v5.15+
+Link: https://lore.kernel.org/r/20211210162303.2288710-5-adrian.hunter@intel.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+[Adrian: Backport to v5.10]
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/perf/util/intel-pt-decoder/intel-pt-decoder.c |   32 +++++++++++++++++---
+ 1 file changed, 28 insertions(+), 4 deletions(-)
+
+--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
++++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+@@ -1158,6 +1158,20 @@ static bool intel_pt_fup_event(struct in
+               decoder->state.type |= INTEL_PT_BLK_ITEMS;
+               ret = true;
+       }
++      if (decoder->overflow) {
++              decoder->overflow = false;
++              if (!ret && !decoder->pge) {
++                      if (decoder->hop) {
++                              decoder->state.type = 0;
++                              decoder->pkt_state = INTEL_PT_STATE_RESAMPLE;
++                      }
++                      decoder->pge = true;
++                      decoder->state.type |= INTEL_PT_BRANCH | INTEL_PT_TRACE_BEGIN;
++                      decoder->state.from_ip = 0;
++                      decoder->state.to_ip = decoder->ip;
++                      return true;
++              }
++      }
+       if (ret) {
+               decoder->state.from_ip = decoder->ip;
+               decoder->state.to_ip = 0;
+@@ -1480,7 +1494,16 @@ static int intel_pt_overflow(struct inte
+       intel_pt_log("ERROR: Buffer overflow\n");
+       intel_pt_clear_tx_flags(decoder);
+       decoder->timestamp_insn_cnt = 0;
+-      decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC;
++      decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
++      decoder->state.from_ip = decoder->ip;
++      decoder->ip = 0;
++      decoder->pge = false;
++      decoder->set_fup_tx_flags = false;
++      decoder->set_fup_ptw = false;
++      decoder->set_fup_mwait = false;
++      decoder->set_fup_pwre = false;
++      decoder->set_fup_exstop = false;
++      decoder->set_fup_bep = false;
+       decoder->overflow = true;
+       return -EOVERFLOW;
+ }
+@@ -2083,6 +2106,7 @@ next:
+               case INTEL_PT_TIP_PGE: {
+                       decoder->pge = true;
++                      decoder->overflow = false;
+                       intel_pt_mtc_cyc_cnt_pge(decoder);
+                       if (decoder->packet.count == 0) {
+                               intel_pt_log_at("Skipping zero TIP.PGE",
+@@ -2596,10 +2620,10 @@ static int intel_pt_sync_ip(struct intel
+       decoder->set_fup_pwre = false;
+       decoder->set_fup_exstop = false;
+       decoder->set_fup_bep = false;
++      decoder->overflow = false;
+       if (!decoder->branch_enable) {
+               decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
+-              decoder->overflow = false;
+               decoder->state.type = 0; /* Do not have a sample */
+               return 0;
+       }
+@@ -2614,7 +2638,6 @@ static int intel_pt_sync_ip(struct intel
+               decoder->pkt_state = INTEL_PT_STATE_RESAMPLE;
+       else
+               decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
+-      decoder->overflow = false;
+       decoder->state.from_ip = 0;
+       decoder->state.to_ip = decoder->ip;
+@@ -2823,7 +2846,8 @@ const struct intel_pt_state *intel_pt_de
+       if (err) {
+               decoder->state.err = intel_pt_ext_err(err);
+-              decoder->state.from_ip = decoder->ip;
++              if (err != -EOVERFLOW)
++                      decoder->state.from_ip = decoder->ip;
+               intel_pt_update_sample_time(decoder);
+               decoder->sample_tot_cyc_cnt = decoder->tot_cyc_cnt;
+       } else {
diff --git a/queue-5.10/perf-intel-pt-fix-sync-state-when-a-psb-synchronization-packet-is-found.patch b/queue-5.10/perf-intel-pt-fix-sync-state-when-a-psb-synchronization-packet-is-found.patch
new file mode 100644 (file)
index 0000000..7371235
--- /dev/null
@@ -0,0 +1,41 @@
+From foo@baz Wed Dec 15 02:59:52 PM CET 2021
+From: Adrian Hunter <adrian.hunter@intel.com>
+Date: Mon, 13 Dec 2021 17:45:43 +0200
+Subject: perf intel-pt: Fix sync state when a PSB (synchronization) packet is found
+To: stable@vger.kernel.org
+Message-ID: <20211213154548.122728-4-adrian.hunter@intel.com>
+
+From: Adrian Hunter <adrian.hunter@intel.com>
+
+commit ad106a26aef3a95ac7ca88d033b431661ba346ce upstream.
+
+When syncing, it may be that branch packet generation is not enabled at
+that point, in which case there will not immediately be a control-flow
+packet, so some packets before a control flow packet turns up, get
+ignored.  However, the decoder is in sync as soon as a PSB is found, so
+the state should be set accordingly.
+
+Fixes: f4aa081949e7b6 ("perf tools: Add Intel PT decoder")
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Jiri Olsa <jolsa@redhat.com>
+Cc: stable@vger.kernel.org # v5.15+
+Link: https://lore.kernel.org/r/20211210162303.2288710-3-adrian.hunter@intel.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+[Adrian: Backport to v5.10]
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/perf/util/intel-pt-decoder/intel-pt-decoder.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
++++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+@@ -2733,7 +2733,7 @@ leap:
+               return err;
+       decoder->have_last_ip = true;
+-      decoder->pkt_state = INTEL_PT_STATE_NO_IP;
++      decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
+       err = intel_pt_walk_psb(decoder);
+       if (err)
index 97195d451e0c91c2932848a60f2a35a3bba89055..4bb7ec1bb0118381525e8c31fc54e2e86fe12775 100644 (file)
@@ -18,3 +18,16 @@ bpf-fix-integer-overflow-in-argument-calculation-for-bpf_map_area_alloc.patch
 fuse-make-sure-reclaim-doesn-t-write-the-inode.patch
 hwmon-dell-smm-fix-warning-on-proc-i8k-creation-error.patch
 ethtool-do-not-perform-operations-on-net-devices-being-unregistered.patch
+perf-inject-fix-itrace-space-allowed-for-new-attributes.patch
+perf-intel-pt-fix-some-pge-packet-generation-enable-control-flow-packets-usage.patch
+perf-intel-pt-fix-sync-state-when-a-psb-synchronization-packet-is-found.patch
+perf-intel-pt-fix-intel_pt_fup_event-assumptions-about-setting-state-type.patch
+perf-intel-pt-fix-state-setting-when-receiving-overflow-ovf-packet.patch
+perf-intel-pt-fix-next-err-value-walking-trace.patch
+perf-intel-pt-fix-missing-instruction-events-with-q-option.patch
+perf-intel-pt-fix-error-timestamp-setting-on-the-decoder-error-path.patch
+memblock-free_unused_memmap-use-pageblock-units-instead-of-max_order.patch
+memblock-align-freed-memory-map-on-pageblock-boundaries-with-sparsemem.patch
+memblock-ensure-there-is-no-overflow-in-memblock_overlaps_region.patch
+arm-extend-pfn_valid-to-take-into-account-freed-memory-map-alignment.patch
+arm-ioremap-don-t-abuse-pfn_valid-to-check-if-pfn-is-in-ram.patch