Date: Fri, 14 Aug 2009 10:48:55 -0700 From: Julian Elischer <julian@elischer.org> To: Andrew Thompson <thompsa@FreeBSD.org> Cc: Kostik Belousov <kostikbel@gmail.com>, current@freebsd.org, Hans Petter Selasky <hselasky@c2i.net> Subject: Re: usb kthreads Message-ID: <4A85A387.1050705@elischer.org> In-Reply-To: <20090814155357.GA67039@citylink.fud.org.nz> References: <20090813073002.GA66860@citylink.fud.org.nz> <4A84452B.4070306@elischer.org> <1280352d0908140845j2709fdcfme317fab916606209@mail.gmail.com> <20090814155357.GA67039@citylink.fud.org.nz>
next in thread | previous in thread | raw e-mail | index | archive | help
Andrew Thompson wrote: > Julian Elischer wrote: >> Andrew Thompson wrote: >>> Hi, >>> >>> >>> Here is an aesthetic patch to change the usb kernel processes to threads, >>> this hides them from the usual 'ps' output. Please test and review. >>> >>> ?1290 ??? ?DL ? ? 0:00.00 [usbus0] >>> ?[lots and lots more...] >>> ?1309 ??? ?DL ? ? 0:00.00 [usbus4] >>> >> use kproc_kthread_add() >> to create a seoarate usb process and make all the threads belong to >> that process. >> (kproc_kthread_add() will create a new process the first time >> and add more threads to it the more it is run.) > > > Patch updated with the various feedback. > > PID TT STAT TIME COMMAND > 0 ?? DLs 0:00.38 [kernel] > 1 ?? ILs 0:00.01 /sbin/init -- > 2 ?? DL 0:09.66 [g_event] > 3 ?? DL 0:00.20 [g_up] > 4 ?? DL 0:00.20 [g_down] > ... > 18 ?? DL 0:00.06 [acpi_thermal] > 19 ?? DL 0:00.04 [usb] > > % procstat -t 19 > PID TID COMM TDNAME CPU PRI STATE WCHAN > 19 100040 usb usbus0 0 20 sleep - > 19 100041 usb usbus0 0 16 sleep - > 19 100042 usb usbus0 0 20 sleep - > 19 100043 usb usbus0 0 20 sleep - the thread names have full printf capability.. how about giving them different names :-) usbus%d-%d > > > Andrew > > > Index: usb_process.c > =================================================================== > --- usb_process.c (revision 196086) > +++ usb_process.c (working copy) > @@ -63,10 +63,12 @@ > #endif > > #if (__FreeBSD_version >= 800000) > +static struct proc *usbproc; > #define USB_THREAD_CREATE(f, s, p, ...) \ > - kproc_create((f), (s), (p), RFHIGHPID, 0, __VA_ARGS__) > -#define USB_THREAD_SUSPEND(p) kproc_suspend(p,0) > -#define USB_THREAD_EXIT(err) kproc_exit(err) > + kproc_kthread_add((f), (s), &usbproc, (p), RFHIGHPID, \ > + 0, "usb", __VA_ARGS__) > +#define USB_THREAD_SUSPEND(p) kthread_suspend(p,0) > +#define USB_THREAD_EXIT(err) kthread_exit() > #else > #define USB_THREAD_CREATE(f, s, p, ...) \ > kthread_create((f), (s), (p), RFHIGHPID, 0, __VA_ARGS__) > @@ -207,8 +209,8 @@ usb_proc_create(struct usb_process *up, struct mtx > > TAILQ_INIT(&up->up_qhead); > > - cv_init(&up->up_cv, "wmsg"); > - cv_init(&up->up_drain, "dmsg"); > + cv_init(&up->up_cv, "-"); > + cv_init(&up->up_drain, "usbdrain"); > > if (USB_THREAD_CREATE(&usb_process, up, > &up->up_ptr, pmesg)) { > Index: usb_process.h > =================================================================== > --- usb_process.h (revision 196086) > +++ usb_process.h (working copy) > @@ -49,7 +49,11 @@ struct usb_process { > struct cv up_cv; > struct cv up_drain; > > +#if (__FreeBSD_version >= 800000) > + struct thread *up_ptr; > +#else > struct proc *up_ptr; > +#endif > struct thread *up_curtd; > struct mtx *up_mtx; >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A85A387.1050705>