From e74fdbc55bb6b2bc0ed7bc1f4623eca4a7052f4c Mon Sep 17 00:00:00 2001 From: Bananymous Date: Wed, 9 Aug 2023 08:57:50 +0300 Subject: [PATCH] Kernel: Remove get_unix_timestamp from SystemTimer Kernel now uses the percise real_time() and time_since_boot() --- kernel/include/kernel/Timer/Timer.h | 5 ++--- kernel/kernel/FS/Ext2.cpp | 10 +++++----- kernel/kernel/FS/Pipe.cpp | 17 ++++++++--------- kernel/kernel/FS/RamFS/Inode.cpp | 11 ++++------- kernel/kernel/Process.cpp | 9 ++++++--- kernel/kernel/Timer/Timer.cpp | 7 +------ 6 files changed, 26 insertions(+), 33 deletions(-) diff --git a/kernel/include/kernel/Timer/Timer.h b/kernel/include/kernel/Timer/Timer.h index 7cdd662388..f3058925ee 100644 --- a/kernel/include/kernel/Timer/Timer.h +++ b/kernel/include/kernel/Timer/Timer.h @@ -25,10 +25,9 @@ namespace Kernel virtual uint64_t ms_since_boot() const override; virtual timespec time_since_boot() const override; - void sleep(uint64_t) const; + void sleep(uint64_t ms) const; - uint64_t get_unix_timestamp() const; - timespec get_real_time() const; + timespec real_time() const; private: SystemTimer() = default; diff --git a/kernel/kernel/FS/Ext2.cpp b/kernel/kernel/FS/Ext2.cpp index f7a939e910..49378350e4 100644 --- a/kernel/kernel/FS/Ext2.cpp +++ b/kernel/kernel/FS/Ext2.cpp @@ -384,16 +384,16 @@ namespace Kernel if (error_or.error().get_error_code() != ENOENT) return error_or.error(); - uint64_t current_time = SystemTimer::get().get_unix_timestamp(); + timespec current_time = SystemTimer::get().real_time(); Ext2::Inode ext2_inode; ext2_inode.mode = mode; ext2_inode.uid = uid; ext2_inode.size = 0; - ext2_inode.atime = current_time; - ext2_inode.ctime = current_time; - ext2_inode.mtime = current_time; - ext2_inode.dtime = current_time; + ext2_inode.atime = current_time.tv_sec; + ext2_inode.ctime = current_time.tv_sec; + ext2_inode.mtime = current_time.tv_sec; + ext2_inode.dtime = current_time.tv_sec; ext2_inode.gid = gid; ext2_inode.links_count = 1; ext2_inode.blocks = 0; diff --git a/kernel/kernel/FS/Pipe.cpp b/kernel/kernel/FS/Pipe.cpp index 67e229e81f..1be5f314d4 100644 --- a/kernel/kernel/FS/Pipe.cpp +++ b/kernel/kernel/FS/Pipe.cpp @@ -17,10 +17,10 @@ namespace Kernel : m_uid(credentials.euid()) , m_gid(credentials.egid()) { - uint64_t current_time = SystemTimer::get().get_unix_timestamp(); - m_atime = { .tv_sec = current_time, .tv_nsec = 0 }; - m_mtime = { .tv_sec = current_time, .tv_nsec = 0 }; - m_ctime = { .tv_sec = current_time, .tv_nsec = 0 }; + timespec current_time = SystemTimer::get().real_time(); + m_atime = current_time; + m_mtime = current_time; + m_ctime = current_time; } void Pipe::clone_writing() @@ -57,8 +57,7 @@ namespace Kernel memmove(m_buffer.data(), m_buffer.data() + to_copy, m_buffer.size() - to_copy); MUST(m_buffer.resize(m_buffer.size() - to_copy)); - uint64_t current_time = SystemTimer::get().get_unix_timestamp(); - m_atime = { .tv_sec = current_time, .tv_nsec = 0 }; + m_atime = SystemTimer::get().real_time(); m_semaphore.unblock(); @@ -76,9 +75,9 @@ namespace Kernel TRY(m_buffer.resize(old_size + count)); memcpy(m_buffer.data() + old_size, buffer, count); - uint64_t current_time = SystemTimer::get().get_unix_timestamp(); - m_mtime = { .tv_sec = current_time, .tv_nsec = 0 }; - m_ctime = { .tv_sec = current_time, .tv_nsec = 0 }; + timespec current_time = SystemTimer::get().real_time(); + m_mtime = current_time; + m_ctime = current_time; m_semaphore.unblock(); diff --git a/kernel/kernel/FS/RamFS/Inode.cpp b/kernel/kernel/FS/RamFS/Inode.cpp index 894ae15e36..4870bdd075 100644 --- a/kernel/kernel/FS/RamFS/Inode.cpp +++ b/kernel/kernel/FS/RamFS/Inode.cpp @@ -23,10 +23,7 @@ namespace Kernel RamInode::RamInode(RamFileSystem& fs, mode_t mode, uid_t uid, gid_t gid) : m_fs(fs) { - uint64_t current_unix_time = SystemTimer::get().get_unix_timestamp(); - timespec current_timespec; - current_timespec.tv_sec = current_unix_time; - current_timespec.tv_nsec = 0; + timespec current_time = SystemTimer::get().real_time(); m_inode_info.ino = fs.next_ino(); m_inode_info.mode = mode; @@ -34,9 +31,9 @@ namespace Kernel m_inode_info.uid = uid; m_inode_info.gid = gid; m_inode_info.size = 0; - m_inode_info.atime = current_timespec; - m_inode_info.mtime = current_timespec; - m_inode_info.ctime = current_timespec; + m_inode_info.atime = current_time; + m_inode_info.mtime = current_time; + m_inode_info.ctime = current_time; m_inode_info.blksize = fs.blksize(); m_inode_info.blocks = 0; m_inode_info.dev = 0; diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index 16b89c9006..b106920ec6 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -811,9 +811,12 @@ namespace Kernel { case CLOCK_MONOTONIC: { - uint64_t time_ms = SystemTimer::get().ms_since_boot(); - tp->tv_sec = time_ms / 1000; - tp->tv_nsec = (time_ms % 1000) * 1000000; + *tp = SystemTimer::get().time_since_boot(); + break; + } + case CLOCK_REALTIME: + { + *tp = SystemTimer::get().real_time(); break; } default: diff --git a/kernel/kernel/Timer/Timer.cpp b/kernel/kernel/Timer/Timer.cpp index 3067bc19e0..e866af38bc 100644 --- a/kernel/kernel/Timer/Timer.cpp +++ b/kernel/kernel/Timer/Timer.cpp @@ -74,12 +74,7 @@ namespace Kernel dwarnln("sleep woke {} ms too soon", wake_time - ms_since_boot()); } - uint64_t SystemTimer::get_unix_timestamp() const - { - return m_boot_time + ms_since_boot() / 1000; - } - - timespec SystemTimer::get_real_time() const + timespec SystemTimer::real_time() const { auto result = time_since_boot(); result.tv_sec += m_boot_time;