targ = &lconf->targs[tid];
start_l3(targ);
}
- } else {
+ } else if (task_id < lconf->n_tasks_all) {
targ = &lconf->targs[task_id];
start_l3(targ);
+ } else {
+ plog_warn("Invalid task id %d on core %u\n", task_id, cores[i]);
+ continue;
}
+ if (wait_command_handled(lconf) == -1) return;
lconf->msg.type = LCONF_MSG_START;
lconf->msg.task_id = task_id;
lconf_set_req(lconf);
for (int i = 0; i < count; ++i) {
struct lcore_cfg *lconf = &lcore_cfg[cores[i]];
+ if (task_id >= lconf->n_tasks_all) {
+ plog_warn("Trying to stop invalid task id %d on core %u\n", task_id, cores[i]);
+ continue;
+ }
if (lconf->n_tasks_run) {
if (wait_command_handled(lconf) == -1) return;
plog_warn("Failed to restart port %d\n", portid);
}
}
+
void cmd_write_reg(uint8_t port_id, unsigned int id, unsigned int val)
{
if (!port_is_active(port_id)) {
idx++;
}
}
+ // Check that task id is valid and running
+ if (idx == -1)
+ return;
+
lconf->task_is_running[lconf->msg.task_id] = 0;
t = lconf->tasks_all[lconf->msg.task_id];
t->aux->start(t);
}
lconf->n_tasks_run = lconf->n_tasks_all;
+ return;
}
- else if (lconf->n_tasks_run == 0) {
+
+ // Check that task id is valid
+ if (lconf->msg.task_id >= lconf->n_tasks_all)
+ return;
+
+ if (lconf->n_tasks_run == 0) {
t = lconf->tasks_run[0] = lconf->tasks_all[lconf->msg.task_id];
lconf->n_tasks_run = 1;
lconf->task_is_running[lconf->msg.task_id] = 1;
t->aux->start(t);
}
else {
+ if (lconf->task_is_running[lconf->msg.task_id])
+ return;
for (int i = lconf->n_tasks_run - 1; i >= 0; --i) {
idx = lconf_get_task_id(lconf, lconf->tasks_run[i]);
if (idx == lconf->msg.task_id) {
+ // We should not come here as checking earlier if task id is running...
+ plog_warn("Unexpectedly get request to start task %d already running\n", idx);
break;
}
else if (idx > lconf->msg.task_id) {