aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/proc_powerpc.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/proc_powerpc.c')
-rw-r--r--arch/powerpc/kernel/proc_powerpc.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/arch/powerpc/kernel/proc_powerpc.c b/arch/powerpc/kernel/proc_powerpc.c
index f19d0bdc3241..41d8ee9c82f1 100644
--- a/arch/powerpc/kernel/proc_powerpc.c
+++ b/arch/powerpc/kernel/proc_powerpc.c
@@ -32,8 +32,6 @@
32static loff_t page_map_seek( struct file *file, loff_t off, int whence) 32static loff_t page_map_seek( struct file *file, loff_t off, int whence)
33{ 33{
34 loff_t new; 34 loff_t new;
35 struct proc_dir_entry *dp = PDE(file_inode(file));
36
37 switch(whence) { 35 switch(whence) {
38 case 0: 36 case 0:
39 new = off; 37 new = off;
@@ -42,12 +40,12 @@ static loff_t page_map_seek( struct file *file, loff_t off, int whence)
42 new = file->f_pos + off; 40 new = file->f_pos + off;
43 break; 41 break;
44 case 2: 42 case 2:
45 new = dp->size + off; 43 new = PAGE_SIZE + off;
46 break; 44 break;
47 default: 45 default:
48 return -EINVAL; 46 return -EINVAL;
49 } 47 }
50 if ( new < 0 || new > dp->size ) 48 if ( new < 0 || new > PAGE_SIZE )
51 return -EINVAL; 49 return -EINVAL;
52 return (file->f_pos = new); 50 return (file->f_pos = new);
53} 51}
@@ -55,19 +53,18 @@ static loff_t page_map_seek( struct file *file, loff_t off, int whence)
55static ssize_t page_map_read( struct file *file, char __user *buf, size_t nbytes, 53static ssize_t page_map_read( struct file *file, char __user *buf, size_t nbytes,
56 loff_t *ppos) 54 loff_t *ppos)
57{ 55{
58 struct proc_dir_entry *dp = PDE(file_inode(file)); 56 return simple_read_from_buffer(buf, nbytes, ppos,
59 return simple_read_from_buffer(buf, nbytes, ppos, dp->data, dp->size); 57 PDE_DATA(file_inode(file)), PAGE_SIZE);
60} 58}
61 59
62static int page_map_mmap( struct file *file, struct vm_area_struct *vma ) 60static int page_map_mmap( struct file *file, struct vm_area_struct *vma )
63{ 61{
64 struct proc_dir_entry *dp = PDE(file_inode(file)); 62 if ((vma->vm_end - vma->vm_start) > PAGE_SIZE)
65
66 if ((vma->vm_end - vma->vm_start) > dp->size)
67 return -EINVAL; 63 return -EINVAL;
68 64
69 remap_pfn_range(vma, vma->vm_start, __pa(dp->data) >> PAGE_SHIFT, 65 remap_pfn_range(vma, vma->vm_start,
70 dp->size, vma->vm_page_prot); 66 __pa(PDE_DATA(file_inode(file))) >> PAGE_SHIFT,
67 PAGE_SIZE, vma->vm_page_prot);
71 return 0; 68 return 0;
72} 69}
73 70