Re: usb kthreads

From: Andrew Thompson <thompsa_at_FreeBSD.org>
Date: Fri, 14 Aug 2009 08:53:57 -0700
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)
_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 - 13:54:04 UTC

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