unsigned int nr_pins = vioapic->nr_pins, base_gsi = vioapic->base_gsi;
unsigned int pin;
- memset(vioapic, 0, hvm_vioapic_size(nr_pins));
+ memset(vioapic, 0, offsetof(typeof(*vioapic), redirtbl));
for ( pin = 0; pin < nr_pins; pin++ )
- vioapic->redirtbl[pin].fields.mask = 1;
+ vioapic->redirtbl[pin] = (union vioapic_redir_entry){ .fields.mask = 1 };
if ( !is_hardware_domain(d) )
{
}
if ( (domain_vioapic(d, i) =
- xmalloc_bytes(hvm_vioapic_size(nr_pins))) == NULL )
+ xmalloc_flex_struct(struct hvm_vioapic, redirtbl,
+ nr_pins)) == NULL )
{
vioapic_free(d, nr_vioapics);
return -ENOMEM;
};
};
-#define hvm_vioapic_size(cnt) offsetof(struct hvm_vioapic, redirtbl[cnt])
#define domain_vioapic(d, i) ((d)->arch.hvm.vioapic[i])
#define vioapic_domain(v) ((v)->domain)