mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-19 17:26:31 +00:00
🆕 测量local apic定时器频率
This commit is contained in:
@ -51,6 +51,11 @@ void spin_lock(spinlock_t *lock)
|
||||
preempt_disable();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 自旋锁解锁
|
||||
*
|
||||
* @param lock
|
||||
*/
|
||||
void spin_unlock(spinlock_t *lock)
|
||||
{
|
||||
preempt_enable();
|
||||
@ -58,6 +63,37 @@ void spin_unlock(spinlock_t *lock)
|
||||
: "=m"(lock->lock)::"memory");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 自旋锁加锁(不改变自旋锁持有计数)
|
||||
*
|
||||
* @warning 慎用此函数,除非你有十足的把握不会产生自旋锁计数错误
|
||||
*/
|
||||
void spin_lock_no_preempt(spinlock_t *lock)
|
||||
{
|
||||
__asm__ __volatile__("1: \n\t"
|
||||
"lock decq %0 \n\t" // 尝试-1
|
||||
"jns 3f \n\t" // 加锁成功,跳转到步骤3
|
||||
"2: \n\t" // 加锁失败,稍后再试
|
||||
"pause \n\t"
|
||||
"cmpq $0, %0 \n\t"
|
||||
"jle 2b \n\t" // 若锁被占用,则继续重试
|
||||
"jmp 1b \n\t" // 尝试加锁
|
||||
"3:"
|
||||
: "=m"(lock->lock)::"memory");
|
||||
}
|
||||
/**
|
||||
* @brief 自旋锁解锁(不改变自旋锁持有计数)
|
||||
*
|
||||
* @warning 慎用此函数,除非你有十足的把握不会产生自旋锁计数错误
|
||||
*/
|
||||
void spin_unlock_no_preempt(spinlock_t * lock)
|
||||
{
|
||||
__asm__ __volatile__("movq $1, %0 \n\t"
|
||||
: "=m"(lock->lock)::"memory");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief 尝试加锁
|
||||
*
|
||||
|
Reference in New Issue
Block a user