From: Shawn Bohrer <shawn.bohrer@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Jack Stone <jwjstone@fastmail.fm>,
Viresh Kumar <viresh.kumar@st.com>,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
viro@zeniv.linux.org.uk, Davide Libenzi <davidel@xmailserver.org>
Subject: Re: [PATCH resend] fs/eventpoll.c: fix compilation warning
Date: Sat, 15 Jan 2011 10:20:27 -0600 [thread overview]
Message-ID: <20110115162027.GA2552@lintop> (raw)
In-Reply-To: <20110114160508.41105533.akpm@linux-foundation.org>
On Fri, Jan 14, 2011 at 04:05:08PM -0800, Andrew Morton wrote:
> I've looked at this warning several times - the code is non-buggy and
> it's a bit sad to add extra instructions unnecessarily. It would be
> better to make this warning go away by cleaning up or restructuring the
> code.
I agree there really isn't a bug here and thus we don't _need_ to
initialize 'slack', but that depends on the current implementation of
schedule_hrtimeout_range() not using 'slack' when 'to' is NULL. I
can't imagine that changing anytime soon, but that does seem like it
may be a bad assumption.
Furthermore, I've looked at the code pretty hard and I don't see a way
to simply restructure and make the warning go away.
> And the code _is_ pretty stupid. If timed_out is set to 1 then the
> function does a great pile of useless junk. I had a quick tinkle, made
> things worse and gave up:
Ah, I think you may have misunderstood. The warning that 'slack' may
be used uninitialized occurs when a negative timeout is provided, not
when timeout==0.
> --- a/fs/eventpoll.c~a
> +++ a/fs/eventpoll.c
> @@ -1124,16 +1124,20 @@ static int ep_poll(struct eventpoll *ep,
> struct timespec end_time;
> ktime_t expires, *to = NULL;
>
> - if (timeout > 0) {
> - ktime_get_ts(&end_time);
> - timespec_add_ns(&end_time, (u64)timeout * NSEC_PER_MSEC);
> - slack = select_estimate_accuracy(&end_time);
> - to = &expires;
> - *to = timespec_to_ktime(end_time);
> - } else if (timeout == 0) {
> - timed_out = 1;
> + if (timeout == 0) {
> + /*
> + * explanation of what timeout==0 means goes here
> + */
> + spin_lock_irqsave(&ep->lock, flags);
> + goto skip;
> }
>
> + ktime_get_ts(&end_time);
> + timespec_add_ns(&end_time, (u64)timeout * NSEC_PER_MSEC);
> + slack = select_estimate_accuracy(&end_time);
> + to = &expires;
> + *to = timespec_to_ktime(end_time);
> +
> retry:
> spin_lock_irqsave(&ep->lock, flags);
>
> @@ -1149,9 +1153,10 @@ retry:
>
> for (;;) {
> /*
> - * We don't want to sleep if the ep_poll_callback() sends us
> - * a wakeup in between. That's why we set the task state
> - * to TASK_INTERRUPTIBLE before doing the checks.
> + * We don't want to sleep if the ep_poll_callback()
> + * sends us a wakeup in between. That's why we set the
> + * task state to TASK_INTERRUPTIBLE before doing the
> + * checks.
> */
> set_current_state(TASK_INTERRUPTIBLE);
> if (!list_empty(&ep->rdllist) || timed_out)
> @@ -1171,6 +1176,7 @@ retry:
>
> set_current_state(TASK_RUNNING);
> }
> +skip:
> /* Is it worth to try to dig for events ? */
> eavail = !list_empty(&ep->rdllist) || ep->ovflist != EP_UNACTIVE_PTR;
>
> _
>
>
> but you get the idea ;)
>
> I think the attempt to munge the "timeout==0" spacial case into the
> main body of the polling loop was a mistake, and that the code would be
> better/cleaner if that special case was handled quite separately.
I agree that the timeout==0 case could be optimized here. I've got a
patch set that I'm currently testing to do just that. I'll send it
out shortly.
--
Shawn
next prev parent reply other threads:[~2011-01-15 16:20 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-14 11:52 [PATCH resend] fs/eventpoll.c: fix compilation warning Viresh Kumar
2011-01-14 13:07 ` Jack Stone
2011-01-14 14:48 ` Shawn Bohrer
2011-01-14 14:48 ` Shawn Bohrer
2011-01-14 15:21 ` Davide Libenzi
2011-01-15 0:05 ` Andrew Morton
2011-01-15 11:10 ` Jack Stone
2011-01-15 16:20 ` Shawn Bohrer [this message]
2011-01-15 17:00 ` [PATCH 1/3] epoll: initialize slack for negative timeout values Shawn Bohrer
2011-01-15 19:06 ` Davide Libenzi
2011-03-18 7:38 ` Mike Frysinger
2011-03-18 7:38 ` Mike Frysinger
2011-01-15 17:00 ` [PATCH 2/3] epoll: short circuit the timeout==0 case Shawn Bohrer
2011-01-15 17:00 ` [PATCH 3/3] epoll: remove unnecessary test of ep->ovflist for available events Shawn Bohrer
2011-01-15 19:03 ` Davide Libenzi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110115162027.GA2552@lintop \
--to=shawn.bohrer@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=davidel@xmailserver.org \
--cc=jwjstone@fastmail.fm \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=viresh.kumar@st.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.