diff options
-rw-r--r-- | include/linux/mm.h | 9 | ||||
-rw-r--r-- | mm/memory.c | 7 |
2 files changed, 12 insertions, 4 deletions
diff --git a/include/linux/mm.h b/include/linux/mm.h index ffee2f743418..2be8d9b5e46f 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -145,6 +145,15 @@ extern pgprot_t protection_map[16]; | |||
145 | #define FAULT_FLAG_WRITE 0x01 /* Fault was a write access */ | 145 | #define FAULT_FLAG_WRITE 0x01 /* Fault was a write access */ |
146 | #define FAULT_FLAG_NONLINEAR 0x02 /* Fault was via a nonlinear mapping */ | 146 | #define FAULT_FLAG_NONLINEAR 0x02 /* Fault was via a nonlinear mapping */ |
147 | 147 | ||
148 | static inline int is_linear_pfn_mapping(struct vm_area_struct *vma) | ||
149 | { | ||
150 | return ((vma->vm_flags & VM_PFNMAP) && vma->vm_pgoff); | ||
151 | } | ||
152 | |||
153 | static inline int is_pfn_mapping(struct vm_area_struct *vma) | ||
154 | { | ||
155 | return (vma->vm_flags & VM_PFNMAP); | ||
156 | } | ||
148 | 157 | ||
149 | /* | 158 | /* |
150 | * vm_fault is filled by the the pagefault handler and passed to the vma's | 159 | * vm_fault is filled by the the pagefault handler and passed to the vma's |
diff --git a/mm/memory.c b/mm/memory.c index 164951c47305..cef95c8c77fa 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -1575,11 +1575,10 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr, | |||
1575 | * behaviour that some programs depend on. We mark the "original" | 1575 | * behaviour that some programs depend on. We mark the "original" |
1576 | * un-COW'ed pages by matching them up with "vma->vm_pgoff". | 1576 | * un-COW'ed pages by matching them up with "vma->vm_pgoff". |
1577 | */ | 1577 | */ |
1578 | if (is_cow_mapping(vma->vm_flags)) { | 1578 | if (addr == vma->vm_start && end == vma->vm_end) |
1579 | if (addr != vma->vm_start || end != vma->vm_end) | ||
1580 | return -EINVAL; | ||
1581 | vma->vm_pgoff = pfn; | 1579 | vma->vm_pgoff = pfn; |
1582 | } | 1580 | else if (is_cow_mapping(vma->vm_flags)) |
1581 | return -EINVAL; | ||
1583 | 1582 | ||
1584 | vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP; | 1583 | vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP; |
1585 | 1584 | ||