Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
W
White Rabbit Trigger Distribution
Project
Project
Details
Activity
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
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
White Rabbit Trigger Distribution
Commits
43ea4daa
Commit
43ea4daa
authored
Oct 15, 2021
by
Tristan Gingold
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libwrtd: fix read of stats when reconfiguration (in case of move)
parent
78080c4c
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
17 additions
and
7 deletions
+17
-7
libwrtd-internal.c
software/lib/libwrtd-internal.c
+2
-2
libwrtd-private.h
software/lib/libwrtd-private.h
+1
-1
libwrtd-reconfigure.c
software/lib/libwrtd-reconfigure.c
+14
-4
No files found.
software/lib/libwrtd-internal.c
View file @
43ea4daa
...
...
@@ -444,7 +444,7 @@ enum wrtd_status wrtd_fill_rules(struct wrtd_dev *wrtd, const char *caller_func)
status
=
wrtd_fill_roots
(
wrtd
,
caller_func
);
WRTD_RETURN_IF_ERROR
(
status
);
/* Count number of rules. */
/* Count number of rules
(whether set or not set)
. */
assert
(
wrtd
->
nbr_rules
==
0
);
for
(
cpu
=
0
;
cpu
<
wrtd
->
nbr_cpus
;
cpu
++
)
wrtd
->
nbr_rules
+=
wrtd
->
roots
[
cpu
].
nbr_rules
;
...
...
@@ -453,7 +453,7 @@ enum wrtd_status wrtd_fill_rules(struct wrtd_dev *wrtd, const char *caller_func)
status
=
wrtd_alloc_rules
(
wrtd
,
&
wrtd
->
rules
,
caller_func
);
WRTD_RETURN_IF_ERROR
(
status
);
/* Read rules from cpus. */
/* Read
all
rules from cpus. */
for
(
i
=
0
;
i
<
wrtd
->
nbr_rules
;
i
++
)
{
unsigned
cpu
=
wrtd
->
rules
[
i
].
cpu
;
unsigned
int
addr
;
...
...
software/lib/libwrtd-private.h
View file @
43ea4daa
...
...
@@ -48,7 +48,7 @@ struct wrtd_lib_alarm {
struct
wrtd_lib_rule
{
/* MT CPU on which the rule is placed. */
unsigned
int
cpu
;
/* Rule index on the local MT cpu. */
/* Rule index on the local MT cpu
(physical index)
. */
unsigned
int
local_idx
;
unsigned
char
modified
;
/* Rule (the config part). */
...
...
software/lib/libwrtd-reconfigure.c
View file @
43ea4daa
...
...
@@ -16,6 +16,8 @@ struct rule_map {
/* Rule. */
struct
wrtd_lib_rule
*
rule
;
struct
wrtd_rule_stats
stats
;
/* Rule index before reconfiguration. */
int
old_idx
;
/* It's assigned cpu and index; -1 means unassigned. */
int
cpu
;
int
global_idx
;
...
...
@@ -36,7 +38,8 @@ struct device_map {
/* The global configuration. */
struct
conf_map
{
/* The rules. */
/* The rules.
NBR_RULES is the number of valid rules. */
unsigned
nbr_rules
;
struct
rule_map
*
rules
;
...
...
@@ -94,6 +97,7 @@ static enum wrtd_status wrtd_reconfigure_alloc_map(struct wrtd_dev *wrtd,
continue
;
memset
(
&
map
->
rules
[
n
].
stats
,
0
,
sizeof
(
struct
wrtd_rule_stats
));
map
->
rules
[
n
].
rule
=
&
wrtd
->
rules
[
i
];
map
->
rules
[
n
].
old_idx
=
i
;
map
->
rules
[
n
].
cpu
=
-
1
;
map
->
rules
[
n
].
global_idx
=
-
1
;
n
++
;
...
...
@@ -421,7 +425,8 @@ static enum wrtd_status wrtd_reconfigure_write(struct wrtd_dev *wrtd,
/* Read stats. */
for
(
i
=
0
;
i
<
map
->
nbr_rules
;
i
++
)
{
status
=
wrtd_read_rule_stat
(
wrtd
,
i
,
0
,
sizeof
(
struct
wrtd_rule_stats
),
(
wrtd
,
map
->
rules
[
i
].
old_idx
,
0
,
sizeof
(
struct
wrtd_rule_stats
),
&
map
->
rules
[
i
].
stats
,
__func__
);
WRTD_RETURN_IF_ERROR
(
status
);
}
...
...
@@ -435,12 +440,17 @@ static enum wrtd_status wrtd_reconfigure_write(struct wrtd_dev *wrtd,
for
(
i
=
0
;
i
<
wrtd
->
nbr_rules
;
i
++
)
{
if
(
wrtd_id_null
(
&
new_rules
[
i
].
conf
.
id
)
&&
wrtd_id_null
(
&
old_rules
[
i
].
conf
.
id
))
&&
wrtd_id_null
(
&
old_rules
[
i
].
conf
.
id
))
{
/* Slot was unused, and it still unused. */
continue
;
}
if
(
!
old_rules
[
i
].
modified
&&
(
wrtd_id_eq
(
&
new_rules
[
i
].
conf
.
id
,
&
old_rules
[
i
].
conf
.
id
)))
&
old_rules
[
i
].
conf
.
id
)))
{
/* Slot used by the same rule, and not modified. */
continue
;
}
/* Write the new rule. */
status
=
wrtd_write_rule_conf
(
wrtd
,
i
,
caller_func
);
WRTD_RETURN_IF_ERROR
(
status
);
...
...
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