#include <asm/local.h>
+#ifdef CONFIG_MTK_EXTMEM
+extern void* extmem_malloc_page_align(size_t bytes);
+extern void extmem_free(void* mem);
+#endif
+
static void update_pages_handler(struct work_struct *work);
/*
*/
static void free_buffer_page(struct buffer_page *bpage)
{
+#ifdef CONFIG_MTK_EXTMEM
+ extmem_free((void*) bpage->page);
+#else
free_page((unsigned long)bpage->page);
+#endif
kfree(bpage);
}
struct buffer_page *bpage, *tmp;
for (i = 0; i < nr_pages; i++) {
+#if !defined (CONFIG_MTK_EXTMEM)
struct page *page;
+#endif
/*
* __GFP_NORETRY flag makes sure that the allocation fails
* gracefully without invoking oom-killer and the system is
list_add(&bpage->list, pages);
+#ifdef CONFIG_MTK_EXTMEM
+ bpage->page = extmem_malloc_page_align(PAGE_SIZE);
+ if(bpage->page == NULL) {
+ pr_err("%s[%s] ext memory alloc failed!!!\n", __FILE__, __FUNCTION__);
+ goto free_pages;
+ }
+#else
page = alloc_pages_node(cpu_to_node(cpu),
GFP_KERNEL | __GFP_NORETRY, 0);
if (!page)
goto free_pages;
bpage->page = page_address(page);
+#endif
rb_init_page(bpage->page);
}
{
struct ring_buffer_per_cpu *cpu_buffer;
struct buffer_page *bpage;
+#if !defined (CONFIG_MTK_EXTMEM)
struct page *page;
+#endif
int ret;
cpu_buffer = kzalloc_node(ALIGN(sizeof(*cpu_buffer), cache_line_size()),
rb_check_bpage(cpu_buffer, bpage);
cpu_buffer->reader_page = bpage;
+
+#ifdef CONFIG_MTK_EXTMEM
+ bpage->page = extmem_malloc_page_align(PAGE_SIZE);
+ if(bpage->page == NULL)
+ goto fail_free_reader;
+#else
page = alloc_pages_node(cpu_to_node(cpu), GFP_KERNEL, 0);
if (!page)
goto fail_free_reader;
bpage->page = page_address(page);
+#endif
rb_init_page(bpage->page);
INIT_LIST_HEAD(&cpu_buffer->reader_page->list);