Merge tag 'kvm-ppc-next-4.16-1' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
PPC KVM update for 4.16 - Allow HPT guests to run on a radix host on POWER9 v2.2 CPUs without requiring the complex thread synchronization that earlier CPU versions required. - A series from Ben Herrenschmidt to improve the handling of escalation interrupts with the XIVE interrupt controller. - Provide for the decrementer register to be copied across on migration. - Various minor cleanups and bugfixes.
This commit is contained in:
@@ -367,7 +367,8 @@ static void xive_irq_eoi(struct irq_data *d)
|
||||
* EOI the source if it hasn't been disabled and hasn't
|
||||
* been passed-through to a KVM guest
|
||||
*/
|
||||
if (!irqd_irq_disabled(d) && !irqd_is_forwarded_to_vcpu(d))
|
||||
if (!irqd_irq_disabled(d) && !irqd_is_forwarded_to_vcpu(d) &&
|
||||
!(xd->flags & XIVE_IRQ_NO_EOI))
|
||||
xive_do_source_eoi(irqd_to_hwirq(d), xd);
|
||||
|
||||
/*
|
||||
|
@@ -42,6 +42,7 @@ static u32 xive_provision_chip_count;
|
||||
static u32 xive_queue_shift;
|
||||
static u32 xive_pool_vps = XIVE_INVALID_VP;
|
||||
static struct kmem_cache *xive_provision_cache;
|
||||
static bool xive_has_single_esc;
|
||||
|
||||
int xive_native_populate_irq_data(u32 hw_irq, struct xive_irq_data *data)
|
||||
{
|
||||
@@ -571,6 +572,10 @@ bool __init xive_native_init(void)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Do we support single escalation */
|
||||
if (of_get_property(np, "single-escalation-support", NULL) != NULL)
|
||||
xive_has_single_esc = true;
|
||||
|
||||
/* Configure Thread Management areas for KVM */
|
||||
for_each_possible_cpu(cpu)
|
||||
kvmppc_set_xive_tima(cpu, r.start, tima);
|
||||
@@ -667,12 +672,15 @@ void xive_native_free_vp_block(u32 vp_base)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xive_native_free_vp_block);
|
||||
|
||||
int xive_native_enable_vp(u32 vp_id)
|
||||
int xive_native_enable_vp(u32 vp_id, bool single_escalation)
|
||||
{
|
||||
s64 rc;
|
||||
u64 flags = OPAL_XIVE_VP_ENABLED;
|
||||
|
||||
if (single_escalation)
|
||||
flags |= OPAL_XIVE_VP_SINGLE_ESCALATION;
|
||||
for (;;) {
|
||||
rc = opal_xive_set_vp_info(vp_id, OPAL_XIVE_VP_ENABLED, 0);
|
||||
rc = opal_xive_set_vp_info(vp_id, flags, 0);
|
||||
if (rc != OPAL_BUSY)
|
||||
break;
|
||||
msleep(1);
|
||||
@@ -710,3 +718,9 @@ int xive_native_get_vp_info(u32 vp_id, u32 *out_cam_id, u32 *out_chip_id)
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xive_native_get_vp_info);
|
||||
|
||||
bool xive_native_has_single_escalation(void)
|
||||
{
|
||||
return xive_has_single_esc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xive_native_has_single_escalation);
|
||||
|
Reference in New Issue
Block a user