功能:通过get_cpu()/put_cpu()函数禁止/启用任务的抢占,获取cpu id
kernel中的解释:
/*
* Even if we don’t have any preemption, we need preempt disable/enable
* to be barriers, so that we don’t have things like get_user/put_user
* that can cause faults and scheduling migrate into our preempt-protected
* region.
*/
即使当前没有任何的抢占,我们也需要对抢占进行disable/enable,这样的话就不会向get_user/put_user那样导致错误迁移进我们对抢占进行保护的区域。
<_cpu() :禁止任务抢占
#define get_cpu() ({ preempt_disable(); smp_processor_id(); })
#define smp_processor_id() raw_smp_processor_id()
2.put_cpu() : 启用任务抢占
#define put_cpu() preempt_enable()
例子:
get_cpu();
on_each_cpu(setup_broadcast_timer, (void *)true, 1);
put_cpu();
#define on_each_cpu(func,info,retry,wait) ({ local_irq_disable(); func(info); local_irq_enable(); 0; })
static void setup_broadcast_timer(void *arg)
{unsigned long reason = (unsigned long)arg;int cpu = raw_smp_processor_id();reason = reason ?CLOCK_EVT_NOTIFY_BROADCAST_ON : CLOCK_EVT_NOTIFY_BROADCAST_OFF;clockevents_notify(reason, &cpu);
}
本文发布于:2024-02-01 07:46:58,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170674481834981.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |