On (22/12/14 14:45), Laurent Pinchart wrote: > On Wed, Dec 14, 2022 at 12:23:41PM +0100, Ricardo Ribalda wrote: > > UVC_MAX_STATUS_SIZE is 16, simplify the code by inlining dev->status. > > The reason why uvc_status is allocated dynamically is to ensure cache > line alignment, as the USB host controller may DMA to the buffer. Oh, that's a very subtle detail. > > +struct uvc_status_streaming { > > + u8 button; > > +} __packed; > > + > > +struct uvc_status_control { > > + u8 bSelector; > > + u8 bAttribute; > > + u8 bValue[11]; > > +} __packed; > > + > > +struct uvc_status { > > + u8 bStatusType; > > + u8 bOriginator; > > + u8 bEvent; > > + union { > > + struct uvc_status_control control; > > + struct uvc_status_streaming streaming; > > + }; > > +} __packed; > > + > > struct uvc_device { > > struct usb_device *udev; > > struct usb_interface *intf; > > @@ -559,7 +579,7 @@ struct uvc_device { > > /* Status Interrupt Endpoint */ > > struct usb_host_endpoint *int_ep; > > struct urb *int_urb; > > - u8 *status; > > + struct uvc_status status; So we can do something like this maybe? + struct uvc_status status ____cacheline_aligned; And this actually even improves code readability, IMHO, in a sense that we explicitly say that it has to be cache aligned.