[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 3/3] xen/efi: Update error flow for read_file function
On Thu, Jun 26, 2025 at 2:31 PM Jan Beulich <jbeulich@xxxxxxxx> wrote: > > On 26.06.2025 15:10, Frediano Ziglio wrote: > > --- a/xen/common/efi/boot.c > > +++ b/xen/common/efi/boot.c > > @@ -792,6 +792,8 @@ static bool __init read_file(EFI_FILE_HANDLE > > dir_handle, CHAR16 *name, > > > > if ( !name ) > > PrintErrMesg(L"No filename", EFI_OUT_OF_RESOURCES); > > + > > + what = L"Open"; > > if ( dir_handle ) > > ret = dir_handle->Open(dir_handle, &FileHandle, name, > > EFI_FILE_MODE_READ, 0); > > @@ -800,54 +802,58 @@ static bool __init read_file(EFI_FILE_HANDLE > > dir_handle, CHAR16 *name, > > if ( file == &cfg && ret == EFI_NOT_FOUND ) > > return false; > > if ( EFI_ERROR(ret) ) > > - what = L"Open"; > > - else > > - ret = FileHandle->SetPosition(FileHandle, -1); > > + goto fail; > > + > > + what = L"Seek"; > > + ret = FileHandle->SetPosition(FileHandle, -1); > > if ( EFI_ERROR(ret) ) > > - what = what ?: L"Seek"; > > - else > > - ret = FileHandle->GetPosition(FileHandle, &size); > > + goto fail; > > + > > + what = L"Get size"; > > + ret = FileHandle->GetPosition(FileHandle, &size); > > if ( EFI_ERROR(ret) ) > > - what = what ?: L"Get size"; > > - else > > - ret = FileHandle->SetPosition(FileHandle, 0); > > + goto fail; > > + > > + what = L"Seek"; > > + ret = FileHandle->SetPosition(FileHandle, 0); > > if ( EFI_ERROR(ret) ) > > - what = what ?: L"Seek"; > > - else > > - { > > - file->addr = min(1UL << (32 + PAGE_SHIFT), > > - HYPERVISOR_VIRT_END - DIRECTMAP_VIRT_START); > > - ret = efi_bs->AllocatePages(AllocateMaxAddress, EfiLoaderData, > > - PFN_UP(size), &file->addr); > > - } > > + goto fail; > > + > > + what = L"Allocation"; > > + file->addr = min(1UL << (32 + PAGE_SHIFT), > > + HYPERVISOR_VIRT_END - DIRECTMAP_VIRT_START); > > + ret = efi_bs->AllocatePages(AllocateMaxAddress, EfiLoaderData, > > + PFN_UP(size), &file->addr); > > if ( EFI_ERROR(ret) ) > > - what = what ?: L"Allocation"; > > - else > > - { > > - file->need_to_free = true; > > - file->size = size; > > - handle_file_info(name, file, options); > > + goto fail; > > > > - ret = FileHandle->Read(FileHandle, &file->size, file->str); > > - if ( !EFI_ERROR(ret) && file->size != size ) > > - ret = EFI_ABORTED; > > - if ( EFI_ERROR(ret) ) > > - what = L"Read"; > > - } > > + file->need_to_free = true; > > + file->size = size; > > + handle_file_info(name, file, options); > > > > - if ( FileHandle ) > > - FileHandle->Close(FileHandle); > > + what = L"Read"; > > + ret = FileHandle->Read(FileHandle, &file->size, file->str); > > + if ( !EFI_ERROR(ret) && file->size != size ) > > + ret = EFI_ABORTED; > > + if ( EFI_ERROR(ret) ) > > + goto fail; > > > > - if ( what ) > > - { > > - PrintErr(what); > > - PrintErr(L" failed for "); > > - PrintErrMesg(name, ret); > > - } > > + FileHandle->Close(FileHandle); > > > > efi_arch_flush_dcache_area(file->ptr, file->size); > > > > return true; > > + > > +fail: > > Nit: Style (see ./CODING_STYLE). > What specifically? I checked the indentation and it's 4 spaces. if-s are spaced correctly. About labels I didn't find much on CODING_STYLE so I opened 3/4 files and most of them are indented with no spaces (they start at column 1). > Jan Frediano
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |