Commit 4712b309 authored by Dimitris Lampridis's avatar Dimitris Lampridis

sw: fix reconfiguration bug that does not enable rules

parent a5459794
......@@ -877,6 +877,7 @@ enum wrtd_status wrtd_attr_set_rule_enable(struct wrtd_dev *wrtd,
if (wrtd->rules[idx].rule.conf.enabled != value) {
wrtd->rules[idx].rule.conf.enabled = value;
wrtd->rules[idx].modified = 1;
status = wrtd_reconfigure(wrtd, __func__);
WRTD_RETURN_IF_ERROR(status);
......
......@@ -424,6 +424,7 @@ enum wrtd_status wrtd_alloc_rules(struct wrtd_dev *wrtd,
for (idx = 0; idx < nbr_rules; idx++) {
rules[n].cpu = cpu;
rules[n].local_idx = idx;
rules[n].modified = 0;
n++;
}
}
......
......@@ -40,6 +40,7 @@ struct wrtd_lib_rule {
unsigned int cpu;
/* Rule index on the local MT cpu. */
unsigned int local_idx;
unsigned char modified;
/* Rule. */
struct wrtd_rule rule;
};
......
......@@ -420,10 +420,9 @@ static enum wrtd_status wrtd_reconfigure_write(struct wrtd_dev *wrtd,
if (wrtd_id_null(new_rules[i].rule.conf.id)
&& wrtd_id_null(old_rules[i].rule.conf.id))
continue;
if (wrtd_id_eq(new_rules[i].rule.conf.id,
old_rules[i].rule.conf.id)
&& (new_rules[i].rule.conf.enabled
== old_rules[i].rule.conf.enabled))
if (!old_rules[i].modified &&
(wrtd_id_eq(new_rules[i].rule.conf.id,
old_rules[i].rule.conf.id)))
continue;
status = wrtd_write_rule(wrtd, i, caller_func);
/* FIXME: inconsistent state, free old_rules ? */
......@@ -447,7 +446,7 @@ enum wrtd_status wrtd_reconfigure(struct wrtd_dev *wrtd, const char *caller_func
status = wrtd_fill_alarms(wrtd, caller_func);
WRTD_RETURN_IF_ERROR(status);
/* 1. Count number of rules. */
/* Count number of rules. */
status = wrtd_reconfigure_alloc_map(wrtd, &map, caller_func);
WRTD_RETURN_IF_ERROR(status);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment