回到start_kernel,进入到函数page_address_init();定位到该函数
void __init page_address_init(void)
{
int i;
for (i = 0; i < ARRAY_SIZE(page_address_htable); i++)
{
INIT_LIST_HEAD(&page_address_htable[i].lh);
spin_lock_init(&page_address_htable[i].lock);
}
}
该函数中,初始化ARRAY_SIZE这个数组的元素,定位到page_address_htable
static struct page_address_slot {
struct list_head lh; /* List of page_address_maps */
spinlock_t lock; /* Protect this bucket's list */
} ____cacheline_aligned_in_smp page_address_htable[1<<PA_HASH_ORDER];
继续定位PA_HASH_ORDER
#define PA_HASH_ORDER 7
最终,初始化的目的是初始化128个链表,链表是双向循环链表。