IPI

arch_send_call_function_single_ipi


126 void native_send_call_func_single_ipi(int cpu)
127 {  
128     apic->send_IPI_mask(cpumask_of(cpu), CALL_FUNCTION_SINGLE_VECTOR);
129 }  
130 


104 void default_send_IPI_mask_logical(const struct cpumask *cpumask, int vector)

105 {
106     unsigned long mask = cpumask_bits(cpumask)[0];
107     unsigned long flags;
108 
109     if (WARN_ONCE(!mask, "empty IPI mask"))
110         return;
111 
112     local_irq_save(flags);
113     WARN_ON(mask & ~cpumask_bits(cpu_online_mask)[0]);
114     __default_send_IPI_dest_field(mask, vector, apic->dest_logical);
115     local_irq_restore(flags);
116 }

 92 static inline void
 93  __default_send_IPI_dest_field(unsigned int mask, int vector, unsigned int dest)
 94 {
 95     unsigned long cfg;
 96 
 97     /*
 98      * Wait for idle.
 99      */
100     if (unlikely(vector == NMI_VECTOR))
101         safe_apic_wait_icr_idle();
102     else
103         __xapic_wait_icr_idle();
104 
105     /*
106      * prepare target chip field
107      */
108     cfg = __prepare_ICR2(mask);    
109     native_apic_mem_write(APIC_ICR2, cfg);
110 
111     /*
112      * program the ICR
113      */
114     cfg = __prepare_ICR(0, vector, dest);
115 
116     /*
117      * Send the IPI. The write to APIC_ICR fires this off.
118      */
119     native_apic_mem_write(APIC_ICR, cfg);
120 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值