Module Name:    src
Committed By:   matt
Date:           Sun Mar  9 23:09:32 UTC 2014

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

Log Message:
Make sure to clear PSL_SE before going to usermode on BOOKE
Revert back to testing PSL_SE in the trapframe and not mdlwp md_flags


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 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/userret.h
diff -u src/sys/arch/powerpc/include/userret.h:1.25 src/sys/arch/powerpc/include/userret.h:1.26
--- src/sys/arch/powerpc/include/userret.h:1.25	Sun Mar  9 22:31:25 2014
+++ src/sys/arch/powerpc/include/userret.h	Sun Mar  9 23:09:32 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: userret.h,v 1.25 2014/03/09 22:31:25 matt Exp $	*/
+/*	$NetBSD: userret.h,v 1.26 2014/03/09 23:09:32 matt Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -75,11 +75,11 @@ userret(struct lwp *l, struct trapframe 
 #ifdef PPC_BOOKE
 	/*
 	 * BookE doesn't have PSL_SE but it does have a debug instruction
-	 * completion exception but it needs PSL_DE to fire.  Since we don't
-	 * want it to happen in the kernel, we must disable PSL_DE and let
-	 * it get restored by rfi/rfci.
+	 * completion exception but it needs PSL_DE to fire.  Instead we
+	 * use IAC1/IAC2 to match the next PC.
 	 */
-	if (__predict_false(l->l_md.md_flags & PSL_SE)) {
+	if (__predict_false(tf->tf_ssr1 & PSL_SE)) {
+		tf->tf_ssr1 &= ~PSL_SE;
 		extern void booke_sstep(struct trapframe *); /* ugly */
 		booke_sstep(tf);
 	}

Reply via email to