Date: Fri, 14 Aug 2009 08:53:57 -0700 From: Andrew Thompson <thompsa@FreeBSD.org> To: Julian Elischer <julian@elischer.org> Cc: Kostik Belousov <kostikbel@gmail.com>, current@freebsd.org, Hans Petter Selasky <hselasky@c2i.net> Subject: Re: usb kthreads Message-ID: <20090814155357.GA67039@citylink.fud.org.nz> In-Reply-To: <1280352d0908140845j2709fdcfme317fab916606209@mail.gmail.com> References: <20090813073002.GA66860@citylink.fud.org.nz> <4A84452B.4070306@elischer.org> <1280352d0908140845j2709fdcfme317fab916606209@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
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 - 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?20090814155357.GA67039>