Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 119518
b: refs/heads/master
c: b29acbd
h: refs/heads/master
v: v3
  • Loading branch information
Nick Piggin authored and Linus Torvalds committed Dec 2, 2008
1 parent affac69 commit 82cfcf1
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8650e51ac94b5fe93c02e3c8fef02e416f14501c
refs/heads/master: b29acbdcf877009af3f1fc0750bcac314c51e055
20 changes: 16 additions & 4 deletions trunk/mm/vmalloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ static void vunmap_page_range(unsigned long addr, unsigned long end)

BUG_ON(addr >= end);
pgd = pgd_offset_k(addr);
flush_cache_vunmap(addr, end);
do {
next = pgd_addr_end(addr, end);
if (pgd_none_or_clear_bad(pgd))
Expand Down Expand Up @@ -543,16 +542,26 @@ static void purge_vmap_area_lazy(void)
}

/*
* Free and unmap a vmap area
* Free and unmap a vmap area, caller ensuring flush_cache_vunmap had been
* called for the correct range previously.
*/
static void free_unmap_vmap_area(struct vmap_area *va)
static void free_unmap_vmap_area_noflush(struct vmap_area *va)
{
va->flags |= VM_LAZY_FREE;
atomic_add((va->va_end - va->va_start) >> PAGE_SHIFT, &vmap_lazy_nr);
if (unlikely(atomic_read(&vmap_lazy_nr) > lazy_max_pages()))
try_purge_vmap_area_lazy();
}

/*
* Free and unmap a vmap area
*/
static void free_unmap_vmap_area(struct vmap_area *va)
{
flush_cache_vunmap(va->va_start, va->va_end);
free_unmap_vmap_area_noflush(va);
}

static struct vmap_area *find_vmap_area(unsigned long addr)
{
struct vmap_area *va;
Expand Down Expand Up @@ -734,7 +743,7 @@ static void free_vmap_block(struct vmap_block *vb)
spin_unlock(&vmap_block_tree_lock);
BUG_ON(tmp != vb);

free_unmap_vmap_area(vb->va);
free_unmap_vmap_area_noflush(vb->va);
call_rcu(&vb->rcu_head, rcu_free_vb);
}

Expand Down Expand Up @@ -796,6 +805,9 @@ static void vb_free(const void *addr, unsigned long size)

BUG_ON(size & ~PAGE_MASK);
BUG_ON(size > PAGE_SIZE*VMAP_MAX_ALLOC);

flush_cache_vunmap((unsigned long)addr, (unsigned long)addr + size);

order = get_order(size);

offset = (unsigned long)addr & (VMAP_BLOCK_SIZE - 1);
Expand Down

0 comments on commit 82cfcf1

Please sign in to comment.