I agree to put ecr number in commit message.

Thanks,
Ray

> 在 2016年5月18日,下午7:35,Laszlo Ersek <[email protected]> 写道:
> 
> On 05/18/16 10:16, Ni, Ruiyu wrote:
>>> -----Original Message-----
>>> From: Laszlo Ersek [mailto:[email protected]]
>>> Sent: Tuesday, May 17, 2016 8:23 PM
>>> To: Ni, Ruiyu <[email protected]>
>>> Cc: [email protected]
>>> Subject: Re: [edk2] [Patch 0/4] MdeModulePkg/PciBus Do not improperly 
>>> degrade resource
>>> 
>>>> On 05/17/16 04:03, Ruiyu Ni wrote:
>>>> The patch serials refined the PciBus code and adds a new feature following
>>>> PI spec 1.4a to not improperly degrade resource.
>>>> 
>>>> Ruiyu Ni (4):
>>>>  MdeModulePkg/PciBus: use better name for local variables.
>>>>  MdeModulePkg/PciBus: Remove unused fields in PCI_BAR
>>>>  MdeModulePkg/PciBus: Use shorter global variable name
>>>>  MdeModulePkg/PciBus: do not improperly degrade resource
>>>> 
>>>> MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.c            |  6 +--
>>>> MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h            |  5 +-
>>>> .../Bus/Pci/PciBusDxe/PciEnumeratorSupport.c       | 58 
>>>> +++++++++++++++++-----
>>>> .../Bus/Pci/PciBusDxe/PciResourceSupport.c         | 26 ++++++----
>>>> 4 files changed, 65 insertions(+), 30 deletions(-)
>>> 
>>> * Please add the following reference to patch #4:
>>> 
>>> https://mantis.uefi.org/mantis/view.php?id=1529
>> 
>> I think it might not be proper to include the member only
>> web page in the commit message.
> 
> I disagree -- I think the mantis ticket number should always be included in a 
> commit message, if the patch is related to a Mantis ticket. Sharing just the 
> number of the mantis ticket does not disclose any information that is not 
> also publicly available from the UEFI spec itself (the UEFI spec starts with 
> a long changelog of Mantis tickets).
> 
> The contents of the mantis ticket *are* private, but for actually reading a 
> ticket, general UEFI membership and the appropriate WG membership are 
> required too. So, capturing the mantis ticket number in the commit message 
> helps contributors that have access to Mantis, without disclosing sensitive 
> information to those who haven't.
> 
> Personally I frequently go to Mantis to understand the background of UEFI or 
> PI spec changes better. The ECRs attached to Mantis tickets often describe 
> use cases that are not carried over to the spec, but are important background.
> 
> In this specific case, the PI spec 1.4a, Volume 5, has the following in its 
> changelog:
> 
>  1529 address space granularity errata
> 
> 
>>> * I'm interested in this work primarily due to GPU assignment to
>>> QEMU/KVM virtual machines. So I built OVMF applied with these patches,
>>> and checked if they made a difference for the PCI resource map, with an
>>> Nvidia GTX750 assigned to the guest.
>>> 
>>> There's no difference; the 256MB BAR is still allocated under 4GB.
>>> 
>>> * Apparently, EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL must be a
>>> singleton protocol; it should come from the platform firmware, not from
>>> the option ROM. In that case, how could OVMF implement this protocol, so
>>> that such a GPU BAR would be allocated high?
>> 
>> Option ROM depends on the PCI resource assignment so it’s like a
>> chicken-egg problem if we let option rom produce such protocol.
>> Singleton is enough I think.
> 
> I agree.
> 
>>> Looking at the CheckDevice() spec, I guess we could hard-code some PCI
>>> vendor and device IDs, and set AddrSpaceGranularity to 64. However,
>>> that's the only thing we should do; I don't think we should do the rest
>>> of the PCI BAR probing.
>> 
>> PCI BAR probing is still needed. We do not change the granularity
>> for 32bit BAR.
>>> 
>>> ... The only thing I'd like to say to the resource allocator is,
>>> 
>>> If CSM is disabled, then please don't degrade the MMIO64 BARs of this
>>> device, just because it has an oprom.
>>> 
>>> (In fact, the device is not an incompatible PCI device.)
>> 
>> I agree. But another rule is MdeModulePkg cannot depend
>> on IntelFrameworkPkg. PciBusDxe is in MdeModulePkg; LegacyBios
>> protocol is defined in IntelFrameworkPkg.
> 
> That's fine; I'm not suggesting that PciBusDxe itself look for the legacy 
> BIOS protocol. Instead, platform code in OvmfPkg could look for the legacy 
> BIOS protocol (or determine CSM presence in another way), and then instruct 
> PciBusDxe through a well-defined interface not to degrade the 64-bit MMIO 
> BARs.
> 
> My interest is in such a well-defined interface.
> 
>>> * By following the links in Mantis #1529 (recursively), I arrived at a
>>> message that points to the following driver:
>>> 
>>> MdeModulePkg/Bus/Pci/IncompatiblePciDeviceSupportDxe
>>> 
>>> OVMF does not include this driver at the moment. It is a small driver
>>> and I guess we could fork it for OvmfPkg, but how should we fill in the
>>> "mIncompatiblePciDeviceList" array?
>> 
>> Try to use below value to disable all MMIO degrade.
>> Not tested.
>> 
>> GLOBAL_REMOVE_IF_UNREFERENCED UINT64 mIncompatiblePciDeviceList[] = {
>>  //
>>  // DEVICE_INF_TAG,
>>  // PCI_DEVICE_ID (VendorID, DeviceID, Revision, SubVendorId, SubDeviceId),
>>  // DEVICE_RES_TAG,
>>  // ResType,  GFlag , SFlag,   Granularity,  RangeMin,
>>  // RangeMax, Offset, AddrLen
>>  //
>>  DEVICE_INF_TAG,
>>  PCI_DEVICE_ID(DEVICE_ID_NOCARE, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE,
>> DEVICE_ID_NOCARE, DEVICE_ID_NOCARE),
>>  DEVICE_RES_TAG,
>>  PCI_BAR_TYPE_MEM,
>>  PCI_ACPI_UNUSED,
>>  PCI_ACPI_UNUSED,
>> 64,
>>  PCI_ACPI_UNUSED,
>>  PCI_BAR_OLD_ALIGN,
>>  PCI_BAR_ALL,
>>  PCI_BAR_NOCHANGE,
> 
> Ah, thanks a lot! Now I have taken a much closer look at
> 
>  Table 20. ACPI 2.0 & 3.0 QWORD Address Space Descriptor Usage
> 
> plus I reviewed the UpdatePciInfo() function with more context (including 
> your patch #4).
> 
> It looks like I can express exactly what I want.
> 
> I did my best to carefully review your patches. Patches 1-3 are mechanic and 
> I think they are correct.
> 
> For #1 through #3:
> Reviewed-by: Laszlo Ersek <[email protected]>
> 
> For patch #4, I have the following comments:
> 
> - Please consider adding the reference to mantis ticket 1529.
> 
> - I think the patch does a little bit more than documented in the subject and 
> in the commit message. The main topic is of course the prevention of improper 
> degradation; however the patch also handles the other case, when a 64-bit 
> MMIO BAR is forced under the 4GB limit. I think it is correct and these 
> things do belong to the same patch, but maybe the commit message could 
> mention it briefly. I don't insist of course.
> 
> - Anyway I'll leave the above two points up to your consideration. For patch 
> #4 too:
> Reviewed-by: Laszlo Ersek <[email protected]>
> 
> Independently, I noticed that the interpretation of the
> 
>  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR.AddrTranslationOffset
> 
> field might not  comply with the PI spec. Namely, in Table 20, the BAR index 
> wildcard is (UINT64)-1 (== MAX_UINT64). However, the value used for 
> recognizing the wildcard, in the UpdatePciInfo() function, is PCI_BAR_ALL, 
> which is only 0xFF.
> 
> Similarly, the AddrRangeMax field ("Used to convey the alignment 
> information") should be zero if no special alignment is required. But, 
> PCI_BAR_OLD_ALIGN has value 0xFFFFFFFFFFFFFFFFULL.
> 
>> diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c 
>> b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
>> index a6ade26e3a09..089919d59d9e 100644
>> --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
>> +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
>> @@ -1327,8 +1327,8 @@ UpdatePciInfo (
>>   )
>> {
>>   EFI_STATUS                        Status;
>> -  UINTN                             BarIndex;
>> -  UINTN                             BarEndIndex;
>> +  UINT64                            BarIndex;
>> +  UINT64                            BarEndIndex;
>>   BOOLEAN                           SetFlag;
>>   VOID                              *Configuration;
>>   EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Ptr;
>> diff --git a/MdePkg/Include/IndustryStandard/Pci22.h 
>> b/MdePkg/Include/IndustryStandard/Pci22.h
>> index 0b3a785ef1e6..3419ad4ce2cd 100644
>> --- a/MdePkg/Include/IndustryStandard/Pci22.h
>> +++ b/MdePkg/Include/IndustryStandard/Pci22.h
>> @@ -763,7 +763,7 @@ typedef struct {
>> 
>> #define PCI_ACPI_UNUSED     0
>> #define PCI_BAR_NOCHANGE    0
>> -#define PCI_BAR_OLD_ALIGN   0xFFFFFFFFFFFFFFFFULL
>> +#define PCI_BAR_OLD_ALIGN   0
>> #define PCI_BAR_EVEN_ALIGN  0xFFFFFFFFFFFFFFFEULL
>> #define PCI_BAR_SQUAD_ALIGN 0xFFFFFFFFFFFFFFFDULL
>> #define PCI_BAR_DQUAD_ALIGN 0xFFFFFFFFFFFFFFFCULL
>> @@ -774,7 +774,7 @@ typedef struct {
>> #define PCI_BAR_IDX3        0x03
>> #define PCI_BAR_IDX4        0x04
>> #define PCI_BAR_IDX5        0x05
>> -#define PCI_BAR_ALL         0xFF
>> +#define PCI_BAR_ALL         0xFFFFFFFFFFFFFFFFULL
>> 
>> ///
>> /// EFI PCI Option ROM definitions
> 
> What do you think? (In any case, this change would be separate from your 
> series.)
> 
> 
> I'll seek to write a minimal EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL 
> implementation OvmfPkg that puts this series to use. As long as I use the 
> same macro names as the PCI bus driver, in order to fill in the ACPI resource 
> descriptor, there will be an understanding, regardless of the actual macro 
> values.
> 
> Thanks!
> Laszlo
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to