|
|
|
@ -167,9 +167,9 @@ do { \ |
|
|
|
|
#ifndef clear_user_highpage |
|
|
|
|
static inline void clear_user_highpage(struct page *page, unsigned long vaddr) |
|
|
|
|
{ |
|
|
|
|
void *addr = kmap_atomic(page, KM_USER0); |
|
|
|
|
void *addr = kmap_atomic(page); |
|
|
|
|
clear_user_page(addr, vaddr, page); |
|
|
|
|
kunmap_atomic(addr, KM_USER0); |
|
|
|
|
kunmap_atomic(addr); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
@ -220,16 +220,16 @@ alloc_zeroed_user_highpage_movable(struct vm_area_struct *vma, |
|
|
|
|
|
|
|
|
|
static inline void clear_highpage(struct page *page) |
|
|
|
|
{ |
|
|
|
|
void *kaddr = kmap_atomic(page, KM_USER0); |
|
|
|
|
void *kaddr = kmap_atomic(page); |
|
|
|
|
clear_page(kaddr); |
|
|
|
|
kunmap_atomic(kaddr, KM_USER0); |
|
|
|
|
kunmap_atomic(kaddr); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline void zero_user_segments(struct page *page, |
|
|
|
|
unsigned start1, unsigned end1, |
|
|
|
|
unsigned start2, unsigned end2) |
|
|
|
|
{ |
|
|
|
|
void *kaddr = kmap_atomic(page, KM_USER0); |
|
|
|
|
void *kaddr = kmap_atomic(page); |
|
|
|
|
|
|
|
|
|
BUG_ON(end1 > PAGE_SIZE || end2 > PAGE_SIZE); |
|
|
|
|
|
|
|
|
@ -239,7 +239,7 @@ static inline void zero_user_segments(struct page *page, |
|
|
|
|
if (end2 > start2) |
|
|
|
|
memset(kaddr + start2, 0, end2 - start2); |
|
|
|
|
|
|
|
|
|
kunmap_atomic(kaddr, KM_USER0); |
|
|
|
|
kunmap_atomic(kaddr); |
|
|
|
|
flush_dcache_page(page); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -268,11 +268,11 @@ static inline void copy_user_highpage(struct page *to, struct page *from, |
|
|
|
|
{ |
|
|
|
|
char *vfrom, *vto; |
|
|
|
|
|
|
|
|
|
vfrom = kmap_atomic(from, KM_USER0); |
|
|
|
|
vto = kmap_atomic(to, KM_USER1); |
|
|
|
|
vfrom = kmap_atomic(from); |
|
|
|
|
vto = kmap_atomic(to); |
|
|
|
|
copy_user_page(vto, vfrom, vaddr, to); |
|
|
|
|
kunmap_atomic(vto, KM_USER1); |
|
|
|
|
kunmap_atomic(vfrom, KM_USER0); |
|
|
|
|
kunmap_atomic(vto); |
|
|
|
|
kunmap_atomic(vfrom); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
@ -281,11 +281,11 @@ static inline void copy_highpage(struct page *to, struct page *from) |
|
|
|
|
{ |
|
|
|
|
char *vfrom, *vto; |
|
|
|
|
|
|
|
|
|
vfrom = kmap_atomic(from, KM_USER0); |
|
|
|
|
vto = kmap_atomic(to, KM_USER1); |
|
|
|
|
vfrom = kmap_atomic(from); |
|
|
|
|
vto = kmap_atomic(to); |
|
|
|
|
copy_page(vto, vfrom); |
|
|
|
|
kunmap_atomic(vto, KM_USER1); |
|
|
|
|
kunmap_atomic(vfrom, KM_USER0); |
|
|
|
|
kunmap_atomic(vto); |
|
|
|
|
kunmap_atomic(vfrom); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif /* _LINUX_HIGHMEM_H */ |
|
|
|
|