diff options
author | pjd <pjd@FreeBSD.org> | 2008-08-09 20:01:01 +0000 |
---|---|---|
committer | pjd <pjd@FreeBSD.org> | 2008-08-09 20:01:01 +0000 |
commit | dca2fd863d222558e1a65f4416b204c971116c6e (patch) | |
tree | 1cc6d69255eb8facfd3a5741685007c4a9394f1a /sys/crypto/via/padlock.c | |
parent | c2715b68b618eb73d1e2b53a50958e4a5c660096 (diff) | |
download | FreeBSD-src-dca2fd863d222558e1a65f4416b204c971116c6e.zip FreeBSD-src-dca2fd863d222558e1a65f4416b204c971116c6e.tar.gz |
Simplify session selection/allocation.
Diffstat (limited to 'sys/crypto/via/padlock.c')
-rw-r--r-- | sys/crypto/via/padlock.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/sys/crypto/via/padlock.c b/sys/crypto/via/padlock.c index dddae15..4157c47 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); |