aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/pseries
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/platforms/pseries')
-rw-r--r--arch/powerpc/platforms/pseries/plpar_wrappers.h27
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 a437267c6bf8..d967c1893ab5 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
6static inline long poll_pending(void) 7static 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
45static inline long plpar_page_set_loaned(unsigned long vpa) 46static 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
50static inline long plpar_page_set_active(unsigned long vpa) 62static 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
55extern void vpa_init(int cpu); 78extern void vpa_init(int cpu);