summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorLi Zhong <zhong@linux.vnet.ibm.com>2016-11-11 12:57:33 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-11-15 17:13:09 +0100
commitf20065b466d4f7b2883b3ef26f4b1a51d8ddee91 (patch)
tree54ccd8397f84f019a8404da900a3d7804575dc7c /arch
parent2393241b7a223a87761ab47fea43dbe466198629 (diff)
downloadlinux-stable-f20065b466d4f7b2883b3ef26f4b1a51d8ddee91.tar.gz
linux-stable-f20065b466d4f7b2883b3ef26f4b1a51d8ddee91.tar.bz2
linux-stable-f20065b466d4f7b2883b3ef26f4b1a51d8ddee91.zip
KVM: PPC: Book 3S: XICS: correct the real mode ICP rejecting counter
[ Upstream commit 37451bc95dee0e666927d6ffdda302dbbaaae6fa ] Some counters are added in Commit 6e0365b78273 ("KVM: PPC: Book3S HV: Add ICP real mode counters"), to provide some performance statistics to determine whether further optimizing is needed for real mode functions. The n_reject counter counts how many times ICP rejects an irq because of priority in real mode. The redelivery of an lsi that is still asserted after eoi doesn't fall into this category, so the increasement there is removed. Also, it needs to be increased in icp_rm_deliver_irq() if it rejects another one. Signed-off-by: Li Zhong <zhong@linux.vnet.ibm.com> Signed-off-by: Paul Mackerras <paulus@ozlabs.org> Signed-off-by: Sasha Levin <alexander.levin@verizon.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/kvm/book3s_hv_rm_xics.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/arch/powerpc/kvm/book3s_hv_rm_xics.c b/arch/powerpc/kvm/book3s_hv_rm_xics.c
index 24f58076d49e..1d2bc84338bf 100644
--- a/arch/powerpc/kvm/book3s_hv_rm_xics.c
+++ b/arch/powerpc/kvm/book3s_hv_rm_xics.c
@@ -280,6 +280,7 @@ static void icp_rm_deliver_irq(struct kvmppc_xics *xics, struct kvmppc_icp *icp,
*/
if (reject && reject != XICS_IPI) {
arch_spin_unlock(&ics->lock);
+ icp->n_reject++;
new_irq = reject;
goto again;
}
@@ -611,10 +612,8 @@ int kvmppc_rm_h_eoi(struct kvm_vcpu *vcpu, unsigned long xirr)
state = &ics->irq_state[src];
/* Still asserted, resend it */
- if (state->asserted) {
- icp->n_reject++;
+ if (state->asserted)
icp_rm_deliver_irq(xics, icp, irq);
- }
if (!hlist_empty(&vcpu->kvm->irq_ack_notifier_list)) {
icp->rm_action |= XICS_RM_NOTIFY_EOI;