aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/boot/edd.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/i386/boot/edd.c')
-rw-r--r--arch/i386/boot/edd.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/i386/boot/edd.c b/arch/i386/boot/edd.c
index 25a282494f4c..77d92daf7923 100644
--- a/arch/i386/boot/edd.c
+++ b/arch/i386/boot/edd.c
@@ -72,17 +72,18 @@ static u32 read_mbr_sig(u8 devno, struct edd_info *ei)
72 u32 mbrsig; 72 u32 mbrsig;
73 u32 buf_base, mbr_base; 73 u32 buf_base, mbr_base;
74 extern char _end[]; 74 extern char _end[];
75 static char mbr_buf[1024];
76 75
77 sector_size = ei->params.bytes_per_sector; 76 sector_size = ei->params.bytes_per_sector;
78 if (!sector_size) 77 if (!sector_size)
79 sector_size = 512; /* Best available guess */ 78 sector_size = 512; /* Best available guess */
80 79
80 /* Produce a naturally aligned buffer on the heap */
81 buf_base = (ds() << 4) + (u32)&_end; 81 buf_base = (ds() << 4) + (u32)&_end;
82 mbr_base = (buf_base+sector_size-1) & ~(sector_size-1); 82 mbr_base = (buf_base+sector_size-1) & ~(sector_size-1);
83 mbrbuf_ptr = mbr_buf + (mbr_base-buf_base); 83 mbrbuf_ptr = _end + (mbr_base-buf_base);
84 mbrbuf_end = mbrbuf_ptr + sector_size; 84 mbrbuf_end = mbrbuf_ptr + sector_size;
85 85
86 /* Make sure we actually have space on the heap... */
86 if (!(boot_params.hdr.loadflags & CAN_USE_HEAP)) 87 if (!(boot_params.hdr.loadflags & CAN_USE_HEAP))
87 return 0; 88 return 0;
88 if (mbrbuf_end > (char *)(size_t)boot_params.hdr.heap_end_ptr) 89 if (mbrbuf_end > (char *)(size_t)boot_params.hdr.heap_end_ptr)