|
@@ -69,8 +69,21 @@ swsusp_arch_suspend:
|
|
|
stmg %r0,%r15,0x280(%r1) /* store general registers */
|
|
|
|
|
|
stpt 0x328(%r1) /* store timer */
|
|
|
+ stck __SF_EMPTY(%r15) /* store clock */
|
|
|
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 */
|
|
|
stosm __SF_EMPTY(%r15),0x04
|
|
|
|
|
@@ -200,8 +213,11 @@ restart_suspend:
|
|
|
|
|
|
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 */
|
|
|
//sckc 0x330(%r13) /* set clock comparator */
|
|
|
|
|
@@ -229,9 +245,6 @@ restore_registers:
|
|
|
/* Load old stack */
|
|
|
lg %r15,0x2f8(%r13)
|
|
|
|
|
|
- /* Pointer to save area */
|
|
|
- lghi %r13,0x1000
|
|
|
-
|
|
|
/* Restore prefix register */
|
|
|
spx 0x318(%r13)
|
|
|
|