[edk2-devel] [edk2 PATCH 00/48] ArmVirtPkg, OvmfPkg: virtio filesystem driver

Laszlo Ersek posted 48 patches 3 years, 4 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/edk2 tags/patchew/20201216211125.19496-1-lersek@redhat.com
ArmVirtPkg/ArmVirtQemu.dsc                  |    3 +-
ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc        |    3 +-
ArmVirtPkg/ArmVirtQemuKernel.dsc            |    3 +-
OvmfPkg/Include/IndustryStandard/Virtio10.h |    5 +
OvmfPkg/Include/IndustryStandard/VirtioFs.h |  454 ++++
OvmfPkg/OvmfPkgIa32.dsc                     |    2 +
OvmfPkg/OvmfPkgIa32.fdf                     |    1 +
OvmfPkg/OvmfPkgIa32X64.dsc                  |    2 +
OvmfPkg/OvmfPkgIa32X64.fdf                  |    1 +
OvmfPkg/OvmfPkgX64.dsc                      |    2 +
OvmfPkg/OvmfPkgX64.fdf                      |    1 +
OvmfPkg/VirtioFsDxe/DriverBinding.c         |  232 ++
OvmfPkg/VirtioFsDxe/FuseFlush.c             |  111 +
OvmfPkg/VirtioFsDxe/FuseForget.c            |   85 +
OvmfPkg/VirtioFsDxe/FuseFsync.c             |  121 +
OvmfPkg/VirtioFsDxe/FuseGetAttr.c           |  116 +
OvmfPkg/VirtioFsDxe/FuseInit.c              |  142 ++
OvmfPkg/VirtioFsDxe/FuseLookup.c            |  148 ++
OvmfPkg/VirtioFsDxe/FuseMkDir.c             |  134 ++
OvmfPkg/VirtioFsDxe/FuseOpen.c              |  126 +
OvmfPkg/VirtioFsDxe/FuseOpenDir.c           |  120 +
OvmfPkg/VirtioFsDxe/FuseOpenOrCreate.c      |  155 ++
OvmfPkg/VirtioFsDxe/FuseRead.c              |  191 ++
OvmfPkg/VirtioFsDxe/FuseRelease.c           |  121 +
OvmfPkg/VirtioFsDxe/FuseRename.c            |  131 ++
OvmfPkg/VirtioFsDxe/FuseSetAttr.c           |  174 ++
OvmfPkg/VirtioFsDxe/FuseStatFs.c            |  102 +
OvmfPkg/VirtioFsDxe/FuseUnlink.c            |  114 +
OvmfPkg/VirtioFsDxe/FuseWrite.c             |  155 ++
OvmfPkg/VirtioFsDxe/Helpers.c               | 2416 ++++++++++++++++++++
OvmfPkg/VirtioFsDxe/SimpleFsClose.c         |   68 +
OvmfPkg/VirtioFsDxe/SimpleFsDelete.c        |  110 +
OvmfPkg/VirtioFsDxe/SimpleFsFlush.c         |   42 +
OvmfPkg/VirtioFsDxe/SimpleFsGetInfo.c       |  209 ++
OvmfPkg/VirtioFsDxe/SimpleFsGetPosition.c   |   27 +
OvmfPkg/VirtioFsDxe/SimpleFsOpen.c          |  505 ++++
OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c    |   98 +
OvmfPkg/VirtioFsDxe/SimpleFsRead.c          |  434 ++++
OvmfPkg/VirtioFsDxe/SimpleFsSetInfo.c       |  582 +++++
OvmfPkg/VirtioFsDxe/SimpleFsSetPosition.c   |   67 +
OvmfPkg/VirtioFsDxe/SimpleFsWrite.c         |   81 +
OvmfPkg/VirtioFsDxe/VirtioFsDxe.h           |  544 +++++
OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf         |  136 ++
43 files changed, 8271 insertions(+), 3 deletions(-)
create mode 100644 OvmfPkg/Include/IndustryStandard/VirtioFs.h
create mode 100644 OvmfPkg/VirtioFsDxe/DriverBinding.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseFlush.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseForget.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseFsync.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseGetAttr.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseInit.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseLookup.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseMkDir.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseOpen.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseOpenDir.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseOpenOrCreate.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseRead.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseRelease.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseRename.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseSetAttr.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseStatFs.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseUnlink.c
create mode 100644 OvmfPkg/VirtioFsDxe/FuseWrite.c
create mode 100644 OvmfPkg/VirtioFsDxe/Helpers.c
create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsClose.c
create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsDelete.c
create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsFlush.c
create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsGetInfo.c
create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsGetPosition.c
create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsOpen.c
create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c
create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsRead.c
create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsSetInfo.c
create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsSetPosition.c
create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsWrite.c
create mode 100644 OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
create mode 100644 OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf
[edk2-devel] [edk2 PATCH 00/48] ArmVirtPkg, OvmfPkg: virtio filesystem driver
Posted by Laszlo Ersek 3 years, 4 months ago
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

 ArmVirtPkg/ArmVirtQemu.dsc                  |    3 +-
 ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc        |    3 +-
 ArmVirtPkg/ArmVirtQemuKernel.dsc            |    3 +-
 OvmfPkg/Include/IndustryStandard/Virtio10.h |    5 +
 OvmfPkg/Include/IndustryStandard/VirtioFs.h |  454 ++++
 OvmfPkg/OvmfPkgIa32.dsc                     |    2 +
 OvmfPkg/OvmfPkgIa32.fdf                     |    1 +
 OvmfPkg/OvmfPkgIa32X64.dsc                  |    2 +
 OvmfPkg/OvmfPkgIa32X64.fdf                  |    1 +
 OvmfPkg/OvmfPkgX64.dsc                      |    2 +
 OvmfPkg/OvmfPkgX64.fdf                      |    1 +
 OvmfPkg/VirtioFsDxe/DriverBinding.c         |  232 ++
 OvmfPkg/VirtioFsDxe/FuseFlush.c             |  111 +
 OvmfPkg/VirtioFsDxe/FuseForget.c            |   85 +
 OvmfPkg/VirtioFsDxe/FuseFsync.c             |  121 +
 OvmfPkg/VirtioFsDxe/FuseGetAttr.c           |  116 +
 OvmfPkg/VirtioFsDxe/FuseInit.c              |  142 ++
 OvmfPkg/VirtioFsDxe/FuseLookup.c            |  148 ++
 OvmfPkg/VirtioFsDxe/FuseMkDir.c             |  134 ++
 OvmfPkg/VirtioFsDxe/FuseOpen.c              |  126 +
 OvmfPkg/VirtioFsDxe/FuseOpenDir.c           |  120 +
 OvmfPkg/VirtioFsDxe/FuseOpenOrCreate.c      |  155 ++
 OvmfPkg/VirtioFsDxe/FuseRead.c              |  191 ++
 OvmfPkg/VirtioFsDxe/FuseRelease.c           |  121 +
 OvmfPkg/VirtioFsDxe/FuseRename.c            |  131 ++
 OvmfPkg/VirtioFsDxe/FuseSetAttr.c           |  174 ++
 OvmfPkg/VirtioFsDxe/FuseStatFs.c            |  102 +
 OvmfPkg/VirtioFsDxe/FuseUnlink.c            |  114 +
 OvmfPkg/VirtioFsDxe/FuseWrite.c             |  155 ++
 OvmfPkg/VirtioFsDxe/Helpers.c               | 2416 ++++++++++++++++++++
 OvmfPkg/VirtioFsDxe/SimpleFsClose.c         |   68 +
 OvmfPkg/VirtioFsDxe/SimpleFsDelete.c        |  110 +
 OvmfPkg/VirtioFsDxe/SimpleFsFlush.c         |   42 +
 OvmfPkg/VirtioFsDxe/SimpleFsGetInfo.c       |  209 ++
 OvmfPkg/VirtioFsDxe/SimpleFsGetPosition.c   |   27 +
 OvmfPkg/VirtioFsDxe/SimpleFsOpen.c          |  505 ++++
 OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c    |   98 +
 OvmfPkg/VirtioFsDxe/SimpleFsRead.c          |  434 ++++
 OvmfPkg/VirtioFsDxe/SimpleFsSetInfo.c       |  582 +++++
 OvmfPkg/VirtioFsDxe/SimpleFsSetPosition.c   |   67 +
 OvmfPkg/VirtioFsDxe/SimpleFsWrite.c         |   81 +
 OvmfPkg/VirtioFsDxe/VirtioFsDxe.h           |  544 +++++
 OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf         |  136 ++
 43 files changed, 8271 insertions(+), 3 deletions(-)
 create mode 100644 OvmfPkg/Include/IndustryStandard/VirtioFs.h
 create mode 100644 OvmfPkg/VirtioFsDxe/DriverBinding.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseFlush.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseForget.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseFsync.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseGetAttr.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseInit.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseLookup.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseMkDir.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseOpen.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseOpenDir.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseOpenOrCreate.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseRead.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseRelease.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseRename.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseSetAttr.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseStatFs.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseUnlink.c
 create mode 100644 OvmfPkg/VirtioFsDxe/FuseWrite.c
 create mode 100644 OvmfPkg/VirtioFsDxe/Helpers.c
 create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsClose.c
 create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsDelete.c
 create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsFlush.c
 create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsGetInfo.c
 create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsGetPosition.c
 create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsOpen.c
 create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c
 create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsRead.c
 create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsSetInfo.c
 create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsSetPosition.c
 create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsWrite.c
 create mode 100644 OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
 create mode 100644 OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf


base-commit: e6ae24e1d676bb2bdc0fc715b49b04908f41fc10
-- 
2.19.1.3.g30247aa5d201



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#69012): https://edk2.groups.io/g/devel/message/69012
Mute This Topic: https://groups.io/mt/79022474/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [edk2 PATCH 00/48] ArmVirtPkg, OvmfPkg: virtio filesystem driver
Posted by Ard Biesheuvel 3 years, 4 months ago
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>



>  ArmVirtPkg/ArmVirtQemu.dsc                  |    3 +-
>  ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc        |    3 +-
>  ArmVirtPkg/ArmVirtQemuKernel.dsc            |    3 +-
>  OvmfPkg/Include/IndustryStandard/Virtio10.h |    5 +
>  OvmfPkg/Include/IndustryStandard/VirtioFs.h |  454 ++++
>  OvmfPkg/OvmfPkgIa32.dsc                     |    2 +
>  OvmfPkg/OvmfPkgIa32.fdf                     |    1 +
>  OvmfPkg/OvmfPkgIa32X64.dsc                  |    2 +
>  OvmfPkg/OvmfPkgIa32X64.fdf                  |    1 +
>  OvmfPkg/OvmfPkgX64.dsc                      |    2 +
>  OvmfPkg/OvmfPkgX64.fdf                      |    1 +
>  OvmfPkg/VirtioFsDxe/DriverBinding.c         |  232 ++
>  OvmfPkg/VirtioFsDxe/FuseFlush.c             |  111 +
>  OvmfPkg/VirtioFsDxe/FuseForget.c            |   85 +
>  OvmfPkg/VirtioFsDxe/FuseFsync.c             |  121 +
>  OvmfPkg/VirtioFsDxe/FuseGetAttr.c           |  116 +
>  OvmfPkg/VirtioFsDxe/FuseInit.c              |  142 ++
>  OvmfPkg/VirtioFsDxe/FuseLookup.c            |  148 ++
>  OvmfPkg/VirtioFsDxe/FuseMkDir.c             |  134 ++
>  OvmfPkg/VirtioFsDxe/FuseOpen.c              |  126 +
>  OvmfPkg/VirtioFsDxe/FuseOpenDir.c           |  120 +
>  OvmfPkg/VirtioFsDxe/FuseOpenOrCreate.c      |  155 ++
>  OvmfPkg/VirtioFsDxe/FuseRead.c              |  191 ++
>  OvmfPkg/VirtioFsDxe/FuseRelease.c           |  121 +
>  OvmfPkg/VirtioFsDxe/FuseRename.c            |  131 ++
>  OvmfPkg/VirtioFsDxe/FuseSetAttr.c           |  174 ++
>  OvmfPkg/VirtioFsDxe/FuseStatFs.c            |  102 +
>  OvmfPkg/VirtioFsDxe/FuseUnlink.c            |  114 +
>  OvmfPkg/VirtioFsDxe/FuseWrite.c             |  155 ++
>  OvmfPkg/VirtioFsDxe/Helpers.c               | 2416 ++++++++++++++++++++
>  OvmfPkg/VirtioFsDxe/SimpleFsClose.c         |   68 +
>  OvmfPkg/VirtioFsDxe/SimpleFsDelete.c        |  110 +
>  OvmfPkg/VirtioFsDxe/SimpleFsFlush.c         |   42 +
>  OvmfPkg/VirtioFsDxe/SimpleFsGetInfo.c       |  209 ++
>  OvmfPkg/VirtioFsDxe/SimpleFsGetPosition.c   |   27 +
>  OvmfPkg/VirtioFsDxe/SimpleFsOpen.c          |  505 ++++
>  OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c    |   98 +
>  OvmfPkg/VirtioFsDxe/SimpleFsRead.c          |  434 ++++
>  OvmfPkg/VirtioFsDxe/SimpleFsSetInfo.c       |  582 +++++
>  OvmfPkg/VirtioFsDxe/SimpleFsSetPosition.c   |   67 +
>  OvmfPkg/VirtioFsDxe/SimpleFsWrite.c         |   81 +
>  OvmfPkg/VirtioFsDxe/VirtioFsDxe.h           |  544 +++++
>  OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf         |  136 ++
>  43 files changed, 8271 insertions(+), 3 deletions(-)
>  create mode 100644 OvmfPkg/Include/IndustryStandard/VirtioFs.h
>  create mode 100644 OvmfPkg/VirtioFsDxe/DriverBinding.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseFlush.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseForget.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseFsync.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseGetAttr.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseInit.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseLookup.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseMkDir.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseOpen.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseOpenDir.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseOpenOrCreate.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseRead.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseRelease.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseRename.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseSetAttr.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseStatFs.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseUnlink.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/FuseWrite.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/Helpers.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsClose.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsDelete.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsFlush.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsGetInfo.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsGetPosition.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsOpen.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsRead.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsSetInfo.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsSetPosition.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/SimpleFsWrite.c
>  create mode 100644 OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
>  create mode 100644 OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf
> 
> 
> base-commit: e6ae24e1d676bb2bdc0fc715b49b04908f41fc10
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#69212): https://edk2.groups.io/g/devel/message/69212
Mute This Topic: https://groups.io/mt/79022474/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [edk2 PATCH 00/48] ArmVirtPkg, OvmfPkg: virtio filesystem driver
Posted by Laszlo Ersek 3 years, 4 months ago
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



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#69260): https://edk2.groups.io/g/devel/message/69260
Mute This Topic: https://groups.io/mt/79022474/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [edk2 PATCH 00/48] ArmVirtPkg, OvmfPkg: virtio filesystem driver
Posted by Ard Biesheuvel 3 years, 4 months ago
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.





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#69263): https://edk2.groups.io/g/devel/message/69263
Mute This Topic: https://groups.io/mt/79022474/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [edk2 PATCH 00/48] ArmVirtPkg, OvmfPkg: virtio filesystem driver
Posted by Laszlo Ersek 3 years, 4 months ago
On 12/20/20 11:15, Ard Biesheuvel wrote:
> On 12/20/20 1:09 AM, Laszlo Ersek wrote:

