diff mbox series

USB: usb.h: tweak struct urb to remove wasted space

Message ID 20190301172238.GA23800@kroah.com (mailing list archive)
State Mainlined
Commit 8e6b85945155da5af95dc0fa58ae38b86428deea
Headers show
Series USB: usb.h: tweak struct urb to remove wasted space | expand

Commit Message

Greg KH March 1, 2019, 5:22 p.m. UTC
By moving one field around in 'struct urb' we reduce the size of the
structure by 8 bytes.

Before the patch on x86_64 the overall size of the structure as reported
by pahole was:
	/* size: 192, cachelines: 3, members: 30 */
	/* sum members: 184, holes: 2, sum holes: 8 */
After the patch we now have:
	/* size: 184, cachelines: 3, members: 30 */
	/* last cacheline: 56 bytes */

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/linux/usb.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Oliver Neukum March 1, 2019, 7:44 p.m. UTC | #1
On Fr, 2019-03-01 at 18:22 +0100, Greg Kroah-Hartman wrote:
> By moving one field around in 'struct urb' we reduce the size of the
> structure by 8 bytes.

If you are going for this I have to ask why unlink and status
are full size ints anyway.

	Regards
		Oliver
Greg KH March 2, 2019, 8 a.m. UTC | #2
On Fri, Mar 01, 2019 at 08:44:13PM +0100, Oliver Neukum wrote:
> On Fr, 2019-03-01 at 18:22 +0100, Greg Kroah-Hartman wrote:
> > By moving one field around in 'struct urb' we reduce the size of the
> > structure by 8 bytes.
> 
> If you are going for this I have to ask why unlink and status
> are full size ints anyway.

History, they hold a "normal" negative error code.  I guess we could
turn them into s16, if it really matters, but that feels odd to me.

thanks,

greg k-h
Oliver Neukum March 2, 2019, 1:51 p.m. UTC | #3
On Sa, 2019-03-02 at 09:00 +0100, Greg Kroah-Hartman wrote:
> On Fri, Mar 01, 2019 at 08:44:13PM +0100, Oliver Neukum wrote:
> > On Fr, 2019-03-01 at 18:22 +0100, Greg Kroah-Hartman wrote:
> > > By moving one field around in 'struct urb' we reduce the size of the
> > > structure by 8 bytes.
> > 
> > If you are going for this I have to ask why unlink and status
> > are full size ints anyway.
> 
> History, they hold a "normal" negative error code.  I guess we could
> turn them into s16, if it really matters, but that feels odd to me.

Returning internal error codes to user space is a bug.

	Regards
		Oliver
Greg KH March 2, 2019, 2:36 p.m. UTC | #4
On Sat, Mar 02, 2019 at 02:51:41PM +0100, Oliver Neukum wrote:
> On Sa, 2019-03-02 at 09:00 +0100, Greg Kroah-Hartman wrote:
> > On Fri, Mar 01, 2019 at 08:44:13PM +0100, Oliver Neukum wrote:
> > > On Fr, 2019-03-01 at 18:22 +0100, Greg Kroah-Hartman wrote:
> > > > By moving one field around in 'struct urb' we reduce the size of the
> > > > structure by 8 bytes.
> > > 
> > > If you are going for this I have to ask why unlink and status
> > > are full size ints anyway.
> > 
> > History, they hold a "normal" negative error code.  I guess we could
> > turn them into s16, if it really matters, but that feels odd to me.
> 
> Returning internal error codes to user space is a bug.

Where does status and unlink end up going to userspace?  Maybe through
usbfs?

confused,

greg k-h
Oliver Neukum March 4, 2019, 6:31 p.m. UTC | #5
On Sa, 2019-03-02 at 15:36 +0100, Greg Kroah-Hartman wrote:
> On Sat, Mar 02, 2019 at 02:51:41PM +0100, Oliver Neukum wrote:
> > On Sa, 2019-03-02 at 09:00 +0100, Greg Kroah-Hartman wrote:
> > > On Fri, Mar 01, 2019 at 08:44:13PM +0100, Oliver Neukum wrote:
> > > > On Fr, 2019-03-01 at 18:22 +0100, Greg Kroah-Hartman wrote:
> > > > > By moving one field around in 'struct urb' we reduce the size of the
> > > > > structure by 8 bytes.
> > > > 
> > > > If you are going for this I have to ask why unlink and status
> > > > are full size ints anyway.
> > > 
> > > History, they hold a "normal" negative error code.  I guess we could
> > > turn them into s16, if it really matters, but that feels odd to me.
> > 
> > Returning internal error codes to user space is a bug.
> 
> Where does status and unlink end up going to userspace?  Maybe through
> usbfs?

Nowhere, I hope. Sorry for the confusion. I hope I fixed that some time
ago. My point here is that using the external errnos for internal error
report is not an advantage. In fact, it is a bad idea. A byte would be
ample to record internal errors.

	Regards
		Oliver
diff mbox series

Patch

diff --git a/include/linux/usb.h b/include/linux/usb.h
index 5e49e82c4368..4229eb74bd2c 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -1545,10 +1545,10 @@  typedef void (*usb_complete_t)(struct urb *);
 struct urb {
 	/* private: usb core and host controller only fields in the urb */
 	struct kref kref;		/* reference count of the URB */
+	int unlinked;			/* unlink error code */
 	void *hcpriv;			/* private data for host controller */
 	atomic_t use_count;		/* concurrent submissions counter */
 	atomic_t reject;		/* submissions will fail */
-	int unlinked;			/* unlink error code */
 
 	/* public: documented fields in the urb that can be used by drivers */
 	struct list_head urb_list;	/* list head for use by the urb's