[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
When PC BIOS reports overlapped memory regions, GRUB2 works wrong.
From: |
Hitoshi Ozeki |
Subject: |
When PC BIOS reports overlapped memory regions, GRUB2 works wrong. |
Date: |
Thu, 12 Apr 2007 23:13:55 +0900 |
Hello, all
Please look at 'grub-1.95/kern/i386/pc/init.c'.
-begin----------------------------------
/* Merge overlaps. */
for (i = 0; i < num_regions - 1; i++)
if (mem_regions[i].addr + mem_regions[i].size >= mem_regions[i +
1].addr)
{
j = i + 1;
if (mem_regions[i].addr + mem_regions[i].size
< mem_regions[j].addr + mem_regions[j].size)
mem_regions[i].size = (mem_regions[j].addr + mem_regions[j].size
- mem_regions[i].addr);
grub_memmove (mem_regions + j, mem_regions + j + 1,
(num_regions - j - 1) * sizeof (struct mem_region));
i--;
}
-end------------------------------------
This cord merges overlapped memory regions.
However, the number of regions do not decrease though I merged it.
I write below a more right code.
-begin----------------------------------
/* Merge overlaps. */
for (i = 0; i < num_regions - 1; i++)
if (mem_regions[i].addr + mem_regions[i].size >= mem_regions[i +
1].addr)
{
j = i + 1;
if (mem_regions[i].addr + mem_regions[i].size
< mem_regions[j].addr + mem_regions[j].size)
mem_regions[i].size = (mem_regions[j].addr + mem_regions[j].size
- mem_regions[i].addr);
grub_memmove (mem_regions + j, mem_regions + j + 1,
(num_regions - j - 1) * sizeof (struct mem_region));
i--;
num_regions--;
}
-end------------------------------------
--
Hitoshi Ozeki address@hidden
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- When PC BIOS reports overlapped memory regions, GRUB2 works wrong.,
Hitoshi Ozeki <=