Index: kernel/arch/sparc64/src/proc/sun4u/scheduler.c
===================================================================
--- kernel/arch/sparc64/src/proc/sun4u/scheduler.c	(revision ed7e057b64d471ad72ea909cf21ef60835379064)
+++ kernel/arch/sparc64/src/proc/sun4u/scheduler.c	(revision 29029ac024277f2a6a352b32f8f9c910088a3afb)
@@ -76,4 +76,6 @@
 {
 	if (THREAD->uspace) {
+		asm volatile ("flushw");
+
 		/* sample the state of the userspace window buffer */
 		THREAD->arch.uspace_window_buffer =
Index: kernel/arch/sparc64/src/proc/sun4v/scheduler.c
===================================================================
--- kernel/arch/sparc64/src/proc/sun4v/scheduler.c	(revision ed7e057b64d471ad72ea909cf21ef60835379064)
+++ kernel/arch/sparc64/src/proc/sun4v/scheduler.c	(revision 29029ac024277f2a6a352b32f8f9c910088a3afb)
@@ -68,4 +68,6 @@
 {
 	if (THREAD->uspace) {
+		asm volatile ("flushw");
+
 		/* sample the state of the userspace window buffer */
 		THREAD->arch.uspace_window_buffer =
Index: kernel/generic/src/proc/scheduler.c
===================================================================
--- kernel/generic/src/proc/scheduler.c	(revision ed7e057b64d471ad72ea909cf21ef60835379064)
+++ kernel/generic/src/proc/scheduler.c	(revision 29029ac024277f2a6a352b32f8f9c910088a3afb)
@@ -443,4 +443,10 @@
 	THREAD->kcycles += get_cycle() - THREAD->last_cycle;
 
+	/*
+	 * On Sparc, this saves some extra userspace state that's not
+	 * covered by context_save()/context_restore().
+	 */
+	after_thread_ran_arch();
+
 	if (new_state == Sleeping) {
 		/* Prefer the thread after it's woken up. */
@@ -499,10 +505,4 @@
 
 	if (THREAD) {
-		/*
-		 * On Sparc, this saves some extra userspace state that's not
-		 * covered by context_save()/context_restore().
-		 */
-		after_thread_ran_arch();
-
 		state_t state = THREAD->state;
 		irq_spinlock_unlock(&THREAD->lock, false);
