diff options
-rw-r--r-- | arch/powerpc/include/asm/lppaca.h | 9 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/plpar_wrappers.h | 22 | ||||
-rw-r--r-- | arch/powerpc/xmon/xmon.c | 3 |
3 files changed, 32 insertions, 2 deletions
diff --git a/arch/powerpc/include/asm/lppaca.h b/arch/powerpc/include/asm/lppaca.h index f78f65c38f05..14b592dfb4e8 100644 --- a/arch/powerpc/include/asm/lppaca.h +++ b/arch/powerpc/include/asm/lppaca.h | |||
@@ -100,7 +100,14 @@ struct lppaca { | |||
100 | // Used to pass parms from the OS to PLIC for SetAsrAndRfid | 100 | // Used to pass parms from the OS to PLIC for SetAsrAndRfid |
101 | u64 saved_gpr3; // Saved GPR3 x20-x27 | 101 | u64 saved_gpr3; // Saved GPR3 x20-x27 |
102 | u64 saved_gpr4; // Saved GPR4 x28-x2F | 102 | u64 saved_gpr4; // Saved GPR4 x28-x2F |
103 | u64 saved_gpr5; // Saved GPR5 x30-x37 | 103 | union { |
104 | u64 saved_gpr5; /* Saved GPR5 x30-x37 */ | ||
105 | struct { | ||
106 | u8 cede_latency_hint; /* x30 */ | ||
107 | u8 reserved[7]; /* x31-x36 */ | ||
108 | } fields; | ||
109 | } gpr5_dword; | ||
110 | |||
104 | 111 | ||
105 | u8 dtl_enable_mask; // Dispatch Trace Log mask x38-x38 | 112 | u8 dtl_enable_mask; // Dispatch Trace Log mask x38-x38 |
106 | u8 donate_dedicated_cpu; // Donate dedicated CPU cycles x39-x39 | 113 | u8 donate_dedicated_cpu; // Donate dedicated CPU cycles x39-x39 |
diff --git a/arch/powerpc/platforms/pseries/plpar_wrappers.h b/arch/powerpc/platforms/pseries/plpar_wrappers.h index a24a6b2333b2..0603c91538ae 100644 --- a/arch/powerpc/platforms/pseries/plpar_wrappers.h +++ b/arch/powerpc/platforms/pseries/plpar_wrappers.h | |||
@@ -9,11 +9,33 @@ static inline long poll_pending(void) | |||
9 | return plpar_hcall_norets(H_POLL_PENDING); | 9 | return plpar_hcall_norets(H_POLL_PENDING); |
10 | } | 10 | } |
11 | 11 | ||
12 | static inline u8 get_cede_latency_hint(void) | ||
13 | { | ||
14 | return get_lppaca()->gpr5_dword.fields.cede_latency_hint; | ||
15 | } | ||
16 | |||
17 | static inline void set_cede_latency_hint(u8 latency_hint) | ||
18 | { | ||
19 | get_lppaca()->gpr5_dword.fields.cede_latency_hint = latency_hint; | ||
20 | } | ||
21 | |||
12 | static inline long cede_processor(void) | 22 | static inline long cede_processor(void) |
13 | { | 23 | { |
14 | return plpar_hcall_norets(H_CEDE); | 24 | return plpar_hcall_norets(H_CEDE); |
15 | } | 25 | } |
16 | 26 | ||
27 | static inline long extended_cede_processor(unsigned long latency_hint) | ||
28 | { | ||
29 | long rc; | ||
30 | u8 old_latency_hint = get_cede_latency_hint(); | ||
31 | |||
32 | set_cede_latency_hint(latency_hint); | ||
33 | rc = cede_processor(); | ||
34 | set_cede_latency_hint(old_latency_hint); | ||
35 | |||
36 | return rc; | ||
37 | } | ||
38 | |||
17 | static inline long vpa_call(unsigned long flags, unsigned long cpu, | 39 | static inline long vpa_call(unsigned long flags, unsigned long cpu, |
18 | unsigned long vpa) | 40 | unsigned long vpa) |
19 | { | 41 | { |
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c index bdbe96c8a7e4..4e6152c13764 100644 --- a/arch/powerpc/xmon/xmon.c +++ b/arch/powerpc/xmon/xmon.c | |||
@@ -1641,7 +1641,8 @@ static void super_regs(void) | |||
1641 | ptrLpPaca->saved_srr0, ptrLpPaca->saved_srr1); | 1641 | ptrLpPaca->saved_srr0, ptrLpPaca->saved_srr1); |
1642 | printf(" Saved Gpr3=%.16lx Saved Gpr4=%.16lx \n", | 1642 | printf(" Saved Gpr3=%.16lx Saved Gpr4=%.16lx \n", |
1643 | ptrLpPaca->saved_gpr3, ptrLpPaca->saved_gpr4); | 1643 | ptrLpPaca->saved_gpr3, ptrLpPaca->saved_gpr4); |
1644 | printf(" Saved Gpr5=%.16lx \n", ptrLpPaca->saved_gpr5); | 1644 | printf(" Saved Gpr5=%.16lx \n", |
1645 | ptrLpPaca->gpr5_dword.saved_gpr5); | ||
1645 | } | 1646 | } |
1646 | #endif | 1647 | #endif |
1647 | 1648 | ||