[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 26.06.2025 16:57, Frediano Ziglio wrote: > On Thu, Jun 26, 2025 at 3:50 PM Jan Beulich <jbeulich@xxxxxxxx> wrote: >> >> On 26.06.2025 15:41, Frediano Ziglio wrote: >>> 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). >> >> You didn't search for the word "label" then, did you? Quote: >> > > I did, I probably mis-typed it. > >> 'Due to the behavior of GNU diffutils "diff -p", labels should be >> indented by at least one blank. Non-case labels inside switch() bodies >> are preferred to be indented the same as the block's case labels.' > > I suppose labels should be indented less than the code they refer to, > so in this case from 1 to 3 spaces. I supposed 2 would be the best > option. Except that I think 1 is what we commonly use (levaing aside the many bad examples that we still have). Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |