KVM: PPC: Book3S HV: Enable use of the new XIVE "single escalation" feature
That feature, provided by Power9 DD2.0 and later, when supported by newer OPAL versions, allows us to sacrifice a queue (priority 7) in favor of merging all the escalation interrupts of the queues of a single VP into a single interrupt. This reduces the number of host interrupts used up by KVM guests especially when those guests use multiple priorities. It will also enable a future change to control the masking of the escalation interrupts more precisely to avoid spurious ones. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
This commit is contained in:
committed by
Paul Mackerras
parent
c424c10823
commit
bf4159da47
@ -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