Commit 26550a76 authored by Venkatesh Pallipadi's avatar Venkatesh Pallipadi Committed by Linus Torvalds

[PATCH] Fix EDID_INFO in zero-page

EDID_INFO is encroaching on the space meant for E820 map in zero-page.
This will result in E820 map corruption on any system that has more=20 than
18 E820 entries and CONFIG_VIDEO_SELECT.  Not sure how this bug=20 managed
to hide for more than a year.

Attached patch should fix the bug.
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 7fa82794
...@@ -28,7 +28,8 @@ Offset Type Description ...@@ -28,7 +28,8 @@ Offset Type Description
0xa0 16 bytes System description table truncated to 16 bytes. 0xa0 16 bytes System description table truncated to 16 bytes.
( struct sys_desc_table_struct ) ( struct sys_desc_table_struct )
0xb0 - 0x1c3 Free. Add more parameters here if you really need them. 0xb0 - 0x13f Free. Add more parameters here if you really need them.
0x140- 0x1be EDID_INFO Video mode setup
0x1c4 unsigned long EFI system table pointer 0x1c4 unsigned long EFI system table pointer
0x1c8 unsigned long EFI memory descriptor size 0x1c8 unsigned long EFI memory descriptor size
......
...@@ -1936,7 +1936,7 @@ store_edid: ...@@ -1936,7 +1936,7 @@ store_edid:
movl $0x13131313, %eax # memset block with 0x13 movl $0x13131313, %eax # memset block with 0x13
movw $32, %cx movw $32, %cx
movw $0x440, %di movw $0x140, %di
cld cld
rep rep
stosl stosl
...@@ -1945,7 +1945,7 @@ store_edid: ...@@ -1945,7 +1945,7 @@ store_edid:
movw $0x01, %bx movw $0x01, %bx
movw $0x00, %cx movw $0x00, %cx
movw $0x01, %dx movw $0x01, %dx
movw $0x440, %di movw $0x140, %di
int $0x10 int $0x10
popw %di # restore all registers popw %di # restore all registers
......
...@@ -55,7 +55,7 @@ extern unsigned char boot_params[PARAM_SIZE]; ...@@ -55,7 +55,7 @@ extern unsigned char boot_params[PARAM_SIZE];
#define KERNEL_START (*(unsigned long *) (PARAM+0x214)) #define KERNEL_START (*(unsigned long *) (PARAM+0x214))
#define INITRD_START (*(unsigned long *) (PARAM+0x218)) #define INITRD_START (*(unsigned long *) (PARAM+0x218))
#define INITRD_SIZE (*(unsigned long *) (PARAM+0x21c)) #define INITRD_SIZE (*(unsigned long *) (PARAM+0x21c))
#define EDID_INFO (*(struct edid_info *) (PARAM+0x440)) #define EDID_INFO (*(struct edid_info *) (PARAM+0x140))
#define EDD_NR (*(unsigned char *) (PARAM+EDDNR)) #define EDD_NR (*(unsigned char *) (PARAM+EDDNR))
#define EDD_MBR_SIG_NR (*(unsigned char *) (PARAM+EDD_MBR_SIG_NR_BUF)) #define EDD_MBR_SIG_NR (*(unsigned char *) (PARAM+EDD_MBR_SIG_NR_BUF))
#define EDD_MBR_SIGNATURE ((unsigned int *) (PARAM+EDD_MBR_SIG_BUF)) #define EDD_MBR_SIGNATURE ((unsigned int *) (PARAM+EDD_MBR_SIG_BUF))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment