KVM: PPC: Book 3S: XICS: Implement ICS P/Q states
authorLi Zhong <zhong@linux.vnet.ibm.com>
Fri, 11 Nov 2016 04:57:35 +0000 (12:57 +0800)
committerPaul Mackerras <paulus@ozlabs.org>
Thu, 26 Jan 2017 23:27:02 +0000 (10:27 +1100)
commit17d48610ae0fa218aa386b16a538c792991a3652
tree344f26e281c3111d92f1a43c20cce00fd8739eb7
parentbf5a71d53835110d46d33eb5335713ffdbff9ab6
KVM: PPC: Book 3S: XICS: Implement ICS P/Q states

This patch implements P(Presented)/Q(Queued) states for ICS irqs.

When the interrupt is presented, set P. Present if P was not set.
If P is already set, don't present again, set Q.
When the interrupt is EOI'ed, move Q into P (and clear Q). If it is
set, re-present.

The asserted flag used by LSI is also incorporated into the P bit.

When the irq state is saved, P/Q bits are also saved, they need some
qemu modifications to be recognized and passed around to be restored.
KVM_XICS_PENDING bit set and saved should also indicate
KVM_XICS_PRESENTED bit set and saved. But it is possible some old
code doesn't have/recognize the P bit, so when we restore, we set P
for PENDING bit, too.

The idea and much of the code come from Ben.

Signed-off-by: Li Zhong <zhong@linux.vnet.ibm.com>
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
arch/powerpc/include/uapi/asm/kvm.h
arch/powerpc/kvm/book3s_hv_rm_xics.c
arch/powerpc/kvm/book3s_xics.c
arch/powerpc/kvm/book3s_xics.h