Re: usb kthreads

From: Julian Elischer <julian_at_elischer.org>
Date: Fri, 14 Aug 2009 10:48:55 -0700
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)
> _at__at_ -63,10 +63,12 _at__at_
>  #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__)
> _at__at_ -207,8 +209,8 _at__at_ 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)
> _at__at_ -49,7 +49,11 _at__at_ 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;
>  
Received on Fri Aug 14 2009 - 15:48:55 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:53 UTC