
On Wed, Aug 23, 2017 at 5:44 PM, Heinrich Schuchardt xypron.glpk@gmx.de wrote:
On 08/18/2017 05:45 PM, Heinrich Schuchardt wrote:
To understand what is happening in OpenProtocol or LocateProtocol it is necessary to know the protocol interface GUID. Let's write a debug message.
Cc: Rob Clark robdclark@gmail.com Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
v4: use %pUl format string correct indention of output v3: commit message changed v2: fix typo in commit message
include/efi_loader.h | 8 ++++++++ lib/efi_loader/efi_boottime.c | 11 +++++++++++ 2 files changed, 19 insertions(+)
diff --git a/include/efi_loader.h b/include/efi_loader.h index 870854fb61..5b20af808b 100644 --- a/include/efi_loader.h +++ b/include/efi_loader.h @@ -17,6 +17,7 @@
int __efi_entry_check(void); int __efi_exit_check(void); +const char *__efi_nesting(void); const char *__efi_nesting_inc(void); const char *__efi_nesting_dec(void);
@@ -64,6 +65,13 @@ const char *__efi_nesting_dec(void); debug("%sEFI: Return From: %s\n", __efi_nesting_dec(), #exp); \ } while(0)
+/*
- Write GUID
- */
+#define EFI_PRINT_GUID(txt, guid) ({ \
debug("%sEFI: %s %pUl\n", __efi_nesting(), txt, guid); \
})
extern struct efi_runtime_services efi_runtime_services; extern struct efi_system_table systab;
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index 5aeaeeca75..6af033458b 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -112,6 +112,11 @@ static const char *indent_string(int level) return &indent[max - level]; }
+const char *__efi_nesting(void) +{
return indent_string(nesting_level);
+}
const char *__efi_nesting_inc(void) { return indent_string(nesting_level++); @@ -1163,6 +1170,8 @@ static efi_status_t EFIAPI efi_locate_protocol(efi_guid_t *protocol, if (!protocol || !protocol_interface) return EFI_EXIT(EFI_INVALID_PARAMETER);
EFI_PRINT_GUID("protocol", protocol);
list_for_each(lhandle, &efi_obj_list) { struct efi_object *efiobj;
@@ -1366,6 +1375,8 @@ static efi_status_t EFIAPI efi_open_protocol( goto out; }
EFI_PRINT_GUID("protocol", protocol);
switch (attributes) { case EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL: case EFI_OPEN_PROTOCOL_GET_PROTOCOL:
Hello Rob,
with the patch installed I sometimes got failures on Travis when grub is loaded. https://travis-ci.org/xypron2/u-boot/builds/267753128?utm_source=github_stat...
I added some code for debugging and found that after efi_exit is called it opens the EFI_LOADED_IMAGE_PROTOCOL.
This leads to an error in __efi_entry_check():
do_bootefi_exec:270 Jumping to 0x9ee22400
previous call /home/travis/build/xypron2/u-boot/lib/efi_loader/efi_boottime.c(869) efi_exit, ret = 0
EFI: protocol 5b1b31a1-9562-11d2-8e3f-00a0c969723b
previous call /home/travis/build/xypron2/u-boot/lib/efi_loader/efi_boottime.c(1567) efi_open_protocol, ret = 0
previous call /home/travis/build/xypron2/u-boot/lib/efi_loader/efi_boottime.c(1365) efi_locate_protocol, ret = 0
previous call /home/travis/build/xypron2/u-boot/lib/efi_loader/efi_console.c(54) efi_cin_get_mode, ret = 0
previous call /home/travis/build/xypron2/u-boot/lib/efi_loader/efi_boottime.c(1365) efi_locate_protocol, ret = 0
previous call /home/travis/build/xypron2/u-boot/lib/efi_loader/efi_console.c(54) efi_cin_get_mode, ret = 0
/home/travis/build/xypron2/u-boot/lib/efi_loader/efi_boottime.c:227: efi_allocate_pages_ext: Assertion `__efi_entry_check()' failed.
resetting ...
I will work on a patch to fix it.
hmm, odd that this patch would trigger it..
maybe adding 'ccflags-y += -DDEBUG=1' in efi_loader/Makefile (and then possibly an #undef DEBUG at top of efi_console.c to make the debug spam not *too* much) would help track it down?
I probably need to rebase my stack of patches again. I've been busy on other things and haven't had time for u-boot for last couple weeks..
BR, -R