Module Name:    src
Committed By:   skrll
Date:           Fri Dec 23 16:35:01 UTC 2011

Modified Files:
        src/sys/arch/hppa/hppa: pmap.c
        src/sys/arch/hppa/include: pmap.h

Log Message:
Define PMAP_NEED_PROCWR and provide pmap_procwr so that the i-cache is
synchronised with the d-cache appropriately.


To generate a diff of this commit:
cvs rdiff -u -r1.83 -r1.84 src/sys/arch/hppa/hppa/pmap.c
cvs rdiff -u -r1.32 -r1.33 src/sys/arch/hppa/include/pmap.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/hppa/hppa/pmap.c
diff -u src/sys/arch/hppa/hppa/pmap.c:1.83 src/sys/arch/hppa/hppa/pmap.c:1.84
--- src/sys/arch/hppa/hppa/pmap.c:1.83	Fri Dec 16 12:45:04 2011
+++ src/sys/arch/hppa/hppa/pmap.c	Fri Dec 23 16:35:00 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.83 2011/12/16 12:45:04 skrll Exp $	*/
+/*	$NetBSD: pmap.c,v 1.84 2011/12/23 16:35:00 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.83 2011/12/16 12:45:04 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.84 2011/12/23 16:35:00 skrll Exp $");
 
 #include "opt_cputype.h"
 
@@ -1587,6 +1587,18 @@ pmap_activate(struct lwp *l)
 		mtctl(pmap->pm_pid, CR_PIDR2);
 }
 
+void
+pmap_procwr(struct proc *p, vaddr_t va, size_t len)
+{
+	pmap_t pmap = p->p_vmspace->vm_map.pmap;
+
+	fdcache(pmap->pm_space, va, len);
+	sync_caches();
+	ficache(pmap->pm_space, va, len);
+	sync_caches();
+
+}
+
 static inline void
 pmap_flush_page(struct vm_page *pg, bool purge)
 {

Index: src/sys/arch/hppa/include/pmap.h
diff -u src/sys/arch/hppa/include/pmap.h:1.32 src/sys/arch/hppa/include/pmap.h:1.33
--- src/sys/arch/hppa/include/pmap.h:1.32	Fri Dec 16 13:38:44 2011
+++ src/sys/arch/hppa/include/pmap.h	Fri Dec 23 16:35:00 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.h,v 1.32 2011/12/16 13:38:44 skrll Exp $	*/
+/*	$NetBSD: pmap.h,v 1.33 2011/12/23 16:35:00 skrll Exp $	*/
 
 /*	$OpenBSD: pmap.h,v 1.35 2007/12/14 18:32:23 deraadt Exp $	*/
 
@@ -48,6 +48,8 @@
 
 #ifdef	_KERNEL
 
+#define PMAP_NEED_PROCWR
+
 struct pmap {
 	struct uvm_object pm_obj;	/* object (lck by object lock) */
 #define	pm_lock	pm_obj.vmobjlock
@@ -148,6 +150,8 @@ void pmap_write_protect(struct pmap *, v
 void pmap_remove(struct pmap *pmap, vaddr_t sva, vaddr_t eva);
 void pmap_page_remove(struct vm_page *pg);
 
+void pmap_procwr(struct proc *, vaddr_t, size_t);
+
 static inline void
 pmap_deactivate(struct lwp *l)
 {

Reply via email to