struct rtr_id *rtr_current, *new_rtr_entry;
struct msgobj_t *obj;
struct canchip_t *chip;
+ int err;
/*struct canque_ends_t *qends;*/
DEBUGMSG("Remote transmission request\n");
}
init_waitqueue_head(&new_rtr_entry->rtr_wq);
new_rtr_entry->id = rtr_id;
+ new_rtr_entry->ready_fl = 0;
new_rtr_entry->rtr_message = rtr_msg;
new_rtr_entry->next=NULL;
/* Send remote transmission request */
chip->chipspecops->remote_request(chip,obj);
obj->ret = 0;
- interruptible_sleep_on(&new_rtr_entry->rtr_wq);
+
+ err = wait_event_interruptible(new_rtr_entry->rtr_wq, new_rtr_entry->ready_fl);
can_spin_lock_irqsave(&hardware_p->rtr_lock, flags);
if (hardware_p->rtr_queue == new_rtr_entry) {
can_spin_unlock_irqrestore(&hardware_p->rtr_lock, flags);
kfree(new_rtr_entry);
+ if (err)
+ return -EINTR;
+
return obj->ret;
}