aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/safexcel
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2021-01-18 22:07:56 +0000
committerMark Johnston <markj@FreeBSD.org>2021-01-18 22:07:56 +0000
commitb7e27af36b7df05f4b6cdc706750413f3a048640 (patch)
treed0642b321ca7d5ab05c528a6ab00f3801b6cfba1 /sys/dev/safexcel
parent0371c3faaa2412413d4fb44254b03124f97dfe66 (diff)
Diffstat (limited to 'sys/dev/safexcel')
-rw-r--r--sys/dev/safexcel/safexcel.c16
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);