Print this page
6138 don't abuse atomic_cas_*

*** 886,908 **** /* ARGSUSED */ uint_t get_color_start(struct as *as) { - uint32_t old, new; - if (consistent_coloring == 2 || color_start_random) { return ((uint_t)(((gettick()) << (vac_shift - MMU_PAGESHIFT)) & (hw_page_array[0].hp_colors - 1))); } ! do { ! old = color_start_current; ! new = old + (color_start_stride << (vac_shift - MMU_PAGESHIFT)); ! } while (atomic_cas_32(&color_start_current, old, new) != old); ! ! return ((uint_t)(new)); } /* * Called once at startup from kphysm_init() -- before memialloc() * is invoked to do the 1st page_free()/page_freelist_add(). --- 886,902 ---- /* ARGSUSED */ uint_t get_color_start(struct as *as) { if (consistent_coloring == 2 || color_start_random) { return ((uint_t)(((gettick()) << (vac_shift - MMU_PAGESHIFT)) & (hw_page_array[0].hp_colors - 1))); } ! return ((uint_t)atomic_add_32_nv(&color_start_current, ! color_start_stride << (vac_shift - MMU_PAGESHIFT))); } /* * Called once at startup from kphysm_init() -- before memialloc() * is invoked to do the 1st page_free()/page_freelist_add().