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