From 97dc689fa1859830ccb156dfff7986b1ff1e046d Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Mon, 19 Jun 2023 11:52:15 +0000 Subject: [PATCH] core/grub: add patch --- ...dd-missing-__grub_efi_api-attributes.patch | 205 ++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 core/grub/0004-efi-Add-missing-__grub_efi_api-attributes.patch diff --git a/core/grub/0004-efi-Add-missing-__grub_efi_api-attributes.patch b/core/grub/0004-efi-Add-missing-__grub_efi_api-attributes.patch new file mode 100644 index 000000000..f85013fe2 --- /dev/null +++ b/core/grub/0004-efi-Add-missing-__grub_efi_api-attributes.patch @@ -0,0 +1,205 @@ +From 43384e88c1a38631da905b7086bc76225602808a Mon Sep 17 00:00:00 2001 +From: Daniel Kiper +Date: Thu, 15 Jun 2023 16:45:00 +0200 +Subject: [PATCH 1/1] efi: Add missing __grub_efi_api attributes + +The commit bb4aa6e06 (efi: Drop all uses of efi_call_XX() wrappers) did +not add some __grub_efi_api attributes to the EFI calls. Lack of them +led to hangs on x86_64-efi target. So, let's add missing __grub_efi_api +attributes. + +Fixes: bb4aa6e06 (efi: Drop all uses of efi_call_XX() wrappers) + +Reported-by: Christian Hesse +Reported-by: Robin Candau +Signed-off-by: Daniel Kiper +--- + include/grub/efi/cc.h | 30 +++++++++++----------- + include/grub/efi/console_control.h | 16 ++++++------ + include/grub/efi/graphics_output.h | 32 ++++++++++++------------ + include/grub/efi/uga_draw.h | 40 +++++++++++++++--------------- + 4 files changed, 59 insertions(+), 59 deletions(-) + +diff --git a/include/grub/efi/cc.h b/include/grub/efi/cc.h +index 896030689..978e0cdfe 100644 +--- a/include/grub/efi/cc.h ++++ b/include/grub/efi/cc.h +@@ -124,27 +124,27 @@ typedef struct grub_efi_cc_boot_service_capability grub_efi_cc_boot_service_capa + struct grub_efi_cc_protocol + { + grub_efi_status_t +- (*get_capability) (struct grub_efi_cc_protocol *this, +- grub_efi_cc_boot_service_capability_t *ProtocolCapability); ++ (__grub_efi_api *get_capability) (struct grub_efi_cc_protocol *this, ++ grub_efi_cc_boot_service_capability_t *ProtocolCapability); + + grub_efi_status_t +- (*get_event_log) (struct grub_efi_cc_protocol *this, +- grub_efi_cc_event_log_format_t EventLogFormat, +- grub_efi_physical_address_t *EventLogLocation, +- grub_efi_physical_address_t *EventLogLastEntry, +- grub_efi_boolean_t *EventLogTruncated); ++ (__grub_efi_api *get_event_log) (struct grub_efi_cc_protocol *this, ++ grub_efi_cc_event_log_format_t EventLogFormat, ++ grub_efi_physical_address_t *EventLogLocation, ++ grub_efi_physical_address_t *EventLogLastEntry, ++ grub_efi_boolean_t *EventLogTruncated); + + grub_efi_status_t +- (*hash_log_extend_event) (struct grub_efi_cc_protocol *this, +- grub_efi_uint64_t Flags, +- grub_efi_physical_address_t DataToHash, +- grub_efi_uint64_t DataToHashLen, +- grub_efi_cc_event_t *EfiCcEvent); ++ (__grub_efi_api *hash_log_extend_event) (struct grub_efi_cc_protocol *this, ++ grub_efi_uint64_t Flags, ++ grub_efi_physical_address_t DataToHash, ++ grub_efi_uint64_t DataToHashLen, ++ grub_efi_cc_event_t *EfiCcEvent); + + grub_efi_status_t +- (*map_pcr_to_mr_index) (struct grub_efi_cc_protocol *this, +- grub_efi_uint32_t PcrIndex, +- grub_efi_cc_mr_index_t *MrIndex); ++ (__grub_efi_api *map_pcr_to_mr_index) (struct grub_efi_cc_protocol *this, ++ grub_efi_uint32_t PcrIndex, ++ grub_efi_cc_mr_index_t *MrIndex); + }; + typedef struct grub_efi_cc_protocol grub_efi_cc_protocol_t; + +diff --git a/include/grub/efi/console_control.h b/include/grub/efi/console_control.h +index bb5fd038e..008ac5896 100644 +--- a/include/grub/efi/console_control.h ++++ b/include/grub/efi/console_control.h +@@ -41,18 +41,18 @@ typedef enum grub_efi_screen_mode grub_efi_screen_mode_t; + struct grub_efi_console_control_protocol + { + grub_efi_status_t +- (*get_mode) (struct grub_efi_console_control_protocol *this, +- grub_efi_screen_mode_t *mode, +- grub_efi_boolean_t *uga_exists, +- grub_efi_boolean_t *std_in_locked); ++ (__grub_efi_api *get_mode) (struct grub_efi_console_control_protocol *this, ++ grub_efi_screen_mode_t *mode, ++ grub_efi_boolean_t *uga_exists, ++ grub_efi_boolean_t *std_in_locked); + + grub_efi_status_t +- (*set_mode) (struct grub_efi_console_control_protocol *this, +- grub_efi_screen_mode_t mode); ++ (__grub_efi_api *set_mode) (struct grub_efi_console_control_protocol *this, ++ grub_efi_screen_mode_t mode); + + grub_efi_status_t +- (*lock_std_in) (struct grub_efi_console_control_protocol *this, +- grub_efi_char16_t *password); ++ (__grub_efi_api *lock_std_in) (struct grub_efi_console_control_protocol *this, ++ grub_efi_char16_t *password); + }; + typedef struct grub_efi_console_control_protocol grub_efi_console_control_protocol_t; + +diff --git a/include/grub/efi/graphics_output.h b/include/grub/efi/graphics_output.h +index e4388127c..044e786b8 100644 +--- a/include/grub/efi/graphics_output.h ++++ b/include/grub/efi/graphics_output.h +@@ -83,26 +83,26 @@ struct grub_efi_gop_mode + struct grub_efi_gop; + + typedef grub_efi_status_t +-(*grub_efi_gop_query_mode_t) (struct grub_efi_gop *this, +- grub_efi_uint32_t mode_number, +- grub_efi_uintn_t *size_of_info, +- struct grub_efi_gop_mode_info **info); ++(__grub_efi_api *grub_efi_gop_query_mode_t) (struct grub_efi_gop *this, ++ grub_efi_uint32_t mode_number, ++ grub_efi_uintn_t *size_of_info, ++ struct grub_efi_gop_mode_info **info); + + typedef grub_efi_status_t +-(*grub_efi_gop_set_mode_t) (struct grub_efi_gop *this, +- grub_efi_uint32_t mode_number); ++(__grub_efi_api *grub_efi_gop_set_mode_t) (struct grub_efi_gop *this, ++ grub_efi_uint32_t mode_number); + + typedef grub_efi_status_t +-(*grub_efi_gop_blt_t) (struct grub_efi_gop *this, +- void *buffer, +- grub_efi_uintn_t operation, +- grub_efi_uintn_t sx, +- grub_efi_uintn_t sy, +- grub_efi_uintn_t dx, +- grub_efi_uintn_t dy, +- grub_efi_uintn_t width, +- grub_efi_uintn_t height, +- grub_efi_uintn_t delta); ++(__grub_efi_api *grub_efi_gop_blt_t) (struct grub_efi_gop *this, ++ void *buffer, ++ grub_efi_uintn_t operation, ++ grub_efi_uintn_t sx, ++ grub_efi_uintn_t sy, ++ grub_efi_uintn_t dx, ++ grub_efi_uintn_t dy, ++ grub_efi_uintn_t width, ++ grub_efi_uintn_t height, ++ grub_efi_uintn_t delta); + + struct grub_efi_gop + { +diff --git a/include/grub/efi/uga_draw.h b/include/grub/efi/uga_draw.h +index a31f2672e..1ea157a7e 100644 +--- a/include/grub/efi/uga_draw.h ++++ b/include/grub/efi/uga_draw.h +@@ -46,30 +46,30 @@ struct grub_efi_uga_pixel + struct grub_efi_uga_draw_protocol + { + grub_efi_status_t +- (*get_mode) (struct grub_efi_uga_draw_protocol *this, +- grub_uint32_t *width, +- grub_uint32_t *height, +- grub_uint32_t *depth, +- grub_uint32_t *refresh_rate); ++ (__grub_efi_api *get_mode) (struct grub_efi_uga_draw_protocol *this, ++ grub_uint32_t *width, ++ grub_uint32_t *height, ++ grub_uint32_t *depth, ++ grub_uint32_t *refresh_rate); + + grub_efi_status_t +- (*set_mode) (struct grub_efi_uga_draw_protocol *this, +- grub_uint32_t width, +- grub_uint32_t height, +- grub_uint32_t depth, +- grub_uint32_t refresh_rate); ++ (__grub_efi_api *set_mode) (struct grub_efi_uga_draw_protocol *this, ++ grub_uint32_t width, ++ grub_uint32_t height, ++ grub_uint32_t depth, ++ grub_uint32_t refresh_rate); + + grub_efi_status_t +- (*blt) (struct grub_efi_uga_draw_protocol *this, +- struct grub_efi_uga_pixel *blt_buffer, +- enum grub_efi_uga_blt_operation blt_operation, +- grub_efi_uintn_t src_x, +- grub_efi_uintn_t src_y, +- grub_efi_uintn_t dest_x, +- grub_efi_uintn_t dest_y, +- grub_efi_uintn_t width, +- grub_efi_uintn_t height, +- grub_efi_uintn_t delta); ++ (__grub_efi_api *blt) (struct grub_efi_uga_draw_protocol *this, ++ struct grub_efi_uga_pixel *blt_buffer, ++ enum grub_efi_uga_blt_operation blt_operation, ++ grub_efi_uintn_t src_x, ++ grub_efi_uintn_t src_y, ++ grub_efi_uintn_t dest_x, ++ grub_efi_uintn_t dest_y, ++ grub_efi_uintn_t width, ++ grub_efi_uintn_t height, ++ grub_efi_uintn_t delta); + }; + typedef struct grub_efi_uga_draw_protocol grub_efi_uga_draw_protocol_t; + +-- +2.41.0 +