get

阅读: 评论:0

get

get

功能:通过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 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23