Hi Heinrich, 

[...]
> > + * @event  notified event
> > + * @context        pointer to the notification count
> > + */
> > +static void EFIAPI test_uninstall_notify(struct efi_event *event, void 
> > *context)
> > +{
> > +   return;
> > +}
> > +
> >   /*
> >    * Setup unit test.
> >    *
> > @@ -91,6 +108,21 @@ static int setup(const efi_handle_t img_handle,
> >             return EFI_ST_FAILURE;
> >     }
> > 
> > +   ret = boottime->create_event(EVT_NOTIFY_SIGNAL,
> 
> You could use the existing notify function.
> 

The reason I created a new one is that the current one calls
locate_handle_buffer().  See below 

> > +                                TPL_CALLBACK, test_uninstall_notify, NULL,
> > +                                &test_uninstall_event);
> > +   if (ret != EFI_SUCCESS) {
> > +           efi_st_error("could not create event\n");
> > +           return EFI_ST_FAILURE;
> > +   }
> > +
> > +   ret = boottime->register_protocol_notify(&guid3, test_uninstall_event,
> > +                                            &test_uninstall_key);
> 
> I would prefer to use the same guid1 protocol. Deleting one handle
> should not remove the other handle from the handle queue if both have
> the same protocol installed.
> 

Unless I am missing something, that would not work. The notifier function
will call locate_handle_buffer and will retrieve all handles.  As a result
the subsequent call will return EFI_NOT_FOUND.  You've already sent a ptch
covering that, the purpose of this one is check that the handler will be
clearer from the events list if the protocol gets uninstalled. 
We could use guid2 but I do prefer habing distinct protocols for every
test.

> > +   if (ret != EFI_SUCCESS) {
> > +           efi_st_error("could not register event\n");
> > +           return EFI_ST_FAILURE;
> > +   }
> > +
> >     return EFI_ST_SUCCESS;
> >   }
> > 
> > @@ -121,8 +153,10 @@ static int teardown(void)
> >   static int execute(void)
> >   {
> >     efi_status_t ret;
> > -   efi_handle_t handle1 = NULL, handle2 = NULL;
> > -   struct interface interface1, interface2;
> > +   efi_handle_t handle1 = NULL, handle2 = NULL, handle3 = NULL;
> > +   struct interface interface1, interface2, interface3;
> > +   efi_uintn_t handle_count;
> > +   efi_handle_t *handles;
> > 
> >     ret = boottime->install_protocol_interface(&handle1, &guid1,
> >                                                EFI_NATIVE_INTERFACE,
> > @@ -224,6 +258,29 @@ static int execute(void)
> >             return EFI_ST_FAILURE;
> >     }
> > 
> > +   ret = boottime->install_protocol_interface(&handle3, &guid3,
> > +                                              EFI_NATIVE_INTERFACE,
> > +                                              &interface3);
> > +   if (ret != EFI_SUCCESS) {
> > +           efi_st_error("could not install interface\n");
> > +           return EFI_ST_FAILURE;
> > +   }
> 
> Please, check the number of invocations of the notify function.
> 

I can add that, but the tests already check that case in detail. 

> > +
> > +   ret = boottime->uninstall_multiple_protocol_interfaces
> > +                   (handle3, &guid3, &interface3, NULL);
> > +   if (ret != EFI_SUCCESS) {
> > +           efi_st_error("UninstallMultipleProtocolInterfaces failed\n");
> > +           return EFI_ST_FAILURE;
> > +   }
> 
> And here again. We don't expect UninstallMultipleProtocolInterfaces() to
> trigger the event.
> 

ditto

Thanks
/Ilias
> Best regards
> 
> Heinrich
> 
> > +
> > +   ret = boottime->locate_handle_buffer(BY_REGISTER_NOTIFY, NULL,
> > +                                        test_uninstall_key,
> > +                                        &handle_count, &handles);
> > +   if (ret != EFI_NOT_FOUND) {
> > +           efi_st_error("UninstallMultipleProtocolInterfaces failed to 
> > delete event handles\n");
> > +           return EFI_ST_FAILURE;
> > +   }
> > +
> >     return EFI_ST_SUCCESS;
> >   }
> > 
> > --
> > 2.39.2
> > 
> 

Reply via email to