On Sun, 31 Jul 2022 12:47:30 -0400 Steven Rostedt <rostedt@xxxxxxxxxxx> wrote: > But Daniel, these checks do need to be updated. Please send patches on > top of this series to address it. I believe what Tao is trying to say is this: If we set RV_PER_TASKS_MONITORS greater than 1 we have: int rv_enable_monitor(struct rv_monitor_def *mdef) { int retval; lockdep_assert_held(&rv_interface_lock); if (mdef->monitor->enabled) return 0; retval = mdef->monitor->enable(); <- if that returns positive, then things break. if (!retval) mdef->monitor->enabled = 1; <- this is not set. return retval; } static int enable_wip(void) { int retval; retval = da_monitor_init_wip(); <- if that returns positive, things break if (retval) return retval; static int da_monitor_init_##name(void) \ { \ int slot; \ \ slot = rv_get_task_monitor_slot(); <- if this returns positive, things break \ if (slot < 0 || slot >= RV_PER_TASK_MONITOR_INIT) \ And we probably need slot to be negative if it is greater or equal to RV_PER_TASK_MONITOR_INIT. return slot; \ int rv_get_task_monitor_slot(void) { int i; lockdep_assert_held(&rv_interface_lock); if (task_monitor_count == RV_PER_TASK_MONITORS) return -EBUSY; task_monitor_count++; for (i = 0; i < RV_PER_TASK_MONITORS; i++) { if (task_monitor_slots[i] == false) { task_monitor_slots[i] = true; return i; <- if RV_PER_TASK_MONITORS > 1 then it can return positive! } } -- Steve