x86: Introduce GDT_ENTRY_INIT(), initialize bad_bios_desc statically
Fully initialize bad_bios_desc statically instead of doing some fields statically and some dynamically. Suggested-by: "H. Peter Anvin" <hpa@zytor.com> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> LKML-Reference: <20090809080350.GA4765@localhost.localdomain> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
4c711576b9
commit
c7425314c7
2 changed files with 11 additions and 13 deletions
|
@ -403,7 +403,15 @@ static DECLARE_WAIT_QUEUE_HEAD(apm_waitqueue);
|
||||||
static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue);
|
static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue);
|
||||||
static struct apm_user *user_list;
|
static struct apm_user *user_list;
|
||||||
static DEFINE_SPINLOCK(user_list_lock);
|
static DEFINE_SPINLOCK(user_list_lock);
|
||||||
static struct desc_struct bad_bios_desc = GDT_ENTRY_INIT(0x4092, 0, 0);
|
|
||||||
|
/*
|
||||||
|
* Set up a segment that references the real mode segment 0x40
|
||||||
|
* that extends up to the end of page zero (that we have reserved).
|
||||||
|
* This is for buggy BIOS's that refer to (real mode) segment 0x40
|
||||||
|
* even though they are called in protected mode.
|
||||||
|
*/
|
||||||
|
static struct desc_struct bad_bios_desc = GDT_ENTRY_INIT(0x4092,
|
||||||
|
(unsigned long)__va(0x400UL), PAGE_SIZE - 0x400 - 1);
|
||||||
|
|
||||||
static const char driver_version[] = "1.16ac"; /* no spaces */
|
static const char driver_version[] = "1.16ac"; /* no spaces */
|
||||||
|
|
||||||
|
@ -2331,15 +2339,6 @@ static int __init apm_init(void)
|
||||||
}
|
}
|
||||||
pm_flags |= PM_APM;
|
pm_flags |= PM_APM;
|
||||||
|
|
||||||
/*
|
|
||||||
* Set up a segment that references the real mode segment 0x40
|
|
||||||
* that extends up to the end of page zero (that we have reserved).
|
|
||||||
* This is for buggy BIOS's that refer to (real mode) segment 0x40
|
|
||||||
* even though they are called in protected mode.
|
|
||||||
*/
|
|
||||||
set_desc_base(&bad_bios_desc, (unsigned long)__va(0x40UL << 4));
|
|
||||||
set_desc_limit(&bad_bios_desc, 4095 - (0x40 << 4));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set up the long jump entry point to the APM BIOS, which is called
|
* Set up the long jump entry point to the APM BIOS, which is called
|
||||||
* from inline assembly.
|
* from inline assembly.
|
||||||
|
|
|
@ -60,7 +60,8 @@ do { \
|
||||||
set_desc_limit(&gdt[(selname) >> 3], (size) - 1); \
|
set_desc_limit(&gdt[(selname) >> 3], (size) - 1); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
static struct desc_struct bad_bios_desc = GDT_ENTRY_INIT(0x4092, 0, 0);
|
static struct desc_struct bad_bios_desc = GDT_ENTRY_INIT(0x4092,
|
||||||
|
(unsigned long)__va(0x400UL), PAGE_SIZE - 0x400 - 1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* At some point we want to use this stack frame pointer to unwind
|
* At some point we want to use this stack frame pointer to unwind
|
||||||
|
@ -476,8 +477,6 @@ void pnpbios_calls_init(union pnp_bios_install_struct *header)
|
||||||
pnp_bios_callpoint.offset = header->fields.pm16offset;
|
pnp_bios_callpoint.offset = header->fields.pm16offset;
|
||||||
pnp_bios_callpoint.segment = PNP_CS16;
|
pnp_bios_callpoint.segment = PNP_CS16;
|
||||||
|
|
||||||
set_desc_base(&bad_bios_desc, (unsigned long)__va(0x40UL << 4));
|
|
||||||
set_desc_limit(&bad_bios_desc, 4095 - (0x40 << 4));
|
|
||||||
for_each_possible_cpu(i) {
|
for_each_possible_cpu(i) {
|
||||||
struct desc_struct *gdt = get_cpu_gdt_table(i);
|
struct desc_struct *gdt = get_cpu_gdt_table(i);
|
||||||
if (!gdt)
|
if (!gdt)
|
||||||
|
|
Loading…
Reference in a new issue