|
@@ -80,7 +80,7 @@ struct vdso_data *vdso_data = &vdso_data_store.data;
|
|
/*
|
|
/*
|
|
* Setup vdso data page.
|
|
* Setup vdso data page.
|
|
*/
|
|
*/
|
|
-static void vdso_init_data(struct vdso_data *vd)
|
|
|
|
|
|
+static void __init vdso_init_data(struct vdso_data *vd)
|
|
{
|
|
{
|
|
vd->ectg_available = test_facility(31);
|
|
vd->ectg_available = test_facility(31);
|
|
}
|
|
}
|
|
@@ -93,6 +93,7 @@ static void vdso_init_data(struct vdso_data *vd)
|
|
int vdso_alloc_per_cpu(struct lowcore *lowcore)
|
|
int vdso_alloc_per_cpu(struct lowcore *lowcore)
|
|
{
|
|
{
|
|
unsigned long segment_table, page_table, page_frame;
|
|
unsigned long segment_table, page_table, page_frame;
|
|
|
|
+ struct vdso_per_cpu_data *vd;
|
|
u32 *psal, *aste;
|
|
u32 *psal, *aste;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
@@ -107,6 +108,12 @@ int vdso_alloc_per_cpu(struct lowcore *lowcore)
|
|
if (!segment_table || !page_table || !page_frame)
|
|
if (!segment_table || !page_table || !page_frame)
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
|
|
+ /* Initialize per-cpu vdso data page */
|
|
|
|
+ vd = (struct vdso_per_cpu_data *) page_frame;
|
|
|
|
+ vd->cpu_nr = lowcore->cpu_nr;
|
|
|
|
+ vd->node_id = cpu_to_node(vd->cpu_nr);
|
|
|
|
+
|
|
|
|
+ /* Set up access register mode page table */
|
|
clear_table((unsigned long *) segment_table, _SEGMENT_ENTRY_EMPTY,
|
|
clear_table((unsigned long *) segment_table, _SEGMENT_ENTRY_EMPTY,
|
|
PAGE_SIZE << SEGMENT_ORDER);
|
|
PAGE_SIZE << SEGMENT_ORDER);
|
|
clear_table((unsigned long *) page_table, _PAGE_INVALID,
|
|
clear_table((unsigned long *) page_table, _PAGE_INVALID,
|