23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_BE 45 #define REGD_EXT(rd) (struct m0_ext) { \ 46 .e_start = (m0_bindex_t)(rd)->rd_reg.br_addr, \ 47 .e_end = (m0_bindex_t)(rd)->rd_reg.br_addr + (rd)->rd_reg.br_size \ 124 if (
value < arr[0]) {
127 }
else if (arr[0] <
value &&
value < arr[1]) {
177 for (
i = 0;
i <
nr; ++
i) {
184 if (arr[0] ==
NULL && arr[1] ==
NULL) {
196 *
size = arr[1] - arr[0];
205 #define ARRAY_ALLOC_NZ(arr, nr) ((arr) = m0_alloc_nz((nr) * sizeof ((arr)[0]))) 276 while (begin + 1 < end) {
277 mid = (begin + end) / 2;
279 "begin = %zu, mid = %zu, end = %zu",
382 bool split_on_absorb)
424 r->br_size -= cut_start;
425 r->br_addr += cut_start;
427 r->br_size -= cut_end;
570 .bra_prepared = *prepared,
600 #undef ARRAY_ALLOC_NZ 717 rd->
rd_buf += cut_at_start;
764 "There is not enough credits for capturing: " 924 #undef M0_TRACE_SUBSYSTEM static void ptr(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
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)
struct m0_be_reg_d ** brm_pos
static void be_reg_area_cut(void *data, struct m0_be_reg_d *rd, m0_bcount_t cut_at_start, m0_bcount_t cut_at_end)
#define M0_ALLOC_ARR(arr, nr)
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)
M0_INTERNAL struct m0_be_reg_d * m0_be_reg_area_first(struct m0_be_reg_area *ra)
M0_INTERNAL int m0_be_reg_area_merger_init(struct m0_be_reg_area_merger *brm, int reg_area_nr_max)
static void be_regmap_reg_d_split(struct m0_be_regmap *rm, struct m0_be_reg_d *rdi, struct m0_be_reg_d *rd, struct m0_be_reg_d *rd_new)
static void be_reg_area_split(void *data, struct m0_be_reg_d *rd, struct m0_be_reg_d *rd_new)
M0_INTERNAL void m0_be_regmap_del(struct m0_be_regmap *rm, const struct m0_be_reg_d *rd)
M0_INTERNAL bool m0_be_reg_area__invariant(const struct m0_be_reg_area *ra)
struct m0_be_tx_credit bra_prepared
M0_INTERNAL void m0_be_rdt_fini(struct m0_be_reg_d_tree *rdt)
static void be_reg_area_add_copy(void *data, struct m0_be_reg_d *rd)
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)
int const char const void * value
M0_INTERNAL void m0_be_regmap_add(struct m0_be_regmap *rm, struct m0_be_reg_d *rd)
#define m0_exists(var, nr,...)
static void be_reg_d_cpy(void *dst, const struct m0_be_reg_d *rd)
static const struct m0_be_regmap_ops be_reg_area_ops_data_nocopy
M0_INTERNAL void m0_be_reg_area_merger_add(struct m0_be_reg_area_merger *brm, struct m0_be_reg_area *ra)
struct m0_be_reg_d * brt_r
static void * be_reg_d_fb1(const struct m0_be_reg_d *rd)
#define M0_BE_REG_D_CREDIT(rd)
#define M0_BE_REG(seg, size, addr)
m0_bcount_t bra_area_used
#define M0_BE_REG_D(reg, 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)
#define M0_BE_REG_AREA_FORALL(ra, rd)
M0_INTERNAL void m0_be_reg_area_fini(struct m0_be_reg_area *ra)
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_CHECK_EX(cond)
enum m0_be_reg_area_type bra_type
static const struct m0_be_regmap_ops * be_reg_area_ops[]
M0_INTERNAL size_t m0_be_regmap_size(const struct m0_be_regmap *rm)
M0_INTERNAL void m0_be_reg_area_reset(struct m0_be_reg_area *ra)
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_reg_d_lb1(const struct m0_be_reg_d *rd)
return M0_ERR(-EOPNOTSUPP)
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)
M0_INTERNAL bool m0_be_reg_d__invariant(const struct m0_be_reg_d *rd)
static bool be_reg_d_is_partof(const struct m0_be_reg_d *super, const struct m0_be_reg_d *sub)
static void be_reg_area_cpy(void *data, const struct m0_be_reg_d *super, const struct m0_be_reg_d *rd)
struct m0_be_tx_credit bra_captured
static void be_reg_d_arr_first_subreg(struct m0_be_reg_d **rd_arr, int nr, void *start, void **addr, m0_bcount_t *size)
static void be_reg_d_sub_make(struct m0_be_reg_d *super, struct m0_be_reg_d *sub)
M0_INTERNAL void m0_be_reg_area_merger_merge_to(struct m0_be_reg_area_merger *brm, struct m0_be_reg_area *ra)
const struct m0_be_regmap_ops * br_ops
static void be_reg_area_add(void *data, struct m0_be_reg_d *rd)
void(* rmo_del)(void *data, const struct m0_be_reg_d *rd)
M0_INTERNAL void m0_be_tx_credit_add(struct m0_be_tx_credit *c0, const struct m0_be_tx_credit *c1)
static void * be_reg_area_alloc(struct m0_be_reg_area *ra, m0_bcount_t size)
M0_INTERNAL void m0_be_reg_area_captured(struct m0_be_reg_area *ra, struct m0_be_tx_credit *captured)
#define ARRAY_ALLOC_NZ(arr, nr)
M0_INTERNAL bool m0_ext_is_partof(const struct m0_ext *super, const struct m0_ext *sub)
static size_t be_rdt_find_i(const struct m0_be_reg_d_tree *rdt, void *addr)
M0_INTERNAL bool m0_be_regmap__invariant(const struct m0_be_regmap *rm)
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)
void(* rmo_cpy)(void *data, const struct m0_be_reg_d *super, const struct m0_be_reg_d *rd)
M0_INTERNAL void m0_be_reg_area_optimize(struct m0_be_reg_area *ra)
struct m0_be_reg_d_tree br_rdt
M0_INTERNAL void m0_be_reg_area_merger_reset(struct m0_be_reg_area_merger *brm)
M0_INTERNAL struct m0_be_reg_d * m0_be_regmap_next(struct m0_be_regmap *rm, struct m0_be_reg_d *prev)
M0_INTERNAL bool m0_be_rdt__invariant(const struct m0_be_reg_d_tree *rdt)
static void * be_reg_d_lb(const struct m0_be_reg_d *rd)
M0_INTERNAL bool m0_ext_is_in(const struct m0_ext *ext, m0_bindex_t index)
M0_INTERNAL bool m0_be_reg_eq(const struct m0_be_reg *r1, const struct m0_be_reg *r2)
static void be_reg_area_cpy_copy(void *data, const struct m0_be_reg_d *super, const struct m0_be_reg_d *rd)
M0_INTERNAL void m0_be_reg_area_merger_fini(struct m0_be_reg_area_merger *brm)
static void be_reg_area_merger_max_gen_idx(struct m0_be_reg_area_merger *brm, void *addr, m0_bcount_t size, struct m0_be_reg_d *rd_new)
#define m0_forall(var, nr,...)
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)
void(* rmo_split)(void *data, struct m0_be_reg_d *rd, struct m0_be_reg_d *rd_new)
static struct m0_be_reg_d * be_regmap_find_fb(struct m0_be_regmap *rm, const struct m0_be_reg_d *rd)
static bool be_reg_d_are_overlapping(const struct m0_be_reg_d *rd1, const struct m0_be_reg_d *rd2)
M0_INTERNAL void m0_be_reg_area_prepared(struct m0_be_reg_area *ra, struct m0_be_tx_credit *prepared)
static struct cobfoms_ut * cut
static void be_reg_d_arr_insert2(void *arr[2], void *value)
static int start(struct m0_fom *fom)
static m0_bcount_t be_reg_d_size(const struct m0_be_reg_d *rd)
M0_INTERNAL bool m0_ext_are_overlapping(const struct m0_ext *e0, const struct m0_ext *e1)
struct m0_be_reg_area ** brm_reg_areas
M0_INTERNAL bool m0_be_reg_d_is_in(const struct m0_be_reg_d *rd, void *ptr)
#define M0_ASSERT_INFO(cond, fmt,...)
M0_INTERNAL void m0_be_rdt_reset(struct m0_be_reg_d_tree *rdt)
static void * be_reg_d_fb(const struct m0_be_reg_d *rd)
M0_INTERNAL bool m0_be_tx_credit_le(const struct m0_be_tx_credit *c0, const struct m0_be_tx_credit *c1)
struct m0_be_regmap bra_map
M0_INTERNAL struct m0_be_reg_d * m0_be_rdt_find(const struct m0_be_reg_d_tree *rdt, void *addr)
M0_INTERNAL void m0_be_regmap_fini(struct m0_be_regmap *rm)
struct m0_be_seg * br_seg
struct m0_pdclust_src_addr src
static bool be_rdt_check_i(const struct m0_be_reg_d_tree *rdt, void *addr, size_t index)
static void be_reg_area_del(void *data, const struct m0_be_reg_d *rd)
static void be_regmap_reg_d_cut(struct m0_be_regmap *rm, struct m0_be_reg_d *rd, m0_bcount_t cut_start, m0_bcount_t cut_end)
static bool be_rdt_contains(const struct m0_be_reg_d_tree *rdt, const struct m0_be_reg_d *rd)
void(* rmo_cut)(void *data, struct m0_be_reg_d *rd, m0_bcount_t cut_at_start, m0_bcount_t cut_at_end)
M0_INTERNAL void m0_be_regmap_reset(struct m0_be_regmap *rm)
static const struct m0_be_regmap_ops be_reg_area_ops_data_copy