linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] staging: dgap: use schedule_timeout_interruptible() instead of dgap_ms_sleep()
@ 2014-09-16  3:33 Daeseok Youn
  2014-09-16  6:31 ` Dan Carpenter
  0 siblings, 1 reply; 4+ messages in thread
From: Daeseok Youn @ 2014-09-16  3:33 UTC (permalink / raw)
  To: lidza.louina, markh
  Cc: markh, daeseok.youn, gregkh, driverdev-devel, devel, linux-kernel

Using schedule_timeout_interruptible() is exactly same as
setting a status of current process and calling  schedule_timeout().

Removes dgap_ms_sleep(), because this function is used
only when closing tty channel on dgap_tty_close().
And also removes ch_close_delay that is always set to 250
on dgap_tty_init().

Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
---
 drivers/staging/dgap/dgap.c |   36 ++++++------------------------------
 drivers/staging/dgap/dgap.h |    3 ---
 2 files changed, 6 insertions(+), 33 deletions(-)

diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c
index 67da1d5..8aff0de 100644
--- a/drivers/staging/dgap/dgap.c
+++ b/drivers/staging/dgap/dgap.c
@@ -180,7 +180,6 @@ static char *dgap_create_config_string(struct board_t *bd, char *string);
 static uint dgap_config_get_useintr(struct board_t *bd);
 static uint dgap_config_get_altpin(struct board_t *bd);
 
-static int dgap_ms_sleep(ulong ms);
 static void dgap_do_bios_load(struct board_t *brd, const u8 *ubios, int len);
 static void dgap_do_fep_load(struct board_t *brd, const u8 *ufep, int len);
 #ifdef DIGI_CONCENTRATORS_SUPPORTED
@@ -1200,26 +1199,6 @@ static void dgap_init_globals(void)
 
 /************************************************************************
  *
- * Utility functions
- *
- ************************************************************************/
-
-/*
- * dgap_ms_sleep()
- *
- * Put the driver to sleep for x ms's
- *
- * Returns 0 if timed out, !0 (showing signal) if interrupted by a signal.
- */
-static int dgap_ms_sleep(ulong ms)
-{
-	current->state = TASK_INTERRUPTIBLE;
-	schedule_timeout((ms * HZ) / 1000);
-	return signal_pending(current);
-}
-
-/************************************************************************
- *
  * TTY Initialization/Cleanup Functions
  *
  ************************************************************************/
@@ -1462,9 +1441,6 @@ static int dgap_tty_init(struct board_t *brd)
 		ch->ch_tstart = 0;
 		ch->ch_rstart = 0;
 
-		/* .25 second delay */
-		ch->ch_close_delay = 250;
-
 		/*
 		 * Set queue water marks, interrupt mask,
 		 * and general tty parameters.
@@ -2297,12 +2273,12 @@ static void dgap_tty_close(struct tty_struct *tty, struct file *file)
 			 * Go to sleep to ensure RTS/DTR
 			 * have been dropped for modems to see it.
 			 */
-			if (ch->ch_close_delay) {
-				spin_unlock_irqrestore(&ch->ch_lock,
-						       lock_flags);
-				dgap_ms_sleep(ch->ch_close_delay);
-				spin_lock_irqsave(&ch->ch_lock, lock_flags);
-			}
+			spin_unlock_irqrestore(&ch->ch_lock,
+					lock_flags);
+			/* .25 second delay for dropping RTS/DTR */
+			schedule_timeout_interruptible(msecs_to_jiffies(250));
+			signal_pending(current);
+			spin_lock_irqsave(&ch->ch_lock, lock_flags);
 		}
 
 		ch->pscan_state = 0;
diff --git a/drivers/staging/dgap/dgap.h b/drivers/staging/dgap/dgap.h
index a0307b9..ba05c65 100644
--- a/drivers/staging/dgap/dgap.h
+++ b/drivers/staging/dgap/dgap.h
@@ -982,9 +982,6 @@ struct channel_t {
 	u32 ch_open_count;		/* open count			*/
 	u32	ch_flags;		/* Channel flags                */
 
-	u32	ch_close_delay;		/* How long we should drop      */
-					/* RTS/DTR for                  */
-
 	u32	ch_cpstime;		/* Time for CPS calculations    */
 
 	tcflag_t ch_c_iflag;		/* channel iflags               */
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] staging: dgap: use schedule_timeout_interruptible() instead of dgap_ms_sleep()
  2014-09-16  3:33 [PATCH] staging: dgap: use schedule_timeout_interruptible() instead of dgap_ms_sleep() Daeseok Youn
@ 2014-09-16  6:31 ` Dan Carpenter
  2014-09-16  7:16   ` DaeSeok Youn
  2014-09-16  7:54   ` Joe Perches
  0 siblings, 2 replies; 4+ messages in thread
From: Dan Carpenter @ 2014-09-16  6:31 UTC (permalink / raw)
  To: Daeseok Youn
  Cc: lidza.louina, markh, devel, gregkh, driverdev-devel, linux-kernel

On Tue, Sep 16, 2014 at 12:33:33PM +0900, Daeseok Youn wrote:
> @@ -2297,12 +2273,12 @@ static void dgap_tty_close(struct tty_struct *tty, struct file *file)
>  			 * Go to sleep to ensure RTS/DTR
>  			 * have been dropped for modems to see it.
>  			 */
> -			if (ch->ch_close_delay) {
> -				spin_unlock_irqrestore(&ch->ch_lock,
> -						       lock_flags);
> -				dgap_ms_sleep(ch->ch_close_delay);
> -				spin_lock_irqsave(&ch->ch_lock, lock_flags);
> -			}
> +			spin_unlock_irqrestore(&ch->ch_lock,
> +					lock_flags);
> +			/* .25 second delay for dropping RTS/DTR */
> +			schedule_timeout_interruptible(msecs_to_jiffies(250));
> +			signal_pending(current);

There is no point in calling signal_pending() if you don't care about
the return value.

> +			spin_lock_irqsave(&ch->ch_lock, lock_flags);
>  		}
>  

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] staging: dgap: use schedule_timeout_interruptible() instead of dgap_ms_sleep()
  2014-09-16  6:31 ` Dan Carpenter
@ 2014-09-16  7:16   ` DaeSeok Youn
  2014-09-16  7:54   ` Joe Perches
  1 sibling, 0 replies; 4+ messages in thread
From: DaeSeok Youn @ 2014-09-16  7:16 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Lidza Louina, Mark Hounschell, devel, Greg KH, driverdev-devel,
	linux-kernel

Hi,

2014-09-16 15:31 GMT+09:00 Dan Carpenter <dan.carpenter@oracle.com>:
>
> On Tue, Sep 16, 2014 at 12:33:33PM +0900, Daeseok Youn wrote:
> > @@ -2297,12 +2273,12 @@ static void dgap_tty_close(struct tty_struct *tty, struct file *file)
> >                        * Go to sleep to ensure RTS/DTR
> >                        * have been dropped for modems to see it.
> >                        */
> > -                     if (ch->ch_close_delay) {
> > -                             spin_unlock_irqrestore(&ch->ch_lock,
> > -                                                    lock_flags);
> > -                             dgap_ms_sleep(ch->ch_close_delay);
> > -                             spin_lock_irqsave(&ch->ch_lock, lock_flags);
> > -                     }
> > +                     spin_unlock_irqrestore(&ch->ch_lock,
> > +                                     lock_flags);
> > +                     /* .25 second delay for dropping RTS/DTR */
> > +                     schedule_timeout_interruptible(msecs_to_jiffies(250));
> > +                     signal_pending(current);
>
> There is no point in calling signal_pending() if you don't care about
> the return value.
Yes, you're right.
Originally it didn't have any handling of the return value from
signal_pending().
So, I will re-send this patch after removing signal_pending().

Thanks.

regards,
Daeseok Youn
>
> > +                     spin_lock_irqsave(&ch->ch_lock, lock_flags);
> >               }
> >
>
> regards,
> dan carpenter

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] staging: dgap: use schedule_timeout_interruptible() instead of dgap_ms_sleep()
  2014-09-16  6:31 ` Dan Carpenter
  2014-09-16  7:16   ` DaeSeok Youn
@ 2014-09-16  7:54   ` Joe Perches
  1 sibling, 0 replies; 4+ messages in thread
From: Joe Perches @ 2014-09-16  7:54 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Daeseok Youn, lidza.louina, markh, devel, gregkh,
	driverdev-devel, linux-kernel

On Tue, 2014-09-16 at 09:31 +0300, Dan Carpenter wrote:
> There is no point in calling signal_pending() if you don't care about
> the return value.

So maybe make it __must_check?
---
 include/linux/sched.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index 7d799ea..03273c0 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -2692,7 +2692,7 @@ static inline int restart_syscall(void)
 	return -ERESTARTNOINTR;
 }
 
-static inline int signal_pending(struct task_struct *p)
+static inline int __must_check signal_pending(struct task_struct *p)
 {
 	return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING));
 }



^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-09-16  7:55 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-16  3:33 [PATCH] staging: dgap: use schedule_timeout_interruptible() instead of dgap_ms_sleep() Daeseok Youn
2014-09-16  6:31 ` Dan Carpenter
2014-09-16  7:16   ` DaeSeok Youn
2014-09-16  7:54   ` Joe Perches

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).