[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 Wed, Apr 05, 2017 at 08:10:35AM -0600, Jan Beulich wrote: > >>> 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"). i < nr_vioapic seems like the best option to me. > That way you'll return an out of range GSI for a not found vioapic > input. Right, with the current code it would return a valid looking base_gsi. > > @@ -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; > > ? Sight, yes please. > With these taken care of (which can be done while committing, if you > agree) > Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Thanks, Roger. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |