All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@arm.com>
To: Laszlo Ersek <lersek@redhat.com>,
	devel@edk2.groups.io, virtio-fs@redhat.com
Cc: "Jordan Justen" <jordan.l.justen@intel.com>,
	"Leif Lindholm" <leif@nuviainc.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>
Subject: Re: [Virtio-fs] [edk2 PATCH 00/48] ArmVirtPkg, OvmfPkg: virtio filesystem driver
Date: Sun, 20 Dec 2020 11:15:45 +0100	[thread overview]
Message-ID: <7d1d4694-8fe2-7a63-7679-a6c0a0287113@arm.com> (raw)
In-Reply-To: <5f75d127-a110-f256-19ad-4aa120332d6c@redhat.com>

On 12/20/20 1:09 AM, Laszlo Ersek wrote:
> On 12/18/20 18:44, Ard Biesheuvel wrote:
>> On 12/16/20 10:10 PM, Laszlo Ersek wrote:
>>> Ref:    https://bugzilla.tianocore.org/show_bug.cgi?id=3097
>>> Repo:   https://pagure.io/lersek/edk2.git
>>> Branch: virtio-fs (@ b8fd76d649d2)
>>>
>>> The first commit and the bugzilla ticket state the use case.
>>>
>>> References, including setup instructions:
>>> - https://libvirt.org/kbase/virtiofs.html
>>> - https://virtio-fs.gitlab.io/
>>>
>>> Useful UEFI shell commands for testing: output redirections, attrib,
>>> connect, cp, disconnect, edit, eficompress, efidecompress, hexedit, ls,
>>> map, mkdir, mv, rm, setsize, timezone, touch, type, vol.
>>>
>>> The series is largely structured as follows:
>>> - helper functions and FUSE command wrappers are implemented as required
>>>   by the next EFI_FILE_PROTOCOL interface,
>>> - said EFI_FILE_PROTOCOL interface is implemented,
>>> - lather, rinse, repeat.
>>>
>>> Cc: Ard Biesheuvel <ard.biesheuvel@arm.com>
>>> Cc: Jordan Justen <jordan.l.justen@intel.com>
>>> Cc: Leif Lindholm <leif@nuviainc.com>
>>> Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
>>>
>>> Thanks,
>>> Laszlo
>>>
>>> Laszlo Ersek (48):
>>>   OvmfPkg: introduce VirtioFsDxe
>>>   ArmVirtPkg: include VirtioFsDxe in the ArmVirtQemu* platforms
>>>   OvmfPkg/VirtioFsDxe: DriverBinding: open VirtioDevice, install
>>>     SimpleFs
>>>   OvmfPkg/VirtioFsDxe: implement virtio device (un)initialization
>>>   OvmfPkg/VirtioFsDxe: add a scatter-gather list data type
>>>   OvmfPkg/VirtioFsDxe: introduce the basic FUSE request/response headers
>>>   OvmfPkg/VirtioFsDxe: map "errno" values to EFI_STATUS
>>>   OvmfPkg/VirtioFsDxe: submit the FUSE_INIT request to the device
>>>   OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_OPENDIR
>>>   OvmfPkg/VirtioFsDxe: add shared wrapper for FUSE_RELEASE /
>>>     FUSE_RELEASEDIR
>>>   OvmfPkg/VirtioFsDxe: implement
>>>     EFI_SIMPLE_FILE_SYSTEM_PROTOCOL.OpenVolume()
>>>   OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_FORGET
>>>   OvmfPkg/VirtioFsDxe: add a shared wrapper for FUSE_FSYNC /
>>>     FUSE_FSYNCDIR
>>>   OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_FLUSH
>>>   OvmfPkg/VirtioFsDxe: flush, sync, release and forget in Close() /
>>>     Delete()
>>>   OvmfPkg/VirtioFsDxe: add helper for appending and sanitizing paths
>>>   OvmfPkg/VirtioFsDxe: manage path lifecycle in OpenVolume, Close,
>>>     Delete
>>>   OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_OPEN
>>>   OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_MKDIR
>>>   OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_CREATE
>>>   OvmfPkg/VirtioFsDxe: convert FUSE inode attributes to EFI_FILE_INFO
>>>   OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_LOOKUP
>>>   OvmfPkg/VirtioFsDxe: split canon. path into last parent + last
>>>     component
>>>   OvmfPkg/VirtioFsDxe: add a shared wrapper for FUSE_UNLINK / FUSE_RMDIR
>>>   OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_GETATTR
>>>   OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.Open()
>>>   OvmfPkg/VirtioFsDxe: erase the dir. entry in
>>>     EFI_FILE_PROTOCOL.Delete()
>>>   OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_STATFS
>>>   OvmfPkg/VirtioFsDxe: add helper for formatting UEFI basenames
>>>   OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.GetInfo()
>>>   OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.GetPosition,
>>>     .SetPosition
>>>   OvmfPkg/VirtioFsDxe: add a shared wrapper for FUSE_READ /
>>>     FUSE_READDIRPLUS
>>>   OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.Read() for regular
>>>     files
>>>   OvmfPkg/VirtioFsDxe: convert FUSE dirent filename to EFI_FILE_INFO
>>>   OvmfPkg/VirtioFsDxe: add EFI_FILE_INFO cache fields to VIRTIO_FS_FILE
>>>   OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.Read() for
>>>     directories
>>>   OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.Flush()
>>>   OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_WRITE
>>>   OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.Write()
>>>   OvmfPkg/VirtioFsDxe: handle the volume label in
>>>     EFI_FILE_PROTOCOL.SetInfo
>>>   OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_RENAME2
>>>   OvmfPkg/VirtioFsDxe: add helper for composing rename/move destination
>>>     path
>>>   OvmfPkg/VirtioFsDxe: handle file rename/move in
>>>     EFI_FILE_PROTOCOL.SetInfo
>>>   OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_SETATTR
>>>   OvmfPkg/VirtioFsDxe: add helper for determining file size update
>>>   OvmfPkg/VirtioFsDxe: add helper for determining access time updates
>>>   OvmfPkg/VirtioFsDxe: add helper for determining file mode bits update
>>>   OvmfPkg/VirtioFsDxe: handle attribute updates in
>>>     EFI_FILE_PROTOCOL.SetInfo
>>>
>>
>> This looks carefully crafted, and modulo my two questions, I won't be
>> able to spend more time on this than I have going through these
>> patches today.
>>
>> So please feel free to merge this whenever you feel it's ready.
>>
>> For the series,
>>
>> Acked-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
> 
> Thank you.
> 
> Before I posted the series, I tested it very thoroughly, including build
> tests (at every patch, and a Local CI run as well). I created a test
> plan and went through it meticulously (it took hours).
> 
> The only thing I couldn't test that way was (obviously) building on
> Windows. So clearly now that I've tried merging the series at
> <https://github.com/tianocore/edk2/pull/1248>, that's what fails.
> Because, this is the first time that EmbeddedPkg/TimeBaseLib is seen by
> the Visual Studio compiler, and Visual Studio complains:
> 
>> ERROR - Compiler #2220 from
>> d:\a\1\s\EmbeddedPkg\Library\TimeBaseLib\TimeBaseLib.c(111):   the
>> following warning is treated as an error
>> WARNING - Compiler #4244 from
>> d:\a\1\s\EmbeddedPkg\Library\TimeBaseLib\TimeBaseLib.c(111):   '=':
>> conversion from 'UINTN' to 'UINT32', possible loss of data
> 
> It happens to be correct:
> 
>     99  /**
>    100    Converts EFI_TIME to Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC)
>    101   **/
>    102  UINT32
>    103  EFIAPI
>    104  EfiTimeToEpoch (
>    105    IN  EFI_TIME  *Time
>    106    )
>    107  {
>    108    UINT32 EpochDays;   // Number of days elapsed since EPOCH_JULIAN_DAY
>    109    UINT32 EpochSeconds;
>    110
>    111    EpochDays = EfiGetEpochDays (Time);
>    112
>    113    EpochSeconds = (EpochDays * SEC_PER_DAY) + ((UINTN)Time->Hour * SEC_PER_HOUR) + (Time->Minute * SEC_PER_MIN) + Time->Second;
>    114
>    115    return EpochSeconds;
>    116  }
> 
> This was discussed on the list earlier, when the function was duplicated
> for the HTTP dynamic command:
> 
> - https://edk2.groups.io/g/devel/message/64933
> - https://edk2.groups.io/g/devel/message/65186
> 
> Compare EfiTimeToEpoch() in
> "ShellPkg/DynamicCommand/HttpDynamicCommand/Http.c".
> 
>    430  STATIC
>    431  UINTN
>    432  EFIAPI
>    433  EfiTimeToEpoch (
>    434    IN  EFI_TIME  *Time
>    435    )
>    436  {
>    437    //
>    438    // Number of days elapsed since EPOCH_JULIAN_DAY.
>    439    //
>    440    UINTN EpochDays;
>    441    UINTN EpochSeconds;
>    442
>    443    EpochDays = EfiGetEpochDays (Time);
>    444
>    445    EpochSeconds = (EpochDays * SEC_PER_DAY) +
>    446                   ((UINTN)Time->Hour * SEC_PER_HOUR) +
>    447                   (Time->Minute * SEC_PER_MIN) + Time->Second;
>    448
>    449    return EpochSeconds;
>    450  }
> 
> So, in order to merge this series, I'll first have to fix
> EfiTimeToEpoch() in EmbeddedPkg :(
> 
> I wish the fixed version in
> "ShellPkg/DynamicCommand/HttpDynamicCommand/Http.c" had been contributed
> back to EmbeddedPkg.
> 
> Anyway, that is for 2021.
> 
> Thank you for checking the series so quickly; I know it's a lot!
> Laszlo
> 

Thanks for clearing up the outstanding questions.

For the EmbeddedPkg change from UINT32 to UINTN

Acked-by: Ard Biesheuvel <ard.biesheuvel@arm.com>

although I suppose you will have to preserve the prototype, so adding a
(UINT32) cast to line 111 is probably the best approach here.

-- 
Ard.





  reply	other threads:[~2020-12-20 10:15 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-16 21:10 [Virtio-fs] [edk2 PATCH 00/48] ArmVirtPkg, OvmfPkg: virtio filesystem driver Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 01/48] OvmfPkg: introduce VirtioFsDxe Laszlo Ersek
2020-12-18 17:42   ` Ard Biesheuvel
2020-12-18 18:13     ` Dr. David Alan Gilbert
2020-12-19 21:16       ` Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 02/48] ArmVirtPkg: include VirtioFsDxe in the ArmVirtQemu* platforms Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 03/48] OvmfPkg/VirtioFsDxe: DriverBinding: open VirtioDevice, install SimpleFs Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 04/48] OvmfPkg/VirtioFsDxe: implement virtio device (un)initialization Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 05/48] OvmfPkg/VirtioFsDxe: add a scatter-gather list data type Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 06/48] OvmfPkg/VirtioFsDxe: introduce the basic FUSE request/response headers Laszlo Ersek
2020-12-17 11:49   ` Dr. David Alan Gilbert
2020-12-17 13:57     ` Laszlo Ersek
2020-12-17 14:06       ` Dr. David Alan Gilbert
2020-12-17 14:32       ` Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 07/48] OvmfPkg/VirtioFsDxe: map "errno" values to EFI_STATUS Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 08/48] OvmfPkg/VirtioFsDxe: submit the FUSE_INIT request to the device Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 09/48] OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_OPENDIR Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 10/48] OvmfPkg/VirtioFsDxe: add shared wrapper for FUSE_RELEASE / FUSE_RELEASEDIR Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 11/48] OvmfPkg/VirtioFsDxe: implement EFI_SIMPLE_FILE_SYSTEM_PROTOCOL.OpenVolume() Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 12/48] OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_FORGET Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 13/48] OvmfPkg/VirtioFsDxe: add a shared wrapper for FUSE_FSYNC / FUSE_FSYNCDIR Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 14/48] OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_FLUSH Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 15/48] OvmfPkg/VirtioFsDxe: flush, sync, release and forget in Close() / Delete() Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 16/48] OvmfPkg/VirtioFsDxe: add helper for appending and sanitizing paths Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 17/48] OvmfPkg/VirtioFsDxe: manage path lifecycle in OpenVolume, Close, Delete Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 18/48] OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_OPEN Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 19/48] OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_MKDIR Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 20/48] OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_CREATE Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 21/48] OvmfPkg/VirtioFsDxe: convert FUSE inode attributes to EFI_FILE_INFO Laszlo Ersek
2020-12-16 21:10 ` [Virtio-fs] [edk2 PATCH 22/48] OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_LOOKUP Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 23/48] OvmfPkg/VirtioFsDxe: split canon. path into last parent + last component Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 24/48] OvmfPkg/VirtioFsDxe: add a shared wrapper for FUSE_UNLINK / FUSE_RMDIR Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 25/48] OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_GETATTR Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 26/48] OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.Open() Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 27/48] OvmfPkg/VirtioFsDxe: erase the dir. entry in EFI_FILE_PROTOCOL.Delete() Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 28/48] OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_STATFS Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 29/48] OvmfPkg/VirtioFsDxe: add helper for formatting UEFI basenames Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 30/48] OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.GetInfo() Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 31/48] OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.GetPosition, .SetPosition Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 32/48] OvmfPkg/VirtioFsDxe: add a shared wrapper for FUSE_READ / FUSE_READDIRPLUS Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 33/48] OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.Read() for regular files Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 34/48] OvmfPkg/VirtioFsDxe: convert FUSE dirent filename to EFI_FILE_INFO Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 35/48] OvmfPkg/VirtioFsDxe: add EFI_FILE_INFO cache fields to VIRTIO_FS_FILE Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 36/48] OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.Read() for directories Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 37/48] OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.Flush() Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 38/48] OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_WRITE Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 39/48] OvmfPkg/VirtioFsDxe: implement EFI_FILE_PROTOCOL.Write() Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 40/48] OvmfPkg/VirtioFsDxe: handle the volume label in EFI_FILE_PROTOCOL.SetInfo Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 41/48] OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_RENAME2 Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 42/48] OvmfPkg/VirtioFsDxe: add helper for composing rename/move destination path Laszlo Ersek
2020-12-18 17:39   ` Ard Biesheuvel
2020-12-19 22:40     ` Laszlo Ersek
2020-12-19 22:54       ` Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 43/48] OvmfPkg/VirtioFsDxe: handle file rename/move in EFI_FILE_PROTOCOL.SetInfo Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 44/48] OvmfPkg/VirtioFsDxe: implement the wrapper function for FUSE_SETATTR Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 45/48] OvmfPkg/VirtioFsDxe: add helper for determining file size update Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 46/48] OvmfPkg/VirtioFsDxe: add helper for determining access time updates Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 47/48] OvmfPkg/VirtioFsDxe: add helper for determining file mode bits update Laszlo Ersek
2020-12-16 21:11 ` [Virtio-fs] [edk2 PATCH 48/48] OvmfPkg/VirtioFsDxe: handle attribute updates in EFI_FILE_PROTOCOL.SetInfo Laszlo Ersek
2020-12-18 17:44 ` [Virtio-fs] [edk2 PATCH 00/48] ArmVirtPkg, OvmfPkg: virtio filesystem driver Ard Biesheuvel
2020-12-20  0:09   ` Laszlo Ersek
2020-12-20 10:15     ` Ard Biesheuvel [this message]
2020-12-21  1:46       ` Laszlo Ersek
2020-12-21 10:10         ` Ard Biesheuvel
2020-12-21 18:02           ` [Virtio-fs] [edk2-devel] " Laszlo Ersek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7d1d4694-8fe2-7a63-7679-a6c0a0287113@arm.com \
    --to=ard.biesheuvel@arm.com \
    --cc=devel@edk2.groups.io \
    --cc=jordan.l.justen@intel.com \
    --cc=leif@nuviainc.com \
    --cc=lersek@redhat.com \
    --cc=philmd@redhat.com \
    --cc=virtio-fs@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.