| From 06554d9f6cc8f0b5ec903db19726a15dfc7b09d6 Mon Sep 17 00:00:00 2001 |
| From: "Gautham R. Shenoy" <ego@linux.vnet.ibm.com> |
| Date: Fri, 7 Aug 2015 17:41:20 +0530 |
| Subject: KVM: PPC: Book3S HV: Exit on H_DOORBELL if HOST_IPI is set |
| |
| From: "Gautham R. Shenoy" <ego@linux.vnet.ibm.com> |
| |
| commit 06554d9f6cc8f0b5ec903db19726a15dfc7b09d6 upstream. |
| |
| The code that handles the case when we receive a H_DOORBELL interrupt |
| has a comment which says "Hypervisor doorbell - exit only if host IPI |
| flag set". However, the current code does not actually check if the |
| host IPI flag is set. This is due to a comparison instruction that |
| got missed. |
| |
| As a result, the current code performs the exit to host only |
| if some sibling thread or a sibling sub-core is exiting to the |
| host. This implies that, an IPI sent to a sibling core in |
| (subcores-per-core != 1) mode will be missed by the host unless the |
| sibling core is on the exit path to the host. |
| |
| This patch adds the missing comparison operation which will ensure |
| that when HOST_IPI flag is set, we unconditionally exit to the host. |
| |
| Fixes: 66feed61cdf6 |
| Signed-off-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com> |
| Reviewed-by: David Gibson <david@gibson.dropbear.id.au> |
| Signed-off-by: Paul Mackerras <paulus@samba.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/powerpc/kvm/book3s_hv_rmhandlers.S | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S |
| +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S |
| @@ -1127,6 +1127,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) |
| cmpwi r12, BOOK3S_INTERRUPT_H_DOORBELL |
| bne 3f |
| lbz r0, HSTATE_HOST_IPI(r13) |
| + cmpwi r0, 0 |
| beq 4f |
| b guest_exit_cont |
| 3: |