diff options
| -rw-r--r-- | arch/powerpc/platforms/pseries/xics.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index 1ee66db003be..f5f79196721c 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
| @@ -784,9 +784,13 @@ static void xics_set_cpu_priority(unsigned char cppr) | |||
| 784 | { | 784 | { |
| 785 | struct xics_cppr *os_cppr = &__get_cpu_var(xics_cppr); | 785 | struct xics_cppr *os_cppr = &__get_cpu_var(xics_cppr); |
| 786 | 786 | ||
| 787 | BUG_ON(os_cppr->index != 0); | 787 | /* |
| 788 | * we only really want to set the priority when there's | ||
| 789 | * just one cppr value on the stack | ||
| 790 | */ | ||
| 791 | WARN_ON(os_cppr->index != 0); | ||
| 788 | 792 | ||
| 789 | os_cppr->stack[os_cppr->index] = cppr; | 793 | os_cppr->stack[0] = cppr; |
| 790 | 794 | ||
| 791 | if (firmware_has_feature(FW_FEATURE_LPAR)) | 795 | if (firmware_has_feature(FW_FEATURE_LPAR)) |
| 792 | lpar_cppr_info(cppr); | 796 | lpar_cppr_info(cppr); |
| @@ -821,8 +825,14 @@ void xics_setup_cpu(void) | |||
| 821 | 825 | ||
| 822 | void xics_teardown_cpu(void) | 826 | void xics_teardown_cpu(void) |
| 823 | { | 827 | { |
| 828 | struct xics_cppr *os_cppr = &__get_cpu_var(xics_cppr); | ||
| 824 | int cpu = smp_processor_id(); | 829 | int cpu = smp_processor_id(); |
| 825 | 830 | ||
| 831 | /* | ||
| 832 | * we have to reset the cppr index to 0 because we're | ||
| 833 | * not going to return from the IPI | ||
| 834 | */ | ||
| 835 | os_cppr->index = 0; | ||
| 826 | xics_set_cpu_priority(0); | 836 | xics_set_cpu_priority(0); |
| 827 | 837 | ||
| 828 | /* Clear any pending IPI request */ | 838 | /* Clear any pending IPI request */ |
