Am 13. November 2024 17:03:03 MEZ schrieb Simon Glass <s...@chromium.org>: >Hi Heinrich, > >On Wed, 13 Nov 2024 at 08:17, Heinrich Schuchardt <xypron.g...@gmx.de> >wrote: >> >> Am 13. November 2024 15:39:22 MEZ schrieb Simon Glass <s...@chromium.org>: >> >Hi, >> > >> >On Wed, 13 Nov 2024 at 05:52, Heinrich Schuchardt <xypron.g...@gmx.de> >wrote: >> >> >> >> On 11/1/24 21:29, Mark Kettenis wrote: >> >> >> From: Janne Grunau <j...@jannau.net> >> >> >> Date: Thu, 31 Oct 2024 23:48:02 +0100 >> >> >> >> >> >> DM_FLAG_VITAL marks devices which are essential for the operation of >> >> >> other devices. Removing these devices before their users can result >in >> >> >> hangs or crashes. >> >> >> This potentially fixes EFI boot of Renesas rcar3 devices. Their >clock >> >> >> devices (and with this series the dart iommu) are the only devices >> >> >> markes as vital. >> >> >> The arm boot code already handles devioce removal in this way. >> >> > >> >> > There is a typo in that last sentence of the commit message >(devioce). >> >> > Otherwise: >> >> > >> >> >> Signed-off-by: Janne Grunau <j...@jannau.net> >> >> > >> >> > Reviewed-by: Mark Kettenis <kette...@openbsd.org> >> >> > >> >> >> --- >> >> >> lib/efi_loader/efi_boottime.c | 1 + >> >> >> 1 file changed, 1 insertion(+) >> >> >> >> >> >> diff --git a/lib/efi_loader/efi_boottime.c >b/lib/efi_loader/efi_boottime.c >> >> >> index >4f52284b4c653c252b0ed6c0c87da8901448d4b4..7db3c95782970f8c06a970a8ee86b1804cd848b6 >100644 >> >> >> --- a/lib/efi_loader/efi_boottime.c >> >> >> +++ b/lib/efi_loader/efi_boottime.c >> >> >> @@ -2234,6 +2234,7 @@ static efi_status_t EFIAPI >efi_exit_boot_services(efi_handle_t image_handle, >> >> >> if (IS_ENABLED(CONFIG_USB_DEVICE)) >> >> >> udc_disconnect(); >> >> >> board_quiesce_devices(); >> >> >> + dm_remove_devices_flags(DM_REMOVE_ACTIVE_ALL | >DM_REMOVE_NON_VITAL); >> >> >> dm_remove_devices_flags(DM_REMOVE_ACTIVE_ALL); >> >> >> >> Simon's patch 6224dc9ba428 ("arm: Remove vital devices last") addressed >> >> the same issue for bootm on arm. But what about about other >architectures? >> >> >> >> This logic should be moved to drivers/core/root.c instead of >replicating >> >> code. >> > >> >We could have a common helper, but it should not be in driver/core as >> >this ordering is more of a policy decision. Unless we can add a >> >parameter telling dm exactly what to do... >> > >> >BTW, Heinrich, this behaviour is exactly what my bootflow_efi() test >> >was supposed to check. But since it doesn't have the >> >exit-boot-services piece at your request... >> > >> >Regards, >> >Simon >> >> >> Why can't we generally remove non-vital devices first if all are to be >removed? >> >> I cannot see anything device specific here. > >No objection to that...but it needs to be in a new function, not become the >default behaviour of dm_remove_devices_flags(), which is supposed to do >what it is told and in one pass.
dm_remove_device_flags() makes no specific promises concerning the deletion sequence and its internal working. But obviously it will fail if non-vital redources are not deleted first. Leaving this broken function exported and writing a new one has no user benefit. We could copy the old function to a new static function that we call as needed from the old function name. Best regards Heinruch > >Regards, >Simon