Loading drivers/char/cyclades.c +16 −29 Original line number Diff line number Diff line Loading @@ -947,7 +947,7 @@ do_softint(struct work_struct *work) tty_wakeup(tty); #ifdef Z_WAKE if (test_and_clear_bit(Cy_EVENT_SHUTDOWN_WAKEUP, &info->event)) wake_up_interruptible(&info->shutdown_wait); complete(&info->shutdown_wait); #endif } /* do_softint */ Loading Loading @@ -2324,9 +2324,8 @@ block_til_ready(struct tty_struct *tty, struct file *filp, * until it's done, and then try again. */ if (tty_hung_up_p(filp) || (info->flags & ASYNC_CLOSING)) { if (info->flags & ASYNC_CLOSING) { interruptible_sleep_on(&info->close_wait); } wait_event_interruptible(info->close_wait, !(info->flags & ASYNC_CLOSING)); return (info->flags & ASYNC_HUP_NOTIFY) ? -EAGAIN: -ERESTARTSYS; } Loading Loading @@ -2597,8 +2596,8 @@ static int cy_open(struct tty_struct *tty, struct file *filp) * If the port is the middle of closing, bail out now */ if (tty_hung_up_p(filp) || (info->flags & ASYNC_CLOSING)) { if (info->flags & ASYNC_CLOSING) interruptible_sleep_on(&info->close_wait); wait_event_interruptible(info->close_wait, !(info->flags & ASYNC_CLOSING)); return (info->flags & ASYNC_HUP_NOTIFY) ? -EAGAIN: -ERESTARTSYS; } Loading Loading @@ -2805,7 +2804,7 @@ static void cy_close(struct tty_struct *tty, struct file *filp) "ttyC%d was %x\n", info->line, retval); } CY_UNLOCK(info, flags); interruptible_sleep_on(&info->shutdown_wait); wait_for_completion_interruptible(&info->shutdown_wait); CY_LOCK(info, flags); } #endif Loading Loading @@ -4091,32 +4090,20 @@ cy_ioctl(struct tty_struct *tty, struct file *file, case TIOCMIWAIT: CY_LOCK(info, flags); /* note the counters on entry */ cprev = info->icount; cnow = info->icount; CY_UNLOCK(info, flags); while (1) { interruptible_sleep_on(&info->delta_msr_wait); /* see if a signal did it */ if (signal_pending(current)) { return -ERESTARTSYS; } ret_val = wait_event_interruptible(info->delta_msr_wait, ({ cprev = cnow; CY_LOCK(info, flags); cnow = info->icount; /* atomic copy */ CY_UNLOCK(info, flags); if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) { return -EIO; /* no change => error */ } if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || ((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) || ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) || ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) { return 0; } cprev = cnow; } /* NOTREACHED */ ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts)); })); break; /* * Get counter of input serial line interrupts (DCD,RI,DSR,CTS) Loading Loading @@ -4534,7 +4521,7 @@ static void __devinit cy_init_card(struct cyclades_card *cinfo) INIT_WORK(&info->tqueue, do_softint); init_waitqueue_head(&info->open_wait); init_waitqueue_head(&info->close_wait); init_waitqueue_head(&info->shutdown_wait); init_completion(&info->shutdown_wait); init_waitqueue_head(&info->delta_msr_wait); if (IS_CYC_Z(*cinfo)) { Loading include/linux/cyclades.h +1 −1 Original line number Diff line number Diff line Loading @@ -588,7 +588,7 @@ struct cyclades_port { struct work_struct tqueue; wait_queue_head_t open_wait; wait_queue_head_t close_wait; wait_queue_head_t shutdown_wait; struct completion shutdown_wait; wait_queue_head_t delta_msr_wait; int throttle; }; Loading Loading
drivers/char/cyclades.c +16 −29 Original line number Diff line number Diff line Loading @@ -947,7 +947,7 @@ do_softint(struct work_struct *work) tty_wakeup(tty); #ifdef Z_WAKE if (test_and_clear_bit(Cy_EVENT_SHUTDOWN_WAKEUP, &info->event)) wake_up_interruptible(&info->shutdown_wait); complete(&info->shutdown_wait); #endif } /* do_softint */ Loading Loading @@ -2324,9 +2324,8 @@ block_til_ready(struct tty_struct *tty, struct file *filp, * until it's done, and then try again. */ if (tty_hung_up_p(filp) || (info->flags & ASYNC_CLOSING)) { if (info->flags & ASYNC_CLOSING) { interruptible_sleep_on(&info->close_wait); } wait_event_interruptible(info->close_wait, !(info->flags & ASYNC_CLOSING)); return (info->flags & ASYNC_HUP_NOTIFY) ? -EAGAIN: -ERESTARTSYS; } Loading Loading @@ -2597,8 +2596,8 @@ static int cy_open(struct tty_struct *tty, struct file *filp) * If the port is the middle of closing, bail out now */ if (tty_hung_up_p(filp) || (info->flags & ASYNC_CLOSING)) { if (info->flags & ASYNC_CLOSING) interruptible_sleep_on(&info->close_wait); wait_event_interruptible(info->close_wait, !(info->flags & ASYNC_CLOSING)); return (info->flags & ASYNC_HUP_NOTIFY) ? -EAGAIN: -ERESTARTSYS; } Loading Loading @@ -2805,7 +2804,7 @@ static void cy_close(struct tty_struct *tty, struct file *filp) "ttyC%d was %x\n", info->line, retval); } CY_UNLOCK(info, flags); interruptible_sleep_on(&info->shutdown_wait); wait_for_completion_interruptible(&info->shutdown_wait); CY_LOCK(info, flags); } #endif Loading Loading @@ -4091,32 +4090,20 @@ cy_ioctl(struct tty_struct *tty, struct file *file, case TIOCMIWAIT: CY_LOCK(info, flags); /* note the counters on entry */ cprev = info->icount; cnow = info->icount; CY_UNLOCK(info, flags); while (1) { interruptible_sleep_on(&info->delta_msr_wait); /* see if a signal did it */ if (signal_pending(current)) { return -ERESTARTSYS; } ret_val = wait_event_interruptible(info->delta_msr_wait, ({ cprev = cnow; CY_LOCK(info, flags); cnow = info->icount; /* atomic copy */ CY_UNLOCK(info, flags); if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) { return -EIO; /* no change => error */ } if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || ((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) || ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) || ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) { return 0; } cprev = cnow; } /* NOTREACHED */ ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts)); })); break; /* * Get counter of input serial line interrupts (DCD,RI,DSR,CTS) Loading Loading @@ -4534,7 +4521,7 @@ static void __devinit cy_init_card(struct cyclades_card *cinfo) INIT_WORK(&info->tqueue, do_softint); init_waitqueue_head(&info->open_wait); init_waitqueue_head(&info->close_wait); init_waitqueue_head(&info->shutdown_wait); init_completion(&info->shutdown_wait); init_waitqueue_head(&info->delta_msr_wait); if (IS_CYC_Z(*cinfo)) { Loading
include/linux/cyclades.h +1 −1 Original line number Diff line number Diff line Loading @@ -588,7 +588,7 @@ struct cyclades_port { struct work_struct tqueue; wait_queue_head_t open_wait; wait_queue_head_t close_wait; wait_queue_head_t shutdown_wait; struct completion shutdown_wait; wait_queue_head_t delta_msr_wait; int throttle; }; Loading