projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
thp: consolidate code between handle_mm_fault() and do_huge_pmd_anonymous_page()
[firefly-linux-kernel-4.4.55.git]
/
mm
/
vmalloc.c
diff --git
a/mm/vmalloc.c
b/mm/vmalloc.c
index 13a54953a273a715f1f4466ff5eeb1ba119f179c..107454312d5ef859ec8dc55f3ba13831cc5cbc65 100644
(file)
--- a/
mm/vmalloc.c
+++ b/
mm/vmalloc.c
@@
-752,7
+752,6
@@
struct vmap_block_queue {
struct vmap_block {
spinlock_t lock;
struct vmap_area *va;
struct vmap_block {
spinlock_t lock;
struct vmap_area *va;
- struct vmap_block_queue *vbq;
unsigned long free, dirty;
DECLARE_BITMAP(dirty_map, VMAP_BBMAP_BITS);
struct list_head free_list;
unsigned long free, dirty;
DECLARE_BITMAP(dirty_map, VMAP_BBMAP_BITS);
struct list_head free_list;
@@
-830,7
+829,6
@@
static struct vmap_block *new_vmap_block(gfp_t gfp_mask)
radix_tree_preload_end();
vbq = &get_cpu_var(vmap_block_queue);
radix_tree_preload_end();
vbq = &get_cpu_var(vmap_block_queue);
- vb->vbq = vbq;
spin_lock(&vbq->lock);
list_add_rcu(&vb->free_list, &vbq->free);
spin_unlock(&vbq->lock);
spin_lock(&vbq->lock);
list_add_rcu(&vb->free_list, &vbq->free);
spin_unlock(&vbq->lock);
@@
-1018,15
+1016,16
@@
void vm_unmap_aliases(void)
rcu_read_lock();
list_for_each_entry_rcu(vb, &vbq->free, free_list) {
rcu_read_lock();
list_for_each_entry_rcu(vb, &vbq->free, free_list) {
- int i;
+ int i
, j
;
spin_lock(&vb->lock);
i = find_first_bit(vb->dirty_map, VMAP_BBMAP_BITS);
spin_lock(&vb->lock);
i = find_first_bit(vb->dirty_map, VMAP_BBMAP_BITS);
-
while
(i < VMAP_BBMAP_BITS) {
+
if
(i < VMAP_BBMAP_BITS) {
unsigned long s, e;
unsigned long s, e;
- int j;
- j = find_next_zero_bit(vb->dirty_map,
- VMAP_BBMAP_BITS, i);
+
+ j = find_last_bit(vb->dirty_map,
+ VMAP_BBMAP_BITS);
+ j = j + 1; /* need exclusive index */
s = vb->va->va_start + (i << PAGE_SHIFT);
e = vb->va->va_start + (j << PAGE_SHIFT);
s = vb->va->va_start + (i << PAGE_SHIFT);
e = vb->va->va_start + (j << PAGE_SHIFT);
@@
-1036,10
+1035,6
@@
void vm_unmap_aliases(void)
start = s;
if (e > end)
end = e;
start = s;
if (e > end)
end = e;
-
- i = j;
- i = find_next_bit(vb->dirty_map,
- VMAP_BBMAP_BITS, i);
}
spin_unlock(&vb->lock);
}
}
spin_unlock(&vb->lock);
}
@@
-1263,7
+1258,7
@@
void unmap_kernel_range(unsigned long addr, unsigned long size)
int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page ***pages)
{
unsigned long addr = (unsigned long)area->addr;
int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page ***pages)
{
unsigned long addr = (unsigned long)area->addr;
- unsigned long end = addr +
area->size - PAGE_SIZE
;
+ unsigned long end = addr +
get_vm_area_size(area)
;
int err;
err = vmap_page_range(addr, end, prot, *pages);
int err;
err = vmap_page_range(addr, end, prot, *pages);
@@
-1558,7
+1553,7
@@
static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
unsigned int nr_pages, array_size, i;
gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO;
unsigned int nr_pages, array_size, i;
gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO;
- nr_pages =
(area->size - PAGE_SIZE
) >> PAGE_SHIFT;
+ nr_pages =
get_vm_area_size(area
) >> PAGE_SHIFT;
array_size = (nr_pages * sizeof(struct page *));
area->nr_pages = nr_pages;
array_size = (nr_pages * sizeof(struct page *));
area->nr_pages = nr_pages;
@@
-1990,7
+1985,7
@@
long vread(char *buf, char *addr, unsigned long count)
vm = va->vm;
vaddr = (char *) vm->addr;
vm = va->vm;
vaddr = (char *) vm->addr;
- if (addr >= vaddr +
vm->size - PAGE_SIZE
)
+ if (addr >= vaddr +
get_vm_area_size(vm)
)
continue;
while (addr < vaddr) {
if (count == 0)
continue;
while (addr < vaddr) {
if (count == 0)
@@
-2000,7
+1995,7
@@
long vread(char *buf, char *addr, unsigned long count)
addr++;
count--;
}
addr++;
count--;
}
- n = vaddr +
vm->size - PAGE_SIZE
- addr;
+ n = vaddr +
get_vm_area_size(vm)
- addr;
if (n > count)
n = count;
if (!(vm->flags & VM_IOREMAP))
if (n > count)
n = count;
if (!(vm->flags & VM_IOREMAP))
@@
-2072,7
+2067,7
@@
long vwrite(char *buf, char *addr, unsigned long count)
vm = va->vm;
vaddr = (char *) vm->addr;
vm = va->vm;
vaddr = (char *) vm->addr;
- if (addr >= vaddr +
vm->size - PAGE_SIZE
)
+ if (addr >= vaddr +
get_vm_area_size(vm)
)
continue;
while (addr < vaddr) {
if (count == 0)
continue;
while (addr < vaddr) {
if (count == 0)
@@
-2081,7
+2076,7
@@
long vwrite(char *buf, char *addr, unsigned long count)
addr++;
count--;
}
addr++;
count--;
}
- n = vaddr +
vm->size - PAGE_SIZE
- addr;
+ n = vaddr +
get_vm_area_size(vm)
- addr;
if (n > count)
n = count;
if (!(vm->flags & VM_IOREMAP)) {
if (n > count)
n = count;
if (!(vm->flags & VM_IOREMAP)) {