Date: Thu, 27 Jul 2006 19:33:45 GMT From: Hans Petter Selasky <hselasky@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 102585 for review Message-ID: <200607271933.k6RJXjIT013163@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=102585 Change 102585 by hselasky@hselasky_mini_itx on 2006/07/27 19:33:41 Optimize UHCI and EHCI drivers by not scanning TD chains from the beginning, but rather store the position of the last checked TD and continue on from there. Affected files ... .. //depot/projects/usb/src/sys/dev/usb/ehci.c#7 edit .. //depot/projects/usb/src/sys/dev/usb/ohci.c#7 edit .. //depot/projects/usb/src/sys/dev/usb/uhci.c#7 edit .. //depot/projects/usb/src/sys/dev/usb/usb_subr.h#14 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/ehci.c#7 (text+ko) ==== @@ -1119,7 +1119,7 @@ DPRINTFN(12, ("xfer=%p active\n", xfer)); - for(td = xfer->td_transfer_first; + for(td = xfer->td_transfer_cache; td != NULL; td = ((td == xfer->td_transfer_last) ? NULL : td->obj_next)) { @@ -1134,6 +1134,8 @@ { DPRINTFN(12, ("xfer=%p is still " "active\n", xfer)); + /* update cache */ + xfer->td_transfer_cache = td; goto done; } @@ -1429,7 +1431,8 @@ xfer->address, UE_GET_ADDR(xfer->endpoint), xfer->length, xfer->udev->speed)); - td = (xfer->td_transfer_first = xfer->td_start); + td = (xfer->td_transfer_first = + xfer->td_transfer_cache = xfer->td_start); buf_offset = 0; usbd_get_page(&(xfer->buf_data), buf_offset, &buf_res); ==== //depot/projects/usb/src/sys/dev/usb/ohci.c#7 (text+ko) ==== ==== //depot/projects/usb/src/sys/dev/usb/uhci.c#7 (text+ko) ==== @@ -969,7 +969,7 @@ DPRINTFN(12, ("xfer=%p active\n", xfer)); - for(td = xfer->td_transfer_first; + for(td = xfer->td_transfer_cache; td != NULL; td = ((td == xfer->td_transfer_last) ? NULL : td->obj_next)) { @@ -984,6 +984,9 @@ { DPRINTFN(12, ("xfer=%p is still " "active\n", xfer)); + + /* update cache */ + xfer->td_transfer_cache = td; goto done; } @@ -1229,7 +1232,8 @@ xfer->address, UE_GET_ADDR(xfer->endpoint), xfer->length, xfer->udev->speed)); - td = (xfer->td_transfer_first = xfer->td_start); + td = (xfer->td_transfer_first = + xfer->td_transfer_cache = xfer->td_start); buf_offset = 0; usbd_get_page(&(xfer->buf_data), buf_offset, &buf_res); ==== //depot/projects/usb/src/sys/dev/usb/usb_subr.h#14 (text+ko) ==== @@ -405,6 +405,7 @@ void *td_start; void *td_transfer_first; void *td_transfer_last; + void *td_transfer_cache; #ifdef USB_COMPAT_OLD struct usbd_xfer * alloc_xfer; /* the real transfer */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200607271933.k6RJXjIT013163>