Module Name:    src
Committed By:   matt
Date:           Sat May 26 00:31:07 UTC 2012

Modified Files:
        src/sys/arch/powerpc/include: types.h userret.h

Log Message:
Add __HAVE_RAS support.  Do it in userret.


To generate a diff of this commit:
cvs rdiff -u -r1.46 -r1.47 src/sys/arch/powerpc/include/types.h
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/powerpc/include/userret.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/powerpc/include/types.h
diff -u src/sys/arch/powerpc/include/types.h:1.46 src/sys/arch/powerpc/include/types.h:1.47
--- src/sys/arch/powerpc/include/types.h:1.46	Sun Jul 17 23:23:54 2011
+++ src/sys/arch/powerpc/include/types.h	Sat May 26 00:31:07 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: types.h,v 1.46 2011/07/17 23:23:54 dyoung Exp $	*/
+/*	$NetBSD: types.h,v 1.47 2012/05/26 00:31:07 matt Exp $	*/
 
 /*-
  * Copyright (C) 1995 Wolfgang Solfrank.
@@ -95,5 +95,8 @@ typedef volatile __uint32_t __cpuset_t;
 
 #define	__HAVE_MM_MD_DIRECT_MAPPED_PHYS
 #define	__HAVE_MM_MD_KERNACC
+#if defined(_KERNEL)
+#define	__HAVE_RAS
+#endif
 
 #endif	/* _MACHTYPES_H_ */

Index: src/sys/arch/powerpc/include/userret.h
diff -u src/sys/arch/powerpc/include/userret.h:1.23 src/sys/arch/powerpc/include/userret.h:1.24
--- src/sys/arch/powerpc/include/userret.h:1.23	Thu May 17 16:21:45 2012
+++ src/sys/arch/powerpc/include/userret.h	Sat May 26 00:31:07 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: userret.h,v 1.23 2012/05/17 16:21:45 matt Exp $	*/
+/*	$NetBSD: userret.h,v 1.24 2012/05/26 00:31:07 matt Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -35,6 +35,7 @@
 #include "opt_altivec.h"
 
 #include <sys/userret.h>
+#include <sys/ras.h>
 
 #include <powerpc/fpu.h>
 #include <powerpc/psl.h>
@@ -83,4 +84,16 @@ userret(struct lwp *l, struct trapframe 
 		booke_sstep(tf);
 	}
 #endif
+
+#ifdef __HAVE_RAS
+	/*
+	 * Check to see if a RAS was interrupted and restart it if it was.      
+	 */
+	struct proc * const p = l->l_proc;
+	if (__predict_false(p->p_raslist != NULL)) {
+		void * const ras_pc = ras_lookup(p, (void *) tf->tf_srr0);
+		if (ras_pc != (void *) -1)
+			tf->tf_srr0 = (vaddr_t) ras_pc;
+	}
+#endif
 }

Reply via email to