patch-2.4.22 linux-2.4.22/arch/parisc/kernel/cache.c
Next file: linux-2.4.22/arch/parisc/kernel/ccio-dma.c
Previous file: linux-2.4.22/arch/parisc/defpalo.conf
Back to the patch index
Back to the overall index
- Lines: 91
- Date:
2003-08-25 04:44:40.000000000 -0700
- Orig file:
linux-2.4.21/arch/parisc/kernel/cache.c
- Orig date:
2002-11-28 15:53:10.000000000 -0800
diff -urN linux-2.4.21/arch/parisc/kernel/cache.c linux-2.4.22/arch/parisc/kernel/cache.c
@@ -194,31 +194,69 @@
void disable_sr_hashing(void)
{
- int srhash_type;
+ int srhash_type;
- if (boot_cpu_data.cpu_type == pcxl2)
- return; /* pcxl2 doesn't support space register hashing */
+ switch (boot_cpu_data.cpu_type) {
+ case pcx: /* We shouldn't get this far. setup.c should prevent it. */
+ BUG();
+ return;
+
+ case pcxs:
+ case pcxt:
+ case pcxt_:
+ srhash_type = SRHASH_PCXST;
+ break;
+
+ case pcxl:
+ srhash_type = SRHASH_PCXL;
+ break;
+
+ case pcxl2: /* pcxl2 doesn't support space register hashing */
+ return;
+
+ default: /* Currently all PA2.0 machines use the same ins. sequence */
+ srhash_type = SRHASH_PA20;
+ break;
+ }
- switch (boot_cpu_data.cpu_type) {
-
- case pcx:
- BUG(); /* We shouldn't get here. code in setup.c should prevent it */
- return;
+ disable_sr_hashing_asm(srhash_type);
+}
- case pcxs:
- case pcxt:
- case pcxt_:
- srhash_type = SRHASH_PCXST;
- break;
+void __flush_dcache_page(struct page *page)
+{
+ struct mm_struct *mm = current->active_mm;
+ struct vm_area_struct *mpnt;
- case pcxl:
- srhash_type = SRHASH_PCXL;
- break;
+ flush_kernel_dcache_page(page_address(page));
- default: /* Currently all PA2.0 machines use the same ins. sequence */
- srhash_type = SRHASH_PA20;
- break;
- }
+ if (!page->mapping)
+ return;
- disable_sr_hashing_asm(srhash_type);
+ for (mpnt = page->mapping->i_mmap_shared;
+ mpnt != NULL;
+ mpnt = mpnt->vm_next_share)
+ {
+ unsigned long off;
+
+ /*
+ * If this VMA is not in our MM, we can ignore it.
+ */
+ if (mpnt->vm_mm != mm)
+ continue;
+
+ if (page->index < mpnt->vm_pgoff)
+ continue;
+
+ off = page->index - mpnt->vm_pgoff;
+ if (off >= (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT)
+ continue;
+
+ flush_cache_page(mpnt, mpnt->vm_start + (off << PAGE_SHIFT));
+
+ /* All user shared mappings should be equivalently mapped,
+ * so once we've flushed one we should be ok
+ */
+ break;
+ }
}
+
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)