实现gettimeofday()系统调用和clocksource+timekeeping子模块 (#278)

- 实现gettimeofday()系统调用
- 实现clocksource+timekeeping子模块部分功能
- 实现了timespec转换成日期时间
This commit is contained in:
houmkh
2023-06-17 22:48:15 +08:00
committed by GitHub
parent a55ac7b928
commit 36fd013004
34 changed files with 1988 additions and 78 deletions

View File

@ -14,7 +14,7 @@ use crate::syscall::SystemError;
/// @brief 保存中断状态到flags中关闭中断并对自旋锁加锁
#[inline]
pub fn spin_lock_irqsave(lock: *mut spinlock_t, flags: &mut u64) {
local_irq_save(flags);
*flags = local_irq_save() as u64;
unsafe {
spin_lock(lock);
}
@ -27,7 +27,7 @@ pub fn spin_unlock_irqrestore(lock: *mut spinlock_t, flags: &u64) {
spin_unlock(lock);
}
// kdebug!("123");
local_irq_restore(flags);
local_irq_restore(*flags as usize);
}
/// 判断一个自旋锁是否已经被加锁
@ -130,14 +130,14 @@ impl RawSpinlock {
/// @brief 保存中断状态到flags中关闭中断并对自旋锁加锁
pub fn lock_irqsave(&self, flags: &mut u64) {
local_irq_save(flags);
*flags = local_irq_save() as u64;
self.lock();
}
/// @brief 恢复rflags以及中断状态并解锁自旋锁
pub fn unlock_irqrestore(&self, flags: &u64) {
self.unlock();
local_irq_restore(flags);
local_irq_restore(*flags as usize);
}
/// @brief 尝试保存中断状态到flags中关闭中断并对自旋锁加锁
@ -145,11 +145,11 @@ impl RawSpinlock {
/// 加锁失败->false
#[inline(always)]
pub fn try_lock_irqsave(&self, flags: &mut u64) -> bool {
local_irq_save(flags);
*flags = local_irq_save() as u64;
if self.try_lock() {
return true;
}
local_irq_restore(flags);
local_irq_restore(*flags as usize);
return false;
}
}