[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-4.9 v4 1/2] x86/vioapic: introduce support for multiple vIO APICS
>>> On 05.04.17 at 11:23, <roger.pau@xxxxxxxxxx> wrote: > +static unsigned int base_gsi(const struct domain *d, > + const struct hvm_vioapic *vioapic) > +{ > + unsigned int nr_vioapics = d->arch.hvm_domain.nr_vioapics; > + unsigned int base_gsi = 0, i = 0; > + const struct hvm_vioapic *tmp; > + > + while ( --nr_vioapics && (tmp = domain_vioapic(d, i++)) != vioapic ) > + base_gsi += tmp->nr_pins; While for valid input it should be benign, I think the first part of the condition would better use post-decrement (or "i < nr_vioapics"). That way you'll return an out of range GSI for a not found vioapic input. > @@ -454,32 +523,68 @@ HVM_REGISTER_SAVE_RESTORE(IOAPIC, ioapic_save, > ioapic_load, 1, HVMSR_PER_DOM); > > void vioapic_reset(struct domain *d) > { > - struct hvm_vioapic *vioapic = domain_vioapic(d); > - uint32_t nr_pins = vioapic->nr_pins; > - int i; > + unsigned int i; > > if ( !has_vioapic(d) ) > + { > + ASSERT(!d->arch.hvm_domain.nr_vioapics); > return; > + } > > - memset(vioapic, 0, hvm_vioapic_size(nr_pins)); > - vioapic->domain = d; > - vioapic->nr_pins = nr_pins; > - for ( i = 0; i < nr_pins; i++ ) > - vioapic->redirtbl[i].fields.mask = 1; > - vioapic->base_address = VIOAPIC_DEFAULT_BASE_ADDRESS; > + for ( i = 0; i < d->arch.hvm_domain.nr_vioapics; i++ ) > + { > + struct hvm_vioapic *vioapic = domain_vioapic(d, i); > + unsigned int pin, nr_pins = vioapic->nr_pins; > + > + memset(vioapic, 0, hvm_vioapic_size(nr_pins)); > + for ( pin = 0; pin < nr_pins; pin++ ) > + vioapic->redirtbl[pin].fields.mask = 1; > + ASSERT(!i); > + vioapic->base_address = VIOAPIC_DEFAULT_BASE_ADDRESS + > + VIOAPIC_MEM_LENGTH * 0; Why not simply vioapic->base_address = VIOAPIC_DEFAULT_BASE_ADDRESS; ? With these taken care of (which can be done while committing, if you agree) Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |