From: Thomas Gleixner <tglx@linutronix.de>
To: Davide Libenzi <davidel@xmailserver.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Michael Kerrisk <mtk-manpages@gmx.net>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [patch 1/3] new timerfd API - new timerfd API
Date: Mon, 24 Sep 2007 10:26:04 +0200 [thread overview]
Message-ID: <1190622364.4035.182.camel@chaos> (raw)
In-Reply-To: <send-serie.davidel@xmailserver.org.19354.1190587749.1>
Davide,
On Sun, 2007-09-23 at 15:49 -0700, Davide Libenzi wrote:
> This is the new timerfd API as it is implemented by the following patch:
> ---
> fs/compat.c | 32 ++++++-
> fs/timerfd.c | 199 ++++++++++++++++++++++++++++++-----------------
> include/linux/compat.h | 7 +
> include/linux/syscalls.h | 7 +
> 4 files changed, 168 insertions(+), 77 deletions(-)
>
> Index: linux-2.6.mod/fs/timerfd.c
> ===================================================================
> --- linux-2.6.mod.orig/fs/timerfd.c 2007-09-23 15:18:09.000000000 -0700
> +++ linux-2.6.mod/fs/timerfd.c 2007-09-23 15:25:55.000000000 -0700
> @@ -23,15 +23,17 @@
>
> struct timerfd_ctx {
> struct hrtimer tmr;
> + int clockid;
> ktime_t tintv;
> wait_queue_head_t wqh;
> int expired;
> + u64 ticks;
> };
Can you please restructure the struct in a way which does not result in
padding by the compiler ?
struct timerfd_ctx {
struct hrtimer tmr;
ktime_t tintv;
wait_queue_head_t wqh;
u64 ticks;
int expired;
int clockid;
};
> + ticks += (u64)
> hrtimer_forward(&ctx->tmr,
> hrtimer_cb_get_time(&ctx->tmr),
You need to use ctx->tmr.base->get_time() here, otherwise you might read
a stale time value (in case that CONFIG_HIGH_RES_TIMERS is off).
> - ctx->tintv);
> + ctx->tintv) - 1;
> hrtimer_restart(&ctx->tmr);
>
> +asmlinkage long sys_timerfd_create(int clockid)
> {
> - int error;
> + int error, ufd;
> struct timerfd_ctx *ctx;
> struct file *file;
> struct inode *inode;
> - struct itimerspec ktmr;
> -
> - if (copy_from_user(&ktmr, utmr, sizeof(ktmr)))
> - return -EFAULT;
>
> if (clockid != CLOCK_MONOTONIC &&
> clockid != CLOCK_REALTIME)
> return -EINVAL;
> +
> + ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
> + if (!ctx)
> + return -ENOMEM;
> +
> + init_waitqueue_head(&ctx->wqh);
> + ctx->clockid = clockid;
> + hrtimer_init(&ctx->tmr, clockid, HRTIMER_MODE_ABS);
> +
> + error = anon_inode_getfd(&ufd, &inode, &file, "[timerfd]",
> + &timerfd_fops, ctx);
> + if (error)
> + goto err_kfree_ctx;
> +
> + return ufd;
> +
> +err_kfree_ctx:
> + kfree(ctx);
> + return error;
You really can avoid the goto here.
tglx
next prev parent reply other threads:[~2007-09-24 8:26 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-23 22:49 [patch 1/3] new timerfd API - new timerfd API Davide Libenzi
2007-09-24 8:26 ` Thomas Gleixner [this message]
2007-09-24 15:42 ` Davide Libenzi
2007-09-24 15:53 ` Thomas Gleixner
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=1190622364.4035.182.camel@chaos \
--to=tglx@linutronix.de \
--cc=akpm@linux-foundation.org \
--cc=davidel@xmailserver.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mtk-manpages@gmx.net \
--cc=torvalds@linux-foundation.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox