Good point. Could we find out what change causes the performance regression? Bus Master disable / Memory Space disable / IO Space disable? How about to only disable Bus Master in the exit boot service event notification? It seems the key point suggested by UEFI Driver_Writer_Guide_V1.0.1_120308.pdf.
7.7 Examples from the EDK II that use this feature are the PCI device drivers for USB Host Controllers. Some USB Host Controllers are PCI Bus Masters that continuously access a memory buffer to poll for operation requests. Access to this memory buffer by a USB Host Controller may be required to boot an operation system, but this activity must be terminated when the OS calls ExitBootServices(). *The typical action in the Exit Boot Services Event for these types of drivers is to disable the PCI bus master* and place the USB Host Controller into a halted state Thanks, Star -----Original Message----- From: Ard Biesheuvel [mailto:[email protected]] Sent: Thursday, October 26, 2017 4:12 AM To: Laszlo Ersek <[email protected]> Cc: Dong, Eric <[email protected]>; Zeng, Star <[email protected]>; edk2-devel-01 <[email protected]>; Yao, Jiewen <[email protected]>; Brijesh Singh <[email protected]> Subject: Re: [edk2] [PATCH 03/10] MdeModulePkg/AtaAtapiPassThru: disable the device at ExitBootServices() On 25 October 2017 at 16:26, Laszlo Ersek <[email protected]> wrote: > Hi Star, Eric, > > On 09/08/17 00:41, Laszlo Ersek wrote: >> The AtaAtapiPassThru driver maps three system memory regions for Bus >> Master Common Buffer operation on the following call path, if the >> controller has PCI_CLASS_MASS_STORAGE_SATADPA class code: >> >> AtaAtapiPassThruStart() >> EnumerateAttachedDevice() >> AhciModeInitialization() >> AhciCreateTransferDescriptor() >> >> The device is disabled (including Bus Master DMA) when the controller >> is unbound, in AtaAtapiPassThruStop(). Then the regions are unmapped. >> >> The former step should also be done when we exit the boot services, >> and the OS gains ownership of system memory. >> >> Cc: Ard Biesheuvel <[email protected]> >> Cc: Brijesh Singh <[email protected]> >> Cc: Eric Dong <[email protected]> >> Cc: Jiewen Yao <[email protected]> >> Cc: Star Zeng <[email protected]> >> Contributed-under: TianoCore Contribution Agreement 1.1 >> Signed-off-by: Laszlo Ersek <[email protected]> >> --- >> MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.h | 6 ++ >> MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.c | 59 >> +++++++++++++++++++- >> 2 files changed, 64 insertions(+), 1 deletion(-) > > this patch -- that is, commit 6fb8ddd36bde > ("MdeModulePkg/AtaAtapiPassThru: disable the device at > ExitBootServices()", 2017-09-03) -- has caused a performance > regression in OVMF, in booting Windows installer ISOs from emulated IDE > CD-ROMs. > > Interestingly, the performance regression only affects the "traditional" > IDE controller of the "pc" (i440fx) machine type of QEMU; it does not > affect the AHCI/SATA controller of the "q35" machine type. Does it make any difference if you only disable memory decoding and bus mastering, but leave I/O port decoding enabled? _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

