diff options
author | krishna <none@none> | 2007-03-28 17:57:31 -0700 |
---|---|---|
committer | krishna <none@none> | 2007-03-28 17:57:31 -0700 |
commit | c1a9a9c34efaa6bfab9cee1552b209991ee2c929 (patch) | |
tree | 054345f4f7b819fd59921c5d5d43982d1b457e6a /usr/src/uts/common/syscall/tasksys.c | |
parent | 4bd2082ff2d009263265d7de938de336894b6009 (diff) | |
download | illumos-gate-c1a9a9c34efaa6bfab9cee1552b209991ee2c929.tar.gz |
6533554 crypto_buffer_check() is still expensive
Diffstat (limited to 'usr/src/uts/common/syscall/tasksys.c')
-rw-r--r-- | usr/src/uts/common/syscall/tasksys.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/usr/src/uts/common/syscall/tasksys.c b/usr/src/uts/common/syscall/tasksys.c index bec091e61c..7038a19347 100644 --- a/usr/src/uts/common/syscall/tasksys.c +++ b/usr/src/uts/common/syscall/tasksys.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -124,13 +124,21 @@ tasksys_settaskid(projid_t projid, uint_t flags) 1, 0) & RCT_DENY) rctlfail = 1; - if (kpj->kpj_data.kpd_locked_mem + p->p_locked_mem - > kpj->kpj_data.kpd_locked_mem_ctl) + if (kpj->kpj_data.kpd_locked_mem + p->p_locked_mem > + kpj->kpj_data.kpd_locked_mem_ctl) if (rctl_test_entity(rc_project_locked_mem, kpj->kpj_rctls, p, - &e, p->p_locked_mem, 0) &RCT_DENY) + &e, p->p_locked_mem, 0) & RCT_DENY) + rctlfail = 1; + + mutex_enter(&(kpj->kpj_data.kpd_crypto_lock)); + if (kpj->kpj_data.kpd_crypto_mem + p->p_crypto_mem > + kpj->kpj_data.kpd_crypto_mem_ctl) + if (rctl_test_entity(rc_project_crypto_mem, kpj->kpj_rctls, p, + &e, p->p_crypto_mem, 0) & RCT_DENY) rctlfail = 1; if (rctlfail) { + mutex_exit(&(kpj->kpj_data.kpd_crypto_lock)); mutex_exit(&zone->zone_mem_lock); mutex_exit(&zone->zone_nlwps_lock); if (curthread != p->p_agenttp) @@ -138,11 +146,16 @@ tasksys_settaskid(projid_t projid, uint_t flags) mutex_exit(&p->p_lock); return (set_errno(EAGAIN)); } + kpj->kpj_data.kpd_crypto_mem += p->p_crypto_mem; + mutex_exit(&(kpj->kpj_data.kpd_crypto_lock)); kpj->kpj_data.kpd_locked_mem += p->p_locked_mem; kpj->kpj_nlwps += p->p_lwpcnt; kpj->kpj_ntasks++; oldpj->kpj_data.kpd_locked_mem -= p->p_locked_mem; + mutex_enter(&(oldpj->kpj_data.kpd_crypto_lock)); + oldpj->kpj_data.kpd_crypto_mem -= p->p_crypto_mem; + mutex_exit(&(oldpj->kpj_data.kpd_crypto_lock)); oldpj->kpj_nlwps -= p->p_lwpcnt; mutex_exit(&zone->zone_mem_lock); |