Pull request for UEFI sub-system for v2019.07-rc5
This pull request provides fixes for event services. -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEbcT5xx8ppvoGt20zxIHbvCwFGsQFAlz/1tkACgkQxIHbvCwF GsTKgQ/+JstN5TtGtkmQUIFae0WXhgG7YY3VC4mLgHzjCCxnAe7zztBiKpAq0dYI au/t6hBVybRSK8rX6QM4iYv26U9/UEih3A8cXTGv+lxjlMEq2ly4bE5/SaJgIdVq pf7Z+n74hYEQ70o1/bBHEv9VvSO4d+eZVMD48HxK8f9cfeNKgZCO3sE+rFVFDzMc CjalvXEKZhHVs2BCePt8gGekc8ywyAKOtcEgj4Il3b8dnCn4MlqqKNdEcCQtt+SD u9XIRCVsg8jwxJsBo1T3sdhB4+kKKR2B1sEb6ULw2krU9nnSpvAJRRpqugelmjy7 LeHmEwgxVAFiV9FmcgBQWOu1tbHWTeeeHddfuFj336ia2PX78NOxy3rsaMy/0cQC iUUAmueO3pbom1JWq7vpNr526ZLmz+HZe7dUPb3VyWCOEv5n98ew6xcBn5jNhDRU HkJgMdhDlfW7jb1UXNK+jt0IBgqkEKyxrA1vvDZv20Re8jy2kGkoaexIH29vFo4D p+t4GJSZ2v4alj5WVXOYlsxZWNCkpF7Uz6zcyiXhtIeat/NvwYSA8sppNFF0PRaN hkuuSGqzqh7rF0/8AFwWnBycx6Ib3BihwR91N63bxvLZLXTO2dNV1OPy+4HMBOtW kb7DgRsX0C6LjZBnR/BOekgsco8IDghunN1J08QJd88ceFIoaAM= =hvI1 -----END PGP SIGNATURE----- Merge tag 'efi-2019-07-rc5' of git://git.denx.de/u-boot-efi Pull request for UEFI sub-system for v2019.07-rc5 This pull request provides fixes for event services.
This commit is contained in:
commit
c2ea87883e
@ -256,6 +256,7 @@ struct efi_loaded_image_obj {
|
|||||||
* struct efi_event
|
* struct efi_event
|
||||||
*
|
*
|
||||||
* @link: Link to list of all events
|
* @link: Link to list of all events
|
||||||
|
* @queue_link: Link to the list of queued events
|
||||||
* @type: Type of event, see efi_create_event
|
* @type: Type of event, see efi_create_event
|
||||||
* @notify_tpl: Task priority level of notifications
|
* @notify_tpl: Task priority level of notifications
|
||||||
* @nofify_function: Function to call when the event is triggered
|
* @nofify_function: Function to call when the event is triggered
|
||||||
@ -264,11 +265,11 @@ struct efi_loaded_image_obj {
|
|||||||
* @trigger_time: Period of the timer
|
* @trigger_time: Period of the timer
|
||||||
* @trigger_next: Next time to trigger the timer
|
* @trigger_next: Next time to trigger the timer
|
||||||
* @trigger_type: Type of timer, see efi_set_timer
|
* @trigger_type: Type of timer, see efi_set_timer
|
||||||
* @is_queued: The notification function is queued
|
|
||||||
* @is_signaled: The event occurred. The event is in the signaled state.
|
* @is_signaled: The event occurred. The event is in the signaled state.
|
||||||
*/
|
*/
|
||||||
struct efi_event {
|
struct efi_event {
|
||||||
struct list_head link;
|
struct list_head link;
|
||||||
|
struct list_head queue_link;
|
||||||
uint32_t type;
|
uint32_t type;
|
||||||
efi_uintn_t notify_tpl;
|
efi_uintn_t notify_tpl;
|
||||||
void (EFIAPI *notify_function)(struct efi_event *event, void *context);
|
void (EFIAPI *notify_function)(struct efi_event *event, void *context);
|
||||||
@ -277,7 +278,6 @@ struct efi_event {
|
|||||||
u64 trigger_next;
|
u64 trigger_next;
|
||||||
u64 trigger_time;
|
u64 trigger_time;
|
||||||
enum efi_timer_delay trigger_type;
|
enum efi_timer_delay trigger_type;
|
||||||
bool is_queued;
|
|
||||||
bool is_signaled;
|
bool is_signaled;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -432,7 +432,7 @@ efi_status_t efi_create_event(uint32_t type, efi_uintn_t notify_tpl,
|
|||||||
efi_status_t efi_set_timer(struct efi_event *event, enum efi_timer_delay type,
|
efi_status_t efi_set_timer(struct efi_event *event, enum efi_timer_delay type,
|
||||||
uint64_t trigger_time);
|
uint64_t trigger_time);
|
||||||
/* Call this to signal an event */
|
/* Call this to signal an event */
|
||||||
void efi_signal_event(struct efi_event *event, bool check_tpl);
|
void efi_signal_event(struct efi_event *event);
|
||||||
|
|
||||||
/* open file system: */
|
/* open file system: */
|
||||||
struct efi_simple_file_system_protocol *efi_simple_file_system(
|
struct efi_simple_file_system_protocol *efi_simple_file_system(
|
||||||
|
@ -27,6 +27,12 @@ LIST_HEAD(efi_obj_list);
|
|||||||
/* List of all events */
|
/* List of all events */
|
||||||
LIST_HEAD(efi_events);
|
LIST_HEAD(efi_events);
|
||||||
|
|
||||||
|
/* List of queued events */
|
||||||
|
LIST_HEAD(efi_event_queue);
|
||||||
|
|
||||||
|
/* Flag to disable timer activity in ExitBootServices() */
|
||||||
|
static bool timers_enabled = true;
|
||||||
|
|
||||||
/* List of all events registered by RegisterProtocolNotify() */
|
/* List of all events registered by RegisterProtocolNotify() */
|
||||||
LIST_HEAD(efi_register_notify_events);
|
LIST_HEAD(efi_register_notify_events);
|
||||||
|
|
||||||
@ -160,33 +166,76 @@ const char *__efi_nesting_dec(void)
|
|||||||
return indent_string(--nesting_level);
|
return indent_string(--nesting_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* efi_event_is_queued() - check if an event is queued
|
||||||
|
*
|
||||||
|
* @event: event
|
||||||
|
* Return: true if event is queued
|
||||||
|
*/
|
||||||
|
static bool efi_event_is_queued(struct efi_event *event)
|
||||||
|
{
|
||||||
|
return !!event->queue_link.next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* efi_process_event_queue() - process event queue
|
||||||
|
*/
|
||||||
|
static void efi_process_event_queue(void)
|
||||||
|
{
|
||||||
|
while (!list_empty(&efi_event_queue)) {
|
||||||
|
struct efi_event *event;
|
||||||
|
efi_uintn_t old_tpl;
|
||||||
|
|
||||||
|
event = list_first_entry(&efi_event_queue, struct efi_event,
|
||||||
|
queue_link);
|
||||||
|
if (efi_tpl >= event->notify_tpl)
|
||||||
|
return;
|
||||||
|
list_del(&event->queue_link);
|
||||||
|
event->queue_link.next = NULL;
|
||||||
|
event->queue_link.prev = NULL;
|
||||||
|
/* Events must be executed at the event's TPL */
|
||||||
|
old_tpl = efi_tpl;
|
||||||
|
efi_tpl = event->notify_tpl;
|
||||||
|
EFI_CALL_VOID(event->notify_function(event,
|
||||||
|
event->notify_context));
|
||||||
|
efi_tpl = old_tpl;
|
||||||
|
if (event->type == EVT_NOTIFY_SIGNAL)
|
||||||
|
event->is_signaled = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* efi_queue_event() - queue an EFI event
|
* efi_queue_event() - queue an EFI event
|
||||||
* @event: event to signal
|
* @event: event to signal
|
||||||
* @check_tpl: check the TPL level
|
|
||||||
*
|
*
|
||||||
* This function queues the notification function of the event for future
|
* This function queues the notification function of the event for future
|
||||||
* execution.
|
* execution.
|
||||||
*
|
*
|
||||||
* The notification function is called if the task priority level of the event
|
|
||||||
* is higher than the current task priority level.
|
|
||||||
*
|
|
||||||
* For the SignalEvent service see efi_signal_event_ext.
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
static void efi_queue_event(struct efi_event *event, bool check_tpl)
|
static void efi_queue_event(struct efi_event *event)
|
||||||
{
|
{
|
||||||
if (event->notify_function) {
|
struct efi_event *item = NULL;
|
||||||
event->is_queued = true;
|
|
||||||
/* Check TPL */
|
if (!event->notify_function)
|
||||||
if (check_tpl && efi_tpl >= event->notify_tpl)
|
return;
|
||||||
return;
|
|
||||||
event->is_queued = false;
|
if (!efi_event_is_queued(event)) {
|
||||||
EFI_CALL_VOID(event->notify_function(event,
|
/*
|
||||||
event->notify_context));
|
* Events must be notified in order of decreasing task priority
|
||||||
} else {
|
* level. Insert the new event accordingly.
|
||||||
event->is_queued = false;
|
*/
|
||||||
|
list_for_each_entry(item, &efi_event_queue, queue_link) {
|
||||||
|
if (item->notify_tpl < event->notify_tpl) {
|
||||||
|
list_add_tail(&event->queue_link,
|
||||||
|
&item->queue_link);
|
||||||
|
event = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (event)
|
||||||
|
list_add_tail(&event->queue_link, &efi_event_queue);
|
||||||
}
|
}
|
||||||
|
efi_process_event_queue();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -211,7 +260,6 @@ efi_status_t is_valid_tpl(efi_uintn_t tpl)
|
|||||||
/**
|
/**
|
||||||
* efi_signal_event() - signal an EFI event
|
* efi_signal_event() - signal an EFI event
|
||||||
* @event: event to signal
|
* @event: event to signal
|
||||||
* @check_tpl: check the TPL level
|
|
||||||
*
|
*
|
||||||
* This function signals an event. If the event belongs to an event group all
|
* This function signals an event. If the event belongs to an event group all
|
||||||
* events of the group are signaled. If they are of type EVT_NOTIFY_SIGNAL
|
* events of the group are signaled. If they are of type EVT_NOTIFY_SIGNAL
|
||||||
@ -219,8 +267,10 @@ efi_status_t is_valid_tpl(efi_uintn_t tpl)
|
|||||||
*
|
*
|
||||||
* For the SignalEvent service see efi_signal_event_ext.
|
* For the SignalEvent service see efi_signal_event_ext.
|
||||||
*/
|
*/
|
||||||
void efi_signal_event(struct efi_event *event, bool check_tpl)
|
void efi_signal_event(struct efi_event *event)
|
||||||
{
|
{
|
||||||
|
if (event->is_signaled)
|
||||||
|
return;
|
||||||
if (event->group) {
|
if (event->group) {
|
||||||
struct efi_event *evt;
|
struct efi_event *evt;
|
||||||
|
|
||||||
@ -234,20 +284,15 @@ void efi_signal_event(struct efi_event *event, bool check_tpl)
|
|||||||
if (evt->is_signaled)
|
if (evt->is_signaled)
|
||||||
continue;
|
continue;
|
||||||
evt->is_signaled = true;
|
evt->is_signaled = true;
|
||||||
if (evt->type & EVT_NOTIFY_SIGNAL &&
|
|
||||||
evt->notify_function)
|
|
||||||
evt->is_queued = true;
|
|
||||||
}
|
}
|
||||||
list_for_each_entry(evt, &efi_events, link) {
|
list_for_each_entry(evt, &efi_events, link) {
|
||||||
if (!evt->group || guidcmp(evt->group, event->group))
|
if (!evt->group || guidcmp(evt->group, event->group))
|
||||||
continue;
|
continue;
|
||||||
if (evt->is_queued)
|
efi_queue_event(evt);
|
||||||
efi_queue_event(evt, check_tpl);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
event->is_signaled = true;
|
event->is_signaled = true;
|
||||||
if (event->type & EVT_NOTIFY_SIGNAL)
|
efi_queue_event(event);
|
||||||
efi_queue_event(event, check_tpl);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -637,8 +682,6 @@ efi_status_t efi_create_event(uint32_t type, efi_uintn_t notify_tpl,
|
|||||||
evt->group = group;
|
evt->group = group;
|
||||||
/* Disable timers on boot up */
|
/* Disable timers on boot up */
|
||||||
evt->trigger_next = -1ULL;
|
evt->trigger_next = -1ULL;
|
||||||
evt->is_queued = false;
|
|
||||||
evt->is_signaled = false;
|
|
||||||
list_add_tail(&evt->link, &efi_events);
|
list_add_tail(&evt->link, &efi_events);
|
||||||
*event = evt;
|
*event = evt;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
@ -733,8 +776,8 @@ void efi_timer_check(void)
|
|||||||
u64 now = timer_get_us();
|
u64 now = timer_get_us();
|
||||||
|
|
||||||
list_for_each_entry(evt, &efi_events, link) {
|
list_for_each_entry(evt, &efi_events, link) {
|
||||||
if (evt->is_queued)
|
if (!timers_enabled)
|
||||||
efi_queue_event(evt, true);
|
continue;
|
||||||
if (!(evt->type & EVT_TIMER) || now < evt->trigger_next)
|
if (!(evt->type & EVT_TIMER) || now < evt->trigger_next)
|
||||||
continue;
|
continue;
|
||||||
switch (evt->trigger_type) {
|
switch (evt->trigger_type) {
|
||||||
@ -748,8 +791,9 @@ void efi_timer_check(void)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
evt->is_signaled = false;
|
evt->is_signaled = false;
|
||||||
efi_signal_event(evt, true);
|
efi_signal_event(evt);
|
||||||
}
|
}
|
||||||
|
efi_process_event_queue();
|
||||||
WATCHDOG_RESET();
|
WATCHDOG_RESET();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -850,7 +894,7 @@ static efi_status_t EFIAPI efi_wait_for_event(efi_uintn_t num_events,
|
|||||||
if (!event[i]->type || event[i]->type & EVT_NOTIFY_SIGNAL)
|
if (!event[i]->type || event[i]->type & EVT_NOTIFY_SIGNAL)
|
||||||
return EFI_EXIT(EFI_INVALID_PARAMETER);
|
return EFI_EXIT(EFI_INVALID_PARAMETER);
|
||||||
if (!event[i]->is_signaled)
|
if (!event[i]->is_signaled)
|
||||||
efi_queue_event(event[i], true);
|
efi_queue_event(event[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wait for signal */
|
/* Wait for signal */
|
||||||
@ -894,7 +938,7 @@ static efi_status_t EFIAPI efi_signal_event_ext(struct efi_event *event)
|
|||||||
EFI_ENTRY("%p", event);
|
EFI_ENTRY("%p", event);
|
||||||
if (efi_is_event(event) != EFI_SUCCESS)
|
if (efi_is_event(event) != EFI_SUCCESS)
|
||||||
return EFI_EXIT(EFI_INVALID_PARAMETER);
|
return EFI_EXIT(EFI_INVALID_PARAMETER);
|
||||||
efi_signal_event(event, true);
|
efi_signal_event(event);
|
||||||
return EFI_EXIT(EFI_SUCCESS);
|
return EFI_EXIT(EFI_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -933,6 +977,9 @@ static efi_status_t EFIAPI efi_close_event(struct efi_event *event)
|
|||||||
free(item);
|
free(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Remove event from queue */
|
||||||
|
if (efi_event_is_queued(event))
|
||||||
|
list_del(&event->queue_link);
|
||||||
|
|
||||||
list_del(&event->link);
|
list_del(&event->link);
|
||||||
free(event);
|
free(event);
|
||||||
@ -961,7 +1008,7 @@ static efi_status_t EFIAPI efi_check_event(struct efi_event *event)
|
|||||||
event->type & EVT_NOTIFY_SIGNAL)
|
event->type & EVT_NOTIFY_SIGNAL)
|
||||||
return EFI_EXIT(EFI_INVALID_PARAMETER);
|
return EFI_EXIT(EFI_INVALID_PARAMETER);
|
||||||
if (!event->is_signaled)
|
if (!event->is_signaled)
|
||||||
efi_queue_event(event, true);
|
efi_queue_event(event);
|
||||||
if (event->is_signaled) {
|
if (event->is_signaled) {
|
||||||
event->is_signaled = false;
|
event->is_signaled = false;
|
||||||
return EFI_EXIT(EFI_SUCCESS);
|
return EFI_EXIT(EFI_SUCCESS);
|
||||||
@ -1068,7 +1115,8 @@ efi_status_t efi_add_protocol(const efi_handle_t handle,
|
|||||||
}
|
}
|
||||||
notif->handle = handle;
|
notif->handle = handle;
|
||||||
list_add_tail(¬if->link, &event->handles);
|
list_add_tail(¬if->link, &event->handles);
|
||||||
efi_signal_event(event->event, true);
|
event->event->is_signaled = false;
|
||||||
|
efi_signal_event(event->event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1593,7 +1641,7 @@ out:
|
|||||||
/* Notify that the configuration table was changed */
|
/* Notify that the configuration table was changed */
|
||||||
list_for_each_entry(evt, &efi_events, link) {
|
list_for_each_entry(evt, &efi_events, link) {
|
||||||
if (evt->group && !guidcmp(evt->group, guid)) {
|
if (evt->group && !guidcmp(evt->group, guid)) {
|
||||||
efi_signal_event(evt, false);
|
efi_signal_event(evt);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1899,13 +1947,13 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
|
|||||||
if (map_key != efi_memory_map_key)
|
if (map_key != efi_memory_map_key)
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
|
|
||||||
/* Make sure that notification functions are not called anymore */
|
|
||||||
efi_tpl = TPL_HIGH_LEVEL;
|
|
||||||
|
|
||||||
/* Check if ExitBootServices has already been called */
|
/* Check if ExitBootServices has already been called */
|
||||||
if (!systab.boottime)
|
if (!systab.boottime)
|
||||||
return EFI_EXIT(EFI_SUCCESS);
|
return EFI_EXIT(EFI_SUCCESS);
|
||||||
|
|
||||||
|
/* Stop all timer related activities */
|
||||||
|
timers_enabled = false;
|
||||||
|
|
||||||
/* Add related events to the event group */
|
/* Add related events to the event group */
|
||||||
list_for_each_entry(evt, &efi_events, link) {
|
list_for_each_entry(evt, &efi_events, link) {
|
||||||
if (evt->type == EVT_SIGNAL_EXIT_BOOT_SERVICES)
|
if (evt->type == EVT_SIGNAL_EXIT_BOOT_SERVICES)
|
||||||
@ -1916,11 +1964,14 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
|
|||||||
if (evt->group &&
|
if (evt->group &&
|
||||||
!guidcmp(evt->group,
|
!guidcmp(evt->group,
|
||||||
&efi_guid_event_group_exit_boot_services)) {
|
&efi_guid_event_group_exit_boot_services)) {
|
||||||
efi_signal_event(evt, false);
|
efi_signal_event(evt);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Make sure that notification functions are not called anymore */
|
||||||
|
efi_tpl = TPL_HIGH_LEVEL;
|
||||||
|
|
||||||
/* TODO: Should persist EFI variables here */
|
/* TODO: Should persist EFI variables here */
|
||||||
|
|
||||||
board_quiesce_devices();
|
board_quiesce_devices();
|
||||||
|
@ -704,7 +704,7 @@ static void efi_cin_check(void)
|
|||||||
efi_status_t ret;
|
efi_status_t ret;
|
||||||
|
|
||||||
if (key_available) {
|
if (key_available) {
|
||||||
efi_signal_event(efi_con_in.wait_for_key, true);
|
efi_signal_event(efi_con_in.wait_for_key);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -718,7 +718,7 @@ static void efi_cin_check(void)
|
|||||||
|
|
||||||
/* Queue the wait for key event */
|
/* Queue the wait for key event */
|
||||||
if (key_available)
|
if (key_available)
|
||||||
efi_signal_event(efi_con_in.wait_for_key, true);
|
efi_signal_event(efi_con_in.wait_for_key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -321,7 +321,7 @@ uint64_t efi_add_memory_map(uint64_t start, uint64_t pages, int memory_type,
|
|||||||
if (evt->group &&
|
if (evt->group &&
|
||||||
!guidcmp(evt->group,
|
!guidcmp(evt->group,
|
||||||
&efi_guid_event_group_memory_map_change)) {
|
&efi_guid_event_group_memory_map_change)) {
|
||||||
efi_signal_event(evt, false);
|
efi_signal_event(evt);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ static void EFIAPI efi_reset_system_boottime(
|
|||||||
if (evt->group &&
|
if (evt->group &&
|
||||||
!guidcmp(evt->group,
|
!guidcmp(evt->group,
|
||||||
&efi_guid_event_group_reset_system)) {
|
&efi_guid_event_group_reset_system)) {
|
||||||
efi_signal_event(evt, false);
|
efi_signal_event(evt);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,12 +80,11 @@ static int execute(void)
|
|||||||
return EFI_ST_FAILURE;
|
return EFI_ST_FAILURE;
|
||||||
}
|
}
|
||||||
for (j = 0; j < GROUP_SIZE; ++j) {
|
for (j = 0; j < GROUP_SIZE; ++j) {
|
||||||
if (counter[j] != i) {
|
if (counter[j] != 2 * i + 1) {
|
||||||
efi_st_printf("i %u, j %u, count %u\n",
|
efi_st_printf("i %u, j %u, count %u\n",
|
||||||
(unsigned int)i, (unsigned int)j,
|
(unsigned int)i, (unsigned int)j,
|
||||||
(unsigned int)counter[j]);
|
(unsigned int)counter[j]);
|
||||||
efi_st_error(
|
efi_st_error("Notification function was not called\n");
|
||||||
"Notification function was called\n");
|
|
||||||
return EFI_ST_FAILURE;
|
return EFI_ST_FAILURE;
|
||||||
}
|
}
|
||||||
/* Clear signaled state */
|
/* Clear signaled state */
|
||||||
@ -94,7 +93,7 @@ static int execute(void)
|
|||||||
efi_st_error("Event was not signaled\n");
|
efi_st_error("Event was not signaled\n");
|
||||||
return EFI_ST_FAILURE;
|
return EFI_ST_FAILURE;
|
||||||
}
|
}
|
||||||
if (counter[j] != i) {
|
if (counter[j] != 2 * i + 1) {
|
||||||
efi_st_printf("i %u, j %u, count %u\n",
|
efi_st_printf("i %u, j %u, count %u\n",
|
||||||
(unsigned int)i, (unsigned int)j,
|
(unsigned int)i, (unsigned int)j,
|
||||||
(unsigned int)counter[j]);
|
(unsigned int)counter[j]);
|
||||||
@ -109,7 +108,7 @@ static int execute(void)
|
|||||||
"Signaled state not cleared\n");
|
"Signaled state not cleared\n");
|
||||||
return EFI_ST_FAILURE;
|
return EFI_ST_FAILURE;
|
||||||
}
|
}
|
||||||
if (counter[j] != i + 1) {
|
if (counter[j] != 2 * i + 2) {
|
||||||
efi_st_printf("i %u, j %u, count %u\n",
|
efi_st_printf("i %u, j %u, count %u\n",
|
||||||
(unsigned int)i, (unsigned int)j,
|
(unsigned int)i, (unsigned int)j,
|
||||||
(unsigned int)counter[j]);
|
(unsigned int)counter[j]);
|
||||||
|
Loading…
Reference in New Issue
Block a user