提交 fab397d8 编写于 作者: C Cédric Le Goater 提交者: David Gibson

spapr: introduce a spapr_irq_init() routine

Initialize the MSI bitmap from it as this will be necessary for the
sPAPR IRQ backend for XIVE.
Signed-off-by: NCédric Le Goater <clg@kaod.org>
Reviewed-by: NDavid Gibson <david@gibson.dropbear.id.au>
Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
上级 482969d6
...@@ -2593,7 +2593,7 @@ static void spapr_machine_init(MachineState *machine) ...@@ -2593,7 +2593,7 @@ static void spapr_machine_init(MachineState *machine)
spapr_set_vsmt_mode(spapr, &error_fatal); spapr_set_vsmt_mode(spapr, &error_fatal);
/* Set up Interrupt Controller before we create the VCPUs */ /* Set up Interrupt Controller before we create the VCPUs */
smc->irq->init(spapr, &error_fatal); spapr_irq_init(spapr, &error_fatal);
/* Set up containers for ibm,client-architecture-support negotiated options /* Set up containers for ibm,client-architecture-support negotiated options
*/ */
......
...@@ -97,11 +97,6 @@ static void spapr_irq_init_xics(sPAPRMachineState *spapr, Error **errp) ...@@ -97,11 +97,6 @@ static void spapr_irq_init_xics(sPAPRMachineState *spapr, Error **errp)
int nr_irqs = smc->irq->nr_irqs; int nr_irqs = smc->irq->nr_irqs;
Error *local_err = NULL; Error *local_err = NULL;
/* Initialize the MSI IRQ allocator. */
if (!SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) {
spapr_irq_msi_init(spapr, smc->irq->nr_msis);
}
if (kvm_enabled()) { if (kvm_enabled()) {
if (machine_kernel_irqchip_allowed(machine) && if (machine_kernel_irqchip_allowed(machine) &&
!xics_kvm_init(spapr, &local_err)) { !xics_kvm_init(spapr, &local_err)) {
...@@ -213,6 +208,17 @@ sPAPRIrq spapr_irq_xics = { ...@@ -213,6 +208,17 @@ sPAPRIrq spapr_irq_xics = {
/* /*
* sPAPR IRQ frontend routines for devices * sPAPR IRQ frontend routines for devices
*/ */
void spapr_irq_init(sPAPRMachineState *spapr, Error **errp)
{
sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr);
/* Initialize the MSI IRQ allocator. */
if (!SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) {
spapr_irq_msi_init(spapr, smc->irq->nr_msis);
}
smc->irq->init(spapr, errp);
}
int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp) int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp)
{ {
......
...@@ -43,6 +43,7 @@ typedef struct sPAPRIrq { ...@@ -43,6 +43,7 @@ typedef struct sPAPRIrq {
extern sPAPRIrq spapr_irq_xics; extern sPAPRIrq spapr_irq_xics;
extern sPAPRIrq spapr_irq_xics_legacy; extern sPAPRIrq spapr_irq_xics_legacy;
void spapr_irq_init(sPAPRMachineState *spapr, Error **errp);
int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp); int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp);
void spapr_irq_free(sPAPRMachineState *spapr, int irq, int num); void spapr_irq_free(sPAPRMachineState *spapr, int irq, int num);
qemu_irq spapr_qirq(sPAPRMachineState *spapr, int irq); qemu_irq spapr_qirq(sPAPRMachineState *spapr, int irq);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册