diff mbox series

[RFC,v2,19/19] hw/usb: Inline usb_bus_from_device()

Message ID 20230213070820.76881-20-philmd@linaro.org
State New
Headers show
Series hw: Use QOM macros and remove DO_UPCAST() uses | expand

Commit Message

Philippe Mathieu-Daudé Feb. 13, 2023, 7:08 a.m. UTC
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(-)

Comments

Thomas Huth Feb. 13, 2023, 8:11 a.m. UTC | #1
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
Philippe Mathieu-Daudé Feb. 13, 2023, 8:44 a.m. UTC | #2
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);
Thomas Huth Feb. 13, 2023, 9:11 a.m. UTC | #3
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
Philippe Mathieu-Daudé Feb. 13, 2023, 9:49 a.m. UTC | #4
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 mbox series

Patch

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) {                         \