112 .ur_inserted =
false,
158 #define BUT_TR(begin, end, do_insert, desired_nr, desired_len) \ 160 .bur_begin = (begin), \ 162 .bur_do_insert = (do_insert), \ 163 .bur_desired_nr = (desired_nr), \ 164 .bur_desired_len = (desired_len), \ 168 #define BUT_TRA_NAME(name) be_ut_tra_##name 169 #define DEFINE_BUT_TRA(name, ...) \ 170 static struct be_ut_test_reg BUT_TRA_NAME(name)[] = { __VA_ARGS__ } 172 #define BUT_TRS(name) { \ 174 .trs_test = BUT_TRA_NAME(name), \ 175 .trs_nr = ARRAY_SIZE(BUT_TRA_NAME(name)), \ 189 DEFINE_BUT_TRA(ins2,
BUT_TR(1, 3,
true, 1, 2),
BUT_TR(4, 6,
true, 2, 4));
190 DEFINE_BUT_TRA(ins2_size1,
BUT_TR(1, 2,
true, 1, 1),
BUT_TR(2, 3,
true, 2, 2));
192 DEFINE_BUT_TRA(ins2_adj,
BUT_TR(1, 3,
true, 1, 2),
BUT_TR(3, 5,
true, 2, 4));
196 DEFINE_BUT_TRA(ins_replace,
BUT_TR(1, 3,
true, 1, 2),
BUT_TR(1, 3,
true, 1, 2));
197 DEFINE_BUT_TRA(ins_cpy,
BUT_TR(3, 8,
true, 1, 5),
BUT_TR(4, 7,
true, 1, 5));
198 DEFINE_BUT_TRA(ins_cpy_top,
BUT_TR(3, 8,
true, 1, 5),
BUT_TR(5, 8,
true, 1, 5));
199 DEFINE_BUT_TRA(ins_cpy_bot,
BUT_TR(3, 8,
true, 1, 5),
BUT_TR(3, 5,
true, 1, 5));
216 BUT_TR(3, 5,
true, 1, 2),
BUT_TR(6, 7,
true, 2, 3),
217 BUT_TR(3, 5,
false, 1, 1));
219 BUT_TR(3, 5,
true, 1, 2),
BUT_TR(6, 7,
true, 2, 3),
222 BUT_TR(3, 5,
true, 1, 2),
BUT_TR(6, 7,
true, 2, 3),
223 BUT_TR(3, 7,
false, 0, 0));
234 BUT_TR(3, 5,
true, 1, 2),
BUT_TR(5, 8,
true, 2, 5),
235 BUT_TR(4, 6,
false, 2, 3));
237 BUT_TR(3, 5,
true, 1, 2),
BUT_TR(5, 8,
true, 2, 5),
238 BUT_TR(4, 8,
false, 1, 1));
240 BUT_TR(3, 5,
true, 1, 2),
BUT_TR(5, 8,
true, 2, 5),
241 BUT_TR(3, 6,
false, 1, 2));
274 #undef DEFINE_BUT_TRA 344 if (cut_at_start != 0)
474 for (
i = begin;
i < end; ++
i) {
486 static unsigned long gen_idx = 0;
497 LOGD(
"\n%s [%lu, %lu), iteration = %u\n",
503 .rd_gen_idx = ++gen_idx,
532 for (j = 0; j < burs->
trs_nr; ++j) {
682 if (ibegin < begin && end < iend)
720 LOGD(
"\n%s [%lu, %lu)",
721 do_insert ?
"capture" :
"uncapture", begin, end);
759 for (j = 0; j < burs->
trs_nr; ++j)
765 for (j = 0; j < burs->
trs_nr; ++j) {
901 memset(arr, 0, arr_size);
920 #if BE_UT_RA_MERGE_DEBUG 926 #if BE_UT_RA_MERGE_DEBUG 927 printf(
"merge_pre: ");
942 #if BE_UT_RA_MERGE_DEBUG 957 #if BE_UT_RA_MERGE_DEBUG 963 #if BE_UT_RA_MERGE_DEBUG 964 printf(
"merge_post: ");
985 #if BE_UT_RA_MERGE_DEBUG 1019 #if BE_UT_RA_MERGE_DEBUG 1020 printf(
"i = %d\n",
i);
1023 printf(
"mra_arr: ");
1025 printf(
"%4.u", (
unsigned) mra_arr[k]);
void m0_be_ut_seg_fini(struct m0_be_ut_seg *ut_seg)
M0_INTERNAL struct m0_be_reg_d * m0_be_rdt_next(const struct m0_be_reg_d_tree *rdt, struct m0_be_reg_d *prev)
m0_bcount_t bur_desired_len
M0_INTERNAL struct m0_be_reg_d * m0_be_regmap_first(struct m0_be_regmap *rm)
M0_INTERNAL struct m0_be_reg_d * m0_be_rdt_del(struct m0_be_reg_d_tree *rdt, const struct m0_be_reg_d *rd)
void m0_be_ut_regmap_simple(void)
static void be_ut_regmap_data_cmp(const struct m0_be_reg_d *r, unsigned desired, bool nop)
static struct be_ut_rdt_reg_d be_ut_rdt_rd[BE_UT_RDT_SIZE]
static void be_ut_reg_area_fill(struct m0_be_reg_d *rd)
static void be_ut_reg_area_init(m0_bindex_t nr)
static void be_ut_regmap_del(void *data, const struct m0_be_reg_d *rd)
void m0_be_ut_regmap_random(void)
M0_INTERNAL struct m0_be_reg_d * m0_be_reg_area_first(struct m0_be_reg_area *ra)
struct be_ut_test_reg * trs_test
static void be_ut_reg_area_merge_rand_ra(struct m0_be_reg_area *ra)
static void be_ut_reg_area_rand(void)
static int be_ut_rdt_del_find(int index)
M0_INTERNAL void m0_be_regmap_del(struct m0_be_regmap *rm, const struct m0_be_reg_d *rd)
M0_INTERNAL void m0_be_rdt_fini(struct m0_be_reg_d_tree *rdt)
static char be_ut_ra_save[BE_UT_RA_SIZE]
struct m0_be_seg * bus_seg
static void be_ut_regmap_do(m0_bcount_t begin, m0_bcount_t end, bool do_insert)
M0_INTERNAL int m0_be_regmap_init(struct m0_be_regmap *rm, const struct m0_be_regmap_ops *ops, void *ops_data, size_t size_max, bool split_on_absorb)
static void be_ut_reg_area_fill_save(struct m0_be_reg_d *rd)
int const char const void * value
M0_INTERNAL void m0_be_regmap_add(struct m0_be_regmap *rm, struct m0_be_reg_d *rd)
static void be_ut_regmap_add(void *data, struct m0_be_reg_d *rd)
struct m0_be_ut_seg ut_seg
static unsigned char be_ut_ra_merge_pre[BE_UT_RA_MERGE_SIZE_TOTAL]
void m0_be_ut_seg_init(struct m0_be_ut_seg *ut_seg, struct m0_be_ut_backend *ut_be, m0_bcount_t size)
static void be_ut_rm_fill(const struct m0_be_reg_d *rd, unsigned value, bool fill_reg)
static struct m0_be_reg_d_tree be_ut_rdt
static void be_ut_regmap_cut(void *data, struct m0_be_reg_d *rd, m0_bcount_t cut_at_start, m0_bcount_t cut_at_end)
#define M0_BE_REG(seg, size, addr)
static void be_ut_reg_area_merge_ra_add(struct m0_be_reg_area *ra, m0_bindex_t begin, m0_bcount_t size, void *buf)
void(* rmo_add)(void *data, struct m0_be_reg_d *rd)
M0_INTERNAL void m0_be_reg_area_capture(struct m0_be_reg_area *ra, struct m0_be_reg_d *rd)
static struct m0_be_regmap be_ut_rm_regmap
#define M0_BE_REG_AREA_FORALL(ra, rd)
static unsigned char be_ut_ra_merged[BE_UT_RA_MERGE_SIZE_TOTAL]
M0_INTERNAL void m0_be_reg_area_fini(struct m0_be_reg_area *ra)
static m0_bindex_t be_ut_reg_area_addr2offs(void *addr)
M0_INTERNAL int m0_be_reg_area_init(struct m0_be_reg_area *ra, const struct m0_be_tx_credit *prepared, enum m0_be_reg_area_type type)
#define M0_BE_TX_CREDIT(nr, size)
static void be_ut_reg_area_reset(bool reset_save)
M0_INTERNAL size_t m0_be_regmap_size(const struct m0_be_regmap *rm)
static void be_ut_reg_area_fini(void)
M0_INTERNAL void m0_be_reg_area_reset(struct m0_be_reg_area *ra)
static unsigned be_ut_rm_data_copy[BE_UT_REGMAP_LEN]
M0_INTERNAL struct m0_be_reg_d * m0_be_reg_area_next(struct m0_be_reg_area *ra, struct m0_be_reg_d *prev)
static void * be_ut_reg_area_merge_offs2addr(m0_bindex_t offs)
M0_INTERNAL void m0_be_reg_area_used(struct m0_be_reg_area *ra, struct m0_be_tx_credit *used)
M0_INTERNAL int m0_be_rdt_init(struct m0_be_reg_d_tree *rdt, size_t size_max)
static struct m0_be_reg_area be_ut_ra_reg_area
static void be_ut_reg_area_get(void)
M0_INTERNAL bool m0_be_reg_d__invariant(const struct m0_be_reg_d *rd)
static void be_ut_regmap_fini(void)
static struct be_ut_test_reg_suite be_ut_test_regs[]
static void be_ut_reg_area_merge_post(struct m0_be_reg_area *ra)
M0_INTERNAL void m0_be_tx_credit_mac(struct m0_be_tx_credit *c, const struct m0_be_tx_credit *c1, m0_bcount_t k)
void m0_be_ut_reg_area_simple(void)
static const struct m0_be_regmap_ops be_ut_regmap_ops
static void be_ut_regmap_size_length_check(size_t desired_size, m0_bcount_t desired_length, bool do_check)
void m0_be_ut_reg_area_random(void)
static bool be_ut_regmap_nop(m0_bcount_t begin, m0_bcount_t end, bool do_insert)
#define BUT_TR(begin, end, do_insert, desired_nr, desired_len)
static long long max(long long a, long long b)
static void be_ut_reg_area_merge_pre(struct m0_be_reg_area *ra)
static unsigned be_ut_rm_reg[BE_UT_REGMAP_LEN]
static unsigned be_ut_rm_iteration
static int cmp(const struct m0_ut_suite **s0, const struct m0_ut_suite **s1)
static uint64_t be_ut_ra_merge_seed
static void be_ut_reg_area_do(m0_bcount_t begin, m0_bcount_t end, bool do_insert)
M0_INTERNAL void m0_be_reg_area_merge_in(struct m0_be_reg_area *ra, struct m0_be_reg_area *src)
M0_INTERNAL size_t m0_be_rdt_size(const struct m0_be_reg_d_tree *rdt)
static void be_ut_reg_area_check(bool do_insert, struct m0_be_reg_d *rd)
static void be_ut_regmap_init(void)
M0_INTERNAL struct m0_be_reg_d * m0_be_regmap_next(struct m0_be_regmap *rm, struct m0_be_reg_d *prev)
static const unsigned be_ut_rm_unused
static void * be_ut_reg_area_offs2addr(m0_bindex_t offs)
static unsigned char be_ut_ra_merge_post[BE_UT_RA_MERGE_SIZE_TOTAL]
static void be_ut_regmap_cpy(void *data, const struct m0_be_reg_d *super, const struct m0_be_reg_d *rd)
void m0_be_ut_reg_d_tree(void)
static void be_ut_regmap_data_copy(void)
static struct m0_be_seg * be_ut_ra_merge_seg
M0_INTERNAL void m0_be_reg_area_uncapture(struct m0_be_reg_area *ra, const struct m0_be_reg_d *rd)
M0_INTERNAL void m0_be_rdt_ins(struct m0_be_reg_d_tree *rdt, const struct m0_be_reg_d *rd)
static long long min(long long a, long long b)
static void be_ut_reg_area_merge_in(struct m0_be_reg_area *ra)
M0_INTERNAL uint64_t m0_rnd64(uint64_t *seed)
static unsigned be_ut_reg_area_merge_rand(unsigned min, unsigned max)
static void be_ut_rm_fill2(uintptr_t addr, m0_bcount_t size, unsigned value, bool fill_reg)
static struct m0_be_seg * be_ut_ra_seg
static bool be_ut_reg_d_is_equal(const struct m0_be_reg_d *rd1, const struct m0_be_reg_d *rd2)
static void be_ut_reg_area_arr_copy(unsigned char *arr, m0_bcount_t arr_size, struct m0_be_reg_area *ra, bool clear_arr)
static void be_ut_reg_d_tree_check(void)
static void be_ut_regmap_print_d(unsigned d, int i)
#define DEFINE_BUT_TRA(name,...)
M0_INTERNAL bool m0_be_reg_d_is_in(const struct m0_be_reg_d *rd, void *ptr)
static char be_ut_ra_reg[BE_UT_RA_SIZE]
static void be_ut_reg_area_size_length_check(size_t desired_size, m0_bcount_t desired_length, bool do_check)
static uint64_t be_ut_ra_rand_seed
M0_INTERNAL struct m0_be_reg_d * m0_be_rdt_find(const struct m0_be_reg_d_tree *rdt, void *addr)
static unsigned be_ut_rm_data[BE_UT_REGMAP_LEN]
M0_INTERNAL void m0_be_regmap_fini(struct m0_be_regmap *rm)
static char be_ut_ra_data[BE_UT_RA_SIZE]
static void * be_ut_rm_ops_data
void m0_be_ut_reg_area_merge(void)
static m0_bindex_t be_ut_reg_area_merge_addr2offs(void *addr)