Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
slash
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
uplex-varnish
slash
Commits
1d387952
Unverified
Commit
1d387952
authored
Oct 27, 2023
by
Nils Goroll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Regionlist overhaul: Size accounting for regionlist
parent
263f15a5
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
21 additions
and
7 deletions
+21
-7
fellow_regionlist.h
src/fellow_regionlist.h
+21
-7
No files found.
src/fellow_regionlist.h
View file @
1d387952
...
...
@@ -54,6 +54,7 @@ struct regl {
struct
regionlist
{
unsigned
magic
;
#define REGIONLIST_MAGIC 0xeb869815
size_t
size
;
VSTAILQ_HEAD
(,
regl
)
head
;
buddy_t
*
membuddy
;
};
...
...
@@ -112,7 +113,7 @@ regl_alloc_bits(buddy_t *membuddy, const uint8_t bits, int8_t cram,
int8_t
c
;
size_t
sz
,
b
;
sz
=
2
*
sizeof
*
r
;
sz
=
2
*
sizeof
*
r
+
sizeof
*
rl
;
b
=
log2up
(
sz
);
assert
(
bits
>=
b
);
...
...
@@ -201,7 +202,7 @@ regionlist_append(struct regionlist *to, struct regionlist **fromp)
CHECK_OBJ_NOTNULL
(
to
,
REGIONLIST_MAGIC
);
TAKE_OBJ_NOTNULL
(
from
,
fromp
,
REGIONLIST_MAGIC
);
to
->
size
+=
from
->
size
;
VSTAILQ_CONCAT
(
&
to
->
head
,
&
from
->
head
);
}
...
...
@@ -222,7 +223,8 @@ regionlist_add(struct regionlist *rl,
const
struct
buddy_off_extent
*
regs
,
unsigned
n
)
{
struct
regl
*
regl
;
uint16_t
av
,
nn
;
uint16_t
i
,
nn
;
size_t
size
;
CHECK_OBJ_NOTNULL
(
rl
,
REGIONLIST_MAGIC
);
regl
=
VSTAILQ_LAST
(
&
rl
->
head
,
regl
,
list
);
...
...
@@ -235,14 +237,18 @@ regionlist_add(struct regionlist *rl,
CHECK_OBJ_NOTNULL
(
regl
,
REGL_MAGIC
);
assert
(
regl
->
space
>
regl
->
n
);
av
=
regl
->
space
-
regl
->
n
;
i
=
regl
->
space
-
regl
->
n
;
if
(
av
<
n
)
nn
=
av
;
if
(
i
<
n
)
nn
=
i
;
else
nn
=
(
typeof
(
nn
))
n
;
memcpy
(
&
regl
->
arr
[
regl
->
n
],
regs
,
nn
*
sizeof
*
regs
);
size
=
0
;
for
(
i
=
0
;
i
<
nn
;
i
++
)
size
+=
regs
[
i
].
size
;
rl
->
size
+=
size
;
regl
->
n
+=
nn
;
regs
+=
nn
;
n
-=
nn
;
...
...
@@ -255,21 +261,29 @@ regionlist_free(struct regionlist **rlp, buddy_t *dskbuddy)
struct
buddy_returns
*
dskret
,
*
memret
;
struct
regionlist
*
rl
;
struct
regl
*
regl
,
*
save
;
size_t
size
,
tot
;
unsigned
n
;
TAKE_OBJ_NOTNULL
(
rl
,
rlp
,
REGIONLIST_MAGIC
);
dskret
=
BUDDY_RETURNS_STK
(
dskbuddy
,
BUDDY_RETURNS_MAX
);
memret
=
BUDDY_RETURNS_STK
(
rl
->
membuddy
,
BUDDY_RETURNS_MAX
);
tot
=
rl
->
size
;
VSTAILQ_FOREACH_SAFE
(
regl
,
&
rl
->
head
,
list
,
save
)
{
CHECK_OBJ_NOTNULL
(
regl
,
REGL_MAGIC
);
for
(
n
=
0
;
n
<
regl
->
n
;
n
++
)
size
=
0
;
for
(
n
=
0
;
n
<
regl
->
n
;
n
++
)
{
size
+=
regl
->
arr
[
n
].
size
;
AN
(
buddy_return_off_extent
(
dskret
,
&
regl
->
arr
[
n
]));
}
assert
(
tot
>=
size
);
tot
-=
size
;
AN
(
buddy_return_ptr_page
(
memret
,
&
regl
->
alloc
));
}
AZ
(
tot
);
buddy_return
(
dskret
);
buddy_return
(
memret
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment