kernel: add function to query the current preempt count
This commit is contained in:
15
kernel/cpu.c
15
kernel/cpu.c
@@ -43,7 +43,7 @@ void preempt_disable(void)
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int preempt = READ_ONCE(cpu_data->c_preempt_count);
|
||||
int preempt = READ_ONCE(cpu_data->c_preempt_count);
|
||||
preempt++;
|
||||
WRITE_ONCE(cpu_data->c_preempt_count, preempt);
|
||||
}
|
||||
@@ -56,7 +56,7 @@ void preempt_enable(void)
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int preempt = READ_ONCE(cpu_data->c_preempt_count);
|
||||
int preempt = READ_ONCE(cpu_data->c_preempt_count);
|
||||
|
||||
if (preempt > 0) {
|
||||
preempt--;
|
||||
@@ -65,6 +65,17 @@ void preempt_enable(void)
|
||||
WRITE_ONCE(cpu_data->c_preempt_count, preempt);
|
||||
}
|
||||
|
||||
int preempt_count(void)
|
||||
{
|
||||
ml_cpu_block *ml_cpu = ml_this_cpu();
|
||||
struct cpu_data *cpu_data = ml_cpu_block_get_data(ml_cpu);
|
||||
if (!cpu_data) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return READ_ONCE(cpu_data->c_preempt_count);
|
||||
}
|
||||
|
||||
unsigned int cpu_get_highest_available(void)
|
||||
{
|
||||
return bitmap_highest_set(cpu_available, CPU_MAX);
|
||||
|
||||
Reference in New Issue
Block a user