Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 60509
b: refs/heads/master
c: c19c03f
h: refs/heads/master
i:
  60507: b004c56
v: v3
  • Loading branch information
Benjamin Herrenschmidt authored and Paul Mackerras committed Jun 14, 2007
1 parent 30be5d6 commit 22584d1
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 9 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: 3c8c90ab8810a8ebb38a5f1dde2595b750d5adff
refs/heads/master: c19c03fc749147f565e807fa65f1729066800571
2 changes: 1 addition & 1 deletion trunk/Documentation/cachetlb.txt
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ Here are the routines, one by one:

The first of these two routines is invoked after map_vm_area()
has installed the page table entries. The second is invoked
before unmap_vm_area() deletes the page table entries.
before unmap_kernel_range() deletes the page table entries.

There exists another whole class of cpu cache issues which currently
require a whole different set of interfaces to handle properly.
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/powerpc/mm/imalloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,8 @@ void im_free(void * addr)
for (p = &imlist ; (tmp = *p) ; p = &tmp->next) {
if (tmp->addr == addr) {
*p = tmp->next;
unmap_vm_area(tmp);
unmap_kernel_range((unsigned long)tmp->addr,
tmp->size);
kfree(tmp);
mutex_unlock(&imlist_mutex);
return;
Expand Down
1 change: 0 additions & 1 deletion trunk/arch/powerpc/mm/pgtable_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,6 @@ int __ioremap_explicit(phys_addr_t pa, unsigned long ea,
/*
* Unmap an IO region and remove it from imalloc'd list.
* Access to IO memory should be serialized by driver.
* This code is modeled after vmalloc code - unmap_vm_area()
*
* XXX what about calls before mem_init_done (ie python_countermeasures())
*/
Expand Down
3 changes: 2 additions & 1 deletion trunk/include/linux/vmalloc.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,10 @@ extern struct vm_struct *get_vm_area_node(unsigned long size,
unsigned long flags, int node,
gfp_t gfp_mask);
extern struct vm_struct *remove_vm_area(void *addr);

extern int map_vm_area(struct vm_struct *area, pgprot_t prot,
struct page ***pages);
extern void unmap_vm_area(struct vm_struct *area);
extern void unmap_kernel_range(unsigned long addr, unsigned long size);

/*
* Internals. Dont't use..
Expand Down
13 changes: 9 additions & 4 deletions trunk/mm/vmalloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,12 @@ static inline void vunmap_pud_range(pgd_t *pgd, unsigned long addr,
} while (pud++, addr = next, addr != end);
}

void unmap_vm_area(struct vm_struct *area)
void unmap_kernel_range(unsigned long addr, unsigned long size)
{
pgd_t *pgd;
unsigned long next;
unsigned long addr = (unsigned long) area->addr;
unsigned long end = addr + area->size;
unsigned long start = addr;
unsigned long end = addr + size;

BUG_ON(addr >= end);
pgd = pgd_offset_k(addr);
Expand All @@ -84,7 +84,12 @@ void unmap_vm_area(struct vm_struct *area)
continue;
vunmap_pud_range(pgd, addr, next);
} while (pgd++, addr = next, addr != end);
flush_tlb_kernel_range((unsigned long) area->addr, end);
flush_tlb_kernel_range(start, end);
}

static void unmap_vm_area(struct vm_struct *area)
{
unmap_kernel_range((unsigned long)area->addr, area->size);
}

static int vmap_pte_range(pmd_t *pmd, unsigned long addr,
Expand Down

0 comments on commit 22584d1

Please sign in to comment.