From: Cyrill Gorcunov <gorcunov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: Michael Kerrisk
<mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
Andrew Morton
<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
Andrey Vagin <avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>,
Pavel Emelyanov <xemul-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>,
Vladimir Davydov
<vdavydov-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
Subject: [patch 1/4] timerfd: Implement show_fdinfo method
Date: Wed, 25 Jun 2014 02:02:18 +0400 [thread overview]
Message-ID: <20140624220218.GY2095@moon> (raw)
In-Reply-To: <20140623190345.354980826-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
For checkpoint/restore of timerfd files we need to know how exactly
the timer were armed, to be able to recreate it on restore stage.
Thus implement show_fdinfo method which provides enough information
for that.
One of significant changes I think is the addition of @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 too.
v2 (by avagin@, vdavydov@ and tglx@):
- Add it_value/it_interval fields
- Save flags being used in timerfd_setup in context
v3 (by tglx@):
- don't forget to use CONFIG_PROC_FS
v4 (by akpm@):
-Use define timerfd_show NULL for non c/r config
CC: Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
CC: Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
CC: Andrey Vagin <avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
CC: Pavel Emelyanov <xemul-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
CC: Vladimir Davydov <vdavydov-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
Signed-off-by: Cyrill Gorcunov <gorcunov-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
---
A nit fixed in timerfd_show for non c/r config
fs/timerfd.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 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,40 @@ static ssize_t timerfd_read(struct file
return res;
}
+#ifdef CONFIG_PROC_FS
+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",
+ 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);
+}
+#else
+#define timerfd_show NULL
+#endif
+
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)
WARNING: multiple messages have this Message-ID (diff)
From: Cyrill Gorcunov <gorcunov@gmail.com>
To: linux-kernel@vger.kernel.org, linux-api@vger.kernel.org
Cc: Michael Kerrisk <mtk.manpages@gmail.com>,
Thomas Gleixner <tglx@linutronix.de>,
Andrew Morton <akpm@linux-foundation.org>,
Andrey Vagin <avagin@openvz.org>,
Pavel Emelyanov <xemul@parallels.com>,
Vladimir Davydov <vdavydov@parallels.com>
Subject: [patch 1/4] timerfd: Implement show_fdinfo method
Date: Wed, 25 Jun 2014 02:02:18 +0400 [thread overview]
Message-ID: <20140624220218.GY2095@moon> (raw)
In-Reply-To: <20140623190345.354980826@openvz.org>
For checkpoint/restore of timerfd files we need to know how exactly
the timer were armed, to be able to recreate it on restore stage.
Thus implement show_fdinfo method which provides enough information
for that.
One of significant changes I think is the addition of @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 too.
v2 (by avagin@, vdavydov@ and tglx@):
- Add it_value/it_interval fields
- Save flags being used in timerfd_setup in context
v3 (by tglx@):
- don't forget to use CONFIG_PROC_FS
v4 (by akpm@):
-Use define timerfd_show NULL for non c/r config
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>
---
A nit fixed in timerfd_show for non c/r config
fs/timerfd.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 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,40 @@ static ssize_t timerfd_read(struct file
return res;
}
+#ifdef CONFIG_PROC_FS
+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",
+ 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);
+}
+#else
+#define timerfd_show NULL
+#endif
+
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)
next prev parent reply other threads:[~2014-06-24 22:02 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-23 18:54 [patch 0/4] timerfd c/r support, v4 Cyrill Gorcunov
2014-06-23 18:54 ` [patch 1/4] timerfd: Implement show_fdinfo method Cyrill Gorcunov
[not found] ` <20140623190345.354980826-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2014-06-24 22:02 ` Cyrill Gorcunov [this message]
2014-06-24 22:02 ` Cyrill Gorcunov
2014-06-23 18:54 ` [patch 2/4] docs: procfs -- Document timerfd output Cyrill Gorcunov
2014-06-23 18:54 ` [patch 3/4] timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks Cyrill Gorcunov
2014-06-23 18:54 ` Cyrill Gorcunov
[not found] ` <20140623190345.499956567-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2014-06-24 22:03 ` Cyrill Gorcunov
2014-06-24 22:03 ` Cyrill Gorcunov
2014-07-02 16:49 ` Christopher Covington
2014-07-02 16:49 ` Christopher Covington
[not found] ` <53B4382F.9030908-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2014-07-02 17:04 ` Cyrill Gorcunov
2014-07-02 17:04 ` Cyrill Gorcunov
2014-07-02 17:04 ` Cyrill Gorcunov
2014-07-02 19:01 ` Arnd Bergmann
2014-07-02 19:01 ` Arnd Bergmann
2014-07-02 19:07 ` Cyrill Gorcunov
2014-07-02 19:07 ` Cyrill Gorcunov
2014-07-02 19:07 ` Cyrill Gorcunov
2014-07-02 19:36 ` Cyrill Gorcunov
2014-07-02 19:36 ` Cyrill Gorcunov
2014-07-02 19:36 ` Cyrill Gorcunov
2014-06-23 18:54 ` [patch 4/4] timerfd.2: Add ioctl method description Cyrill Gorcunov
[not found] ` <20140623185431.396309193-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2014-06-23 19:44 ` [patch 0/4] timerfd c/r support, v4 Andrew Vagin
2014-06-23 19:44 ` Andrew Vagin
2014-06-30 19:43 ` Cyrill Gorcunov
2014-07-15 13:54 ` Cyrill Gorcunov
2014-07-15 16:11 ` Thomas Gleixner
2014-07-15 16:11 ` Thomas Gleixner
2014-07-15 16:25 ` Cyrill Gorcunov
2014-07-15 16:25 ` Cyrill Gorcunov
2014-07-15 21:08 ` Thomas Gleixner
2014-07-15 21:08 ` Thomas Gleixner
2014-07-15 21:14 ` Cyrill Gorcunov
2014-07-15 21:14 ` Cyrill Gorcunov
2014-07-15 21:16 ` Thomas Gleixner
2014-07-15 21:16 ` Thomas Gleixner
2014-07-15 21:18 ` Cyrill Gorcunov
2014-07-15 21:18 ` Cyrill Gorcunov
2014-07-15 21:20 ` Thomas Gleixner
2014-07-15 21:20 ` Thomas Gleixner
-- strict thread matches above, loose matches on Subject: below --
2014-07-15 21:54 [patch 0/4] timerfd c/r support, v5 Cyrill Gorcunov
2014-07-15 21:54 ` [patch 1/4] timerfd: Implement show_fdinfo method Cyrill Gorcunov
2014-07-15 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=20140624220218.GY2095@moon \
--to=gorcunov-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=avagin-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org \
--cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org \
--cc=vdavydov-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org \
--cc=xemul-bzQdu9zFT3WakBO8gow8eQ@public.gmane.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 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.