From owner-freebsd-current@FreeBSD.ORG Fri Aug 14 17:48:55 2009 Return-Path: Delivered-To: current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 71BB31065692 for ; Fri, 14 Aug 2009 17:48:55 +0000 (UTC) (envelope-from julian@elischer.org) Received: from outH.internet-mail-service.net (outh.internet-mail-service.net [216.240.47.231]) by mx1.freebsd.org (Postfix) with ESMTP id 54C7E8FC4B for ; Fri, 14 Aug 2009 17:48:55 +0000 (UTC) Received: from idiom.com (mx0.idiom.com [216.240.32.160]) by out.internet-mail-service.net (Postfix) with ESMTP id DE4A4C3FB; Fri, 14 Aug 2009 10:49:24 -0700 (PDT) X-Client-Authorized: MaGic Cook1e X-Client-Authorized: MaGic Cook1e X-Client-Authorized: MaGic Cook1e X-Client-Authorized: MaGic Cook1e Received: from julian-mac.elischer.org (home.elischer.org [216.240.48.38]) by idiom.com (Postfix) with ESMTP id 3A09D2D6012; Fri, 14 Aug 2009 10:48:54 -0700 (PDT) Message-ID: <4A85A387.1050705@elischer.org> Date: Fri, 14 Aug 2009 10:48:55 -0700 From: Julian Elischer User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Andrew Thompson References: <20090813073002.GA66860@citylink.fud.org.nz> <4A84452B.4070306@elischer.org> <1280352d0908140845j2709fdcfme317fab916606209@mail.gmail.com> <20090814155357.GA67039@citylink.fud.org.nz> In-Reply-To: <20090814155357.GA67039@citylink.fud.org.nz> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Kostik Belousov , current@freebsd.org, Hans Petter Selasky Subject: Re: usb kthreads X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2009 17:48:55 -0000 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; >