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, ...@@ -877,6 +877,7 @@ enum wrtd_status wrtd_attr_set_rule_enable(struct wrtd_dev *wrtd,
if (wrtd->rules[idx].rule.conf.enabled != value) { if (wrtd->rules[idx].rule.conf.enabled != value) {
wrtd->rules[idx].rule.conf.enabled = value; wrtd->rules[idx].rule.conf.enabled = value;
wrtd->rules[idx].modified = 1;
status = wrtd_reconfigure(wrtd, __func__); status = wrtd_reconfigure(wrtd, __func__);
WRTD_RETURN_IF_ERROR(status); WRTD_RETURN_IF_ERROR(status);
......
...@@ -424,6 +424,7 @@ enum wrtd_status wrtd_alloc_rules(struct wrtd_dev *wrtd, ...@@ -424,6 +424,7 @@ enum wrtd_status wrtd_alloc_rules(struct wrtd_dev *wrtd,
for (idx = 0; idx < nbr_rules; idx++) { for (idx = 0; idx < nbr_rules; idx++) {
rules[n].cpu = cpu; rules[n].cpu = cpu;
rules[n].local_idx = idx; rules[n].local_idx = idx;
rules[n].modified = 0;
n++; n++;
} }
} }
......
...@@ -40,6 +40,7 @@ struct wrtd_lib_rule { ...@@ -40,6 +40,7 @@ struct wrtd_lib_rule {
unsigned int cpu; unsigned int cpu;
/* Rule index on the local MT cpu. */ /* Rule index on the local MT cpu. */
unsigned int local_idx; unsigned int local_idx;
unsigned char modified;
/* Rule. */ /* Rule. */
struct wrtd_rule rule; struct wrtd_rule rule;
}; };
......
...@@ -420,10 +420,9 @@ static enum wrtd_status wrtd_reconfigure_write(struct wrtd_dev *wrtd, ...@@ -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) if (wrtd_id_null(new_rules[i].rule.conf.id)
&& wrtd_id_null(old_rules[i].rule.conf.id)) && wrtd_id_null(old_rules[i].rule.conf.id))
continue; continue;
if (wrtd_id_eq(new_rules[i].rule.conf.id, if (!old_rules[i].modified &&
old_rules[i].rule.conf.id) (wrtd_id_eq(new_rules[i].rule.conf.id,
&& (new_rules[i].rule.conf.enabled old_rules[i].rule.conf.id)))
== old_rules[i].rule.conf.enabled))
continue; continue;
status = wrtd_write_rule(wrtd, i, caller_func); status = wrtd_write_rule(wrtd, i, caller_func);
/* FIXME: inconsistent state, free old_rules ? */ /* FIXME: inconsistent state, free old_rules ? */
...@@ -447,7 +446,7 @@ enum wrtd_status wrtd_reconfigure(struct wrtd_dev *wrtd, const char *caller_func ...@@ -447,7 +446,7 @@ enum wrtd_status wrtd_reconfigure(struct wrtd_dev *wrtd, const char *caller_func
status = wrtd_fill_alarms(wrtd, caller_func); status = wrtd_fill_alarms(wrtd, caller_func);
WRTD_RETURN_IF_ERROR(status); WRTD_RETURN_IF_ERROR(status);
/* 1. Count number of rules. */ /* Count number of rules. */
status = wrtd_reconfigure_alloc_map(wrtd, &map, caller_func); status = wrtd_reconfigure_alloc_map(wrtd, &map, caller_func);
WRTD_RETURN_IF_ERROR(status); 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