Lines Matching refs:atomic64_tab
61 } atomic64_tab[PAGE_SIZE/CACHE_LINE_SIZE] __cacheline_aligned; variable
62 CTASSERT(sizeof(atomic64_tab) == PAGE_SIZE);
63 CTASSERT(sizeof(atomic64_tab[0]) == CACHE_LINE_SIZE);
70 for (i = 0; i < __arraycount(atomic64_tab); i++) { in linux_atomic64_init()
71 mutex_init(&atomic64_tab[i].lock, MUTEX_DEFAULT, IPL_HIGH); in linux_atomic64_init()
72 atomic64_tab[i].gen = 0; in linux_atomic64_init()
83 for (i = 0; i < __arraycount(atomic64_tab); i++) { in linux_atomic64_fini()
84 KASSERT((atomic64_tab[i].gen & 1) == 0); in linux_atomic64_fini()
85 mutex_destroy(&atomic64_tab[i].lock); in linux_atomic64_fini()
94 __arraycount(atomic64_tab); in atomic64_hash()
102 mutex_spin_enter(&atomic64_tab[i].lock); in atomic64_lock()
103 KASSERT((atomic64_tab[i].gen & 1) == 0); in atomic64_lock()
104 atomic64_tab[i].gen |= 1; in atomic64_lock()
113 KASSERT(mutex_owned(&atomic64_tab[i].lock)); in atomic64_unlock()
114 KASSERT((atomic64_tab[i].gen & 1) == 1); in atomic64_unlock()
117 atomic64_tab[i].gen |= 1; /* paranoia */ in atomic64_unlock()
118 atomic64_tab[i].gen++; in atomic64_unlock()
119 mutex_spin_exit(&atomic64_tab[i].lock); in atomic64_unlock()
130 while (__predict_false((gen = atomic64_tab[i].gen) & 1)) in atomic64_read()
135 } while (__predict_false(atomic64_tab[i].gen != gen)); in atomic64_read()