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 | } |
