ARM: Pass VMA to copy_user_highpage() implementations

Our copy_user_highpage() implementations may require cache maintainence.
Ensure that implementations have all necessary details to perform this
maintainence.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
Russell King 2009-10-05 15:17:45 +01:00
parent 8a0382f6fc
commit f00a75c094
9 changed files with 13 additions and 12 deletions

View file

@ -117,11 +117,12 @@
#endif #endif
struct page; struct page;
struct vm_area_struct;
struct cpu_user_fns { struct cpu_user_fns {
void (*cpu_clear_user_highpage)(struct page *page, unsigned long vaddr); void (*cpu_clear_user_highpage)(struct page *page, unsigned long vaddr);
void (*cpu_copy_user_highpage)(struct page *to, struct page *from, void (*cpu_copy_user_highpage)(struct page *to, struct page *from,
unsigned long vaddr); unsigned long vaddr, struct vm_area_struct *vma);
}; };
#ifdef MULTI_USER #ifdef MULTI_USER
@ -137,7 +138,7 @@ extern struct cpu_user_fns cpu_user;
extern void __cpu_clear_user_highpage(struct page *page, unsigned long vaddr); extern void __cpu_clear_user_highpage(struct page *page, unsigned long vaddr);
extern void __cpu_copy_user_highpage(struct page *to, struct page *from, extern void __cpu_copy_user_highpage(struct page *to, struct page *from,
unsigned long vaddr); unsigned long vaddr, struct vm_area_struct *vma);
#endif #endif
#define clear_user_highpage(page,vaddr) \ #define clear_user_highpage(page,vaddr) \
@ -145,7 +146,7 @@ extern void __cpu_copy_user_highpage(struct page *to, struct page *from,
#define __HAVE_ARCH_COPY_USER_HIGHPAGE #define __HAVE_ARCH_COPY_USER_HIGHPAGE
#define copy_user_highpage(to,from,vaddr,vma) \ #define copy_user_highpage(to,from,vaddr,vma) \
__cpu_copy_user_highpage(to, from, vaddr) __cpu_copy_user_highpage(to, from, vaddr, vma)
#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE)
extern void copy_page(void *to, const void *from); extern void copy_page(void *to, const void *from);

View file

@ -68,7 +68,7 @@ feroceon_copy_user_page(void *kto, const void *kfrom)
} }
void feroceon_copy_user_highpage(struct page *to, struct page *from, void feroceon_copy_user_highpage(struct page *to, struct page *from,
unsigned long vaddr) unsigned long vaddr, struct vm_area_struct *vma)
{ {
void *kto, *kfrom; void *kto, *kfrom;

View file

@ -38,7 +38,7 @@ v3_copy_user_page(void *kto, const void *kfrom)
} }
void v3_copy_user_highpage(struct page *to, struct page *from, void v3_copy_user_highpage(struct page *to, struct page *from,
unsigned long vaddr) unsigned long vaddr, struct vm_area_struct *vma)
{ {
void *kto, *kfrom; void *kto, *kfrom;

View file

@ -69,7 +69,7 @@ mc_copy_user_page(void *from, void *to)
} }
void v4_mc_copy_user_highpage(struct page *to, struct page *from, void v4_mc_copy_user_highpage(struct page *to, struct page *from,
unsigned long vaddr) unsigned long vaddr, struct vm_area_struct *vma)
{ {
void *kto = kmap_atomic(to, KM_USER1); void *kto = kmap_atomic(to, KM_USER1);

View file

@ -48,7 +48,7 @@ v4wb_copy_user_page(void *kto, const void *kfrom)
} }
void v4wb_copy_user_highpage(struct page *to, struct page *from, void v4wb_copy_user_highpage(struct page *to, struct page *from,
unsigned long vaddr) unsigned long vaddr, struct vm_area_struct *vma)
{ {
void *kto, *kfrom; void *kto, *kfrom;

View file

@ -44,7 +44,7 @@ v4wt_copy_user_page(void *kto, const void *kfrom)
} }
void v4wt_copy_user_highpage(struct page *to, struct page *from, void v4wt_copy_user_highpage(struct page *to, struct page *from,
unsigned long vaddr) unsigned long vaddr, struct vm_area_struct *vma)
{ {
void *kto, *kfrom; void *kto, *kfrom;

View file

@ -34,7 +34,7 @@ static DEFINE_SPINLOCK(v6_lock);
* attack the kernel's existing mapping of these pages. * attack the kernel's existing mapping of these pages.
*/ */
static void v6_copy_user_highpage_nonaliasing(struct page *to, static void v6_copy_user_highpage_nonaliasing(struct page *to,
struct page *from, unsigned long vaddr) struct page *from, unsigned long vaddr, struct vm_area_struct *vma)
{ {
void *kto, *kfrom; void *kto, *kfrom;
@ -73,7 +73,7 @@ static void discard_old_kernel_data(void *kto)
* Copy the page, taking account of the cache colour. * Copy the page, taking account of the cache colour.
*/ */
static void v6_copy_user_highpage_aliasing(struct page *to, static void v6_copy_user_highpage_aliasing(struct page *to,
struct page *from, unsigned long vaddr) struct page *from, unsigned long vaddr, struct vm_area_struct *vma)
{ {
unsigned int offset = CACHE_COLOUR(vaddr); unsigned int offset = CACHE_COLOUR(vaddr);
unsigned long kfrom, kto; unsigned long kfrom, kto;

View file

@ -71,7 +71,7 @@ xsc3_mc_copy_user_page(void *kto, const void *kfrom)
} }
void xsc3_mc_copy_user_highpage(struct page *to, struct page *from, void xsc3_mc_copy_user_highpage(struct page *to, struct page *from,
unsigned long vaddr) unsigned long vaddr, struct vm_area_struct *vma)
{ {
void *kto, *kfrom; void *kto, *kfrom;

View file

@ -91,7 +91,7 @@ mc_copy_user_page(void *from, void *to)
} }
void xscale_mc_copy_user_highpage(struct page *to, struct page *from, void xscale_mc_copy_user_highpage(struct page *to, struct page *from,
unsigned long vaddr) unsigned long vaddr, struct vm_area_struct *vma)
{ {
void *kto = kmap_atomic(to, KM_USER1); void *kto = kmap_atomic(to, KM_USER1);