Commit ad76fb6b authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Linus Torvalds

[PATCH] mm: k{,um}map_atomic() vs in_atomic()

Make kmap_atomic/kunmap_atomic denote a pagefault disabled scope.  All non
trivial implementations already do this anyway.
Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: default avatarNick Piggin <npiggin@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent a866374a
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/uaccess.h>
#include <asm/kmap_types.h> #include <asm/kmap_types.h>
/* undef for production */ /* undef for production */
...@@ -70,11 +71,16 @@ static inline void *kmap(struct page *page) ...@@ -70,11 +71,16 @@ static inline void *kmap(struct page *page)
static inline void *kmap_atomic(struct page *page, enum km_type type) static inline void *kmap_atomic(struct page *page, enum km_type type)
{ {
pagefault_disable();
return page_address(page); return page_address(page);
} }
static inline void kunmap_atomic(void *kvaddr, enum km_type type) { } static inline void kunmap_atomic(void *kvaddr, enum km_type type)
#define kmap_atomic_pfn(pfn, idx) page_address(pfn_to_page(pfn)) {
pagefault_enable();
}
#define kmap_atomic_pfn(pfn, idx) kmap_atomic(pfn_to_page(pfn), (idx))
#define kmap_atomic_to_page(ptr) virt_to_page(ptr) #define kmap_atomic_to_page(ptr) virt_to_page(ptr)
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/uaccess.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
...@@ -41,9 +42,10 @@ static inline void *kmap(struct page *page) ...@@ -41,9 +42,10 @@ static inline void *kmap(struct page *page)
#define kunmap(page) do { (void) (page); } while (0) #define kunmap(page) do { (void) (page); } while (0)
#define kmap_atomic(page, idx) page_address(page) #define kmap_atomic(page, idx) \
#define kunmap_atomic(addr, idx) do { } while (0) ({ pagefault_disable(); page_address(page); })
#define kmap_atomic_pfn(pfn, idx) page_address(pfn_to_page(pfn)) #define kunmap_atomic(addr, idx) do { pagefault_enable(); } while (0)
#define kmap_atomic_pfn(pfn, idx) kmap_atomic(pfn_to_page(pfn), (idx))
#define kmap_atomic_to_page(ptr) virt_to_page(ptr) #define kmap_atomic_to_page(ptr) virt_to_page(ptr)
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment