usb kthreads
Andrew Thompson
thompsa at FreeBSD.org
Fri Aug 14 15:54:04 UTC 2009
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;
More information about the freebsd-current
mailing list