All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Davydov <vdavydov@parallels.com>
To: Cyrill Gorcunov <gorcunov@openvz.org>, <linux-kernel@vger.kernel.org>
Cc: <shawn@churchofgit.com>, <tglx@linutronix.de>,
	<akpm@linux-foundation.org>, <avagin@openvz.org>,
	<xemul@parallels.com>
Subject: Re: [patch 1/3] timerfd: Implement show_fdinfo method
Date: Tue, 8 Apr 2014 10:17:14 +0400	[thread overview]
Message-ID: <5343946A.6000601@parallels.com> (raw)
In-Reply-To: <20140407174933.641611536@openvz.org>

Hi Cyrill,

On 04/07/2014 09:47 PM, Cyrill Gorcunov wrote:
> For checkpoint/restore of timerfd files we need to know how exactly
> the timer were armed to be able to handle it. Thus implement show_fdinfo
> method which provides enough information for timer re-creation.
>
> One of significant changes I think is addition of
> timerfd_ctx::settime_flags member. Currently there are
> two flags TFD_TIMER_ABSTIME and TFD_TIMER_CANCEL_ON_SET,
> and the second can be found from @might_cancel variable
> but in case if the flags will be extended in future we
> most probably will have to somehow remember them explicitly
> anyway so I guss doing that right now won't hurt.
>
> To not bloat the timerfd_ctx structure I've converted
> @expired to short integer and defined @settime_flags
> as short as well.
>
> v2 (by avagin@, vdavydov@ and tglx@):
>
>  - Add it_value/it_interval fields
>  - Save flags being used in timerfd_setup in context
>
> CC: Shawn Landden <shawn@churchofgit.com>
> CC: Thomas Gleixner <tglx@linutronix.de>
> CC: Andrew Morton <akpm@linux-foundation.org>
> CC: Andrey Vagin <avagin@openvz.org>
> CC: Pavel Emelyanov <xemul@parallels.com>
> CC: Vladimir Davydov <vdavydov@parallels.com>
> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
> ---
>  fs/timerfd.c |   30 +++++++++++++++++++++++++++++-
>  1 file changed, 29 insertions(+), 1 deletion(-)
>
> Index: linux-2.6.git/fs/timerfd.c
> ===================================================================
> --- linux-2.6.git.orig/fs/timerfd.c
> +++ linux-2.6.git/fs/timerfd.c
> @@ -35,8 +35,9 @@ struct timerfd_ctx {
>  	ktime_t moffs;
>  	wait_queue_head_t wqh;
>  	u64 ticks;
> -	int expired;
>  	int clockid;
> +	short unsigned expired;
> +	short unsigned settime_flags;	/* to show in fdinfo */
>  	struct rcu_head rcu;
>  	struct list_head clist;
>  	bool might_cancel;
> @@ -196,6 +197,8 @@ static int timerfd_setup(struct timerfd_
>  		if (timerfd_canceled(ctx))
>  			return -ECANCELED;
>  	}
> +
> +	ctx->settime_flags = flags & TFD_SETTIME_FLAGS;
>  	return 0;
>  }
>  
> @@ -284,11 +287,36 @@ static ssize_t timerfd_read(struct file
>  	return res;
>  }
>  
> +static int timerfd_show(struct seq_file *m, struct file *file)
> +{
> +	struct timerfd_ctx *ctx = file->private_data;
> +	struct itimerspec t;
> +
> +	spin_lock_irq(&ctx->wqh.lock);
> +	t.it_value = ktime_to_timespec(timerfd_get_remaining(ctx));
> +	t.it_interval = ktime_to_timespec(ctx->tintv);
> +	spin_unlock_irq(&ctx->wqh.lock);
> +
> +	return seq_printf(m,
> +			  "clockid: %d\n"
> +			  "ticks: %llu\n"
> +			  "settime flags: 0%o\n"
> +			  "it_value: (%llu, %llu)\n"
> +			  "it_interval: (%llu, %llu)\n",

IMO, one would expect to setup the timer on restore by passing the
values of settime_flags, it_value, and it_interval obtained from the
fdinfo to sys_timerfd_settime, but this will be incorrect, because AFAIU
the it_value you report here is always relative to the current time, no
matter whether TFD_TIMER_ABSTIME was set in settime_flags or not. Is it OK?

Thanks.

> +			  ctx->clockid, (unsigned long long)ctx->ticks,
> +			  ctx->settime_flags,
> +			  (unsigned long long)t.it_value.tv_sec,
> +			  (unsigned long long)t.it_value.tv_nsec,
> +			  (unsigned long long)t.it_interval.tv_sec,
> +			  (unsigned long long)t.it_interval.tv_nsec);
> +}
> +
>  static const struct file_operations timerfd_fops = {
>  	.release	= timerfd_release,
>  	.poll		= timerfd_poll,
>  	.read		= timerfd_read,
>  	.llseek		= noop_llseek,
> +	.show_fdinfo	= timerfd_show,
>  };
>  
>  static int timerfd_fget(int fd, struct fd *p)

  reply	other threads:[~2014-04-08  6:17 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-07 17:47 [patch 0/3] timerfd -- implement missing parts to checkpoint and restore timerfd state, v2 Cyrill Gorcunov
2014-04-07 17:47 ` [patch 1/3] timerfd: Implement show_fdinfo method Cyrill Gorcunov
2014-04-08  6:17   ` Vladimir Davydov [this message]
2014-04-08  6:42     ` Cyrill Gorcunov
2014-04-08  6:54       ` Vladimir Davydov
2014-04-08  7:10         ` Cyrill Gorcunov
2014-04-07 17:47 ` [patch 2/3] docs: procfs -- Document timerfd output Cyrill Gorcunov
2014-04-08  7:43   ` [patch 2/3] docs: procfs -- Document timerfd output, v2 Cyrill Gorcunov
2014-04-08  7:52     ` Vladimir Davydov
2014-04-07 17:47 ` [patch 3/3] timerfd: Implement write method Cyrill Gorcunov
2014-04-28 20:53 ` [patch 0/3] timerfd -- implement missing parts to checkpoint and restore timerfd state, v2 Cyrill Gorcunov
2014-04-28 20:59   ` Thomas Gleixner
2014-04-28 21:03     ` Cyrill Gorcunov
  -- strict thread matches above, loose matches on Subject: below --
2014-04-28 21:25 [patch 0/3] timerfd -- implement missing parts to checkpoint and restore timerfd state, v3 Cyrill Gorcunov
2014-04-28 21:25 ` [patch 1/3] timerfd: Implement show_fdinfo method Cyrill Gorcunov
2014-05-21 21:41   ` Thomas Gleixner
2014-05-21 21:54     ` Cyrill Gorcunov

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=5343946A.6000601@parallels.com \
    --to=vdavydov@parallels.com \
    --cc=akpm@linux-foundation.org \
    --cc=avagin@openvz.org \
    --cc=gorcunov@openvz.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=shawn@churchofgit.com \
    --cc=tglx@linutronix.de \
    --cc=xemul@parallels.com \
    /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.