On Wed, Aug 26, 2020 at 11:40:28AM +0200, Philippe Mathieu-Daudé wrote: > Le mar. 25 août 2020 19:42, Alistair Francis <alistair.fran...@wdc.com> a > écrit : > > > Reported-by: Eduardo Habkost <ehabk...@redhat.com> > > Signed-off-by: Alistair Francis <alistair.fran...@wdc.com> > > --- > > hw/core/register.c | 31 +++++++++++++------------------ > > 1 file changed, 13 insertions(+), 18 deletions(-) > > > > diff --git a/hw/core/register.c b/hw/core/register.c > > index ddf91eb445..31038bd7cc 100644 > > --- a/hw/core/register.c > > +++ b/hw/core/register.c > > @@ -176,17 +176,6 @@ void register_reset(RegisterInfo *reg) > > } > > } > > > > -void register_init(RegisterInfo *reg) > > -{ > > - assert(reg); > > - > > - if (!reg->data || !reg->access) { > > - return; > > - } > > - > > - object_initialize((void *)reg, sizeof(*reg), TYPE_REGISTER); > > -} > > - > > void register_write_memory(void *opaque, hwaddr addr, > > uint64_t value, unsigned size) > > { > > @@ -269,13 +258,18 @@ static RegisterInfoArray > > *register_init_block(DeviceState *owner, > > int index = rae[i].addr / data_size; > > RegisterInfo *r = &ri[index]; > > > > - *r = (RegisterInfo) { > > - .data = data + data_size * index, > > - .data_size = data_size, > > - .access = &rae[i], > > - .opaque = owner, > > - }; > > - register_init(r); > > + if (data + data_size * index == 0 || !&rae[i]) { > > + continue; > > + } > > + > > + /* Init the register, this will zero it. */ > > + object_initialize((void *)r, sizeof(*r), TYPE_REGISTER); > > > > Easier to review &ri[index] than that void* cast IMO.
BTW, I plan to make DECLARE_INSTANCE_CHECKER provide a object_initialize() wrapper, e.g. in the case of TYPE_REGISTER, the following function would be auto-generated: static void REGISTER_INIT(RegisterInfo *obj) { object_initialize((void *)obj, sizeof(*obj), TYPE_REGISTER); } so the line above could be simply rewritten as: REGISTER_INIT(r); > Otherwise: > Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> Thanks! -- Eduardo