From: Lai Jiangshan <laijs@cn.fujitsu.com>
To: Steven Rostedt <rostedt@goodmis.org>, Ingo Molnar <mingo@elte.hu>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: [PATCH] ring_bufer: fix BUF_PAGE_SIZE
Date: Wed, 17 Dec 2008 17:48:15 +0800 [thread overview]
Message-ID: <4948CADF.6050205@cn.fujitsu.com> (raw)
impact: make BUF_PAGE_SIZE changeable.
Except allocating/freeing page and the code using PAGE_MASK,
all code expect buffer_page's length is BUF_PAGE_SIZE.
This patch make this behavior more concordant.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 668bbb5..0cf6caf 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -158,6 +158,10 @@ struct buffer_page {
void *page; /* Actual data page */
};
+#define BUF_PAGE_ORDER 0
+#define BUF_PAGE_SIZE (PAGE_SIZE << BUF_PAGE_ORDER)
+#define BUF_PAGE_MASK (~(BUF_PAGE_SIZE - 1))
+
/*
* Also stolen from mm/slob.c. Thanks to Mathieu Desnoyers for pointing
* this issue out.
@@ -165,7 +169,7 @@ struct buffer_page {
static inline void free_buffer_page(struct buffer_page *bpage)
{
if (bpage->page)
- free_page((unsigned long)bpage->page);
+ free_pages((unsigned long)bpage->page, BUF_PAGE_ORDER);
kfree(bpage);
}
@@ -179,8 +183,6 @@ static inline int test_time_stamp(u64 delta)
return 0;
}
-#define BUF_PAGE_SIZE PAGE_SIZE
-
/*
* head_page == tail_page && head == tail then buffer is empty.
*/
@@ -289,7 +291,7 @@ static int rb_allocate_pages(struct ring_buffer_per_cpu *cpu_buffer,
goto free_pages;
list_add(&page->list, &pages);
- addr = __get_free_page(GFP_KERNEL);
+ addr = __get_free_pages(GFP_KERNEL, BUF_PAGE_ORDER);
if (!addr)
goto free_pages;
page->page = (void *)addr;
@@ -333,7 +335,7 @@ rb_allocate_cpu_buffer(struct ring_buffer *buffer, int cpu)
goto fail_free_buffer;
cpu_buffer->reader_page = page;
- addr = __get_free_page(GFP_KERNEL);
+ addr = __get_free_pages(GFP_KERNEL, BUF_PAGE_ORDER);
if (!addr)
goto fail_free_reader;
page->page = (void *)addr;
@@ -592,7 +594,7 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size)
if (!page)
goto free_pages;
list_add(&page->list, &pages);
- addr = __get_free_page(GFP_KERNEL);
+ addr = __get_free_pages(GFP_KERNEL, BUF_PAGE_ORDER);
if (!addr)
goto free_pages;
page->page = (void *)addr;
@@ -718,7 +720,7 @@ rb_event_index(struct ring_buffer_event *event)
{
unsigned long addr = (unsigned long)event;
- return (addr & ~PAGE_MASK) - (PAGE_SIZE - BUF_PAGE_SIZE);
+ return addr & ~BUF_PAGE_MASK;
}
static inline int
@@ -729,7 +731,7 @@ rb_is_commit(struct ring_buffer_per_cpu *cpu_buffer,
unsigned long index;
index = rb_event_index(event);
- addr &= PAGE_MASK;
+ addr &= BUF_PAGE_MASK;
return cpu_buffer->commit_page->page == (void *)addr &&
rb_commit_index(cpu_buffer) == index;
@@ -743,7 +745,7 @@ rb_set_commit_event(struct ring_buffer_per_cpu *cpu_buffer,
unsigned long index;
index = rb_event_index(event);
- addr &= PAGE_MASK;
+ addr &= BUF_PAGE_MASK;
while (cpu_buffer->commit_page->page != (void *)addr) {
RB_WARN_ON(cpu_buffer,
next reply other threads:[~2008-12-17 9:52 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-17 9:48 Lai Jiangshan [this message]
2008-12-18 12:48 ` [PATCH] ring_bufer: fix BUF_PAGE_SIZE Ingo Molnar
2008-12-20 9:31 ` Lai Jiangshan
2008-12-21 8:55 ` Ingo Molnar
2008-12-22 18:37 ` Steven Rostedt
2008-12-22 17:57 ` 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=4948CADF.6050205@cn.fujitsu.com \
--to=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox