aboutsummaryrefslogtreecommitdiff
path: root/sys/crypto/via
diff options
context:
space:
mode:
authorPawel Jakub Dawidek <pjd@FreeBSD.org>2008-08-09 20:01:01 +0000
committerPawel Jakub Dawidek <pjd@FreeBSD.org>2008-08-09 20:01:01 +0000
commitb5207ec64ade46da52c15898c27cda29a105a019 (patch)
tree1cc6d69255eb8facfd3a5741685007c4a9394f1a /sys/crypto/via
parentec7993f8b0f82d459a010989af4d393efaae6177 (diff)
downloadsrc-b5207ec64ade46da52c15898c27cda29a105a019.tar.gz
src-b5207ec64ade46da52c15898c27cda29a105a019.zip
Simplify session selection/allocation.
Notes
Notes: svn path=/head/; revision=181478
Diffstat (limited to 'sys/crypto/via')
-rw-r--r--sys/crypto/via/padlock.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/sys/crypto/via/padlock.c b/sys/crypto/via/padlock.c
index dddae15f245c..4157c4754f0d 100644
--- a/sys/crypto/via/padlock.c
+++ b/sys/crypto/via/padlock.c
@@ -215,23 +215,18 @@ padlock_newsession(device_t dev, uint32_t *sidp, struct cryptoini *cri)
* allocate one.
*/
ses = TAILQ_FIRST(&sc->sc_sessions);
- if (ses == NULL || ses->ses_used)
- ses = NULL;
- else {
- TAILQ_REMOVE(&sc->sc_sessions, ses, ses_next);
- ses->ses_used = 1;
- TAILQ_INSERT_TAIL(&sc->sc_sessions, ses, ses_next);
- }
- if (ses == NULL) {
+ if (ses == NULL || ses->ses_used) {
ses = malloc(sizeof(*ses), M_PADLOCK, M_NOWAIT | M_ZERO);
if (ses == NULL) {
rw_wunlock(&sc->sc_sessions_lock);
return (ENOMEM);
}
- ses->ses_used = 1;
ses->ses_id = sc->sc_sid++;
- TAILQ_INSERT_TAIL(&sc->sc_sessions, ses, ses_next);
+ } else {
+ TAILQ_REMOVE(&sc->sc_sessions, ses, ses_next);
}
+ ses->ses_used = 1;
+ TAILQ_INSERT_TAIL(&sc->sc_sessions, ses, ses_next);
rw_wunlock(&sc->sc_sessions_lock);
error = padlock_cipher_setup(ses, encini);