The branch main has been updated by jhb:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=717857819223d9c0f81eb38abd0df200532e1cdc

commit 717857819223d9c0f81eb38abd0df200532e1cdc
Author:     John Baldwin <[email protected]>
AuthorDate: 2021-11-02 18:26:21 +0000
Commit:     John Baldwin <[email protected]>
CommitDate: 2021-11-02 19:18:05 +0000

    crypto: Use a single "crypto" kproc for all of the OCF kthreads.
    
    Reported by:    julian
    Reviewed by:    markj
    MFC after:      1 week
    Sponsored by:   Chelsio Communications
    Differential Revision:  https://reviews.freebsd.org/D32739
---
 sys/opencrypto/crypto.c | 50 ++++++++++++++++++++++++-------------------------
 1 file changed, 25 insertions(+), 25 deletions(-)

diff --git a/sys/opencrypto/crypto.c b/sys/opencrypto/crypto.c
index 85c22fd51ee2..436444869e90 100644
--- a/sys/opencrypto/crypto.c
+++ b/sys/opencrypto/crypto.c
@@ -168,7 +168,7 @@ struct crypto_ret_worker {
        uint32_t reorder_ops;           /* total ordered sym jobs received */
        uint32_t reorder_cur_seq;       /* current sym job dispatched */
 
-       struct proc *cryptoretproc;
+       struct thread *td;
 };
 static struct crypto_ret_worker *crypto_ret_workers = NULL;
 
@@ -204,9 +204,9 @@ SYSCTL_INT(_kern, OID_AUTO, cryptodevallowsoft, 
CTLFLAG_RWTUN,
 
 MALLOC_DEFINE(M_CRYPTO_DATA, "crypto", "crypto session records");
 
-static void crypto_proc(void);
-static struct proc *cryptoproc;
-static void crypto_ret_proc(struct crypto_ret_worker *ret_worker);
+static void crypto_dispatch_thread(void *arg);
+static struct thread *cryptotd;
+static void crypto_ret_thread(void *arg);
 static void crypto_destroy(void);
 static int crypto_invoke(struct cryptocap *cap, struct cryptop *crp, int hint);
 static void crypto_task_invoke(void *ctx, int pending);
@@ -296,6 +296,7 @@ static int
 crypto_init(void)
 {
        struct crypto_ret_worker *ret_worker;
+       struct proc *p;
        int error;
 
        mtx_init(&crypto_drivers_mtx, "crypto", "crypto driver table",
@@ -321,8 +322,9 @@ crypto_init(void)
        taskqueue_start_threads(&crypto_tq, crypto_workers_num, PRI_MIN_KERN,
            "crypto");
 
-       error = kproc_create((void (*)(void *)) crypto_proc, NULL,
-                   &cryptoproc, 0, 0, "crypto");
+       p = NULL;
+       error = kproc_kthread_add(crypto_dispatch_thread, NULL, &p, &cryptotd,
+           0, 0, "crypto", "crypto");
        if (error) {
                printf("crypto_init: cannot start crypto thread; error %d",
                        error);
@@ -341,8 +343,9 @@ crypto_init(void)
 
                mtx_init(&ret_worker->crypto_ret_mtx, "crypto", "crypto return 
queues", MTX_DEF);
 
-               error = kproc_create((void (*)(void *)) crypto_ret_proc, 
ret_worker,
-                               &ret_worker->cryptoretproc, 0, 0, "crypto 
returns %td", CRYPTO_RETW_ID(ret_worker));
+               error = kthread_add(crypto_ret_thread, ret_worker, p,
+                   &ret_worker->td, 0, 0, "crypto returns %td",
+                   CRYPTO_RETW_ID(ret_worker));
                if (error) {
                        printf("crypto_init: cannot start cryptoret thread; 
error %d",
                                error);
@@ -366,20 +369,16 @@ bad:
  * for the other half of this song-and-dance.
  */
 static void
-crypto_terminate(struct proc **pp, void *q)
+crypto_terminate(struct thread **tdp, void *q)
 {
-       struct proc *p;
+       struct thread *td;
 
        mtx_assert(&crypto_drivers_mtx, MA_OWNED);
-       p = *pp;
-       *pp = NULL;
-       if (p) {
+       td = *tdp;
+       *tdp = NULL;
+       if (td != NULL) {
                wakeup_one(q);
-               PROC_LOCK(p);           /* NB: insure we don't miss wakeup */
-               CRYPTO_DRIVER_UNLOCK(); /* let crypto_finis progress */
-               msleep(p, &p->p_mtx, PWAIT, "crypto_destroy", 0);
-               PROC_UNLOCK(p);
-               CRYPTO_DRIVER_LOCK();
+               mtx_sleep(td, &crypto_drivers_mtx, PWAIT, "crypto_destroy", 0);
        }
 }
 
@@ -442,9 +441,9 @@ crypto_destroy(void)
        if (crypto_tq != NULL)
                taskqueue_drain_all(crypto_tq);
        CRYPTO_DRIVER_LOCK();
-       crypto_terminate(&cryptoproc, &crp_q);
+       crypto_terminate(&cryptotd, &crp_q);
        FOREACH_CRYPTO_RETW(ret_worker)
-               crypto_terminate(&ret_worker->cryptoretproc, 
&ret_worker->crp_ret_q);
+               crypto_terminate(&ret_worker->td, &ret_worker->crp_ret_q);
        CRYPTO_DRIVER_UNLOCK();
 
        /* XXX flush queues??? */
@@ -1708,14 +1707,14 @@ crypto_finis(void *chan)
        CRYPTO_DRIVER_LOCK();
        wakeup_one(chan);
        CRYPTO_DRIVER_UNLOCK();
-       kproc_exit(0);
+       kthread_exit();
 }
 
 /*
  * Crypto thread, dispatches crypto requests.
  */
 static void
-crypto_proc(void)
+crypto_dispatch_thread(void *arg __unused)
 {
        struct cryptop *crp, *submit;
        struct cryptocap *cap;
@@ -1804,7 +1803,7 @@ crypto_proc(void)
                        crp_sleep = 1;
                        msleep(&crp_q, &crypto_q_mtx, PWAIT, "crypto_wait", 0);
                        crp_sleep = 0;
-                       if (cryptoproc == NULL)
+                       if (cryptotd == NULL)
                                break;
                        CRYPTOSTAT_INC(cs_intrs);
                }
@@ -1820,8 +1819,9 @@ crypto_proc(void)
  * callbacks typically are expensive and would slow interrupt handling.
  */
 static void
-crypto_ret_proc(struct crypto_ret_worker *ret_worker)
+crypto_ret_thread(void *arg)
 {
+       struct crypto_ret_worker *ret_worker = arg;
        struct cryptop *crpt;
 
        CRYPTO_RETW_LOCK(ret_worker);
@@ -1858,7 +1858,7 @@ crypto_ret_proc(struct crypto_ret_worker *ret_worker)
                         */
                        msleep(&ret_worker->crp_ret_q, 
&ret_worker->crypto_ret_mtx, PWAIT,
                                "crypto_ret_wait", 0);
-                       if (ret_worker->cryptoretproc == NULL)
+                       if (ret_worker->td == NULL)
                                break;
                        CRYPTOSTAT_INC(cs_rets);
                }

Reply via email to