Re: select(0,NULL,NULL,NULL,&t1) used for delay

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/6/05, Madhu K.S. <[email protected]> wrote:
> Hi all,
>
>
> In many application we use select() system call for delay.
>
> example:
> select(0,NULL,NULL,NULL,&t1);
>
>
> select() for delay is very inefficient. I modified sys_select() code for
> efficiency .Here are the changes to fs/select.c.
>
> Please suggest on these changes.
>

A few tiny comments below.


> I know nanosleep() can be used instead of select(), but please suggest
> on my changes.
>
>
> file : fs/select.c
> function : sys_select()
>
Submitting an actual applyable patch is preferred. Makes it possible
to easily apply your changes to test the changes and then the file and
function is also part of the patch so you won't have to spell that out
explicitly.
Use   diff -up

>
>
>
>                           timeout += sec * (unsigned long) HZ;
>                 }
>         }
> -
> +
> +
>         ret = -EINVAL;
>         if (n < 0)
>                 goto out_nofds;
> -
> +       if ( (n == 0) && (inp == NULL) && (outp == NULL) &&
>                 (exp==  NULL)){
No space for the beginning parenthesis and space before the opening
bracket is preferred:
       if ((n == 0) && (inp == NULL) && (outp == NULL) &&
               (exp==  NULL)) {


> +                printf("\n I am inside new select condition timeout
>                         %d\n",timeout);
Having a printk() here certainly won't help performance.

> +                set_current_state(TASK_INTERRUPTIBLE);
> +                ret = 0;
> +                timeout = schedule_timeout(timeout);
> +                if (signal_pending(current))
> +                        ret = -ERESTARTNOHAND;
Wouldn't it make sense to jump out at this point if there's a signal pending?
                if (signal_pending(current)) {
                        ret = -ERESTARTNOHAND;
                        goto out;
                }
Or am I missing something?

> +                if (tvp && !(current->personality & STICKY_TIMEOUTS)) {
> +                        time_t sec = 0, usec = 0;
> +                        if (timeout) {
> +                                sec = timeout / HZ;
> +                                usec = timeout % HZ;
> +                                usec *= (1000000/HZ);
Small style thing:   usec *= (1000000 / HZ);


> +                        }
> +                        put_user(sec, &tvp->tv_sec);
> +                        put_user(usec, &tvp->tv_usec);
> +                }
> +                current->state = TASK_RUNNING;
> +                goto out_nofds;
> +        }
> +
>         /* max_fdset can increase, so grab it once to avoid race */
>         max_fdset = current->files->max_fdset;
>         if (n > max_fdset)
>
[snip]

--
Jesper Juhl <[email protected]>
Don't top-post  http://www.catb.org/~esr/jargon/html/T/top-post.html
Plain text mails only, please      http://www.expita.com/nomime.html
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux