diff options
| author | Mark Johnston <markj@FreeBSD.org> | 2021-01-18 22:07:56 +0000 |
|---|---|---|
| committer | Mark Johnston <markj@FreeBSD.org> | 2021-01-18 22:07:56 +0000 |
| commit | b7e27af36b7df05f4b6cdc706750413f3a048640 (patch) | |
| tree | d0642b321ca7d5ab05c528a6ab00f3801b6cfba1 /sys/dev/safexcel | |
| parent | 0371c3faaa2412413d4fb44254b03124f97dfe66 (diff) | |
Diffstat (limited to 'sys/dev/safexcel')
| -rw-r--r-- | sys/dev/safexcel/safexcel.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/sys/dev/safexcel/safexcel.c b/sys/dev/safexcel/safexcel.c index c30b8178efb1..2f0f10f1d5e8 100644 --- a/sys/dev/safexcel/safexcel.c +++ b/sys/dev/safexcel/safexcel.c @@ -2093,7 +2093,7 @@ safexcel_create_chain_cb(void *arg, bus_dma_segment_t *segs, int nseg, if (cdesc == NULL) { safexcel_cmd_descr_rollback(ring, i); counter_u64_add(req->sc->sc_cdesc_alloc_failures, 1); - req->error = EAGAIN; + req->error = ERESTART; return; } if (i == 0) @@ -2121,7 +2121,7 @@ safexcel_create_chain_cb(void *arg, bus_dma_segment_t *segs, int nseg, ring->cmd_data->sg_nseg); safexcel_res_descr_rollback(ring, i); counter_u64_add(req->sc->sc_rdesc_alloc_failures, 1); - req->error = EAGAIN; + req->error = ERESTART; return; } } @@ -2608,10 +2608,16 @@ safexcel_process(device_t dev, struct cryptop *crp, int hint) error = safexcel_create_chain(ring, req); if (__predict_false(error != 0)) { safexcel_free_request(ring, req); + if (error == ERESTART) + ring->blocked = CRYPTO_SYMQ; mtx_unlock(&ring->mtx); - crp->crp_etype = error; - crypto_done(crp); - return (0); + if (error != ERESTART) { + crp->crp_etype = error; + crypto_done(crp); + return (0); + } else { + return (ERESTART); + } } safexcel_set_token(req); |
