Date: Mon, 21 Jan 2008 13:17:52 +0200 From: Stefan Lambrev <stefan.lambrev@moneybookers.com> To: Hans Petter Selasky <hselasky@c2i.net> Cc: freebsd-usb@freebsd.org Subject: Re: [SOLVED] Re: Problem with usb4bsd rev566 Message-ID: <47947F60.2080405@moneybookers.com> In-Reply-To: <200801171815.38196.hselasky@c2i.net> References: <477BC1A3.5080406@moneybookers.com> <200801161802.48506.hselasky@c2i.net> <478F8670.3030500@moneybookers.com> <200801171815.38196.hselasky@c2i.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi Hans, Sorry for my late reply. I just checked build with rev 574. with latest RELENG_7_0 and buildkernel finished successfully. I'll let you know if there are any problems when I boot the new kernel, or will be silent if everything is ok :) Hans Petter Selasky wrote: > On Thursday 17 January 2008, Stefan Lambrev wrote: > >> Hi Hans, >> >> Unfortunately with rev568 I still see: >> >> /usr/src/sys/dev/usb/usb_transfer.c: In function 'usbd_callback_intr_td': >> /usr/src/sys/dev/usb/usb_transfer.c:2094: warning: 'xfer[2]' may be used >> uninitialized in this function >> /usr/src/sys/dev/usb/usb_transfer.c:2094: warning: 'xfer[3]' may be used >> uninitialized in this function >> *** Error code 1 >> >> And the code does not compile. >> > > I've given it another try: > > +static void > +usbd_callback_intr_td_sub(struct usbd_xfer **xfer, uint8_t dropcount) > +{ > + struct usbd_memory_info *info = xfer[0]->usb_root; > + > + mtx_unlock(info->usb_mtx); > + > + /* > + * We exploit the fact that the mutex is the same for > + * all callbacks: > + */ > + mtx_lock(info->priv_mtx); > + > + /* call callback(s) */ > + switch (dropcount) { > + case 4: > + usbd_callback_wrapper(xfer[3], info, USBD_CONTEXT_CALLBACK); > + case 3: > + usbd_callback_wrapper(xfer[2], info, USBD_CONTEXT_CALLBACK); > + case 2: > + usbd_callback_wrapper(xfer[1], info, USBD_CONTEXT_CALLBACK); > + case 1: > + usbd_callback_wrapper(xfer[0], info, USBD_CONTEXT_CALLBACK); > + default: > + break; > + } > + mtx_unlock(info->priv_mtx); > + mtx_lock(info->usb_mtx); > + info->memory_refcount -= dropcount; > + return; > +} > + > /*------------------------------------------------------------------------* > * usbd_callback_intr_td > * > @@ -2093,7 +2125,6 @@ > struct usbd_memory_info *info = arg; > struct usbd_xfer *xfer[4]; > struct thread *td; > - uint8_t dropcount; > > /* adjust priority */ > td = curthread; > @@ -2110,60 +2141,31 @@ > repeat: > xfer[0] = LIST_FIRST(&(info->done_head)); > if (xfer[0]) { > - do { > LIST_REMOVE(xfer[0], done_list); > xfer[0]->done_list.le_prev = NULL; > xfer[1] = LIST_FIRST(&(info->done_head)); > if (xfer[1] == NULL) { > - dropcount = 1; > - break; > + usbd_callback_intr_td_sub(xfer, 1); > + goto repeat; > } > LIST_REMOVE(xfer[1], done_list); > xfer[1]->done_list.le_prev = NULL; > xfer[2] = LIST_FIRST(&(info->done_head)); > if (xfer[2] == NULL) { > - dropcount = 2; > - break; > + usbd_callback_intr_td_sub(xfer, 2); > + goto repeat; > } > LIST_REMOVE(xfer[2], done_list); > xfer[2]->done_list.le_prev = NULL; > xfer[3] = LIST_FIRST(&(info->done_head)); > if (xfer[3] == NULL) { > - dropcount = 3; > - break; > + usbd_callback_intr_td_sub(xfer, 3); > + goto repeat; > } > LIST_REMOVE(xfer[3], done_list); > xfer[3]->done_list.le_prev = NULL; > - dropcount = 4; > - } while (0); > - > - mtx_unlock(info->usb_mtx); > - > - /* > - * we exploit the fact that the mutex is the same for > - * all callbacks > - */ > - mtx_lock(info->priv_mtx); > - > - /* call callback(s) */ > - switch (dropcount) { > - case 4: > - usbd_callback_wrapper(xfer[3], info, > USBD_CONTEXT_CALLBACK); > - case 3: > - usbd_callback_wrapper(xfer[2], info, > USBD_CONTEXT_CALLBACK); > - case 2: > - usbd_callback_wrapper(xfer[1], info, > USBD_CONTEXT_CALLBACK); > - case 1: > - usbd_callback_wrapper(xfer[0], info, > USBD_CONTEXT_CALLBACK); > - default: > - break; > - } > - mtx_unlock(info->priv_mtx); > - > - mtx_lock(info->usb_mtx); > - info->memory_refcount -= dropcount; > - goto repeat; > - > + usbd_callback_intr_td_sub(xfer, 4); > + goto repeat; > } else { > if (info->memory_refcount != 0) { > info->done_sleep = 1; > > > > Could you do an "svn update" and see if it finally compiles without errors ? > > --HPS > > --HPS > -- Best Wishes, Stefan Lambrev ICQ# 24134177
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?47947F60.2080405>