30 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_UT 162 #define DEP(src, type, dst) { .bod_src = src, .bod_type = type, .bod_dst = dst } 197 if (
src->bom_signal_to[0] ==
NULL) {
198 src->bom_signal_to[0] = &
dst->bom_barrier;
199 }
else if (
src->bom_signal_to[1] ==
NULL) {
200 src->bom_signal_to[1] = &
dst->bom_barrier;
207 dst->bom_wait_before = &
dst->bom_barrier;
211 dst->bom_wait_after = &
dst->bom_barrier;
310 bool keep_half_dist_order,
313 unsigned half_dist =
nr / 2 + 1;
324 if (keep_half_dist_order) {
325 for (
i = 0;
i <
nr; ++
i) {
326 for (j =
i + 1; j <
nr; ++j) {
327 if (arr[
i] > arr[j] &&
328 (arr[
i] + half_dist == arr[j] ||
329 arr[j] + half_dist == arr[
i])) {
396 j =
index * level_size + order[
i] % level_size + 1;
397 cmd2 = order[
i] / level_size == 0 ?
407 if (
level < level_nr - 1) {
415 for (
i = 0;
i < level_size; ++
i) {
416 j =
index * level_size + order[
i] + 1;
486 #undef M0_TRACE_SUBSYSTEM
#define M0_ALLOC_ARR(arr, nr)
static void be_ut_op_set_tree_do(struct m0_be_op *op, struct m0_be_op *child, enum be_ut_op_set_tree_cmd cmd)
struct m0_semaphore bom_barrier
M0_INTERNAL bool m0_semaphore_trydown(struct m0_semaphore *semaphore)
M0_INTERNAL void m0_be_op_active(struct m0_be_op *op)
static void be_ut_op_set_tree_random_shuffle(unsigned *arr, unsigned nr, bool keep_half_dist_order, uint64_t *seed)
#define M0_LOG(level,...)
enum m0_trace_level level
M0_INTERNAL void m0_be_op_done(struct m0_be_op *op)
enum be_ut_op_mt_cmd bod_src
M0_INTERNAL void m0_be_op_wait(struct m0_be_op *op)
void m0_be_ut_op_set_tree(void)
M0_INTERNAL void m0_be_op_fini(struct m0_be_op *op)
enum be_ut_op_mt_cmd bod_dst
enum be_ut_op_mt_dep_type bod_type
static struct m0_thread t[8]
void m0_be_ut_op_usecase(void)
void m0_be_ut_op_mt(void)
void m0_be_ut_op_set_usecase(void)
M0_UT_THREADS_DEFINE(be_ut_op_mt, &be_ut_op_mt_thread_func)
M0_INTERNAL int m0_semaphore_init(struct m0_semaphore *semaphore, unsigned value)
#define DEP(src, type, dst)
M0_INTERNAL void m0_be_op_init(struct m0_be_op *op)
enum be_ut_op_mt_cmd bom_cmd
M0_INTERNAL uint64_t m0_rnd64(uint64_t *seed)
static void be_ut_op_mt_thread_func(void *param)
M0_INTERNAL void m0_semaphore_fini(struct m0_semaphore *semaphore)
M0_INTERNAL void m0_be_op_set_add(struct m0_be_op *parent, struct m0_be_op *child)
#define M0_UT_THREADS_STOP(name)
static void be_ut_op_set_tree_swap(unsigned *a, unsigned *b)
M0_INTERNAL void m0_semaphore_down(struct m0_semaphore *semaphore)
struct m0_semaphore * bom_wait_before
#define M0_UT_THREADS_START(name, thread_nr, param_array)
M0_INTERNAL void m0_semaphore_up(struct m0_semaphore *semaphore)
struct m0_semaphore * bom_try_down
static void be_ut_op_set_tree_recursive(struct m0_be_op *op, enum be_ut_op_set_tree_cmd cmd, int level, int index, uint64_t *seed)
struct m0_semaphore * bom_wait_after
struct m0_semaphore * bom_signal_to[2]
struct m0_pdclust_src_addr src
M0_INTERNAL bool m0_be_op_is_done(struct m0_be_op *op)
#define M0_IMPOSSIBLE(fmt,...)