- Limit grub_malloc() on x86_64 to < 31bit addresses, as some devices seem to have a colossally broken storage controller (or UEFI driver) that can't do DMA to higher memory addresses, but fails silently. Resolves: rhbz#1626844 (possibly really resolving it this time.) - Also integrate Hans's attempt to fix the related error from -54, but do it the other way around: try the low addresses first and *then* the high one if the allocation fails. This way we'll get low regions by default, and if kernel/initramfs don't fit anywhere, it'll try the higher addresses. Related: rhbz#1624532 - Coalesce all the intermediate debugging junk from -54/-55/-56. Signed-off-by: Peter Jones <pjones@redhat.com>
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 | |
| From: Peter Jones <pjones@redhat.com>
 | |
| Date: Tue, 11 Sep 2018 15:58:29 -0400
 | |
| Subject: [PATCH] Add more dprintf, and nerf dprintf in script.c
 | |
| 
 | |
| Signed-off-by: Peter Jones <pjones@redhat.com>
 | |
| ---
 | |
|  grub-core/disk/diskfilter.c  | 3 +++
 | |
|  grub-core/disk/efi/efidisk.c | 1 +
 | |
|  grub-core/kern/device.c      | 1 +
 | |
|  grub-core/script/script.c    | 5 +++++
 | |
|  4 files changed, 10 insertions(+)
 | |
| 
 | |
| diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c
 | |
| index 6f901c0adf7..66f6b992604 100644
 | |
| --- a/grub-core/disk/diskfilter.c
 | |
| +++ b/grub-core/disk/diskfilter.c
 | |
| @@ -188,6 +188,8 @@ scan_disk (const char *name, int accept_diskfilter)
 | |
|    grub_disk_t disk;
 | |
|    static int scan_depth = 0;
 | |
|  
 | |
| +  grub_dprintf ("diskfilter", "scanning %s\n", name);
 | |
| +
 | |
|    if (!accept_diskfilter && is_valid_diskfilter_name (name))
 | |
|      return 0;
 | |
|  
 | |
| @@ -1211,6 +1213,7 @@ insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id,
 | |
|  	   the same.  */
 | |
|  	if (pv->disk && grub_disk_get_size (disk) >= pv->part_size)
 | |
|  	  return GRUB_ERR_NONE;
 | |
| +	grub_dprintf ("diskfilter", "checking %s\n", disk->name);
 | |
|  	pv->disk = grub_disk_open (disk->name);
 | |
|  	if (!pv->disk)
 | |
|  	  return grub_errno;
 | |
| diff --git a/grub-core/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.c
 | |
| index 5d2400f66f2..4bc51877f04 100644
 | |
| --- a/grub-core/disk/efi/efidisk.c
 | |
| +++ b/grub-core/disk/efi/efidisk.c
 | |
| @@ -846,6 +846,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
 | |
|  	  return 0;
 | |
|  	}
 | |
|  
 | |
| +      grub_dprintf ("efidisk", "getting disk for %s\n", device_name);
 | |
|        parent = grub_disk_open (device_name);
 | |
|        grub_free (dup_dp);
 | |
|  
 | |
| diff --git a/grub-core/kern/device.c b/grub-core/kern/device.c
 | |
| index 73b8ecc0c09..f58b58c89d5 100644
 | |
| --- a/grub-core/kern/device.c
 | |
| +++ b/grub-core/kern/device.c
 | |
| @@ -34,6 +34,7 @@ grub_device_open (const char *name)
 | |
|  {
 | |
|    grub_device_t dev = 0;
 | |
|  
 | |
| +  grub_dprintf ("device", "opening device %s\n", name);
 | |
|    if (! name)
 | |
|      {
 | |
|        name = grub_env_get ("root");
 | |
| diff --git a/grub-core/script/script.c b/grub-core/script/script.c
 | |
| index ec4d4337c66..844e8343ca7 100644
 | |
| --- a/grub-core/script/script.c
 | |
| +++ b/grub-core/script/script.c
 | |
| @@ -22,6 +22,11 @@
 | |
|  #include <grub/parser.h>
 | |
|  #include <grub/mm.h>
 | |
|  
 | |
| +#ifdef grub_dprintf
 | |
| +#undef grub_dprintf
 | |
| +#endif
 | |
| +#define grub_dprintf(no, fmt, ...)
 | |
| +
 | |
|  /* It is not possible to deallocate the memory when a syntax error was
 | |
|     found.  Because of that it is required to keep track of all memory
 | |
|     allocations.  The memory is freed in case of an error, or assigned
 |