Message ID | 20221125140828.56636-1-akihiko.odaki@daynix.com |
---|---|
State | New |
Headers | show |
Series | e1000: Configure ResettableClass | expand |
On Fri, 25 Nov 2022 at 14:09, Akihiko Odaki <akihiko.odaki@daynix.com> wrote: > > This is part of recent efforts of refactoring e1000 and e1000e. > > DeviceClass's reset member is deprecated so migrate to ResettableClass. > Thre is no behavioral difference. > > Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> > --- > hw/net/e1000.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/hw/net/e1000.c b/hw/net/e1000.c > index e26e0a64c1..f97610d7e1 100644 > --- a/hw/net/e1000.c > +++ b/hw/net/e1000.c > @@ -1746,9 +1746,9 @@ static void pci_e1000_realize(PCIDevice *pci_dev, Error **errp) > e1000_flush_queue_timer, d); > } > > -static void qdev_e1000_reset(DeviceState *dev) > +static void qdev_e1000_reset(Object *obj) > { > - E1000State *d = E1000(dev); > + E1000State *d = E1000(obj); > e1000_reset(d); > } This function doesn't actually do anything except call e1000_reset(), which is not called from anywhere else. So we should: * delete this function entirely * update e1000_reset() to be named e1000_reset_hold() and to have the prototype for a reset phase function * directly set rc->phases.hold to e1000_reset_hold As well as being less code, this avoids having a function named "e1000_reset()" that gives the impression that you can do device reset by calling one function. That might be true now but if we ever need to add something to the other 2 phases of reset then it would stop being true. thanks -- PMM
diff --git a/hw/net/e1000.c b/hw/net/e1000.c index e26e0a64c1..f97610d7e1 100644 --- a/hw/net/e1000.c +++ b/hw/net/e1000.c @@ -1746,9 +1746,9 @@ static void pci_e1000_realize(PCIDevice *pci_dev, Error **errp) e1000_flush_queue_timer, d); } -static void qdev_e1000_reset(DeviceState *dev) +static void qdev_e1000_reset(Object *obj) { - E1000State *d = E1000(dev); + E1000State *d = E1000(obj); e1000_reset(d); } @@ -1777,6 +1777,7 @@ typedef struct E1000Info { static void e1000_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); + ResettableClass *rc = RESETTABLE_CLASS(klass); PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); E1000BaseClass *e = E1000_CLASS(klass); const E1000Info *info = data; @@ -1789,9 +1790,9 @@ static void e1000_class_init(ObjectClass *klass, void *data) k->revision = info->revision; e->phy_id2 = info->phy_id2; k->class_id = PCI_CLASS_NETWORK_ETHERNET; + rc->phases.hold = qdev_e1000_reset; set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); dc->desc = "Intel Gigabit Ethernet"; - dc->reset = qdev_e1000_reset; dc->vmsd = &vmstate_e1000; device_class_set_props(dc, e1000_properties); }
This is part of recent efforts of refactoring e1000 and e1000e. DeviceClass's reset member is deprecated so migrate to ResettableClass. Thre is no behavioral difference. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> --- hw/net/e1000.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)