Adds epoch_*sec() helpers
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 9 Feb 2015 19:10:31 +0000 (14:10 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sun, 1 Mar 2015 14:36:16 +0000 (09:36 -0500)
The number of sec/msec/usec/nsec since 1 Jan 1970.

kern/include/time.h
kern/src/time.c
kern/src/vfs.c

index aa03136..9d60840 100644 (file)
@@ -33,7 +33,11 @@ uint64_t sec2tsc(uint64_t sec);
 uint64_t msec2tsc(uint64_t msec);
 uint64_t usec2tsc(uint64_t usec);
 uint64_t nsec2tsc(uint64_t nsec);
-uint64_t epoch_seconds(void);
+uint64_t epoch_tsc(void);
+uint64_t epoch_sec(void);
+uint64_t epoch_msec(void);
+uint64_t epoch_usec(void);
+uint64_t epoch_nsec(void);
 void tsc2timespec(uint64_t tsc_time, struct timespec *ts);
 
 /* Just takes a time measurement.  Meant to be paired with stop_timing.  Use
index 347fa41..f298ba7 100644 (file)
@@ -128,11 +128,32 @@ uint64_t nsec2tsc(uint64_t nsec)
                return (nsec * system_timing.tsc_freq) / 1000000000;
 }
 
-uint64_t epoch_seconds(void)
+/* TODO: figure out what epoch time TSC == 0 is and store that as boot_tsc */
+static uint64_t boot_sec = 1242129600; /* nanwan's birthday */
+
+uint64_t epoch_tsc(void)
+{
+       return read_tsc() + sec2tsc(boot_sec);
+}
+
+uint64_t epoch_sec(void)
+{
+       return tsc2sec(epoch_tsc());
+}
+
+uint64_t epoch_msec(void)
+{
+       return tsc2msec(epoch_tsc());
+}
+
+uint64_t epoch_usec(void)
+{
+       return tsc2usec(epoch_tsc());
+}
+
+uint64_t epoch_nsec(void)
 {
-       /* TODO: figure out what epoch time TSC == 0 is */
-       uint64_t boot_sec = 1242129600; /* nanwan's birthday */
-       return tsc2sec(read_tsc()) + boot_sec;
+       return tsc2nsec(epoch_tsc());
 }
 
 void tsc2timespec(uint64_t tsc_time, struct timespec *ts)
index cd330bc..6d706ed 100644 (file)
@@ -989,7 +989,7 @@ void load_inode(struct dentry *dentry, unsigned long ino)
  * note we don't pass this an nd, like Linux does... */
 static struct inode *create_inode(struct dentry *dentry, int mode)
 {
-       uint64_t now = epoch_seconds();
+       uint64_t now = epoch_sec();
        /* note it is the i_ino that uniquely identifies a file in the specific
         * filesystem.  there's a diff between creating an inode (even for an in-use
         * ino) and then filling it in, and vs creating a brand new one.
@@ -2151,7 +2151,7 @@ int do_rename(char *old_path, char *new_path)
        dcache_put(old_dir_d->d_sb, old_d);
 
        /* TODO could have a helper for this, but it's going away soon */
-       now = epoch_seconds();
+       now = epoch_sec();
        old_dir_i->i_ctime.tv_sec = now;
        old_dir_i->i_mtime.tv_sec = now;
        old_dir_i->i_ctime.tv_nsec = 0;
@@ -2201,7 +2201,7 @@ int do_truncate(struct inode *inode, off64_t len)
                pm_remove_contig(inode->i_mapping, old_len >> PGSHIFT,
                                 (len >> PGSHIFT) - (old_len >> PGSHIFT));
        }
-       now = epoch_seconds();
+       now = epoch_sec();
        inode->i_ctime.tv_sec = now;
        inode->i_mtime.tv_sec = now;
        inode->i_ctime.tv_nsec = 0;