From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
Peter Zijlstra <peterz@infradead.org>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Mathieu Desnoyers <compudj@krystal.dyndns.org>,
Steven Rostedt <srostedt@redhat.com>
Subject: [PATCH 4/6] ring_buffer: reset buffer page when freeing
Date: Mon, 29 Sep 2008 23:02:40 -0400 [thread overview]
Message-ID: <20080930030652.497934332@goodmis.org> (raw)
In-Reply-To: 20080930030236.230994826@goodmis.org
[-- Attachment #1: ring-buffer-page-freeing.patch --]
[-- Type: text/plain, Size: 2008 bytes --]
Mathieu Desnoyers pointed out that the freeing of the page frame needs
to be reset otherwise we might trigger BUG_ON in the page free code.
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
---
kernel/trace/ring_buffer.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
Index: linux-tip.git/kernel/trace/ring_buffer.c
===================================================================
--- linux-tip.git.orig/kernel/trace/ring_buffer.c 2008-09-29 19:59:24.000000000 -0400
+++ linux-tip.git/kernel/trace/ring_buffer.c 2008-09-29 20:07:32.000000000 -0400
@@ -128,6 +128,17 @@ struct buffer_page {
};
/*
+ * Also stolen from mm/slob.c. Thanks to Mathieu Desnoyers for pointing
+ * this issue out.
+ */
+static inline void free_buffer_page(struct buffer_page *bpage)
+{
+ reset_page_mapcount(&bpage->page);
+ bpage->page.mapping = NULL;
+ __free_page(&bpage->page);
+}
+
+/*
* We need to fit the time_stamp delta into 27 bits.
*/
static inline int test_time_stamp(u64 delta)
@@ -240,7 +251,7 @@ static int rb_allocate_pages(struct ring
free_pages:
list_for_each_entry_safe(page, tmp, &pages, list) {
list_del_init(&page->list);
- __free_page(&page->page);
+ free_buffer_page(page);
}
return -ENOMEM;
}
@@ -284,7 +295,7 @@ static void rb_free_cpu_buffer(struct ri
list_for_each_entry_safe(page, tmp, head, list) {
list_del_init(&page->list);
- __free_page(&page->page);
+ free_buffer_page(page);
}
kfree(cpu_buffer);
}
@@ -393,7 +404,7 @@ rb_remove_pages(struct ring_buffer_per_c
p = cpu_buffer->pages.next;
page = list_entry(p, struct buffer_page, list);
list_del_init(&page->list);
- __free_page(&page->page);
+ free_buffer_page(page);
}
BUG_ON(list_empty(&cpu_buffer->pages));
@@ -520,7 +531,7 @@ int ring_buffer_resize(struct ring_buffe
free_pages:
list_for_each_entry_safe(page, tmp, &pages, list) {
list_del_init(&page->list);
- __free_page(&page->page);
+ free_buffer_page(page);
}
return -ENOMEM;
}
--
next prev parent reply other threads:[~2008-09-30 3:07 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-30 3:02 [PATCH 0/6] ftrace: port to the new ring_buffer Steven Rostedt
2008-09-30 3:02 ` [PATCH 1/6] ftrace: give time for wakeup test to run Steven Rostedt
2008-09-30 3:02 ` [PATCH 2/6] Unified trace buffer Steven Rostedt
2008-09-30 9:45 ` Ingo Molnar
2008-09-30 11:53 ` Ingo Molnar
2008-09-30 12:06 ` Steven Rostedt
2008-09-30 3:02 ` [PATCH 3/6] ring_buffer: add paranoid check for buffer page Steven Rostedt
2008-09-30 3:02 ` Steven Rostedt [this message]
2008-09-30 3:02 ` [PATCH 5/6] ftrace: make work with new ring buffer Steven Rostedt
2008-09-30 3:02 ` [PATCH 6/6] ftrace: take advantage of variable length entries Steven Rostedt
2008-09-30 17:33 ` Pekka Paalanen
2008-09-30 17:45 ` Steven Rostedt
2008-10-01 4:42 ` Steven Rostedt
2008-10-01 7:54 ` Ingo Molnar
2008-10-01 14:52 ` Steven Rostedt
2008-10-01 14:52 ` [PATCH] ftrace: type cast verifier Steven Rostedt
2008-10-01 17:42 ` Ingo Molnar
2008-10-01 17:47 ` Ingo Molnar
2008-09-30 7:45 ` [PATCH 0/6] ftrace: port to the new ring_buffer Ingo Molnar
2008-09-30 8:23 ` Ingo Molnar
2008-09-30 8:30 ` Ingo Molnar
2008-09-30 9:13 ` Ingo Molnar
2008-09-30 12:04 ` Steven Rostedt
2008-09-30 12:04 ` Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080930030652.497934332@goodmis.org \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=compudj@krystal.dyndns.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=srostedt@redhat.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.