diff options
Diffstat (limited to 'include/asm-powerpc/ppc_asm.h')
| -rw-r--r-- | include/asm-powerpc/ppc_asm.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/include/asm-powerpc/ppc_asm.h b/include/asm-powerpc/ppc_asm.h index ab8688d39024..dd1c0a913d5f 100644 --- a/include/asm-powerpc/ppc_asm.h +++ b/include/asm-powerpc/ppc_asm.h | |||
| @@ -15,6 +15,48 @@ | |||
| 15 | #define SZL (BITS_PER_LONG/8) | 15 | #define SZL (BITS_PER_LONG/8) |
| 16 | 16 | ||
| 17 | /* | 17 | /* |
| 18 | * Stuff for accurate CPU time accounting. | ||
| 19 | * These macros handle transitions between user and system state | ||
| 20 | * in exception entry and exit and accumulate time to the | ||
| 21 | * user_time and system_time fields in the paca. | ||
| 22 | */ | ||
| 23 | |||
| 24 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 25 | #define ACCOUNT_CPU_USER_ENTRY(ra, rb) | ||
| 26 | #define ACCOUNT_CPU_USER_EXIT(ra, rb) | ||
| 27 | #else | ||
| 28 | #define ACCOUNT_CPU_USER_ENTRY(ra, rb) \ | ||
| 29 | beq 2f; /* if from kernel mode */ \ | ||
| 30 | BEGIN_FTR_SECTION; \ | ||
| 31 | mfspr ra,SPRN_PURR; /* get processor util. reg */ \ | ||
| 32 | END_FTR_SECTION_IFSET(CPU_FTR_PURR); \ | ||
| 33 | BEGIN_FTR_SECTION; \ | ||
| 34 | mftb ra; /* or get TB if no PURR */ \ | ||
| 35 | END_FTR_SECTION_IFCLR(CPU_FTR_PURR); \ | ||
| 36 | ld rb,PACA_STARTPURR(r13); \ | ||
| 37 | std ra,PACA_STARTPURR(r13); \ | ||
| 38 | subf rb,rb,ra; /* subtract start value */ \ | ||
| 39 | ld ra,PACA_USER_TIME(r13); \ | ||
| 40 | add ra,ra,rb; /* add on to user time */ \ | ||
| 41 | std ra,PACA_USER_TIME(r13); \ | ||
| 42 | 2: | ||
| 43 | |||
| 44 | #define ACCOUNT_CPU_USER_EXIT(ra, rb) \ | ||
| 45 | BEGIN_FTR_SECTION; \ | ||
| 46 | mfspr ra,SPRN_PURR; /* get processor util. reg */ \ | ||
| 47 | END_FTR_SECTION_IFSET(CPU_FTR_PURR); \ | ||
| 48 | BEGIN_FTR_SECTION; \ | ||
| 49 | mftb ra; /* or get TB if no PURR */ \ | ||
| 50 | END_FTR_SECTION_IFCLR(CPU_FTR_PURR); \ | ||
| 51 | ld rb,PACA_STARTPURR(r13); \ | ||
| 52 | std ra,PACA_STARTPURR(r13); \ | ||
| 53 | subf rb,rb,ra; /* subtract start value */ \ | ||
| 54 | ld ra,PACA_SYSTEM_TIME(r13); \ | ||
| 55 | add ra,ra,rb; /* add on to user time */ \ | ||
| 56 | std ra,PACA_SYSTEM_TIME(r13); | ||
| 57 | #endif | ||
| 58 | |||
| 59 | /* | ||
| 18 | * Macros for storing registers into and loading registers from | 60 | * Macros for storing registers into and loading registers from |
| 19 | * exception frames. | 61 | * exception frames. |
| 20 | */ | 62 | */ |
