Module Name:    src
Committed By:   skrll
Date:           Wed Oct 21 07:36:31 UTC 2015

Modified Files:
        src/sys/dev/usb [nick-nhusb]: usbdi.c usbdivar.h

Log Message:
Cache the usbd_bus pointer in the usbd_xfer struct for memory allocation
and softc access.  This removes a level of indirection for memory
allocation.

Also cache the xfer pipe methods for later (temporary?) use.


To generate a diff of this commit:
cvs rdiff -u -r1.162.2.32 -r1.162.2.33 src/sys/dev/usb/usbdi.c
cvs rdiff -u -r1.109.2.19 -r1.109.2.20 src/sys/dev/usb/usbdivar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/usb/usbdi.c
diff -u src/sys/dev/usb/usbdi.c:1.162.2.32 src/sys/dev/usb/usbdi.c:1.162.2.33
--- src/sys/dev/usb/usbdi.c:1.162.2.32	Mon Oct 12 10:18:54 2015
+++ src/sys/dev/usb/usbdi.c	Wed Oct 21 07:36:31 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdi.c,v 1.162.2.32 2015/10/12 10:18:54 skrll Exp $	*/
+/*	$NetBSD: usbdi.c,v 1.162.2.33 2015/10/21 07:36:31 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2012, 2015 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.162.2.32 2015/10/12 10:18:54 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.162.2.33 2015/10/21 07:36:31 skrll Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_usb.h"
@@ -380,7 +380,7 @@ usbd_alloc_buffer(struct usbd_xfer *xfer
 
 	xfer->ux_bufsize = 0;
 #if NUSB_DMA > 0
-	struct usbd_bus *bus = xfer->ux_dev->ud_bus;
+	struct usbd_bus *bus = xfer->ux_bus;
 
 	if (bus->ub_usedma) {
 		usb_dma_t *dmap = &xfer->ux_dmabuf;
@@ -395,7 +395,7 @@ usbd_alloc_buffer(struct usbd_xfer *xfer
 		return xfer->ux_buf;
 	}
 #endif
-	KASSERT(xfer->ux_dev->ud_bus->ub_usedma == false);
+	KASSERT(xfer->ux_bus->ub_usedma == false);
 	xfer->ux_buf = kmem_alloc(size, KM_SLEEP);
 
 	if (xfer->ux_buf != NULL) {
@@ -418,7 +418,7 @@ usbd_free_buffer(struct usbd_xfer *xfer)
 	xfer->ux_bufsize = 0;
 
 #if NUSB_DMA > 0
-	struct usbd_bus *bus = xfer->ux_dev->ud_bus;
+	struct usbd_bus *bus = xfer->ux_bus;
 
 	if (bus->ub_usedma) {
 		usb_dma_t *dmap = &xfer->ux_dmabuf;
@@ -427,7 +427,7 @@ usbd_free_buffer(struct usbd_xfer *xfer)
 		return;
 	}
 #endif
-	KASSERT(xfer->ux_dev->ud_bus->ub_usedma == false);
+	KASSERT(xfer->ux_bus->ub_usedma == false);
 
 	kmem_free(buf, size);
 }
@@ -457,7 +457,7 @@ usbd_alloc_xfer(struct usbd_device *dev,
 	xfer = dev->ud_bus->ub_methods->ubm_allocx(dev->ud_bus, nframes);
 	if (xfer == NULL)
 		return NULL;
-	xfer->ux_dev = dev;
+	xfer->ux_bus = dev->ud_bus;
 	callout_init(&xfer->ux_callout, CALLOUT_MPSAFE);
 	cv_init(&xfer->ux_cv, "usbxfer");
 	cv_init(&xfer->ux_hccv, "usbhcxfer");
@@ -484,7 +484,7 @@ usbd_free_xfer(struct usbd_xfer *xfer)
 #endif
 	cv_destroy(&xfer->ux_cv);
 	cv_destroy(&xfer->ux_hccv);
-	xfer->ux_dev->ud_bus->ub_methods->ubm_freex(xfer->ux_dev->ud_bus, xfer);
+	xfer->ux_bus->ub_methods->ubm_freex(xfer->ux_bus, xfer);
 	return USBD_NORMAL_COMPLETION;
 }
 
@@ -509,9 +509,10 @@ usbd_create_xfer(struct usbd_pipe *pipe,
 	xfer->ux_pipe = pipe;
 	xfer->ux_flags = flags;
 	xfer->ux_nframes = nframes;
+	xfer->ux_methods = pipe->up_methods;
 
-	if (xfer->ux_pipe->up_methods->upm_init) {
-		int err = xfer->ux_pipe->up_methods->upm_init(xfer);
+	if (xfer->ux_methods->upm_init) {
+		int err = xfer->ux_methods->upm_init(xfer);
 		if (err) {
 			if (buf)
 				usbd_free_buffer(xfer);
@@ -527,8 +528,8 @@ usbd_create_xfer(struct usbd_pipe *pipe,
 void usbd_destroy_xfer(struct usbd_xfer *xfer)
 {
 
-	if (xfer->ux_pipe->up_methods->upm_fini) {
-		xfer->ux_pipe->up_methods->upm_fini(xfer);
+	if (xfer->ux_methods->upm_fini) {
+		xfer->ux_methods->upm_fini(xfer);
 	}
 
 	usbd_free_xfer(xfer);

Index: src/sys/dev/usb/usbdivar.h
diff -u src/sys/dev/usb/usbdivar.h:1.109.2.19 src/sys/dev/usb/usbdivar.h:1.109.2.20
--- src/sys/dev/usb/usbdivar.h:1.109.2.19	Mon Oct 12 10:18:54 2015
+++ src/sys/dev/usb/usbdivar.h	Wed Oct 21 07:36:31 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdivar.h,v 1.109.2.19 2015/10/12 10:18:54 skrll Exp $	*/
+/*	$NetBSD: usbdivar.h,v 1.109.2.20 2015/10/21 07:36:31 skrll Exp $	*/
 
 /*
  * Copyright (c) 1998, 2012 The NetBSD Foundation, Inc.
@@ -260,8 +260,10 @@ struct usbd_xfer {
 	uint16_t		*ux_frlengths;
 	int			ux_nframes;
 
-	/* For memory allocation */
-	struct usbd_device     *ux_dev;
+	const struct usbd_pipe_methods *ux_methods;
+
+	/* For memory allocation and softc */
+	struct usbd_bus        *ux_bus;
 	usb_dma_t		ux_dmabuf;
 	void		       *ux_buf;
 	uint32_t		ux_bufsize;

Reply via email to