From 97850e3b2930bc090c0ac8f3cfbea1a8c21523d6 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Thu, 6 Dec 2007 15:59:52 +0000 Subject: [PATCH] linux/x86: fix initial GDT setup cpu_gdt_init() can be static, can have its argument point to const, and the number of descriptors should be calculated from one more than the table's limit. Signed-off-by: Jan Beulich --- arch/i386/kernel/cpu/common-xen.c | 4 ++-- arch/x86_64/kernel/setup64-xen.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/i386/kernel/cpu/common-xen.c b/arch/i386/kernel/cpu/common-xen.c index 10d77770..e509783d 100644 --- a/arch/i386/kernel/cpu/common-xen.c +++ b/arch/i386/kernel/cpu/common-xen.c @@ -590,7 +590,7 @@ void __init early_cpu_init(void) #endif } -void __cpuinit cpu_gdt_init(struct Xgt_desc_struct *gdt_descr) +static void __cpuinit cpu_gdt_init(const struct Xgt_desc_struct *gdt_descr) { unsigned long frames[16]; unsigned long va; @@ -603,7 +603,7 @@ void __cpuinit cpu_gdt_init(struct Xgt_desc_struct *gdt_descr) make_lowmem_page_readonly( (void *)va, XENFEAT_writable_descriptor_tables); } - if (HYPERVISOR_set_gdt(frames, gdt_descr->size / 8)) + if (HYPERVISOR_set_gdt(frames, (gdt_descr->size + 1) / 8)) BUG(); } diff --git a/arch/x86_64/kernel/setup64-xen.c b/arch/x86_64/kernel/setup64-xen.c index 83041ab3..379f4fde 100644 --- a/arch/x86_64/kernel/setup64-xen.c +++ b/arch/x86_64/kernel/setup64-xen.c @@ -132,7 +132,7 @@ static void switch_pt(void) xen_new_user_pt(__pa_symbol(__user_pgd(init_level4_pgt))); } -void __cpuinit cpu_gdt_init(struct desc_ptr *gdt_descr) +static void __cpuinit cpu_gdt_init(const struct desc_ptr *gdt_descr) { unsigned long frames[16]; unsigned long va; @@ -145,7 +145,7 @@ void __cpuinit cpu_gdt_init(struct desc_ptr *gdt_descr) make_page_readonly( (void *)va, XENFEAT_writable_descriptor_tables); } - if (HYPERVISOR_set_gdt(frames, gdt_descr->size / + if (HYPERVISOR_set_gdt(frames, (gdt_descr->size + 1) / sizeof (struct desc_struct))) BUG(); } @@ -155,7 +155,7 @@ static void switch_pt(void) asm volatile("movq %0,%%cr3" :: "r" (__pa_symbol(&init_level4_pgt))); } -void __init cpu_gdt_init(struct desc_ptr *gdt_descr) +static void __cpuinit cpu_gdt_init(const struct desc_ptr *gdt_descr) { asm volatile("lgdt %0" :: "m" (*gdt_descr)); asm volatile("lidt %0" :: "m" (idt_descr)); -- 2.39.5