usb kthreads
Julian Elischer
julian at elischer.org
Fri Aug 14 17:48:55 UTC 2009
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;
>
More information about the freebsd-current
mailing list