diff options
author | Mohan Kumar M <mohan@in.ibm.com> | 2007-03-21 01:51:32 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-03-22 00:01:43 -0400 |
commit | b4aea36b7956eeebfc56314ce0944db1441255ce (patch) | |
tree | a0c84f25e1f5a2ef0af624871e8f892654fd79a4 /include/asm-powerpc | |
parent | f144e7c7272bf527c380bffaa5e789dc28a09d8d (diff) |
[POWERPC] Avoid hypervisor statistics calculation in real mode
kexec invokes plpar_hcall hypervisor call in real mode. plpar_hcall
refers to per cpu variables for accounting hypervisor statistics.
These variables may not be in the RMO region, so accesses to them
in real mode may result in a data storage exception.
This fixes this problem by using a new plpar_hcall_raw function which
does not update the hypervisor call statistics. Thanks to Anton for
suggesting this idea.
Signed-off-by: Mohan Kumar M <mohan@in.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include/asm-powerpc')
-rw-r--r-- | include/asm-powerpc/hvcall.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/include/asm-powerpc/hvcall.h b/include/asm-powerpc/hvcall.h index 60977806d2f4..62efd9d7a43d 100644 --- a/include/asm-powerpc/hvcall.h +++ b/include/asm-powerpc/hvcall.h | |||
@@ -237,6 +237,20 @@ long plpar_hcall_norets(unsigned long opcode, ...); | |||
237 | long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...); | 237 | long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...); |
238 | 238 | ||
239 | /** | 239 | /** |
240 | * plpar_hcall_raw: - Make a hypervisor call without calculating hcall stats | ||
241 | * @opcode: The hypervisor call to make. | ||
242 | * @retbuf: Buffer to store up to 4 return arguments in. | ||
243 | * | ||
244 | * This call supports up to 6 arguments and 4 return arguments. Use | ||
245 | * PLPAR_HCALL_BUFSIZE to size the return argument buffer. | ||
246 | * | ||
247 | * Used when phyp interface needs to be called in real mode. Similar to | ||
248 | * plpar_hcall, but plpar_hcall_raw works in real mode and does not | ||
249 | * calculate hypervisor call statistics. | ||
250 | */ | ||
251 | long plpar_hcall_raw(unsigned long opcode, unsigned long *retbuf, ...); | ||
252 | |||
253 | /** | ||
240 | * plpar_hcall9: - Make a pseries hypervisor call with up to 9 return arguments | 254 | * plpar_hcall9: - Make a pseries hypervisor call with up to 9 return arguments |
241 | * @opcode: The hypervisor call to make. | 255 | * @opcode: The hypervisor call to make. |
242 | * @retbuf: Buffer to store up to 9 return arguments in. | 256 | * @retbuf: Buffer to store up to 9 return arguments in. |