Message ID | 20230213070820.76881-20-philmd@linaro.org |
---|---|
State | New |
Headers | show |
Series | hw: Use QOM macros and remove DO_UPCAST() uses | expand |
On 13/02/2023 08.08, Philippe Mathieu-Daudé wrote: > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > RFC Other devices don't use such helper. Maybe it should > be the other way around, introduce more bus_from_device() > helpers? > --- > hw/usb/bus.c | 10 +++++----- > hw/usb/core.c | 6 +++--- > hw/usb/dev-hub.c | 4 ++-- > hw/usb/dev-serial.c | 10 +++++----- > hw/usb/hcd-xhci.c | 2 +- > include/hw/usb.h | 5 ----- > 6 files changed, 16 insertions(+), 21 deletions(-) > > diff --git a/hw/usb/bus.c b/hw/usb/bus.c > index d7c3c71435..4a1b67761c 100644 > --- a/hw/usb/bus.c > +++ b/hw/usb/bus.c > @@ -427,7 +427,7 @@ void usb_unregister_port(USBBus *bus, USBPort *port) > > void usb_claim_port(USBDevice *dev, Error **errp) > { > - USBBus *bus = usb_bus_from_device(dev); > + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); You're certainly missing a proper justification in the patch description here. The "other devices don't use such a helper" does not sound like a real justification to me, since the code lines rather get longer this way. Thus this rather looks like unnecessary code churn to me --> rather drop the patch? Thomas
On 13/2/23 09:11, Thomas Huth wrote: > On 13/02/2023 08.08, Philippe Mathieu-Daudé wrote: >> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >> --- >> RFC Other devices don't use such helper. Maybe it should >> be the other way around, introduce more bus_from_device() >> helpers? >> --- >> hw/usb/bus.c | 10 +++++----- >> hw/usb/core.c | 6 +++--- >> hw/usb/dev-hub.c | 4 ++-- >> hw/usb/dev-serial.c | 10 +++++----- >> hw/usb/hcd-xhci.c | 2 +- >> include/hw/usb.h | 5 ----- >> 6 files changed, 16 insertions(+), 21 deletions(-) >> >> diff --git a/hw/usb/bus.c b/hw/usb/bus.c >> index d7c3c71435..4a1b67761c 100644 >> --- a/hw/usb/bus.c >> +++ b/hw/usb/bus.c >> @@ -427,7 +427,7 @@ void usb_unregister_port(USBBus *bus, USBPort *port) >> void usb_claim_port(USBDevice *dev, Error **errp) >> { >> - USBBus *bus = usb_bus_from_device(dev); >> + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); > > You're certainly missing a proper justification in the patch description > here. The "other devices don't use such a helper" does not sound like a > real justification to me, since the code lines rather get longer this > way. Thus this rather looks like unnecessary code churn to me --> rather > drop the patch? The idea is to avoid having 7 different ways of implementing something with 3 different APIs and 2 unfinished API conversions in flight. I'm wondering if the QOM DECLARE_xxx() macros could also define some xxx_BUS_FROM_DEV() or xxx_PARENT_BUS() macros. So here it would become: USBBus *bus = USB_PARENT_BUS(dev);
On 13/02/2023 09.44, Philippe Mathieu-Daudé wrote: > On 13/2/23 09:11, Thomas Huth wrote: >> On 13/02/2023 08.08, Philippe Mathieu-Daudé wrote: >>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >>> --- >>> RFC Other devices don't use such helper. Maybe it should >>> be the other way around, introduce more bus_from_device() >>> helpers? >>> --- >>> hw/usb/bus.c | 10 +++++----- >>> hw/usb/core.c | 6 +++--- >>> hw/usb/dev-hub.c | 4 ++-- >>> hw/usb/dev-serial.c | 10 +++++----- >>> hw/usb/hcd-xhci.c | 2 +- >>> include/hw/usb.h | 5 ----- >>> 6 files changed, 16 insertions(+), 21 deletions(-) >>> >>> diff --git a/hw/usb/bus.c b/hw/usb/bus.c >>> index d7c3c71435..4a1b67761c 100644 >>> --- a/hw/usb/bus.c >>> +++ b/hw/usb/bus.c >>> @@ -427,7 +427,7 @@ void usb_unregister_port(USBBus *bus, USBPort *port) >>> void usb_claim_port(USBDevice *dev, Error **errp) >>> { >>> - USBBus *bus = usb_bus_from_device(dev); >>> + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); >> >> You're certainly missing a proper justification in the patch description >> here. The "other devices don't use such a helper" does not sound like a >> real justification to me, since the code lines rather get longer this way. >> Thus this rather looks like unnecessary code churn to me --> rather drop >> the patch? > > The idea is to avoid having 7 different ways of implementing something > with 3 different APIs and 2 unfinished API conversions in flight. Ok, then please add such information to the patch description. > I'm wondering if the QOM DECLARE_xxx() macros could also define some > xxx_BUS_FROM_DEV() or xxx_PARENT_BUS() macros. So here it would become: > > USBBus *bus = USB_PARENT_BUS(dev); Sounds more readable at a first glance, but when looking at the output of: grep -r '(qdev_get_parent_bus' hw/ it seems like there aren't that many other places using this pattern (many places rather use BUS() instead), so it's maybe hard to justify such a change. Thus I think your patch here is likely the better solution right now (when you add a proper patch description). Thomas
On 13/2/23 10:11, Thomas Huth wrote: > On 13/02/2023 09.44, Philippe Mathieu-Daudé wrote: >> On 13/2/23 09:11, Thomas Huth wrote: >>> On 13/02/2023 08.08, Philippe Mathieu-Daudé wrote: >>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >>>> --- >>>> RFC Other devices don't use such helper. Maybe it should >>>> be the other way around, introduce more bus_from_device() >>>> helpers? >>>> --- >>>> hw/usb/bus.c | 10 +++++----- >>>> hw/usb/core.c | 6 +++--- >>>> hw/usb/dev-hub.c | 4 ++-- >>>> hw/usb/dev-serial.c | 10 +++++----- >>>> hw/usb/hcd-xhci.c | 2 +- >>>> include/hw/usb.h | 5 ----- >>>> 6 files changed, 16 insertions(+), 21 deletions(-) >>>> >>>> diff --git a/hw/usb/bus.c b/hw/usb/bus.c >>>> index d7c3c71435..4a1b67761c 100644 >>>> --- a/hw/usb/bus.c >>>> +++ b/hw/usb/bus.c >>>> @@ -427,7 +427,7 @@ void usb_unregister_port(USBBus *bus, USBPort >>>> *port) >>>> void usb_claim_port(USBDevice *dev, Error **errp) >>>> { >>>> - USBBus *bus = usb_bus_from_device(dev); >>>> + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); >>> >>> You're certainly missing a proper justification in the patch >>> description here. The "other devices don't use such a helper" does >>> not sound like a real justification to me, since the code lines >>> rather get longer this way. Thus this rather looks like unnecessary >>> code churn to me --> rather drop the patch? >> >> The idea is to avoid having 7 different ways of implementing something >> with 3 different APIs and 2 unfinished API conversions in flight. > > Ok, then please add such information to the patch description. > >> I'm wondering if the QOM DECLARE_xxx() macros could also define some >> xxx_BUS_FROM_DEV() or xxx_PARENT_BUS() macros. So here it would become: >> >> USBBus *bus = USB_PARENT_BUS(dev); > > Sounds more readable at a first glance, but when looking at the output of: > > grep -r '(qdev_get_parent_bus' hw/ > > it seems like there aren't that many other places using this pattern > (many places rather use BUS() instead), so it's maybe hard to justify > such a change. There is another helper, scsi_bus_from_device(), but is only used twice. The previous patch "hw/scsi/scsi-bus: Inline two uses of scsi_bus_from_device()" remove it. > Thus I think your patch here is likely the better > solution right now (when you add a proper patch description). OK, thanks!
diff --git a/hw/usb/bus.c b/hw/usb/bus.c index d7c3c71435..4a1b67761c 100644 --- a/hw/usb/bus.c +++ b/hw/usb/bus.c @@ -427,7 +427,7 @@ void usb_unregister_port(USBBus *bus, USBPort *port) void usb_claim_port(USBDevice *dev, Error **errp) { - USBBus *bus = usb_bus_from_device(dev); + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); USBPort *port; USBDevice *hub; @@ -473,7 +473,7 @@ void usb_claim_port(USBDevice *dev, Error **errp) void usb_release_port(USBDevice *dev) { - USBBus *bus = usb_bus_from_device(dev); + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); USBPort *port = dev->port; assert(port != NULL); @@ -517,7 +517,7 @@ static void usb_mask_to_str(char *dest, size_t size, void usb_check_attach(USBDevice *dev, Error **errp) { - USBBus *bus = usb_bus_from_device(dev); + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); USBPort *port = dev->port; char devspeed[32], portspeed[32]; @@ -555,7 +555,7 @@ void usb_device_attach(USBDevice *dev, Error **errp) int usb_device_detach(USBDevice *dev) { - USBBus *bus = usb_bus_from_device(dev); + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); USBPort *port = dev->port; assert(port != NULL); @@ -583,7 +583,7 @@ static const char *usb_speed(unsigned int speed) static void usb_bus_dev_print(Monitor *mon, DeviceState *qdev, int indent) { USBDevice *dev = USB_DEVICE(qdev); - USBBus *bus = usb_bus_from_device(dev); + USBBus *bus = USB_BUS(qdev_get_parent_bus(qdev)); monitor_printf(mon, "%*saddr %d.%d, port %s, speed %s, name %s%s\n", indent, "", bus->busnr, dev->addr, diff --git a/hw/usb/core.c b/hw/usb/core.c index 975f76250a..f358f0313a 100644 --- a/hw/usb/core.c +++ b/hw/usb/core.c @@ -95,7 +95,7 @@ void usb_device_reset(USBDevice *dev) void usb_wakeup(USBEndpoint *ep, unsigned int stream) { USBDevice *dev = ep->dev; - USBBus *bus = usb_bus_from_device(dev); + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); if (!phase_check(PHASE_MACHINE_READY)) { /* @@ -556,7 +556,7 @@ void usb_packet_check_state(USBPacket *p, USBPacketState expected) return; } dev = p->ep->dev; - bus = usb_bus_from_device(dev); + bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); trace_usb_packet_state_fault(bus->busnr, dev->port->path, p->ep->nr, p, usb_packet_state_name(p->state), usb_packet_state_name(expected)); @@ -567,7 +567,7 @@ void usb_packet_set_state(USBPacket *p, USBPacketState state) { if (p->ep) { USBDevice *dev = p->ep->dev; - USBBus *bus = usb_bus_from_device(dev); + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); trace_usb_packet_state_change(bus->busnr, dev->port->path, p->ep->nr, p, usb_packet_state_name(p->state), usb_packet_state_name(state)); diff --git a/hw/usb/dev-hub.c b/hw/usb/dev-hub.c index 4734700e3e..4a0bcc4093 100644 --- a/hw/usb/dev-hub.c +++ b/hw/usb/dev-hub.c @@ -572,7 +572,7 @@ static void usb_hub_unrealize(USBDevice *dev) int i; for (i = 0; i < s->num_ports; i++) { - usb_unregister_port(usb_bus_from_device(dev), + usb_unregister_port(USB_BUS(qdev_get_parent_bus(DEVICE(dev))), &s->ports[i].port); } @@ -611,7 +611,7 @@ static void usb_hub_realize(USBDevice *dev, Error **errp) s->intr = usb_ep_get(dev, USB_TOKEN_IN, 1); for (i = 0; i < s->num_ports; i++) { port = &s->ports[i]; - usb_register_port(usb_bus_from_device(dev), + usb_register_port(USB_BUS(qdev_get_parent_bus(DEVICE(dev))), &port->port, s, i, &usb_hub_port_ops, USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL); usb_port_location(&port->port, dev->port, i+1); diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index 63047d79cf..0194bb541b 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -190,7 +190,7 @@ static void usb_serial_set_flow_control(USBSerialState *s, uint8_t flow_control) { USBDevice *dev = USB_DEVICE(s); - USBBus *bus = usb_bus_from_device(dev); + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); /* TODO: ioctl */ s->flow_control = flow_control; @@ -200,7 +200,7 @@ static void usb_serial_set_flow_control(USBSerialState *s, static void usb_serial_set_xonxoff(USBSerialState *s, int xonxoff) { USBDevice *dev = USB_DEVICE(s); - USBBus *bus = usb_bus_from_device(dev); + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); s->xon = xonxoff & 0xff; s->xoff = (xonxoff >> 8) & 0xff; @@ -221,7 +221,7 @@ static void usb_serial_reset(USBSerialState *s) static void usb_serial_handle_reset(USBDevice *dev) { USBSerialState *s = USB_SERIAL(dev); - USBBus *bus = usb_bus_from_device(dev); + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); trace_usb_serial_reset(bus->busnr, dev->addr); @@ -261,7 +261,7 @@ static void usb_serial_handle_control(USBDevice *dev, USBPacket *p, int length, uint8_t *data) { USBSerialState *s = USB_SERIAL(dev); - USBBus *bus = usb_bus_from_device(dev); + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); int ret; trace_usb_serial_handle_control(bus->busnr, dev->addr, request, value); @@ -479,7 +479,7 @@ static void usb_serial_token_in(USBSerialState *s, USBPacket *p) static void usb_serial_handle_data(USBDevice *dev, USBPacket *p) { USBSerialState *s = USB_SERIAL(dev); - USBBus *bus = usb_bus_from_device(dev); + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(dev))); uint8_t devep = p->ep->nr; struct iovec *iov; int i; diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c index b89b618ec2..94c2e58aaf 100644 --- a/hw/usb/hcd-xhci.c +++ b/hw/usb/hcd-xhci.c @@ -3268,7 +3268,7 @@ static void xhci_complete(USBPort *port, USBPacket *packet) static void xhci_child_detach(USBPort *uport, USBDevice *child) { - USBBus *bus = usb_bus_from_device(child); + USBBus *bus = USB_BUS(qdev_get_parent_bus(DEVICE(child))); XHCIState *xhci = container_of(bus, XHCIState, bus); xhci_detach_slot(xhci, child->port); diff --git a/include/hw/usb.h b/include/hw/usb.h index f743a5e945..4a2987c477 100644 --- a/include/hw/usb.h +++ b/include/hw/usb.h @@ -518,11 +518,6 @@ void usb_device_attach(USBDevice *dev, Error **errp); int usb_device_detach(USBDevice *dev); void usb_check_attach(USBDevice *dev, Error **errp); -static inline USBBus *usb_bus_from_device(USBDevice *d) -{ - return USB_BUS(qdev_get_parent_bus(DEVICE(d))); -} - extern const VMStateDescription vmstate_usb_device; #define VMSTATE_USB_DEVICE(_field, _state) { \
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- RFC Other devices don't use such helper. Maybe it should be the other way around, introduce more bus_from_device() helpers? --- hw/usb/bus.c | 10 +++++----- hw/usb/core.c | 6 +++--- hw/usb/dev-hub.c | 4 ++-- hw/usb/dev-serial.c | 10 +++++----- hw/usb/hcd-xhci.c | 2 +- include/hw/usb.h | 5 ----- 6 files changed, 16 insertions(+), 21 deletions(-)