linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Andi Kleen <andi@firstfloor.org>
To: linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: [PATCH] [7/13] Implement compat hooks for GFP_DMA
Date: Fri,  7 Mar 2008 10:07:17 +0100 (CET)	[thread overview]
Message-ID: <20080307090717.A146E1B419D@basil.firstfloor.org> (raw)
In-Reply-To: <200803071007.493903088@firstfloor.org>

Add code to the normal allocation path to call the mask allocator
transparently for GFP_DMA allocations.

This is only a temporary measure and will go away as soon as all
the drivers are converted to use the mask allocator or one
of its callers (like PCI DMA API) directly.

But currently it is the only sane way to do a bisectable step by 
step conversion of the GFP_DMA users in tree.

Right now the special pagevec free function won't handle mask allocated
pages.

Signed-off-by: Andi Kleen <ak@suse.de>

---
 include/linux/page-flags.h |    4 ++++
 mm/page_alloc.c            |   18 ++++++++++++++++++
 2 files changed, 22 insertions(+)

Index: linux/mm/page_alloc.c
===================================================================
--- linux.orig/mm/page_alloc.c
+++ linux/mm/page_alloc.c
@@ -499,6 +499,12 @@ static void __free_pages_ok(struct page 
 	int i;
 	int reserved = 0;
 
+	/* Compat code for now. Will go away */
+	if (unlikely(PageMaskAlloc(page))) {
+		__free_pages_mask(page, PAGE_SIZE << order);
+		return;
+	}
+
 	for (i = 0 ; i < (1 << order) ; ++i)
 		reserved += free_pages_check(page + i, 1 << PG_mask_alloc);
 	if (reserved)
@@ -1422,6 +1428,13 @@ __alloc_pages(gfp_t gfp_mask, unsigned i
 	if (should_fail_alloc_page(gfp_mask, order))
 		return NULL;
 
+#ifdef CONFIG_MASK_ALLOC
+	/* Compat code for now. Will go away. */
+	if (unlikely(gfp_mask & GFP_DMA))
+		return alloc_pages_mask(gfp_mask & ~__GFP_DMA,
+					PAGE_SIZE << order, TRAD_DMA_MASK);
+#endif
+
 restart:
 	z = zonelist->zones;  /* the list of zones suitable for gfp_mask */
 
@@ -1635,6 +1648,11 @@ void __pagevec_free(struct pagevec *pvec
 
 void __free_pages(struct page *page, unsigned int order)
 {
+	/* Compat code for now. Will go away */
+	if (unlikely(PageMaskAlloc(page))) {
+		__free_pages_mask(page, PAGE_SIZE << order);
+		return;
+	}
 	if (put_page_testzero(page)) {
 		if (order == 0)
 			free_hot_page(page);
Index: linux/include/linux/page-flags.h
===================================================================
--- linux.orig/include/linux/page-flags.h
+++ linux/include/linux/page-flags.h
@@ -257,9 +257,13 @@ static inline void SetPageUptodate(struc
 #define __SetPageCompound(page)	__set_bit(PG_compound, &(page)->flags)
 #define __ClearPageCompound(page) __clear_bit(PG_compound, &(page)->flags)
 
+#ifdef CONFIG_MASK_ALLOC
 #define PageMaskAlloc(page)	test_bit(PG_mask_alloc, &(page)->flags)
 #define __SetPageMaskAlloc(page)	__set_bit(PG_mask_alloc, &(page)->flags)
 #define __ClearPageMaskAlloc(page) __clear_bit(PG_mask_alloc, &(page)->flags)
+#else
+#define PageMaskAlloc(page)	0
+#endif
 
 /*
  * PG_reclaim is used in combination with PG_compound to mark the

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2008-03-07  9:07 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-07  9:07 [PATCH] [0/13] General DMA zone rework Andi Kleen
2008-03-07  9:07 ` [PATCH] [2/13] Make get_order(0) return 0 Andi Kleen
2008-03-07  9:07 ` [PATCH] [3/13] Make kvm bad_page symbol static Andi Kleen
2008-03-07  9:07 ` [PATCH] [4/13] Prepare page_alloc for the maskable allocator Andi Kleen
2008-03-07 18:19   ` Sam Ravnborg
2008-03-07 18:36     ` Cyrill Gorcunov
2008-03-07 19:02     ` Andi Kleen
2008-03-07  9:07 ` [PATCH] [5/13] Add mask allocator statistics to vmstat.[ch] Andi Kleen
2008-03-08  2:24   ` Christoph Lameter
2008-03-07  9:07 ` [PATCH] [6/13] Core maskable allocator Andi Kleen
2008-03-07 10:53   ` Johannes Weiner
2008-03-07 11:14     ` Andi Kleen
2008-03-07 17:05   ` Randy Dunlap
2008-03-07 17:31     ` Andi Kleen
2008-03-07 17:33       ` Randy Dunlap
2008-03-07 17:43         ` Andi Kleen
2008-03-07 17:51           ` Randy Dunlap
2008-03-07 21:13   ` Cyrill Gorcunov
2008-03-07 23:28     ` Andi Kleen
2008-03-08  5:03   ` KAMEZAWA Hiroyuki
2008-03-08  5:41     ` KAMEZAWA Hiroyuki
2008-03-08 11:41     ` Andi Kleen
2008-03-11 15:34   ` Jonathan Corbet
2008-03-11 15:54     ` Andi Kleen
2008-03-07  9:07 ` Andi Kleen [this message]
2008-03-07  9:07 ` [PATCH] [8/13] Enable the mask allocator for x86 Andi Kleen
2008-03-07 18:32   ` Sam Ravnborg
2008-03-07 19:03     ` Andi Kleen
2008-03-07 19:09       ` Sam Ravnborg
2008-03-08  2:37   ` Christoph Lameter
2008-03-08  6:35     ` Yinghai Lu
2008-03-08  7:31       ` Christoph Lameter
2008-03-08 11:54     ` Andi Kleen
2008-03-10 17:13       ` Christoph Lameter
2008-03-07  9:07 ` [PATCH] [9/13] Remove set_dma_reserve Andi Kleen
2008-03-07  9:07 ` [PATCH] [10/13] Switch the 32bit dma_alloc_coherent functions over to use the maskable allocator Andi Kleen
2008-03-07  9:07 ` [PATCH] [11/13] Switch x86-64 dma_alloc_coherent over to " Andi Kleen
2008-03-07  9:07 ` [PATCH] [12/13] Add vmstat statistics for new swiotlb code Andi Kleen
2008-03-08  2:38   ` Christoph Lameter
2008-03-07  9:07 ` [PATCH] [13/13] Convert x86-64 swiotlb to use the mask allocator directly Andi Kleen
2008-03-07 15:18 ` [PATCH] [0/13] General DMA zone rework Rene Herman
2008-03-07 15:22   ` Rene Herman
2008-03-07 15:31     ` Andi Kleen
2008-03-07 15:34   ` Andi Kleen
2008-03-07 20:51 ` Luiz Fernando N. Capitulino
2008-03-08  0:46   ` Andi Kleen
2008-03-10 18:03     ` Luiz Fernando N. Capitulino
2008-03-10 18:08       ` Andi Kleen
2008-03-11 17:26         ` Luiz Fernando N. Capitulino
2008-03-11 17:35           ` Andi Kleen
2008-03-11 18:00             ` Luiz Fernando N. Capitulino
2008-03-11 18:49               ` Andi Kleen
2008-03-11 19:36                 ` Luiz Fernando N. Capitulino
2008-03-08  2:42 ` Christoph Lameter
2008-03-08 11:57   ` Andi Kleen
2008-03-10 17:14     ` Christoph Lameter

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=20080307090717.A146E1B419D@basil.firstfloor.org \
    --to=andi@firstfloor.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.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