From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1GSw4O-0006SP-Sf for mharc-grub-devel@gnu.org; Thu, 28 Sep 2006 09:36:56 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GSw4N-0006SH-8u for grub-devel@gnu.org; Thu, 28 Sep 2006 09:36:55 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GSw4K-0006S4-Ng for grub-devel@gnu.org; Thu, 28 Sep 2006 09:36:53 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GSw4K-0006S1-Iu for grub-devel@gnu.org; Thu, 28 Sep 2006 09:36:52 -0400 Received: from [195.54.107.73] (helo=mxfep02.bredband.com) by monty-python.gnu.org with esmtp (Exim 4.52) id 1GSw9Q-0004u7-3G for grub-devel@gnu.org; Thu, 28 Sep 2006 09:42:08 -0400 Received: from ironport.bredband.com ([195.54.107.82] [195.54.107.82]) by mxfep02.bredband.com with ESMTP id <20060928133651.PBTI21247.mxfep02.bredband.com@ironport.bredband.com> for ; Thu, 28 Sep 2006 15:36:51 +0200 Received: from c-e5df71d5.029-19-73746f13.cust.bredbandsbolaget.se (HELO localhost.localdomain) ([213.113.223.229]) by ironport.bredband.com with ESMTP; 28 Sep 2006 15:36:50 +0200 From: Johan Rydberg To: The development of GRUB 2 References: <1159444090.451bb67a38fba@imp6-g19.free.fr> Date: Thu, 28 Sep 2006 16:01:05 +0200 In-Reply-To: <1159444090.451bb67a38fba@imp6-g19.free.fr> (tgingold@free.fr's message of "Thu, 28 Sep 2006 13:48:10 +0200") Message-ID: <87d59g9jku.fsf@night.trouble.net> User-Agent: Gnus/5.110004 (No Gnus v0.4) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha1; protocol="application/pgp-signature" Subject: Re: patch for kern/efi/mm.c (big memmap) X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Sep 2006 13:36:55 -0000 --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Transfer-Encoding: quoted-printable tgingold@free.fr writes: > some systems have a really big memmap. This patch remove the memmap > size limit. Overall the patch looks good, I have one comment through; (the patch is for kern/efi/mm.c if someone wonders.) + memory_map =3D grub_efi_allocate_pages + (0, 2 * BYTES_TO_PAGES (memory_map_size + 0x1000)); I suppose you add 0x1000 to round it up. Maybe we should change the BYTES_TO_PAGES macro to do roundup. I'll attach a unified diff, since those is easier to review. Even through this patch is quite trivial and small, I believe we need you to sign over the copyright for it to FSF. Okuji, Marco, what are your opinions?=20=20 ~j --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=grub.efi-mm.1.patch Content-Transfer-Encoding: quoted-printable Index: kern/efi/mm.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /sources/grub/grub2/kern/efi/mm.c,v retrieving revision 1.3 diff -u -r1.3 mm.c =2D-- kern/efi/mm.c 28 May 2006 23:01:43 -0000 1.3 +++ kern/efi/mm.c 28 Sep 2006 13:29:16 -0000 @@ -30,10 +30,6 @@ #define BYTES_TO_PAGES(bytes) ((bytes) >> 12) #define PAGES_TO_BYTES(pages) ((pages) << 12) =20 =2D/* The size of a memory map obtained from the firmware. This must be =2D a multiplier of 4KB. */ =2D#define MEMORY_MAP_SIZE 0x1000 =2D /* Maintain the list of allocated pages. */ struct allocated_page { @@ -346,6 +342,8 @@ grub_efi_uintn_t desc_size; grub_efi_uint64_t total_pages; grub_efi_uint64_t required_pages; + grub_efi_uintn_t memory_map_size; + int res; =20 /* First of all, allocate pages to maintain allocations. */ allocated_pages @@ -356,15 +354,20 @@ grub_memset (allocated_pages, 0, ALLOCATED_PAGES_SIZE); =20=20=20 /* Prepare a memory region to store two memory maps. */ =2D memory_map =3D grub_efi_allocate_pages (0, =2D 2 * BYTES_TO_PAGES (MEMORY_MAP_SIZE)); + memory_map_size =3D 0; + res =3D grub_efi_get_memory_map (&memory_map_size, NULL, 0, &desc_size, = 0); + if (res !=3D 0) + grub_fatal ("cannot get memory map size"); + + memory_map =3D grub_efi_allocate_pages + (0, 2 * BYTES_TO_PAGES (memory_map_size + 0x1000)); if (! memory_map) grub_fatal ("cannot allocate memory"); =20 =2D filtered_memory_map =3D NEXT_MEMORY_DESCRIPTOR (memory_map, MEMORY_MAP= _SIZE); + filtered_memory_map =3D NEXT_MEMORY_DESCRIPTOR (memory_map, memory_map_s= ize); =20 /* Obtain descriptors for available memory. */ =2D map_size =3D MEMORY_MAP_SIZE; + map_size =3D memory_map_size; =20 if (grub_efi_get_memory_map (&map_size, memory_map, 0, &desc_size, 0) < = 0) grub_fatal ("cannot get memory map"); @@ -373,7 +376,7 @@ =20=20=20 filtered_memory_map_end =3D filter_memory_map (memory_map, filtered_memo= ry_map, desc_size, memory_map_end); =2D=20=20 + /* By default, request a quarter of the available memory. */ total_pages =3D get_total_pages (filtered_memory_map, desc_size, filtered_memory_map_end); @@ -393,7 +396,7 @@ =20 #if 0 /* For debug. */ =2D map_size =3D MEMORY_MAP_SIZE; + map_size =3D memory_map_size; =20 if (grub_efi_get_memory_map (&map_size, memory_map, 0, &desc_size, 0) < = 0) grub_fatal ("cannot get memory map"); @@ -406,7 +409,7 @@ =20=20=20 /* Release the memory maps. */ grub_efi_free_pages ((grub_addr_t) memory_map, =2D 2 * BYTES_TO_PAGES (MEMORY_MAP_SIZE)); + 2 * BYTES_TO_PAGES (memory_map_size + 0x1000)); } =20 void --=-=-=-- --==-=-= Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) iD8DBQBFG9Wk3CqIy3K3X2ERAheJAJ92O2NiYLBOP7oDCKxpirxzJ2A48gCgzwEu Tq16sd/nuS6Vv+8pPr8Ujis= =UiAY -----END PGP SIGNATURE----- --==-=-=--