MCPcopy Create free account
hub / github.com/F-Stack/f-stack / rangeset_remove_pred

Function rangeset_remove_pred

freebsd/kern/subr_rangeset.c:131–231  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

129}
130
131int
132rangeset_remove_pred(struct rangeset *rs, uint64_t start, uint64_t end,
133 rs_pred_t pred)
134{
135 struct rs_el *r, *rn;
136 uint64_t *r1;
137 int error;
138
139 rangeset_check(rs);
140 error = 0;
141 for (; end > 0 && start < end;) {
142 r1 = pctrie_lookup_le(&rs->rs_trie, end - 1);
143 if (r1 == NULL)
144 break;
145 r = __containerof(r1, struct rs_el, re_start);
146
147 /*
148 * ------============================--|-------|----
149 * rs re s e
150 */
151 if (r->re_end <= start)
152 break;
153
154 if (r->re_end <= end) {
155 if (r->re_start < start) {
156 /*
157 * ------========|==============-------|----
158 * rs s re e
159 */
160 if (pred(rs->rs_data_ctx, r))
161 r->re_end = start;
162 break;
163 }
164
165 /*
166 * ------|--------===================----------|----
167 * s rs re e
168 */
169 end = r->re_start;
170 if (pred(rs->rs_data_ctx, r)) {
171 pctrie_remove(&rs->rs_trie, r->re_start,
172 rs_node_free);
173 rs->rs_free_data(rs->rs_data_ctx, r);
174 }
175 continue;
176 }
177
178 /*
179 * ------|--------====================|==========----
180 * s rs e re
181 */
182 if (r->re_start >= start) {
183 if (pred(rs->rs_data_ctx, r)) {
184 pctrie_remove(&rs->rs_trie, r->re_start,
185 rs_node_free);
186 r->re_start = end;
187 error = pctrie_insert(&rs->rs_trie,
188 &r->re_start, rs_node_alloc);

Callers 2

pmap_pkru_on_removeFunction · 0.85
rangeset_removeFunction · 0.85

Calls 4

rangeset_checkFunction · 0.85
pctrie_lookup_leFunction · 0.85
pctrie_removeFunction · 0.85
pctrie_insertFunction · 0.85

Tested by

no test coverage detected