3.5.1.146. list_add_tail
static inline void list_add_tail(struct list_head *new, struct list_head *head)
{
__list_add(new, head->prev, head);
}
static inline void __list_add(struct list_head *new,
struct list_head *prev,
struct list_head *next)
{
if(!__list_add_valid(new, prev, next))
return;
next->prev = new;
new->next = next;
new->prev = prev;
WRITE_ONCE(prev->next, new);
}
list_add_tail
将一个新节点加入到链表的末尾
3.5.1.147. list_for_each_entry
#define list_for_each_entry(pos, head, member) \
for(pos = list_first_entry(head, typeof(*pos), member)); \
&pos->member != (head); \
pos = list_next_entry(pos, member)
list_for_each_entry
用于遍历内嵌双链表的结构
3.5.1.148. local_irq_disable
#define local_irq_disable() do { raw_local_irq_disable(); } while(0)
#define raw_local_irq_disable() arch_local_irq_disable()
static inline void arch_local_irq_disable(void)
{
asm volatible(
" cpsid i @ arch_local_irq_disable"
:
:
: "memory", "cc");
}
local_irq_disable
用于禁止本地中断
3.5.1.149. lookup_processor
struct proc_info_list *lookup_processor(u32 midr)
{
struct proc_info_list *list = lookup_processor_type(midr);
if(!list) {
pr_err("CPU%u: configuration botched (ID %08x), CPU halted\n", smp_processor_id(), midr);
}
return list;
}
lookup_processor
用于获得体系芯片相关的proc_info_list结构
3.5.1.150. lookup_processor_type
ENTRY(loopup_processor_type)
stmfd sp!, {r4 - r6, r9, lr}
mov r9, r0
bl __lookup_processor_type
mov r0, r5
ldmfd sp!, {r4 -r6, r9, pc}
ENDPROC(lookup_processor_type)