diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/powerpc/platforms/pseries/plpar_wrappers.h | 4 | ||||
| -rw-r--r-- | arch/powerpc/platforms/pseries/xics.c | 7 |
2 files changed, 6 insertions, 5 deletions
diff --git a/arch/powerpc/platforms/pseries/plpar_wrappers.h b/arch/powerpc/platforms/pseries/plpar_wrappers.h index 0603c91538ae..a05f8d427856 100644 --- a/arch/powerpc/platforms/pseries/plpar_wrappers.h +++ b/arch/powerpc/platforms/pseries/plpar_wrappers.h | |||
| @@ -259,12 +259,12 @@ static inline long plpar_ipi(unsigned long servernum, unsigned long mfrr) | |||
| 259 | return plpar_hcall_norets(H_IPI, servernum, mfrr); | 259 | return plpar_hcall_norets(H_IPI, servernum, mfrr); |
| 260 | } | 260 | } |
| 261 | 261 | ||
| 262 | static inline long plpar_xirr(unsigned long *xirr_ret) | 262 | static inline long plpar_xirr(unsigned long *xirr_ret, unsigned char cppr) |
| 263 | { | 263 | { |
| 264 | long rc; | 264 | long rc; |
| 265 | unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; | 265 | unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; |
| 266 | 266 | ||
| 267 | rc = plpar_hcall(H_XIRR, retbuf); | 267 | rc = plpar_hcall(H_XIRR, retbuf, cppr); |
| 268 | 268 | ||
| 269 | *xirr_ret = retbuf[0]; | 269 | *xirr_ret = retbuf[0]; |
| 270 | 270 | ||
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index 4ca641042ec3..1bcedd8b4616 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
| @@ -120,12 +120,12 @@ static inline void direct_qirr_info(int n_cpu, u8 value) | |||
| 120 | 120 | ||
| 121 | /* LPAR low level accessors */ | 121 | /* LPAR low level accessors */ |
| 122 | 122 | ||
| 123 | static inline unsigned int lpar_xirr_info_get(void) | 123 | static inline unsigned int lpar_xirr_info_get(unsigned char cppr) |
| 124 | { | 124 | { |
| 125 | unsigned long lpar_rc; | 125 | unsigned long lpar_rc; |
| 126 | unsigned long return_value; | 126 | unsigned long return_value; |
| 127 | 127 | ||
| 128 | lpar_rc = plpar_xirr(&return_value); | 128 | lpar_rc = plpar_xirr(&return_value, cppr); |
| 129 | if (lpar_rc != H_SUCCESS) | 129 | if (lpar_rc != H_SUCCESS) |
| 130 | panic(" bad return code xirr - rc = %lx\n", lpar_rc); | 130 | panic(" bad return code xirr - rc = %lx\n", lpar_rc); |
| 131 | return (unsigned int)return_value; | 131 | return (unsigned int)return_value; |
| @@ -331,7 +331,8 @@ static unsigned int xics_get_irq_direct(void) | |||
| 331 | 331 | ||
| 332 | static unsigned int xics_get_irq_lpar(void) | 332 | static unsigned int xics_get_irq_lpar(void) |
| 333 | { | 333 | { |
| 334 | unsigned int xirr = lpar_xirr_info_get(); | 334 | struct xics_cppr *os_cppr = &__get_cpu_var(xics_cppr); |
| 335 | unsigned int xirr = lpar_xirr_info_get(os_cppr->stack[os_cppr->index]); | ||
| 335 | unsigned int vec = xics_xirr_vector(xirr); | 336 | unsigned int vec = xics_xirr_vector(xirr); |
| 336 | unsigned int irq; | 337 | unsigned int irq; |
| 337 | 338 | ||
