grub-devel
[Top][All Lists]
Advanced

[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






reply via email to

[Prev in Thread] Current Thread [Next in Thread]