[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [edk2-devel] [PATCH v2 14/31] OvmfPkg/AcpiPlatformDxe: Use PVH RSDP if exist



On 04/11/19 14:23, Laszlo Ersek wrote:
> On 04/11/19 14:20, Laszlo Ersek wrote:
>> On 04/09/19 13:08, Anthony PERARD wrote:
>>> If the firmware have been started via the PVH entry point, a RSDP
>>> pointer would have been provided. Use it.
>>>
>>> Also, use XenDetect() from the new XenPlatformLib.
>>>
>>> Contributed-under: TianoCore Contribution Agreement 1.1
>>> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
>>> ---
>>>  OvmfPkg/OvmfPkgIa32.dsc                     |  1 +
>>>  OvmfPkg/OvmfPkgIa32X64.dsc                  |  1 +
>>>  OvmfPkg/OvmfPkgX64.dsc                      |  1 +
>>>  OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf |  2 +-
>>>  OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h      |  6 +--
>>>  OvmfPkg/AcpiPlatformDxe/Xen.c               | 41 ++++++++------------
>>>  6 files changed, 22 insertions(+), 30 deletions(-)
>>>
>>> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
>>> index f55ab5a3d2..cab9764cab 100644
>>> --- a/OvmfPkg/OvmfPkgIa32.dsc
>>> +++ b/OvmfPkg/OvmfPkgIa32.dsc
>>> @@ -205,6 +205,7 @@ [LibraryClasses]
>>>    SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
>>>    
>>> OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf
>>>    XenHypercallLib|OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
>>> +  XenPlatformLib|OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf
>>>  
>>>  !if $(TPM2_ENABLE) == TRUE
>>>    Tpm2CommandLib|SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf
>>> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
>>> index 5c9bdf034e..a156358690 100644
>>> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
>>> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
>>> @@ -210,6 +210,7 @@ [LibraryClasses]
>>>    SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
>>>    
>>> OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf
>>>    XenHypercallLib|OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
>>> +  XenPlatformLib|OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf
>>>  
>>>  !if $(TPM2_ENABLE) == TRUE
>>>    Tpm2CommandLib|SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf
>>> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
>>> index 2943e9e8af..9d8dc442b4 100644
>>> --- a/OvmfPkg/OvmfPkgX64.dsc
>>> +++ b/OvmfPkg/OvmfPkgX64.dsc
>>> @@ -210,6 +210,7 @@ [LibraryClasses]
>>>    SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
>>>    
>>> OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf
>>>    XenHypercallLib|OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
>>> +  XenPlatformLib|OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf
>>>  
>>>  !if $(TPM2_ENABLE) == TRUE
>>>    Tpm2CommandLib|SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf
>>> diff --git a/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf 
>>> b/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
>>> index 8440e7b343..ca54a3bd9e 100644
>>> --- a/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
>>> +++ b/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
>>> @@ -51,13 +51,13 @@ [LibraryClasses]
>>>    DebugLib
>>>    UefiBootServicesTableLib
>>>    UefiDriverEntryPoint
>>> -  HobLib
>>>    QemuFwCfgLib
>>>    QemuFwCfgS3Lib
>>>    MemoryAllocationLib
>>>    BaseLib
>>>    DxeServicesTableLib
>>>    OrderedCollectionLib
>>> +  XenPlatformLib
>>>  
>>>  [Protocols]
>>>    gEfiAcpiTableProtocolGuid                     # PROTOCOL ALWAYS_CONSUMED
>>> diff --git a/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h 
>>> b/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h
>>> index 83b981ee00..85f37128dd 100644
>>> --- a/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h
>>> +++ b/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h
>>> @@ -25,6 +25,7 @@
>>>  #include <Library/UefiBootServicesTableLib.h>
>>>  #include <Library/DebugLib.h>
>>>  #include <Library/PcdLib.h>
>>> +#include <Library/XenPlatformLib.h>
>>>  
>>>  #include <IndustryStandard/Acpi.h>
>>>  
>>> @@ -58,11 +59,6 @@ QemuInstallAcpiTable (
>>>    OUT  UINTN                         *TableKey
>>>    );
>>>  
>>> -BOOLEAN
>>> -XenDetected (
>>> -  VOID
>>> -  );
>>> -
>>>  EFI_STATUS
>>>  EFIAPI
>>>  InstallXenTables (
>>> diff --git a/OvmfPkg/AcpiPlatformDxe/Xen.c b/OvmfPkg/AcpiPlatformDxe/Xen.c
>>> index 618ac58b42..7e9a7797d7 100644
>>> --- a/OvmfPkg/AcpiPlatformDxe/Xen.c
>>> +++ b/OvmfPkg/AcpiPlatformDxe/Xen.c
>>> @@ -15,8 +15,6 @@
>>>  **/ 
>>>  
>>>  #include "AcpiPlatform.h"
>>> -#include <Library/HobLib.h>
>>> -#include <Guid/XenInfo.h>
>>>  #include <Library/BaseLib.h>
>>>  
>>>  #define XEN_ACPI_PHYSICAL_ADDRESS         0x000EA020
>>> @@ -24,28 +22,6 @@
>>>  
>>>  EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER  *XenAcpiRsdpStructurePtr = 
>>> NULL;
>>>  
>>> -/**
>>> -  This function detects if OVMF is running on Xen.
>>> -
>>> -**/
>>> -BOOLEAN
>>> -XenDetected (
>>> -  VOID
>>> -  )
>>> -{
>>> -  EFI_HOB_GUID_TYPE         *GuidHob;
>>> -
>>> -  //
>>> -  // See if a XenInfo HOB is available
>>> -  //
>>> -  GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid);
>>> -  if (GuidHob == NULL) {
>>> -    return FALSE;
>>> -  }
>>> -
>>> -  return TRUE;
>>> -}
>>> -
>>>  /**
>>>    Get the address of Xen ACPI Root System Description Pointer (RSDP)
>>>    structure.
>>> @@ -66,10 +42,27 @@ GetXenAcpiRsdp (
>>>    EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER   *RsdpStructurePtr;
>>>    UINT8                                          *XenAcpiPtr;
>>>    UINT8                                          Sum;
>>> +  EFI_XEN_INFO                                   *XenInfo;
>>>  
>>>    //
>>>    // Detect the RSDP structure
>>>    //
>>> +
>>> +  //
>>> +  // First look for PVH one
>>> +  //
>>> +  XenInfo = XenGetInfoHOB ();
>>> +  ASSERT (XenInfo != NULL);
>>> +  if (XenInfo->RsdpPvh != NULL) {
>>> +    DEBUG ((DEBUG_INFO, "AcpiPlatformDxe: Use ACPI RSDP table at 0x%08x\n",
>>> +            XenInfo->RsdpPvh));
> 
> (4) sorry, missed this one: please
> 
> - either print pointers with %p,
> 
> - or convert them with
> 
>   (UINT64)(UINTN)XenInfo->RsdpPvh
> 
> and log them with "0x%016Lx".

Sigh, I clearly need to cease reviewing this series for today. Here's
another remark:

(5) if you want to print the name of the module (such as
"AcpiPlatformDxe") in a log message, please use the "%a" format
specifier (for "ASCII string"), and use the following auto-generated
variable:

  gEfiCallerBaseName

It will contain the BASE_NAME string from the module INF file.

This variable is particularly useful in files that are built into
multiple modules:

- for example, a module directory may contain two INF files, with
  different BASE_NAMEs, and include a common .c file. If that .c file
  produces log messages, gEfiCallerBaseName is helpful.

- the same applies even more to log messages generated from libraries --
  you'll want to see the name of the driver or application that the
  library is linked into. In that case, gEfiCallerBaseName refers to the
  BASE_NAME of the driver/app INF file, and not the lib instance INF
  file.

Thanks
Laszlo

>>> +    *RsdpPtr = XenInfo->RsdpPvh;
>>> +    return EFI_SUCCESS;
>>> +  }
>>> +
>>> +  //
>>> +  // Otherwise, look for the HVM one
>>> +  //
>>>    for (XenAcpiPtr = (UINT8*)(UINTN) XEN_ACPI_PHYSICAL_ADDRESS;
>>>         XenAcpiPtr < (UINT8*)(UINTN) XEN_BIOS_PHYSICAL_END;
>>>         XenAcpiPtr += 0x10) {
>>>
>>
>> Can you please split this patch in two:
>>
>> (1) the first patch should only rebase AcpiPlatformDxe to the new
>> library, without functional changes.
>>
>> (2) the second patch should add the new feature, of looking for the PVH
>> RSDP.
>>
>> (3) In the 2nd patch, pls mention Xen in the subject line, such as:
>>
>>   OvmfPkg/AcpiPlatformDxe: Use Xen PVH RSDP if it exist
>>
>> Thanks!
>> Laszlo
>>
> 


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.