On 05/18/2018 06:44 PM, Cédric Le Goater wrote: > This IRQ number hint can possibly be used by the VIO devices if the > "irq" property is defined on the command line but it seems it is never > the case. It is not used in libvirt for instance. So, let's remove it > to simplify future changes. > > Nevertheless, this is a compatibbility breakage that will be addressed > by the subsequent patches which introduce IRQ number allocator > handlers per machine version. > > Signed-off-by: Cédric Le Goater <c...@kaod.org> > --- > include/hw/ppc/spapr.h | 3 +-- > hw/ppc/spapr.c | 21 ++++++--------------- > hw/ppc/spapr_events.c | 7 +++---- > hw/ppc/spapr_vio.c | 2 +- > 4 files changed, 11 insertions(+), 22 deletions(-) > > diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h > index d60b7c6d7a8b..2cfdfdd67eaf 100644 > --- a/include/hw/ppc/spapr.h > +++ b/include/hw/ppc/spapr.h > @@ -773,8 +773,7 @@ int spapr_get_vcpu_id(PowerPCCPU *cpu); > void spapr_set_vcpu_id(PowerPCCPU *cpu, int cpu_index, Error **errp); > PowerPCCPU *spapr_find_cpu(int vcpu_id); > > -int spapr_irq_alloc(sPAPRMachineState *spapr, int irq_hint, bool lsi, > - Error **errp); > +int spapr_irq_alloc(sPAPRMachineState *spapr, bool lsi, Error **errp); > int spapr_irq_alloc_block(sPAPRMachineState *spapr, int num, bool lsi, > bool align, Error **errp); > void spapr_irq_free(sPAPRMachineState *spapr, int irq, int num); > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index 32ab3c43b6c0..05a924a5f2da 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -3798,28 +3798,19 @@ 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) > +int spapr_irq_alloc(sPAPRMachineState *spapr, bool lsi, Error **errp) > { > ICSState *ics = spapr->ics; > int irq; > > assert(ics); > > - if (irq_hint) { > - if (!ICS_IRQ_FREE(ics, irq_hint - ics->offset)) {
Side note, this line is a promise for a nice segv if irq_hint < ics->offset. I think it is time to deprecate the 'irq' property of the sPAPR VIO devices. C. > - error_setg(errp, "can't allocate IRQ %d: already in use", > irq_hint); > - return -1; > - } > - irq = irq_hint; > - } else { > - irq = ics_find_free_block(ics, 1, 1); > - if (irq < 0) { > - error_setg(errp, "can't allocate IRQ: no IRQ left"); > - return -1; > - } > - irq += ics->offset; > + irq = ics_find_free_block(ics, 1, 1); > + if (irq < 0) { > + error_setg(errp, "can't allocate IRQ: no IRQ left"); > + return -1; > } > + irq += ics->offset; > > spapr_irq_set_lsi(spapr, irq, lsi); > trace_spapr_irq_alloc(irq); > diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c > index 86836f0626dc..64a67439beac 100644 > --- a/hw/ppc/spapr_events.c > +++ b/hw/ppc/spapr_events.c > @@ -712,8 +712,7 @@ void spapr_events_init(sPAPRMachineState *spapr) > spapr->event_sources = spapr_event_sources_new(); > > spapr_event_sources_register(spapr->event_sources, EVENT_CLASS_EPOW, > - spapr_irq_alloc(spapr, 0, false, > - &error_fatal)); > + spapr_irq_alloc(spapr, false, > &error_fatal)); > > /* NOTE: if machine supports modern/dedicated hotplug event source, > * we add it to the device-tree unconditionally. This means we may > @@ -725,8 +724,8 @@ void spapr_events_init(sPAPRMachineState *spapr) > */ > if (spapr->use_hotplug_event_source) { > spapr_event_sources_register(spapr->event_sources, > EVENT_CLASS_HOT_PLUG, > - spapr_irq_alloc(spapr, 0, false, > - &error_fatal)); > + spapr_irq_alloc(spapr, false, > + &error_fatal)); > } > > spapr->epow_notifier.notify = spapr_powerdown_req; > diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c > index 472dd6f33a96..cc064f64fccf 100644 > --- a/hw/ppc/spapr_vio.c > +++ b/hw/ppc/spapr_vio.c > @@ -455,7 +455,7 @@ static void spapr_vio_busdev_realize(DeviceState *qdev, > Error **errp) > dev->qdev.id = id; > } > > - dev->irq = spapr_irq_alloc(spapr, dev->irq, false, &local_err); > + dev->irq = spapr_irq_alloc(spapr, false, &local_err); > if (local_err) { > error_propagate(errp, local_err); > return; >