public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: Laszlo Ersek <lersek@redhat.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	Julien Grall <julien.grall@linaro.org>
Subject: Re: [PATCH] ArmVirtPkg: use protocol-based DevicePathLib instance for most DXE modules
Date: Tue, 24 Apr 2018 08:16:04 +0200	[thread overview]
Message-ID: <CAKv+Gu-JDqP-+g01BokAAbbZ5XJzTS9uhMTwGiGU_6mxNJtGEw@mail.gmail.com> (raw)
In-Reply-To: <20180424005048.26291-1-lersek@redhat.com>

On 24 April 2018 at 02:50, Laszlo Ersek <lersek@redhat.com> wrote:
> Port OvmfPkg commit 5c3481b0b611e to ArmVirtPkg. Some explanation should
> be in order (because 5c3481b0b611e doesn't offer any):
>
> - The UefiDevicePathLibDevicePathProtocol instance uses the Device Path
>   Utilities Protocol, produced by DevicePathDxe, for formatting and
>   parsing the textual device path representation. This allows for a
>   lighter weight lib instance that gets linked into several DXE modules.
>   In comparison, the more standalone UefiDevicePathLib instance includes
>   the formatting and parsing routines in every client module.
>
> - The DXE core needs DevicePathLib before it dispatches DevicePathDxe, so
>   it needs to stick with the standalone instance.
>
> - DevicePathDxe itself also needs the standalone instance, for
>   implementing the protocol.
>
> - The DXE-phase PCD driver, "MdeModulePkg/Universal/PCD/Dxe/Pcd.inf",
>   depends on DevicePathLib via UefiLib and DxeServicesLib at the least; so
>   with this update, it inherits a dependency on the protocol. In reverse,
>   DevicePathDxe depends on the PCD Protocol, via PcdLib. The cycle is
>   broken by using BasePcdLibNull in DevicePathDxe. That restricts it to
>   FixedAtBuild, Patch, and FeatureFlag PCDs, but that's fine.
>
> Example space savings (using ArmVirtQemu and the GCC5 toolchain):
> - NOOPT:   187KB in FVMAIN, 12KB in FVMAIN_COMPACT
> - DEBUG:   147KB in FVMAIN, 20KB in FVMAIN_COMPACT
> - RELEASE: 123KB in FVMAIN, 17KB in FVMAIN_COMPACT
>
> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> Cc: Julien Grall <julien.grall@linaro.org>
> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=940
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Laszlo Ersek <lersek@redhat.com>

Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> ---
>
> Notes:
>     Repo:   https://github.com/lersek/edk2.git
>     Branch: armvirt_devpathlib
>
>  ArmVirtPkg/ArmVirt.dsc.inc       | 2 +-
>  ArmVirtPkg/ArmVirtQemu.dsc       | 7 ++++++-
>  ArmVirtPkg/ArmVirtQemuKernel.dsc | 7 ++++++-
>  ArmVirtPkg/ArmVirtXen.dsc        | 7 ++++++-
>  4 files changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/ArmVirtPkg/ArmVirt.dsc.inc b/ArmVirtPkg/ArmVirt.dsc.inc
> index cde514958da2..35bccb3dc1f4 100644
> --- a/ArmVirtPkg/ArmVirt.dsc.inc
> +++ b/ArmVirtPkg/ArmVirt.dsc.inc
> @@ -48,7 +48,7 @@ [LibraryClasses.common]
>    UefiLib|MdePkg/Library/UefiLib/UefiLib.inf
>    HobLib|ArmVirtPkg/Library/ArmVirtDxeHobLib/ArmVirtDxeHobLib.inf
>    UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
> -  DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
> +  DevicePathLib|MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLibDevicePathProtocol.inf
>    UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
>    DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
>    DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
> diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc
> index 824070edc2a9..d74feb709cd1 100644
> --- a/ArmVirtPkg/ArmVirtQemu.dsc
> +++ b/ArmVirtPkg/ArmVirtQemu.dsc
> @@ -243,6 +243,7 @@ [Components.common]
>    MdeModulePkg/Core/Dxe/DxeMain.inf {
>      <LibraryClasses>
>        NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf
> +      DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
>    }
>    MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
>      <LibraryClasses>
> @@ -319,7 +320,11 @@ [Components.common]
>    #
>    # Bds
>    #
> -  MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
> +  MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf {
> +    <LibraryClasses>
> +      DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
> +      PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
> +  }
>    MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
>    MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
>    MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf
> diff --git a/ArmVirtPkg/ArmVirtQemuKernel.dsc b/ArmVirtPkg/ArmVirtQemuKernel.dsc
> index 2368ba283bff..1e823aeab7c0 100644
> --- a/ArmVirtPkg/ArmVirtQemuKernel.dsc
> +++ b/ArmVirtPkg/ArmVirtQemuKernel.dsc
> @@ -232,6 +232,7 @@ [Components.common]
>    MdeModulePkg/Core/Dxe/DxeMain.inf {
>      <LibraryClasses>
>        NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf
> +      DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
>    }
>    MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
>      <LibraryClasses>
> @@ -308,7 +309,11 @@ [Components.common]
>    #
>    # Bds
>    #
> -  MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
> +  MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf {
> +    <LibraryClasses>
> +      DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
> +      PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
> +  }
>    MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
>    MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
>    MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf
> diff --git a/ArmVirtPkg/ArmVirtXen.dsc b/ArmVirtPkg/ArmVirtXen.dsc
> index 175b56d10c8f..e0fb4b47cf63 100644
> --- a/ArmVirtPkg/ArmVirtXen.dsc
> +++ b/ArmVirtPkg/ArmVirtXen.dsc
> @@ -153,6 +153,7 @@ [Components.common]
>    MdeModulePkg/Core/Dxe/DxeMain.inf {
>      <LibraryClasses>
>        NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf
> +      DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
>    }
>    MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
>      <LibraryClasses>
> @@ -205,7 +206,11 @@ [Components.common]
>    #
>    # Bds
>    #
> -  MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
> +  MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf {
> +    <LibraryClasses>
> +      DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
> +      PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
> +  }
>    MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
>    MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
>    MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
> --
> 2.14.1.3.gb7cf6e02401b
>


  reply	other threads:[~2018-04-24  6:16 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-24  0:50 [PATCH] ArmVirtPkg: use protocol-based DevicePathLib instance for most DXE modules Laszlo Ersek
2018-04-24  6:16 ` Ard Biesheuvel [this message]
2018-04-24  9:52   ` Laszlo Ersek
2018-04-30  9:25   ` 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-list 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=CAKv+Gu-JDqP-+g01BokAAbbZ5XJzTS9uhMTwGiGU_6mxNJtGEw@mail.gmail.com \
    --to=devel@edk2.groups.io \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox