On 01/19/2018 03:15 PM, Eduardo Habkost wrote: > On Tue, Jan 16, 2018 at 10:15:46AM -0300, Philippe Mathieu-Daudé wrote: >> Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> >> --- >> hw/i2c/smbus_eeprom.c | 5 ++--- >> 1 file changed, 2 insertions(+), 3 deletions(-) >> >> diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c >> index b13ec0fe7a..7e81ae4fe5 100644 >> --- a/hw/i2c/smbus_eeprom.c >> +++ b/hw/i2c/smbus_eeprom.c >> @@ -97,12 +97,11 @@ static uint8_t eeprom_read_data(SMBusDevice *dev, >> uint8_t cmd, int n) >> return eeprom_receive_byte(dev); >> } >> >> -static int smbus_eeprom_initfn(SMBusDevice *dev) >> +static void smbus_eeprom_reset(DeviceState *dev) >> { >> SMBusEEPROMDevice *eeprom = (SMBusEEPROMDevice *)dev; >> >> eeprom->offset = 0; >> - return 0; >> } >> >> static Property smbus_eeprom_properties[] = { >> @@ -115,7 +114,7 @@ static void smbus_eeprom_class_initfn(ObjectClass >> *klass, void *data) >> DeviceClass *dc = DEVICE_CLASS(klass); >> SMBusDeviceClass *sc = SMBUS_DEVICE_CLASS(klass); >> >> - sc->init = smbus_eeprom_initfn; >> + dc->reset = smbus_eeprom_reset; > > Trying to track down when each of these methods is called: > > sc->init (SMBusDeviceClass::init) > -> called by i2c_slave_qdev_init() (DeviceClass:init) > -> called by device_realize() (DeviceClass::realize) > -> called by device_set_realized() > -> QOM setter for "realized" property > -> (multiple callers) > > (eww, so many indirections) > > dc->reset (DeviceClass::reset) > -> called by device_reset() > -> (multiple callers) > > (much better!) > > > It looks like this changes how the device behaves. Is this > fixing a device emulation bug? If not, why should the device set > offset=0 on DeviceClass::reset, and not DeviceClass::realize?
You right, if this is a device bugfix (which I'm not sure) this is unrelated to this series, so I'll just drop it. > > >> sc->quick_cmd = eeprom_quick_cmd; >> sc->send_byte = eeprom_send_byte; >> sc->receive_byte = eeprom_receive_byte; >> -- >> 2.15.1 >> >> >