Blame SOURCES/0002-Fix-for-the-invalid-ring_buffer-issue.patch

ccf185
From 86022cd76d9391f3c93553d1c76a444b2143a4e8 Mon Sep 17 00:00:00 2001
ccf185
From: Lianbo Jiang <lijiang@redhat.com>
ccf185
Date: Wed, 13 Jul 2022 22:27:33 +0800
ccf185
Subject: [PATCH 2/3] Fix for the invalid ring_buffer issue
ccf185
ccf185
Kernel commit e028157062b9 ("[kernel] perf: Make struct ring_buffer
ccf185
less ambiguous") renamed the struct ring_buffer to struct perf_buffer,
ccf185
which cause the following failure:
ccf185
ccf185
[0] invalid ring_buffer
ccf185
[1] invalid ring_buffer
ccf185
[2] invalid ring_buffer
ccf185
ccf185
Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
ccf185
---
ccf185
 ptdump.c | 45 +++++++++++++++++++++++++++++++--------------
ccf185
 1 file changed, 31 insertions(+), 14 deletions(-)
ccf185
ccf185
diff --git a/ptdump.c b/ptdump.c
ccf185
index 736e1c8cddaf..54e4391739e3 100644
ccf185
--- a/ptdump.c
ccf185
+++ b/ptdump.c
ccf185
@@ -114,25 +114,42 @@ int init_pt_info(int cpu)
ccf185
 		struct_ring_buffer);
ccf185
 
ccf185
 	/* symbol access check */
ccf185
-	if (STRUCT_EXISTS("ring_buffer") &&
ccf185
-	    !MEMBER_EXISTS("ring_buffer", "aux_pages")) {
ccf185
-		fprintf(fp, "[%d] invalid ring_buffer\n", cpu);
ccf185
+	if ((STRUCT_EXISTS("ring_buffer") &&
ccf185
+	    !MEMBER_EXISTS("ring_buffer", "aux_pages")) ||
ccf185
+		(STRUCT_EXISTS("perf_buffer") &&
ccf185
+		 !MEMBER_EXISTS("perf_buffer", "aux_pages"))) {
ccf185
+		fprintf(fp, "[%d] invalid {ring|perf}_buffer\n", cpu);
ccf185
 		return FALSE;
ccf185
 	}
ccf185
 
ccf185
-	/* array of struct pages for pt buffer */
ccf185
-	if(!get_member(struct_ring_buffer, "ring_buffer", "aux_pages",
ccf185
-		       &aux_pages))
ccf185
-		return FALSE;
ccf185
+	if (STRUCT_EXISTS("ring_buffer")) {
ccf185
+		/* array of struct pages for pt buffer */
ccf185
+		if(!get_member(struct_ring_buffer, "ring_buffer", "aux_pages",
ccf185
+			       &aux_pages))
ccf185
+			return FALSE;
ccf185
 
ccf185
-	/* number of pages */
ccf185
-	if(!get_member(struct_ring_buffer, "ring_buffer", "aux_nr_pages",
ccf185
-		       &aux_nr_pages))
ccf185
-		return FALSE;
ccf185
+		/* number of pages */
ccf185
+		if(!get_member(struct_ring_buffer, "ring_buffer", "aux_nr_pages",
ccf185
+			       &aux_nr_pages))
ccf185
+			return FALSE;
ccf185
+
ccf185
+		/* private data (struct pt_buffer) */
ccf185
+		if(!get_member(struct_ring_buffer, "ring_buffer", "aux_priv",
ccf185
+			       &aux_priv))
ccf185
+			return FALSE;
ccf185
+	} else if (STRUCT_EXISTS("perf_buffer")) {
ccf185
+		if(!get_member(struct_ring_buffer, "perf_buffer", "aux_pages",
ccf185
+					&aux_pages))
ccf185
+			return FALSE;
ccf185
 
ccf185
-	/* private data (struct pt_buffer) */
ccf185
-	if(!get_member(struct_ring_buffer, "ring_buffer", "aux_priv",
ccf185
-		       &aux_priv))
ccf185
+		if(!get_member(struct_ring_buffer, "perf_buffer", "aux_nr_pages",
ccf185
+					&aux_nr_pages))
ccf185
+			return FALSE;
ccf185
+
ccf185
+		if(!get_member(struct_ring_buffer, "perf_buffer", "aux_priv",
ccf185
+				&aux_priv))
ccf185
+			return FALSE;
ccf185
+	} else
ccf185
 		return FALSE;
ccf185
 
ccf185
 	if (!aux_nr_pages) {
ccf185
-- 
ccf185
2.31.1
ccf185