3.5.1.132. icache_is_pipt
#define icache_is_pipt() cacheid_is(CACHEID_PIPT)
icache_is_pipt
判断L1指令CACHE是否是PIPT(Physical index, Physical tag)
3.5.1.133. icache_is_vipt_aliasing
#define icache_is_vipt_aliasing() cacheid_is(CACHEID_VIPT_I_ALIASING)
icache_is_vipt_aliasing
用于判断ICACHE是否属于VIPT aliasing
3.5.1.134. icache_is_vivt_asid_tagged
#define icache_is_vivt_asid_tagged() cacheid_is(CACHEID_ASID_TAGGED)
icache_id_vivt_asid_tagged
用于判断ICACHE是否属于VIVT ASID tags
3.5.1.135. iotable_init
void __init iotable_init(struct map_desc *io_desc, int nr)
{
struct map_desc *md;
struct vm_struct *vm;
struct static_vm *svm;
if(!nr)
return;
//给static_vm分配内存
svm = early_alloc_aligned(sizeof(*svm) * nr, __alignof__(*svm));
//给参数io_desc映射结构建立指定的页表
for(md = io_desc; nr; md++, nr--)
{
//执行真正的页表建立
create_mapping(md);
//更新svm的vm结构
vm = &svm->vm;
vm->addr = (void *)(md->virtual && PAGE_MASK);
vm->size = PAGE_ALIGN(md->length + (md->virtual & ~PAGE_MASK));
vm->phys_addr = __pfn_to_phys(md->pfn);
vm->flags = VM_IOREMAP | VM_ARM_STATIC_MAPPING;
vm->flags |= VM_ARM_MTYPE(md->type);
vm->caller = iotable_init;
add_static_vm_early(svm++);
}
}
iotable_init
用于建立体系IO映射表
3.5.1.136. init_default_cache_policy
void __init init_default_cache_policy(unsigned long pmd)
{
int i;
initial_pmd_value = pmd;
pmd &= PMD_SECT_CACHE_MASK;
for(i = 0; i < ARRAY_SIZE(cache_policies); i++)
{
if(cache_policies[i].pmd == pmd) {
cachepolicy = i;
break;
}
}
if(i == ARRAY_SIZE(cache_policies))
pr_err("ERROR: could not find cache policy\n");
}
init_default_cache_policy
用于初始化系统cachepolicy信息.内核通过cache_policies[]数组提供了多种cache策略
3.5.1.137. init_utsname
static inline struct new_utsname *init_utsname(void)
{
return &init_uts_ns.name;
}
init_utsname
用于初始化全局变量init_uts_ns的name成员.init_uts_ns属于struct uts_namespace,其结构用于维护系统名称,版本号,机器名称
3.5.1.138. initial_pmd_value
static unsigned long initial_pmd_value __initdata = 0;
3.5.1.139. isspace
#define isspace(c) ((__ismask(c)&(_S)) != 0)
isspace
判断字符c是否是一个空格
3.5.1.140. is_highmem_idx
static inline int is_highmem_idx(enum zone_type idx)
{
#ifdef CONFIG_HIGHMEM
return (idx == ZONE_HIGHMEM || (idx == ZONE_MOVABLE && zone_movable_is_highmem()));
#else
return 0;
#endif
}
is_highmem_idx
用于判断idx是否指向高端内存
3.5.1.141. is_smp
static inline bool is_smp(void)
{
#ifndef CONFIG_SMP
return false;
#elif defined(CONFIG_SMP_ON_UP)
extern unsigned int smp_on_up;
return !!smp_on_up;
#else
return true;
#endif
}
is_smp
用于判断CPU是否支持smp