if (!ret)
break;
- set_current_state(TASK_INTERRUPTIBLE);
- if (schedule_timeout (HZ/3))
+ if (msleep_interruptible(334))
return -EINTR;
}
#undef PUT_ENVP
- envp[i] = 0;
+ envp[i] = NULL;
return 0;
}
/* Sit and wait for a signal to probe the nodes on the bus. This
* happens when we get a bus reset. */
- while (!down_interruptible(&hi->reset_sem) &&
- !down_interruptible(&nodemgr_serialize)) {
+ while (1) {
unsigned int generation = 0;
int i;
- if (hi->kill_me)
+ if (down_interruptible(&hi->reset_sem) ||
+ down_interruptible(&nodemgr_serialize)) {
+ if (try_to_freeze(PF_FREEZE))
+ continue;
+ printk("NodeMgr: received unexpected signal?!\n" );
break;
+ }
+
+ if (hi->kill_me) {
+ up(&nodemgr_serialize);
+ break;
+ }
/* Pause for 1/4 second in 1/16 second intervals,
* to make sure things settle down. */
for (i = 0; i < 4 ; i++) {
set_current_state(TASK_INTERRUPTIBLE);
- if (schedule_timeout(HZ/16)) {
+ if (msleep_interruptible(63)) {
up(&nodemgr_serialize);
goto caught_signal;
}
* start the the waiting over again */
while (!down_trylock(&hi->reset_sem))
i = 0;
+
+ /* Check the kill_me again */
+ if (hi->kill_me) {
+ up(&nodemgr_serialize);
+ goto caught_signal;
+ }
}
if (!nodemgr_check_irm_capability(host, reset_cycles)) {
.remove_host = nodemgr_remove_host,
};
-void init_ieee1394_nodemgr(void)
+int init_ieee1394_nodemgr(void)
{
- class_register(&nodemgr_ne_class);
- class_register(&nodemgr_ud_class);
+ int ret;
+
+ ret = class_register(&nodemgr_ne_class);
+ if (ret < 0)
+ return ret;
+
+ ret = class_register(&nodemgr_ud_class);
+ if (ret < 0) {
+ class_unregister(&nodemgr_ne_class);
+ return ret;
+ }
hpsb_register_highlevel(&nodemgr_highlevel);
+
+ return 0;
}
void cleanup_ieee1394_nodemgr(void)