diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-08-18 15:05:01 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-08-18 15:05:01 -0400 |
commit | 04cde035fa47b4a7465a15db8d6eaebcc15a68af (patch) | |
tree | ea70ab0cb99a8337f1822ec2f7e2ed5a7918bd8d /arch/powerpc/platforms/pseries/plpar_wrappers.h | |
parent | 1de481ded98d1d48e2a4102a5aa549e3c4d18ee3 (diff) | |
parent | 50d0b17645a26d2877c9d5538114498c3f82adac (diff) |
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc:
powerpc: Use generic compat_sys_old_readdir
powerpc/kexec: Fix up KEXEC_CONTROL_CODE_SIZE missed during conversion
powerpc: Remove dead module_find_bug code
powerpc: Add CMO enabled flag and paging space data to lparcfg
powerpc: Fix CMM page loaning on 64k page kernel with 4k hardware pages
powerpc: Make CMO paging space pool ID and page size available
powerpc: Fix lockdep IRQ tracing bug
powerpc: Fix TLB invalidation on boot on 32-bit
powerpc: Fix loss of vdso on fork on 32-bit
Diffstat (limited to 'arch/powerpc/platforms/pseries/plpar_wrappers.h')
-rw-r--r-- | arch/powerpc/platforms/pseries/plpar_wrappers.h | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/pseries/plpar_wrappers.h b/arch/powerpc/platforms/pseries/plpar_wrappers.h index a437267c6bf..d967c1893ab 100644 --- a/arch/powerpc/platforms/pseries/plpar_wrappers.h +++ b/arch/powerpc/platforms/pseries/plpar_wrappers.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define _PSERIES_PLPAR_WRAPPERS_H | 2 | #define _PSERIES_PLPAR_WRAPPERS_H |
3 | 3 | ||
4 | #include <asm/hvcall.h> | 4 | #include <asm/hvcall.h> |
5 | #include <asm/page.h> | ||
5 | 6 | ||
6 | static inline long poll_pending(void) | 7 | static inline long poll_pending(void) |
7 | { | 8 | { |
@@ -44,12 +45,34 @@ static inline long register_slb_shadow(unsigned long cpu, unsigned long vpa) | |||
44 | 45 | ||
45 | static inline long plpar_page_set_loaned(unsigned long vpa) | 46 | static inline long plpar_page_set_loaned(unsigned long vpa) |
46 | { | 47 | { |
47 | return plpar_hcall_norets(H_PAGE_INIT, H_PAGE_SET_LOANED, vpa, 0); | 48 | unsigned long cmo_page_sz = cmo_get_page_size(); |
49 | long rc = 0; | ||
50 | int i; | ||
51 | |||
52 | for (i = 0; !rc && i < PAGE_SIZE; i += cmo_page_sz) | ||
53 | rc = plpar_hcall_norets(H_PAGE_INIT, H_PAGE_SET_LOANED, vpa + i, 0); | ||
54 | |||
55 | for (i -= cmo_page_sz; rc && i != 0; i -= cmo_page_sz) | ||
56 | plpar_hcall_norets(H_PAGE_INIT, H_PAGE_SET_ACTIVE, | ||
57 | vpa + i - cmo_page_sz, 0); | ||
58 | |||
59 | return rc; | ||
48 | } | 60 | } |
49 | 61 | ||
50 | static inline long plpar_page_set_active(unsigned long vpa) | 62 | static inline long plpar_page_set_active(unsigned long vpa) |
51 | { | 63 | { |
52 | return plpar_hcall_norets(H_PAGE_INIT, H_PAGE_SET_ACTIVE, vpa, 0); | 64 | unsigned long cmo_page_sz = cmo_get_page_size(); |
65 | long rc = 0; | ||
66 | int i; | ||
67 | |||
68 | for (i = 0; !rc && i < PAGE_SIZE; i += cmo_page_sz) | ||
69 | rc = plpar_hcall_norets(H_PAGE_INIT, H_PAGE_SET_ACTIVE, vpa + i, 0); | ||
70 | |||
71 | for (i -= cmo_page_sz; rc && i != 0; i -= cmo_page_sz) | ||
72 | plpar_hcall_norets(H_PAGE_INIT, H_PAGE_SET_LOANED, | ||
73 | vpa + i - cmo_page_sz, 0); | ||
74 | |||
75 | return rc; | ||
53 | } | 76 | } |
54 | 77 | ||
55 | extern void vpa_init(int cpu); | 78 | extern void vpa_init(int cpu); |