diff options
Diffstat (limited to 'arch/powerpc/sysdev/xics')
| -rw-r--r-- | arch/powerpc/sysdev/xics/icp-native.c | 8 | 
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/powerpc/sysdev/xics/icp-native.c b/arch/powerpc/sysdev/xics/icp-native.c index 48861d3fcd0..20b328bb494 100644 --- a/arch/powerpc/sysdev/xics/icp-native.c +++ b/arch/powerpc/sysdev/xics/icp-native.c @@ -51,6 +51,12 @@ static struct icp_ipl __iomem *icp_native_regs[NR_CPUS];  static inline unsigned int icp_native_get_xirr(void)  {  	int cpu = smp_processor_id(); +	unsigned int xirr; + +	/* Handled an interrupt latched by KVM */ +	xirr = kvmppc_get_xics_latch(); +	if (xirr) +		return xirr;  	return in_be32(&icp_native_regs[cpu]->xirr.word);  } @@ -138,6 +144,7 @@ static unsigned int icp_native_get_irq(void)  static void icp_native_cause_ipi(int cpu, unsigned long data)  { +	kvmppc_set_host_ipi(cpu, 1);  	icp_native_set_qirr(cpu, IPI_PRIORITY);  } @@ -151,6 +158,7 @@ static irqreturn_t icp_native_ipi_action(int irq, void *dev_id)  {  	int cpu = smp_processor_id(); +	kvmppc_set_host_ipi(cpu, 0);  	icp_native_set_qirr(cpu, 0xff);  	return smp_ipi_demux();  |