Browse Source

[S390] pm: ignore time spend in suspended state

The time a system has been suspended should not show up in any
of the cputime accounting fields. The time of inactivity is definitly
not any form of real cputime nor is it idle time.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Martin Schwidefsky 16 years ago
parent
commit
623c08e4cb
1 changed files with 17 additions and 4 deletions
  1. 17 4
      arch/s390/kernel/swsusp_asm64.S

+ 17 - 4
arch/s390/kernel/swsusp_asm64.S

@@ -69,8 +69,21 @@ swsusp_arch_suspend:
 	stmg	%r0,%r15,0x280(%r1)		/* store general registers */
 	stmg	%r0,%r15,0x280(%r1)		/* store general registers */
 
 
 	stpt	0x328(%r1)			/* store timer */
 	stpt	0x328(%r1)			/* store timer */
+	stck	__SF_EMPTY(%r15)		/* store clock */
 	stckc	0x330(%r1)			/* store clock comparator */
 	stckc	0x330(%r1)			/* store clock comparator */
 
 
+	/* Update cputime accounting before going to sleep */
+	lg	%r0,__LC_LAST_UPDATE_TIMER
+	slg	%r0,0x328(%r1)
+	alg	%r0,__LC_SYSTEM_TIMER
+	stg	%r0,__LC_SYSTEM_TIMER
+	mvc	__LC_LAST_UPDATE_TIMER(8),0x328(%r1)
+	lg	%r0,__LC_LAST_UPDATE_CLOCK
+	slg	%r0,__SF_EMPTY(%r15)
+	alg	%r0,__LC_STEAL_TIMER
+	stg	%r0,__LC_STEAL_TIMER
+	mvc	__LC_LAST_UPDATE_CLOCK(8),__SF_EMPTY(%r15)
+
 	/* Activate DAT */
 	/* Activate DAT */
 	stosm	__SF_EMPTY(%r15),0x04
 	stosm	__SF_EMPTY(%r15),0x04
 
 
@@ -200,8 +213,11 @@ restart_suspend:
 
 
 restore_registers:
 restore_registers:
 	/* Restore registers */
 	/* Restore registers */
-	lghi	%r13,0x1000		/* %r1 = pointer to save arae */
+	lghi	%r13,0x1000		/* %r1 = pointer to save area */
 
 
+	/* Ignore time spent in suspended state. */
+	llgf	%r1,0x318(%r13)
+	stck	__LC_LAST_UPDATE_CLOCK(%r1)
 	spt	0x328(%r13)		/* reprogram timer */
 	spt	0x328(%r13)		/* reprogram timer */
 	//sckc	0x330(%r13)		/* set clock comparator */
 	//sckc	0x330(%r13)		/* set clock comparator */
 
 
@@ -229,9 +245,6 @@ restore_registers:
 	/* Load old stack */
 	/* Load old stack */
 	lg	%r15,0x2f8(%r13)
 	lg	%r15,0x2f8(%r13)
 
 
-	/* Pointer to save area */
-	lghi	%r13,0x1000
-
 	/* Restore prefix register */
 	/* Restore prefix register */
 	spx	0x318(%r13)
 	spx	0x318(%r13)