|
Lines 286-291
struct csession {
Link Here
|
| 286 |
struct iovec iovec; |
286 |
struct iovec iovec; |
| 287 |
struct uio uio; |
287 |
struct uio uio; |
| 288 |
int error; |
288 |
int error; |
|
|
289 |
int done; |
| 289 |
}; |
290 |
}; |
| 290 |
|
291 |
|
| 291 |
struct fcrypt { |
292 |
struct fcrypt { |
|
Lines 815-820
cryptodev_op(
Link Here
|
| 815 |
goto bail; |
816 |
goto bail; |
| 816 |
} |
817 |
} |
| 817 |
|
818 |
|
|
|
819 |
cse->done = 0; |
| 818 |
again: |
820 |
again: |
| 819 |
/* |
821 |
/* |
| 820 |
* Let the dispatch run unlocked, then, interlock against the |
822 |
* Let the dispatch run unlocked, then, interlock against the |
|
Lines 825-831
again:
Link Here
|
| 825 |
*/ |
827 |
*/ |
| 826 |
error = crypto_dispatch(crp); |
828 |
error = crypto_dispatch(crp); |
| 827 |
mtx_lock(&cse->lock); |
829 |
mtx_lock(&cse->lock); |
| 828 |
if (error == 0 && (crp->crp_flags & CRYPTO_F_DONE) == 0) |
830 |
while (error == 0 && !cse->done) |
| 829 |
error = msleep(crp, &cse->lock, PWAIT, "crydev", 0); |
831 |
error = msleep(crp, &cse->lock, PWAIT, "crydev", 0); |
| 830 |
mtx_unlock(&cse->lock); |
832 |
mtx_unlock(&cse->lock); |
| 831 |
|
833 |
|
|
Lines 835-840
again:
Link Here
|
| 835 |
} |
837 |
} |
| 836 |
|
838 |
|
| 837 |
if (crp->crp_etype == EAGAIN) { |
839 |
if (crp->crp_etype == EAGAIN) { |
|
|
840 |
cse->done = 0; |
| 838 |
crp->crp_etype = 0; |
841 |
crp->crp_etype = 0; |
| 839 |
crp->crp_flags &= ~CRYPTO_F_DONE; |
842 |
crp->crp_flags &= ~CRYPTO_F_DONE; |
| 840 |
goto again; |
843 |
goto again; |
|
Lines 972-977
cryptodev_aead(
Link Here
|
| 972 |
if ((error = copyin(caead->tag, (caddr_t)cse->uio.uio_iov[0].iov_base + |
975 |
if ((error = copyin(caead->tag, (caddr_t)cse->uio.uio_iov[0].iov_base + |
| 973 |
caead->len + caead->aadlen, cse->thash->hashsize))) |
976 |
caead->len + caead->aadlen, cse->thash->hashsize))) |
| 974 |
goto bail; |
977 |
goto bail; |
|
|
978 |
|
| 979 |
cse->done = 0; |
| 975 |
again: |
980 |
again: |
| 976 |
/* |
981 |
/* |
| 977 |
* Let the dispatch run unlocked, then, interlock against the |
982 |
* Let the dispatch run unlocked, then, interlock against the |
|
Lines 982-988
again:
Link Here
|
| 982 |
*/ |
987 |
*/ |
| 983 |
error = crypto_dispatch(crp); |
988 |
error = crypto_dispatch(crp); |
| 984 |
mtx_lock(&cse->lock); |
989 |
mtx_lock(&cse->lock); |
| 985 |
if (error == 0 && (crp->crp_flags & CRYPTO_F_DONE) == 0) |
990 |
while (error == 0 && !cse->done) |
| 986 |
error = msleep(crp, &cse->lock, PWAIT, "crydev", 0); |
991 |
error = msleep(crp, &cse->lock, PWAIT, "crydev", 0); |
| 987 |
mtx_unlock(&cse->lock); |
992 |
mtx_unlock(&cse->lock); |
| 988 |
|
993 |
|
|
Lines 990-995
again:
Link Here
|
| 990 |
goto bail; |
995 |
goto bail; |
| 991 |
|
996 |
|
| 992 |
if (crp->crp_etype == EAGAIN) { |
997 |
if (crp->crp_etype == EAGAIN) { |
|
|
998 |
cse->done = 0; |
| 993 |
crp->crp_etype = 0; |
999 |
crp->crp_etype = 0; |
| 994 |
crp->crp_flags &= ~CRYPTO_F_DONE; |
1000 |
crp->crp_flags &= ~CRYPTO_F_DONE; |
| 995 |
goto again; |
1001 |
goto again; |
|
Lines 1028-1033
cryptodev_cb(void *op)
Link Here
|
| 1028 |
|
1034 |
|
| 1029 |
mtx_lock(&cse->lock); |
1035 |
mtx_lock(&cse->lock); |
| 1030 |
cse->error = crp->crp_etype; |
1036 |
cse->error = crp->crp_etype; |
|
|
1037 |
cse->done = 1; |
| 1031 |
wakeup_one(crp); |
1038 |
wakeup_one(crp); |
| 1032 |
mtx_unlock(&cse->lock); |
1039 |
mtx_unlock(&cse->lock); |
| 1033 |
return (0); |
1040 |
return (0); |