vmalloc.c: fix flushing in vmap_page_range()
The flush_cache_vmap in vmap_page_range() is called with the end of the range twice. The following patch fixes this for me. Signed-off-by: Adam Lackorzynski <adam@os.inf.tu-dresden.de> Cc: Nick Piggin <nickpiggin@yahoo.com.au> Cc: <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
7b574b7b01
commit
2e4e27c7d0
1 changed files with 3 additions and 2 deletions
|
@ -151,11 +151,12 @@ static int vmap_pud_range(pgd_t *pgd, unsigned long addr,
|
||||||
*
|
*
|
||||||
* Ie. pte at addr+N*PAGE_SIZE shall point to pfn corresponding to pages[N]
|
* Ie. pte at addr+N*PAGE_SIZE shall point to pfn corresponding to pages[N]
|
||||||
*/
|
*/
|
||||||
static int vmap_page_range(unsigned long addr, unsigned long end,
|
static int vmap_page_range(unsigned long start, unsigned long end,
|
||||||
pgprot_t prot, struct page **pages)
|
pgprot_t prot, struct page **pages)
|
||||||
{
|
{
|
||||||
pgd_t *pgd;
|
pgd_t *pgd;
|
||||||
unsigned long next;
|
unsigned long next;
|
||||||
|
unsigned long addr = start;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
int nr = 0;
|
int nr = 0;
|
||||||
|
|
||||||
|
@ -167,7 +168,7 @@ static int vmap_page_range(unsigned long addr, unsigned long end,
|
||||||
if (err)
|
if (err)
|
||||||
break;
|
break;
|
||||||
} while (pgd++, addr = next, addr != end);
|
} while (pgd++, addr = next, addr != end);
|
||||||
flush_cache_vmap(addr, end);
|
flush_cache_vmap(start, end);
|
||||||
|
|
||||||
if (unlikely(err))
|
if (unlikely(err))
|
||||||
return err;
|
return err;
|
||||||
|
|
Loading…
Reference in a new issue