>> 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.

(given the fantastic opportunities provided by the COVID-19 pandemic, to
catch up with family and friends around Christmas /s, I might as well
treat the discussion of this patch series during my PTO as something
welcome that takes my mind off of how much I miss the people I can't
meet this year)

> 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.

I ended up installing a brand new Windows 10 + VS2019 virtual machine,
as I got fed up with the nasty surprises in the PRs (and I refuse to
publish my work-in-progress branch just for the sake of setting off CI
on it).

Two consequences:

(1) I'll squash the following trivial updates into two of the patches,
for my next merge request attempt:

 5:  bb254f89067a !  7:  17a76bbec317 OvmfPkg/VirtioFsDxe: add a scatter-gather list data type
    @@ -20,6 +20,8 @@
         Signed-off-by: Laszlo Ersek <lersek@redhat.com>
         Message-Id: <20201216211125.19496-6-lersek@redhat.com>
         Acked-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
    +    [lersek@redhat.com: suppress useless VS2019 warning about signed/unsigned
    +     comparison in VirtioFsSgListsValidate()]

     diff --git a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h b/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
     --- a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
    @@ -213,7 +215,7 @@
     +    // can be added to the virtio queue, after the other descriptors added
     +    // previously.
     +    //
    -+    if (SgList->NumVec > MAX_UINT16 - DescriptorsNeeded ||
    ++    if (SgList->NumVec > (UINTN)(MAX_UINT16 - DescriptorsNeeded) ||
     +        DescriptorsNeeded + SgList->NumVec > VirtioFs->QueueSize) {
     +      return EFI_UNSUPPORTED;
     +    }

and

46:  4f42ecc2d9bb ! 48:  b807d3c0b54b OvmfPkg/VirtioFsDxe: add helper for determining access time updates
    @@ -12,6 +12,8 @@
         Signed-off-by: Laszlo Ersek <lersek@redhat.com>
         Message-Id: <20201216211125.19496-47-lersek@redhat.com>
         Acked-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
    +    [lersek@redhat.com: suppress bogus VS2019 warning about lack of
    +     initialization for ZeroTime]

     diff --git a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h b/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
     --- a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
    @@ -92,7 +94,7 @@
     +  EFI_TIME              *Time[3];
     +  EFI_TIME              *NewTime[ARRAY_SIZE (Time)];
     +  UINTN                 Idx;
    -+  STATIC CONST EFI_TIME ZeroTime;
    ++  STATIC CONST EFI_TIME ZeroTime = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
     +  BOOLEAN               Change[ARRAY_SIZE (Time)];
     +  UINT64                Seconds[ARRAY_SIZE (Time)];
     +

(2) I've written three patches in total for fixing EfiTimeToEpoch(),
including the prototype:

(2a) edk2-platforms:

  1  Silicon/Marvell/RealTimeClockLib: make EpochSeconds, WakeupSeconds UINTN

     Silicon/Marvell/Armada7k8k/Library/RealTimeClockLib/RealTimeClockLib.c | 14 ++++++++++----
     1 file changed, 10 insertions(+), 4 deletions(-)

(other RealTimeClockLib instances / EfiTimeToEpoch() callers in
edk2-platforms need no updates; furthermore, edk2-non-osi contains no
EfiTimeToEpoch() calls at all)

(2b) edk2:

  1  ArmPlatformPkg/PL031RealTimeClockLib: cast EfiTimeToEpoch() val. to UINT32

     ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)

  2  EmbeddedPkg/TimeBaseLib: remove useless truncation to 32-bit

     EmbeddedPkg/Include/Library/TimeBaseLib.h     | 2 +-
     EmbeddedPkg/Library/TimeBaseLib/TimeBaseLib.c | 6 +++---
     2 files changed, 4 insertions(+), 4 deletions(-)

