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;