Messages in this thread | | | Date | Thu, 22 Jul 2004 19:16:37 -0700 | From | Andrew Morton <> | Subject | Re: [announce] HVCS for inclusion in 2.6 tree |
| |
Ryan Arnold <rsa@us.ibm.com> wrote: > > hvcs_to_mainline_draft2.patch text/x-patch (80516 bytes) > > +int khvcsd(void *unused) > +{ > + struct hvcs_struct *hvcsd = NULL; > + struct list_head *element; > + struct list_head *safe_temp; > + int hvcs_todo_mask; > + > + daemonize("khvcsd"); > + > + allow_signal(SIGTERM); > + > + do { > + wait_queue_t wait = __WAITQUEUE_INITIALIZER(wait, current); > + hvcs_todo_mask = 0; > + hvcs_kicked = 0; > + wmb(); > + list_for_each_safe(element, safe_temp, &hvcs_structs) { > + hvcsd = list_entry(element, struct hvcs_struct, next); > + hvcs_todo_mask |= hvcs_io(hvcsd); > + } > + > + /* If any of the hvcs adapters want to try a write or quick read > + * don't schedule(), yield a smidgen then execute the hvcs_io > + * thread again for those that want the write. */ > + if (hvcs_todo_mask & (HVCS_TRY_WRITE | HVCS_QUICK_READ)) { > + yield(); > + continue; > + } > + > + add_wait_queue(&hvcs_wait_queue, &wait); > + set_current_state(TASK_INTERRUPTIBLE); > + if (!hvcs_kicked) > + schedule(); > + set_current_state(TASK_RUNNING); > + remove_wait_queue(&hvcs_wait_queue, &wait); > + > + } while (!signal_pending(current)); > + > + complete_and_exit(&hvcs_exited,0); > +} >
I'm not a big fan of using signals for in-kernel IPC. (What happens if root accidentally does `kill -TERM $(pidof khvcsd)', btw?) And daemonize() is deprecated.
It should be possible to use the kthread infrastructure here - it does most of this stuff for you. Use kthread_stop() in the killer and kthread_should_stop() within khvcsd(). kthread_stop() is synchronous, so you don't need to do the complete() stuff here.
It should not be necessary to re-add to the wait queue head on each pass around the loop.
khvcsd() can have static scope.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |