On Tue, Apr 29, 2014 at 8:14 AM, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote: > On Tue, 29 Apr 2014, David Laight wrote: > >> From: Dan Williams >> > Before we add another 2 bitfields to the port state, convert it to an >> > unsigned long and use bitops helpers to manipulate it. This later >> > enables setting bits to request action without worrying about colliding >> > updates. In particular, a flag to request that the child device be >> > woken up when the port restores power is added in a later patch. >> ... >> > struct usb_port { >> > struct usb_device *child; >> > @@ -96,8 +95,9 @@ struct usb_port { >> > enum usb_port_connect_type connect_type; >> > usb_port_location_t location; >> > u8 portnum; >> > - unsigned power_is_on:1; >> > - unsigned did_runtime_put:1; >> > + #define USB_PORTDEV_POWER 0 >> > + #define USB_PORTDEV_DID_RUNTIME_PUT 1 >> > + unsigned long flags; >> > }; >> ... >> >> >> An alternative is to 'waste' 7 bits and use byte-sized fields >> for the separate flags. >> I doubt the size of the data structure matters. >> (Or do we have to worry about cpus that use RMW cycles for byte writes?) > > We do. > Right, last I recall archs don't guarantee atomic access of anything less than a long. > Another way to avoid the waste is to move the flags into the usb_hub > structure. > I don't see how that avoids waste? We need a long per flag. In the struct usb_port we can combine status and requests in the same storage. -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html