Remove getnstimestamp()
cover Remove getnstimestamp()
This series removes the getnstimestamp() function from kernel/time.c in
favor of kernel/hrtimer.c's ktime_get_ts() function which currently does exactly the same thing: retrieves a high-resolution (ns) timespec structure and performs the wall_to_monotonic adjustment.
As Jay Lan suggested I was going to replace calls to getnstimestamp()
with do_posix_clock_monotonic_gettime() but the hrtimer patches switched that to a macro. ktime_get_ts() is shorter and avoids unnecessary association with posix timers (though it does not emphasize monotonicity or resolution).
The series:
001/003 export-ktime_get_ts.patch
Exports ktime_get_ts()
002/003 proc-events-use-ktime-for-timestamp.patch
Switches the only user of getnstimestamp() to ktime_get_ts()
003/003 rm-getnstimestamp.patch
Remove getnstimestamp() from kernel/time.c
Thanks,
-Matt Helsley
PATCH 1/3 Export ktime_get_ts()
Export ktime_get_ts() to be used as a timestamp function since it uses getnstimefoday() and does the wall_to_monotonic adjustment.
--
kernel/hrtimer.c +1 -0
@@ -106,10 +106,11 @@ void ktime_get_ts(struct timespec *ts) }while (read_seqretry (&xtime_lock, seq));set_normalized_timespec (ts, ts->tv_sec + tomono.tv_sec, ts->tv_nsec + tomono.tv_nsec); } +EXPORT_SYMBOL_GPL (ktime_get_ts);/* * Functions and macros which are different for UP/SMP systems are kept in a * single place */
Re: [PATCH 002/003] Switch getnstimestamp() calls to ktime_get_ts()
In reply to Matt HelsleyUse ktime_get_ts() to take the timestamp instead of getnstimestamp(). This patch prepares to remove getnstimestamp() by switching its only user to a different function with almost exactly the same code.
--
drivers/connector/cn_proc.c +6 -5
@@ -22,10 +22,11 @@* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include <linux/module.h> #include <linux/kernel.h> +#include <linux/ktime.h> #include <linux/init.h> #include <asm/atomic.h> #include <linux/cn_proc.h>
@@ -54,11 +55,11 @@ void proc_fork_connector(struct task_strreturn ; msg = (struct cn_msg *)buffer; ev = (struct proc_event *)msg->data;get_seq (&msg->seq, &ev->cpu); -getnstimestamp (&ev->timestamp); +ktime_get_ts (&ev->timestamp);/* get high res monotonic timestamp */ ev->what =PROC_EVENT_FORK ; ev->event_data.fork.parent_pid = task->real_parent->pid; ev->event_data.fork.parent_tgid = task->real_parent->tgid; ev->event_data.fork.child_pid = task->pid; ev->event_data.fork.child_tgid = task->tgid;
@@ -80,11 +81,11 @@ void proc_exec_connector(struct task_strreturn ; msg = (struct cn_msg *)buffer; ev = (struct proc_event *)msg->data;get_seq (&msg->seq, &ev->cpu); -getnstimestamp (&ev->timestamp); +ktime_get_ts (&ev->timestamp); ev->what =PROC_EVENT_EXEC ; ev->event_data.exec.process_pid = task->pid; ev->event_data.exec.process_tgid = task->tgid;memcpy (&msg->id, &cn_proc_event_id,sizeof (msg->id));
@@ -114,11 +115,11 @@ void proc_id_connector(struct task_struc ev->event_data.id.r.rgid = task->gid; ev->event_data.id.e.egid = task->egid; }else return ;get_seq (&msg->seq, &ev->cpu); -getnstimestamp (&ev->timestamp); +ktime_get_ts (&ev->timestamp);memcpy (&msg->id, &cn_proc_event_id,sizeof (msg->id)); msg->ack =0 ;/* not used */ msg->len =sizeof (*ev);cn_netlink_send (msg,CN_IDX_PROC ,GFP_KERNEL );
@@ -134,11 +135,11 @@ void proc_exit_connector(struct task_strreturn ; msg = (struct cn_msg *)buffer; ev = (struct proc_event *)msg->data;get_seq (&msg->seq, &ev->cpu); -getnstimestamp (&ev->timestamp); +ktime_get_ts (&ev->timestamp); ev->what =PROC_EVENT_EXIT ; ev->event_data.exit.process_pid = task->pid; ev->event_data.exit.process_tgid = task->tgid; ev->event_data.exit.exit_code = task->exit_code; ev->event_data.exit.exit_signal = task->exit_signal;
@@ -167,11 +168,11 @@ static void cn_proc_ack(int err, int rcvreturn ; msg = (struct cn_msg *)buffer; ev = (struct proc_event *)msg->data; msg->seq = rcvd_seq; -getnstimestamp (&ev->timestamp); +ktime_get_ts (&ev->timestamp); ev->cpu =-1 ; ev->what =PROC_EVENT_NONE ; ev->event_data.ack.err = err;memcpy (&msg->id, &cn_proc_event_id,sizeof (msg->id)); msg->ack = rcvd_ack +1 ;
Remove getnstimestamp() in favor of ktime.h's ktime_get_ts()
--
kernel/time.c +0 -22
@@ -562,32 +562,10 @@ void getnstimeofday(struct timespec *tv) tv->tv_nsec = x.tv_usec * NSEC_PER_USEC; }EXPORT_SYMBOL_GPL (getnstimeofday);#endif -void getnstimestamp (struct timespec *ts) -{ -unsigned int seq; -struct timespec wall2mono; - -/* synchronize with settimeofday() changes */ -do { - seq =read_seqbegin (&xtime_lock); -getnstimeofday (ts); - wall2mono = wall_to_monotonic; - }while (unlikely (read_seqretry (&xtime_lock, seq))); - -/* adjust to monotonicaly-increasing values */ - ts->tv_sec += wall2mono.tv_sec; - ts->tv_nsec += wall2mono.tv_nsec; -while (unlikely (ts->tv_nsec >=NSEC_PER_SEC )) { - ts->tv_nsec -=NSEC_PER_SEC ; - ts->tv_sec++; - } -} -EXPORT_SYMBOL_GPL (getnstimestamp); -/* Converts Gregorian date to seconds since 1970-01-01 00:00:00. * Assumes input in normal date format, i.e. 1980-12-31 23:59:59 * => year=1980, mon=12, day=31, hour=23, min=59, sec=59. * * [For the Julian calendar (which was used in Russia before 1917,
include/linux/time.h +0 -1
@@ -78,11 +78,10 @@ extern long do_utimes(char __user *filenstruct itimerval ;extern int do_setitimer (int which,struct itimerval *value,struct itimerval *ovalue);extern int do_getitimer (int which,struct itimerval *value);extern void getnstimeofday (struct timespec *tv); -extern void getnstimestamp (struct timespec *ts);extern struct timespec timespec_trunc (struct timespec t,unsigned gran);/** * timespec_to_ns - Convert timespec to nanoseconds