If you're reading this before 2021, please let me know if you'd tolerate
receiving these patches for approval still in 2020. (The edk2-platforms
patch theoretically belongs to Leif and Marcin, but if Leif has stopped
consuming work email (which we all should have by now, I guess...), then
I believe you could ACK that patch in Leif's stead.)

Thanks,
Laszlo



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#69286): https://edk2.groups.io/g/devel/message/69286
Mute This Topic: https://groups.io/mt/79022474/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [edk2 PATCH 00/48] ArmVirtPkg, OvmfPkg: virtio filesystem driver
Posted by Ard Biesheuvel 3 years, 4 months ago
On 12/21/20 2:46 AM, Laszlo Ersek wrote:
> On 12/20/20 11:15, Ard Biesheuvel wrote:
>> On 12/20/20 1:09 AM, Laszlo Ersek wrote:
> 
>>> 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.
> 
> (given the fantastic opportunities provided by the COVID-19 pandemic, to
> catch up with family and friends around Christmas /s, I might as well
> treat the discussion of this patch series during my PTO as something
> welcome that takes my mind off of how much I miss the people I can't
> meet this year)
> 
>> 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.
> 
> I ended up installing a brand new Windows 10 + VS2019 virtual machine,
> as I got fed up with the nasty surprises in the PRs (and I refuse to
> publish my work-in-progress branch just for the sake of setting off CI
> on it).
> 
> Two consequences:
> 
> (1) I'll squash the following trivial updates into two of the patches,
> for my next merge request attempt:
> 
>  5:  bb254f89067a !  7:  17a76bbec317 OvmfPkg/VirtioFsDxe: add a scatter-gather list data type
>     @@ -20,6 +20,8 @@
>          Signed-off-by: Laszlo Ersek <lersek@redhat.com>
>          Message-Id: <20201216211125.19496-6-lersek@redhat.com>
>          Acked-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
>     +    [lersek@redhat.com: suppress useless VS2019 warning about signed/unsigned
>     +     comparison in VirtioFsSgListsValidate()]
> 
>      diff --git a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h b/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
>      --- a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
>     @@ -213,7 +215,7 @@
>      +    // can be added to the virtio queue, after the other descriptors added
>      +    // previously.
>      +    //
>     -+    if (SgList->NumVec > MAX_UINT16 - DescriptorsNeeded ||
>     ++    if (SgList->NumVec > (UINTN)(MAX_UINT16 - DescriptorsNeeded) ||
>      +        DescriptorsNeeded + SgList->NumVec > VirtioFs->QueueSize) {
>      +      return EFI_UNSUPPORTED;
>      +    }
> 
> and
> 
> 46:  4f42ecc2d9bb ! 48:  b807d3c0b54b OvmfPkg/VirtioFsDxe: add helper for determining access time updates
>     @@ -12,6 +12,8 @@
>          Signed-off-by: Laszlo Ersek <lersek@redhat.com>
>          Message-Id: <20201216211125.19496-47-lersek@redhat.com>
>          Acked-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
>     +    [lersek@redhat.com: suppress bogus VS2019 warning about lack of
>     +     initialization for ZeroTime]
> 
>      diff --git a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h b/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
>      --- a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
>     @@ -92,7 +94,7 @@
>      +  EFI_TIME              *Time[3];
>      +  EFI_TIME              *NewTime[ARRAY_SIZE (Time)];
>      +  UINTN                 Idx;
>     -+  STATIC CONST EFI_TIME ZeroTime;
>     ++  STATIC CONST EFI_TIME ZeroTime = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
>      +  BOOLEAN               Change[ARRAY_SIZE (Time)];
>      +  UINT64                Seconds[ARRAY_SIZE (Time)];
>      +
> 
> (2) I've written three patches in total for fixing EfiTimeToEpoch(),
> including the prototype:
> 
> (2a) edk2-platforms:
> 
>   1  Silicon/Marvell/RealTimeClockLib: make EpochSeconds, WakeupSeconds UINTN
> 
>      Silicon/Marvell/Armada7k8k/Library/RealTimeClockLib/RealTimeClockLib.c | 14 ++++++++++----
>      1 file changed, 10 insertions(+), 4 deletions(-)
> 
> (other RealTimeClockLib instances / EfiTimeToEpoch() callers in
> edk2-platforms need no updates; furthermore, edk2-non-osi contains no
> EfiTimeToEpoch() calls at all)
> 
> (2b) edk2:
> 
>   1  ArmPlatformPkg/PL031RealTimeClockLib: cast EfiTimeToEpoch() val. to UINT32
> 
>      ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c | 2 +-
>      1 file changed, 1 insertion(+), 1 deletion(-)
> 
>   2  EmbeddedPkg/TimeBaseLib: remove useless truncation to 32-bit
> 
>      EmbeddedPkg/Include/Library/TimeBaseLib.h     | 2 +-
>      EmbeddedPkg/Library/TimeBaseLib/TimeBaseLib.c | 6 +++---
>      2 files changed, 4 insertions(+), 4 deletions(-)
> 
> If you're reading this before 2021, please let me know if you'd tolerate
> receiving these patches for approval still in 2020. (The edk2-platforms
> patch theoretically belongs to Leif and Marcin, but if Leif has stopped
> consuming work email (which we all should have by now, I guess...), then
> I believe you could ACK that patch in Leif's stead.)
> 

No problem.

-- 
Ard.


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#69311): https://edk2.groups.io/g/devel/message/69311
Mute This Topic: https://groups.io/mt/79022474/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [edk2 PATCH 00/48] ArmVirtPkg, OvmfPkg: virtio filesystem driver
Posted by Laszlo Ersek 3 years, 4 months ago
On 12/21/20 11:10, Ard Biesheuvel wrote:
> On 12/21/20 2:46 AM, Laszlo Ersek wrote:
>> On 12/20/20 11:15, Ard Biesheuvel wrote:
>>> On 12/20/20 1:09 AM, Laszlo Ersek wrote:
>>
>>>> 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.
>>
>> (given the fantastic opportunities provided by the COVID-19 pandemic, to
>> catch up with family and friends around Christmas /s, I might as well
>> treat the discussion of this patch series during my PTO as something
>> welcome that takes my mind off of how much I miss the people I can't
>> meet this year)
>>
>>> 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.
>>
>> I ended up installing a brand new Windows 10 + VS2019 virtual machine,
>> as I got fed up with the nasty surprises in the PRs (and I refuse to
>> publish my work-in-progress branch just for the sake of setting off CI
>> on it).
>>
>> Two consequences:
>>
>> (1) I'll squash the following trivial updates into two of the patches,
>> for my next merge request attempt:
>>
>>  5:  bb254f89067a !  7:  17a76bbec317 OvmfPkg/VirtioFsDxe: add a scatter-gather list data type
>>     @@ -20,6 +20,8 @@
>>          Signed-off-by: Laszlo Ersek <lersek@redhat.com>
>>          Message-Id: <20201216211125.19496-6-lersek@redhat.com>
>>          Acked-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
>>     +    [lersek@redhat.com: suppress useless VS2019 warning about signed/unsigned
>>     +     comparison in VirtioFsSgListsValidate()]
>>
>>      diff --git a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h b/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
>>      --- a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
>>     @@ -213,7 +215,7 @@
>>      +    // can be added to the virtio queue, after the other descriptors added
>>      +    // previously.
>>      +    //
>>     -+    if (SgList->NumVec > MAX_UINT16 - DescriptorsNeeded ||
>>     ++    if (SgList->NumVec > (UINTN)(MAX_UINT16 - DescriptorsNeeded) ||
>>      +        DescriptorsNeeded + SgList->NumVec > VirtioFs->QueueSize) {
>>      +      return EFI_UNSUPPORTED;
>>      +    }
>>
>> and
>>
>> 46:  4f42ecc2d9bb ! 48:  b807d3c0b54b OvmfPkg/VirtioFsDxe: add helper for determining access time updates
>>     @@ -12,6 +12,8 @@
>>          Signed-off-by: Laszlo Ersek <lersek@redhat.com>
>>          Message-Id: <20201216211125.19496-47-lersek@redhat.com>
>>          Acked-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
>>     +    [lersek@redhat.com: suppress bogus VS2019 warning about lack of
>>     +     initialization for ZeroTime]
>>
>>      diff --git a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h b/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
>>      --- a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
>>     @@ -92,7 +94,7 @@
>>      +  EFI_TIME              *Time[3];
>>      +  EFI_TIME              *NewTime[ARRAY_SIZE (Time)];
>>      +  UINTN                 Idx;
>>     -+  STATIC CONST EFI_TIME ZeroTime;
>>     ++  STATIC CONST EFI_TIME ZeroTime = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
>>      +  BOOLEAN               Change[ARRAY_SIZE (Time)];
>>      +  UINT64                Seconds[ARRAY_SIZE (Time)];
>>      +
>>
>> (2) I've written three patches in total for fixing EfiTimeToEpoch(),
>> including the prototype:
>>
>> (2a) edk2-platforms:
>>
>>   1  Silicon/Marvell/RealTimeClockLib: make EpochSeconds, WakeupSeconds UINTN
>>
>>      Silicon/Marvell/Armada7k8k/Library/RealTimeClockLib/RealTimeClockLib.c | 14 ++++++++++----
>>      1 file changed, 10 insertions(+), 4 deletions(-)
>>
>> (other RealTimeClockLib instances / EfiTimeToEpoch() callers in
>> edk2-platforms need no updates; furthermore, edk2-non-osi contains no
>> EfiTimeToEpoch() calls at all)
>>
>> (2b) edk2:
>>
>>   1  ArmPlatformPkg/PL031RealTimeClockLib: cast EfiTimeToEpoch() val. to UINT32
>>
>>      ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c | 2 +-
>>      1 file changed, 1 insertion(+), 1 deletion(-)
>>
>>   2  EmbeddedPkg/TimeBaseLib: remove useless truncation to 32-bit
>>
>>      EmbeddedPkg/Include/Library/TimeBaseLib.h     | 2 +-
>>      EmbeddedPkg/Library/TimeBaseLib/TimeBaseLib.c | 6 +++---
>>      2 files changed, 4 insertions(+), 4 deletions(-)
>>
>> If you're reading this before 2021, please let me know if you'd tolerate
>> receiving these patches for approval still in 2020. (The edk2-platforms
>> patch theoretically belongs to Leif and Marcin, but if Leif has stopped
>> consuming work email (which we all should have by now, I guess...), then
>> I believe you could ACK that patch in Leif's stead.)
>>
> 
> No problem.
> 

Merged as commit range c06635ea3f4b..35ed29f207fd, via
<https://github.com/tianocore/edk2/pull/1256>.

I've also added <https://bugzilla.tianocore.org/show_bug.cgi?id=3097> to
<https://github.com/tianocore/tianocore.github.io/wiki/EDK-II-Release-Planning#proposed-features>.

Thank you, Ard!
Laszlo



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#69336): https://edk2.groups.io/g/devel/message/69336
Mute This Topic: https://groups.io/mt/79022474/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-