diff options
author | jhb <jhb@FreeBSD.org> | 2006-07-19 18:26:09 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2006-07-19 18:26:09 +0000 |
commit | 35822ba820f283012cee418aab3b6e7111e888b8 (patch) | |
tree | d7dacebb4a85fa8bfcbad7b4d513ea0e3b750aa9 /sys | |
parent | d4972b28e6465e6011b5e0dc4b8f36f604f685e5 (diff) | |
download | FreeBSD-src-35822ba820f283012cee418aab3b6e7111e888b8.zip FreeBSD-src-35822ba820f283012cee418aab3b6e7111e888b8.tar.gz |
Initialize svr4_head during MOD_LOAD rather than on demand.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/compat/svr4/svr4_socket.c | 24 | ||||
-rw-r--r-- | sys/dev/streams/streams.c | 13 |
2 files changed, 1 insertions, 36 deletions
diff --git a/sys/compat/svr4/svr4_socket.c b/sys/compat/svr4/svr4_socket.c index bae6e0c..e8dd79b 100644 --- a/sys/compat/svr4/svr4_socket.c +++ b/sys/compat/svr4/svr4_socket.c @@ -75,17 +75,6 @@ svr4_find_socket(td, fp, dev, ino) struct svr4_sockcache_entry *e; void *cookie = ((struct socket *)fp->f_data)->so_emuldata; - if (svr4_str_initialized != 2) { - if (atomic_cmpset_acq_int(&svr4_str_initialized, 0, 1)) { - DPRINTF(("svr4_find_socket: uninitialized [%p,%d,%d]\n", - td, dev, ino)); - TAILQ_INIT(&svr4_head); - atomic_store_rel_int(&svr4_str_initialized, 2); - } - return NULL; - } - - DPRINTF(("svr4_find_socket: [%p,%d,%d]: ", td, dev, ino)); TAILQ_FOREACH(e, &svr4_head, entries) if (e->p == td->td_proc && e->dev == dev && e->ino == ino) { @@ -118,19 +107,6 @@ svr4_add_socket(td, path, st) mtx_lock(&Giant); - /* - * Wait for the TAILQ to be initialized. Only the very first CPU - * will succeed on the atomic_cmpset(). The other CPU's will spin - * until the first one finishes the initialization. Once the - * initialization is complete, the condition will always fail - * avoiding expensive atomic operations in the common case. - */ - while (svr4_str_initialized != 2) - if (atomic_cmpset_acq_int(&svr4_str_initialized, 0, 1)) { - TAILQ_INIT(&svr4_head); - atomic_store_rel_int(&svr4_str_initialized, 2); - } - e = malloc(sizeof(*e), M_TEMP, M_WAITOK); e->cookie = NULL; e->dev = st->st_dev; diff --git a/sys/dev/streams/streams.c b/sys/dev/streams/streams.c index e303be4..98a600b 100644 --- a/sys/dev/streams/streams.c +++ b/sys/dev/streams/streams.c @@ -70,9 +70,6 @@ static d_open_t streamsopen; struct svr4_sockcache_head svr4_head; -/* Initialization flag (set/queried by svr4_mod LKM) */ -int svr4_str_initialized = 0; - /* * Device minor numbers */ @@ -122,7 +119,7 @@ streams_modevent(module_t mod, int type, void *unused) { switch (type) { case MOD_LOAD: - /* XXX should make sure it isn't already loaded first */ + TAILQ_INIT(&svr4_head); dt_ptm = make_dev(&streams_cdevsw, dev_ptm, 0, 0, 0666, "ptm"); dt_arp = make_dev(&streams_cdevsw, dev_arp, 0, 0, 0666, @@ -382,14 +379,6 @@ svr4_delete_socket(p, fp) struct svr4_sockcache_entry *e; void *cookie = ((struct socket *)fp->f_data)->so_emuldata; - while (svr4_str_initialized != 2) { - if (atomic_cmpset_acq_int(&svr4_str_initialized, 0, 1)) { - TAILQ_INIT(&svr4_head); - atomic_store_rel_int(&svr4_str_initialized, 2); - } - return; - } - TAILQ_FOREACH(e, &svr4_head, entries) if (e->p == p && e->cookie == cookie) { TAILQ_REMOVE(&svr4_head, e, entries); |