diff options
Diffstat (limited to 'arch/powerpc/kernel/proc_powerpc.c')
-rw-r--r-- | arch/powerpc/kernel/proc_powerpc.c | 19 |
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 @@ | |||
32 | static loff_t page_map_seek( struct file *file, loff_t off, int whence) | 32 | static 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) | |||
55 | static ssize_t page_map_read( struct file *file, char __user *buf, size_t nbytes, | 53 | static 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 | ||
62 | static int page_map_mmap( struct file *file, struct vm_area_struct *vma ) | 60 | static 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 | ||