X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fx86_64%2Fkernel%2Fmachine_kexec.c;fp=arch%2Fx86_64%2Fkernel%2Fmachine_kexec.c;h=25ac8a3faae635417ae7377cadf7f56ae2dec823;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=106076b370fc8fa8a4cfc2faf610bf237b2dbde0;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/arch/x86_64/kernel/machine_kexec.c b/arch/x86_64/kernel/machine_kexec.c index 106076b37..25ac8a3fa 100644 --- a/arch/x86_64/kernel/machine_kexec.c +++ b/arch/x86_64/kernel/machine_kexec.c @@ -149,8 +149,8 @@ typedef NORET_TYPE void (*relocate_new_kernel_t)(unsigned long indirection_page, unsigned long start_address, unsigned long pgtable) ATTRIB_NORET; -extern const unsigned char relocate_new_kernel[]; -extern const unsigned long relocate_new_kernel_size; +const extern unsigned char relocate_new_kernel[]; +const extern unsigned long relocate_new_kernel_size; int machine_kexec_prepare(struct kimage *image) { @@ -207,11 +207,14 @@ NORET_TYPE void machine_kexec(struct kimage *image) __flush_tlb(); - /* The segment registers are funny things, they have both a - * visible and an invisible part. Whenever the visible part is - * set to a specific selector, the invisible part is loaded - * with from a table in memory. At no other time is the - * descriptor table in memory accessed. + /* The segment registers are funny things, they are + * automatically loaded from a table, in memory wherever you + * set them to a specific selector, but this table is never + * accessed again unless you set the segment to a different selector. + * + * The more common model are caches where the behide + * the scenes work is done, but is also dropped at arbitrary + * times. * * I take advantage of this here by force loading the * segments, before I zap the gdt with an invalid value.