Skip to content

Commit

Permalink
spapr: introduce a spapr_irq_set_lsi() helper
Browse files Browse the repository at this point in the history
It will make synchronisation easier with the XIVE interrupt mode when
available. The 'irq' parameter refers to the global IRQ number space.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
  • Loading branch information
legoater authored and dgibson committed Dec 14, 2017
1 parent 60c6823 commit 9e7dc5f
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions hw/ppc/spapr.c
Expand Up @@ -3582,6 +3582,14 @@ static int ics_find_free_block(ICSState *ics, int num, int alignnum)
return -1;
}

/*
* Allocate the IRQ number and set the IRQ type, LSI or MSI
*/
static void spapr_irq_set_lsi(sPAPRMachineState *spapr, int irq, bool lsi)
{
ics_set_irq_type(spapr->ics, irq - spapr->ics->offset, lsi);
}

int spapr_irq_alloc(sPAPRMachineState *spapr, int irq_hint, bool lsi,
Error **errp)
{
Expand All @@ -3606,7 +3614,7 @@ int spapr_irq_alloc(sPAPRMachineState *spapr, int irq_hint, bool lsi,
irq += ics->offset;
}

ics_set_irq_type(ics, irq - ics->offset, lsi);
spapr_irq_set_lsi(spapr, irq, lsi);
trace_spapr_irq_alloc(irq);

return irq;
Expand Down Expand Up @@ -3645,10 +3653,10 @@ int spapr_irq_alloc_block(sPAPRMachineState *spapr, int num, bool lsi,
return -1;
}

first += ics->offset;
for (i = first; i < first + num; ++i) {
ics_set_irq_type(ics, i, lsi);
spapr_irq_set_lsi(spapr, i, lsi);
}
first += ics->offset;

trace_spapr_irq_alloc_block(first, num, lsi, align);

Expand Down

0 comments on commit 9e7dc5f

Please sign in to comment.