This is the right thing (also done by head.s).
diff --exclude-from=/home/ldb/src/linux-exclude -urNd a/arch/i386/kernel/cpu/common.c b/arch/i386/kernel/cpu/common.c
--- a/arch/i386/kernel/cpu/common.c 2002-08-06 10:26:11.000000000 +0200
+++ b/arch/i386/kernel/cpu/common.c 2002-08-07 17:47:05.000000000 +0200
@@ -451,7 +451,7 @@
*/
if (cpu) {
memcpy(cpu_gdt_table[cpu], cpu_gdt_table[0], GDT_SIZE);
- cpu_gdt_descr[cpu].size = GDT_SIZE;
+ cpu_gdt_descr[cpu].size = GDT_SIZE - 1;
cpu_gdt_descr[cpu].address = (unsigned long)cpu_gdt_table[cpu];
}
On 7 Aug 2002, Luca Barbieri wrote:
> memcpy(cpu_gdt_table[cpu], cpu_gdt_table[0], GDT_SIZE);
> - cpu_gdt_descr[cpu].size = GDT_SIZE;
> + cpu_gdt_descr[cpu].size = GDT_SIZE - 1;
> cpu_gdt_descr[cpu].address = (unsigned long)cpu_gdt_table[cpu];
indeed, good eyes!
i'm wondering whether this could have caused any problems - since the
limit was not a proper multiple of 8 minus 1, no selector value could have
caused a descriptor to be loaded from the invalid byte.
Ingo