linux 用宏区分函数的一个常用技巧

来源:互联网 发布:解放军土鳖 知乎 编辑:程序博客网 时间:2024/06/15 18:26


头文件中如此定义:

#ifdef CONFIG_MMU
extern void __init vmalloc_init(void);
#else
static inline void vmalloc_init(void)
{
}
#endif

另外一个文件中实现实体

void __init vmalloc_init(void)
{
struct vmap_area *va;
struct vm_struct *tmp;
int i;


for_each_possible_cpu(i) {
struct vmap_block_queue *vbq;


vbq = &per_cpu(vmap_block_queue, i);
spin_lock_init(&vbq->lock);
INIT_LIST_HEAD(&vbq->free);
INIT_LIST_HEAD(&vbq->dirty);
vbq->nr_dirty = 0;
}


/* Import existing vmlist entries. */
for (tmp = vmlist; tmp; tmp = tmp->next) {
va = alloc_bootmem(sizeof(struct vmap_area));
va->flags = tmp->flags | VM_VM_AREA;
va->va_start = (unsigned long)tmp->addr;
va->va_end = va->va_start + tmp->size;
__insert_vmap_area(va);
}
vmap_initialized = true;
}