On 10/5/10, Julian Elischer <jul...@freebsd.org> wrote:
>   On 10/5/10 1:19 PM, Paul B Mahol wrote:
>> Hi,
>>
>> If clang did not complain, I would probbaly never spot it.
>>
>> Patch attached.
>
> personally I think you could use kproc_kthread_add so that a single
> NDIS process had three threads.

Patch attached. Now we have single "ndis" kernel process with own threads.
diff --git a/sys/compat/ndis/subr_ntoskrnl.c b/sys/compat/ndis/subr_ntoskrnl.c
index 714fcd8..eafbb7c 100644
--- a/sys/compat/ndis/subr_ntoskrnl.c
+++ b/sys/compat/ndis/subr_ntoskrnl.c
@@ -254,6 +254,7 @@ static int32_t KeDelayExecutionThread(uint8_t, uint8_t, 
int64_t *);
 static int32_t KeSetPriorityThread(struct thread *, int32_t);
 static void dummy(void);
 
+static struct proc *ndisproc;
 static struct mtx ntoskrnl_dispatchlock;
 static struct mtx ntoskrnl_interlock;
 static kspin_lock ntoskrnl_cancellock;
@@ -270,7 +271,7 @@ ntoskrnl_libinit()
 {
        image_patch_table       *patch;
        int                     error;
-       struct proc             *p;
+       struct thread           *t;
        kdpc_queue              *kq;
        callout_entry           *e;
        int                     i;
@@ -320,8 +321,9 @@ ntoskrnl_libinit()
 #endif
                kq = kq_queues + i;
                kq->kq_cpu = i;
-               error = kproc_create(ntoskrnl_dpc_thread, kq, &p,
-                   RFHIGHPID, NDIS_KSTACK_PAGES, "Windows DPC %d", i);
+               error = kproc_kthread_add(ntoskrnl_dpc_thread, kq,
+                   &ndisproc, &t, RFHIGHPID, NDIS_KSTACK_PAGES, "ndis",
+                   "Windows DPC %d", i);
                if (error)
                        panic("failed to launch DPC thread");
        }
@@ -332,8 +334,9 @@ ntoskrnl_libinit()
 
        for (i = 0; i < WORKITEM_THREADS; i++) {
                kq = wq_queues + i;
-               error = kproc_create(ntoskrnl_workitem_thread, kq, &p,
-                   RFHIGHPID, NDIS_KSTACK_PAGES, "Windows Workitem %d", i);
+               error = kproc_kthread_add(ntoskrnl_workitem_thread, kq,
+                   &ndisproc, &t, RFHIGHPID, NDIS_KSTACK_PAGES, "ndis",
+                   "Windows Workitem %d", i);
                if (error)
                        panic("failed to launch workitem thread");
        }
@@ -2701,7 +2704,7 @@ ntoskrnl_workitem_thread(arg)
 #if __FreeBSD_version < 502113
        mtx_lock(&Giant);
 #endif
-       kproc_exit(0);
+       kthread_exit();
        return; /* notreached */
 }
 
@@ -3380,7 +3383,7 @@ PsCreateSystemThread(handle, reqaccess, objattrs, phandle,
 {
        int                     error;
        thread_context          *tc;
-       struct proc             *p;
+       struct thread           *t;
 
        tc = malloc(sizeof(thread_context), M_TEMP, M_NOWAIT);
        if (tc == NULL)
@@ -3389,15 +3392,16 @@ PsCreateSystemThread(handle, reqaccess, objattrs, 
phandle,
        tc->tc_thrctx = thrctx;
        tc->tc_thrfunc = thrfunc;
 
-       error = kproc_create(ntoskrnl_thrfunc, tc, &p,
-           RFHIGHPID, NDIS_KSTACK_PAGES, "Windows Kthread %d", ntoskrnl_kth);
+       error = kproc_kthread_add(ntoskrnl_thrfunc, tc, &ndisproc, &t,
+           RFHIGHPID, NDIS_KSTACK_PAGES, "ndis",
+           "Windows Kthread %d", ntoskrnl_kth);
 
        if (error) {
                free(tc, M_TEMP);
                return (STATUS_INSUFFICIENT_RESOURCES);
        }
 
-       *handle = p;
+       *handle = t;
        ntoskrnl_kth++;
 
        return (STATUS_SUCCESS);
@@ -3432,7 +3436,7 @@ PsTerminateSystemThread(status)
 #if __FreeBSD_version < 502113
        mtx_lock(&Giant);
 #endif
-       kproc_exit(0);
+       kthread_exit();
        return (0);     /* notreached */
 }
 
@@ -3740,7 +3744,7 @@ ntoskrnl_dpc_thread(arg)
 #if __FreeBSD_version < 502113
        mtx_lock(&Giant);
 #endif
-       kproc_exit(0);
+       kthread_exit();
        return; /* notreached */
 }
 
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to