diff options
Diffstat (limited to 'arch/parisc')
-rw-r--r-- | arch/parisc/kernel/cache.c | 24 | ||||
-rw-r--r-- | arch/parisc/kernel/pci-dma.c | 2 | ||||
-rw-r--r-- | arch/parisc/mm/init.c | 3 | ||||
-rw-r--r-- | arch/parisc/mm/ioremap.c | 6 |
4 files changed, 15 insertions, 20 deletions
diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c index e15f09eaed12..a065349aee37 100644 --- a/arch/parisc/kernel/cache.c +++ b/arch/parisc/kernel/cache.c | |||
@@ -270,7 +270,6 @@ void flush_dcache_page(struct page *page) | |||
270 | unsigned long offset; | 270 | unsigned long offset; |
271 | unsigned long addr; | 271 | unsigned long addr; |
272 | pgoff_t pgoff; | 272 | pgoff_t pgoff; |
273 | pte_t *pte; | ||
274 | unsigned long pfn = page_to_pfn(page); | 273 | unsigned long pfn = page_to_pfn(page); |
275 | 274 | ||
276 | 275 | ||
@@ -301,21 +300,16 @@ void flush_dcache_page(struct page *page) | |||
301 | * taking a page fault if the pte doesn't exist. | 300 | * taking a page fault if the pte doesn't exist. |
302 | * This is just for speed. If the page translation | 301 | * This is just for speed. If the page translation |
303 | * isn't there, there's no point exciting the | 302 | * isn't there, there's no point exciting the |
304 | * nadtlb handler into a nullification frenzy */ | 303 | * nadtlb handler into a nullification frenzy. |
305 | 304 | * | |
306 | 305 | * Make sure we really have this page: the private | |
307 | if(!(pte = translation_exists(mpnt, addr))) | ||
308 | continue; | ||
309 | |||
310 | /* make sure we really have this page: the private | ||
311 | * mappings may cover this area but have COW'd this | 306 | * mappings may cover this area but have COW'd this |
312 | * particular page */ | 307 | * particular page. |
313 | if(pte_pfn(*pte) != pfn) | 308 | */ |
314 | continue; | 309 | if (translation_exists(mpnt, addr, pfn)) { |
315 | 310 | __flush_cache_page(mpnt, addr); | |
316 | __flush_cache_page(mpnt, addr); | 311 | break; |
317 | 312 | } | |
318 | break; | ||
319 | } | 313 | } |
320 | flush_dcache_mmap_unlock(mapping); | 314 | flush_dcache_mmap_unlock(mapping); |
321 | } | 315 | } |
diff --git a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c index ae6213d71670..f94a02ef3d95 100644 --- a/arch/parisc/kernel/pci-dma.c +++ b/arch/parisc/kernel/pci-dma.c | |||
@@ -114,7 +114,7 @@ static inline int map_pmd_uncached(pmd_t * pmd, unsigned long vaddr, | |||
114 | if (end > PGDIR_SIZE) | 114 | if (end > PGDIR_SIZE) |
115 | end = PGDIR_SIZE; | 115 | end = PGDIR_SIZE; |
116 | do { | 116 | do { |
117 | pte_t * pte = pte_alloc_kernel(&init_mm, pmd, vaddr); | 117 | pte_t * pte = pte_alloc_kernel(pmd, vaddr); |
118 | if (!pte) | 118 | if (!pte) |
119 | return -ENOMEM; | 119 | return -ENOMEM; |
120 | if (map_pte_uncached(pte, orig_vaddr, end - vaddr, paddr_ptr)) | 120 | if (map_pte_uncached(pte, orig_vaddr, end - vaddr, paddr_ptr)) |
diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c index 2886ad70db48..29b998e430e6 100644 --- a/arch/parisc/mm/init.c +++ b/arch/parisc/mm/init.c | |||
@@ -505,7 +505,9 @@ void show_mem(void) | |||
505 | 505 | ||
506 | for (j = node_start_pfn(i); j < node_end_pfn(i); j++) { | 506 | for (j = node_start_pfn(i); j < node_end_pfn(i); j++) { |
507 | struct page *p; | 507 | struct page *p; |
508 | unsigned long flags; | ||
508 | 509 | ||
510 | pgdat_resize_lock(NODE_DATA(i), &flags); | ||
509 | p = nid_page_nr(i, j) - node_start_pfn(i); | 511 | p = nid_page_nr(i, j) - node_start_pfn(i); |
510 | 512 | ||
511 | total++; | 513 | total++; |
@@ -517,6 +519,7 @@ void show_mem(void) | |||
517 | free++; | 519 | free++; |
518 | else | 520 | else |
519 | shared += page_count(p) - 1; | 521 | shared += page_count(p) - 1; |
522 | pgdat_resize_unlock(NODE_DATA(i), &flags); | ||
520 | } | 523 | } |
521 | } | 524 | } |
522 | #endif | 525 | #endif |
diff --git a/arch/parisc/mm/ioremap.c b/arch/parisc/mm/ioremap.c index f2df502cdae3..5c7a1b3b9326 100644 --- a/arch/parisc/mm/ioremap.c +++ b/arch/parisc/mm/ioremap.c | |||
@@ -52,7 +52,7 @@ static inline int remap_area_pmd(pmd_t * pmd, unsigned long address, unsigned lo | |||
52 | if (address >= end) | 52 | if (address >= end) |
53 | BUG(); | 53 | BUG(); |
54 | do { | 54 | do { |
55 | pte_t * pte = pte_alloc_kernel(NULL, pmd, address); | 55 | pte_t * pte = pte_alloc_kernel(pmd, address); |
56 | if (!pte) | 56 | if (!pte) |
57 | return -ENOMEM; | 57 | return -ENOMEM; |
58 | remap_area_pte(pte, address, end - address, address + phys_addr, flags); | 58 | remap_area_pte(pte, address, end - address, address + phys_addr, flags); |
@@ -75,10 +75,9 @@ static int remap_area_pages(unsigned long address, unsigned long phys_addr, | |||
75 | flush_cache_all(); | 75 | flush_cache_all(); |
76 | if (address >= end) | 76 | if (address >= end) |
77 | BUG(); | 77 | BUG(); |
78 | spin_lock(&init_mm.page_table_lock); | ||
79 | do { | 78 | do { |
80 | pmd_t *pmd; | 79 | pmd_t *pmd; |
81 | pmd = pmd_alloc(dir, address); | 80 | pmd = pmd_alloc(&init_mm, dir, address); |
82 | error = -ENOMEM; | 81 | error = -ENOMEM; |
83 | if (!pmd) | 82 | if (!pmd) |
84 | break; | 83 | break; |
@@ -89,7 +88,6 @@ static int remap_area_pages(unsigned long address, unsigned long phys_addr, | |||
89 | address = (address + PGDIR_SIZE) & PGDIR_MASK; | 88 | address = (address + PGDIR_SIZE) & PGDIR_MASK; |
90 | dir++; | 89 | dir++; |
91 | } while (address && (address < end)); | 90 | } while (address && (address < end)); |
92 | spin_unlock(&init_mm.page_table_lock); | ||
93 | flush_tlb_all(); | 91 | flush_tlb_all(); |
94 | return error; | 92 | return error; |
95 | } | 93 | } |