> -----Original Message----- > From: Laszlo Ersek [mailto:ler...@redhat.com] > Sent: Thursday, December 03, 2015 3:26 AM > To: Qiu, Shumin <shumin....@intel.com>; edk2-de...@ml01.01.org > Cc: Carsey, Jaben <jaben.car...@intel.com> > Subject: Re: [edk2] [PATCH] ShellPkg: Refine the code to reduce time cost of > 'map -r' > Importance: High > > On 12/03/15 06:35, Qiu Shumin wrote: > > In some platform 'map -r' may cost more than 1 min. This patch filter the > target handles by > > BlockIO and SimpleFileSystem protocol to reduce the time cost. > > Hijacking this thread and asking a more general question -- I noticed > recently that the "devices" and "drivers" commands can take quite long. > I guess there is a lot of processing to be done for those. But, has it > been considered to change the internal representation of the protocol > database to speed things up? (I'm asking this without knowing too much > about the current representation.) > > I'm not suggesting that the current proto DB representation is slow; I'm > just curious if the perf consequences of the representation have been > considered before.
not to my knowledge. Curiosity - do you mean internal representation in the shell or in the platform? The shell maintains almost no internal representation of anything. > > Thanks! > Laszlo > > > > > Cc: Jaben Carsey <jaben.car...@intel.com> > > Contributed-under: TianoCore Contribution Agreement 1.0 > > Signed-off-by: Qiu Shumin <shumin....@intel.com> > > --- > > .../Library/UefiShellCommandLib/ConsistMapping.c | 40 > ++++++++++++++++------ > > 1 file changed, 30 insertions(+), 10 deletions(-) > > > > diff --git a/ShellPkg/Library/UefiShellCommandLib/ConsistMapping.c > b/ShellPkg/Library/UefiShellCommandLib/ConsistMapping.c > > index 9bd7b2c..86e8dc5 100644 > > --- a/ShellPkg/Library/UefiShellCommandLib/ConsistMapping.c > > +++ b/ShellPkg/Library/UefiShellCommandLib/ConsistMapping.c > > @@ -16,6 +16,10 @@ > > #include <Library/SortLib.h> > > #include <Library/UefiLib.h> > > #include <Protocol/UsbIo.h> > > +#include <Protocol/BlockIo.h> > > +#include <Protocol/SimpleFileSystem.h> > > + > > + > > > > typedef enum { > > MTDTypeUnknown, > > @@ -1349,20 +1353,22 @@ ShellCommandConsistMappingInitialize ( > > OUT EFI_DEVICE_PATH_PROTOCOL ***Table > > ) > > { > > - EFI_HANDLE *HandleBuffer; > > - UINTN HandleNum; > > - UINTN HandleLoop; > > - EFI_DEVICE_PATH_PROTOCOL **TempTable; > > - EFI_DEVICE_PATH_PROTOCOL *DevicePath; > > - EFI_DEVICE_PATH_PROTOCOL *HIDevicePath; > > - UINTN Index; > > - EFI_STATUS Status; > > + EFI_HANDLE *HandleBuffer; > > + UINTN HandleNum; > > + UINTN HandleLoop; > > + EFI_DEVICE_PATH_PROTOCOL **TempTable; > > + EFI_DEVICE_PATH_PROTOCOL *DevicePath; > > + EFI_DEVICE_PATH_PROTOCOL *HIDevicePath; > > + EFI_BLOCK_IO_PROTOCOL *BlockIo; > > + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem; > > + UINTN Index; > > + EFI_STATUS Status; > > > > HandleBuffer = NULL; > > > > Status = gBS->LocateHandleBuffer ( > > - AllHandles, > > - NULL, > > + ByProtocol, > > + &gEfiDevicePathProtocolGuid, > > NULL, > > &HandleNum, > > &HandleBuffer > > @@ -1385,6 +1391,20 @@ ShellCommandConsistMappingInitialize ( > > continue; > > } > > > > + Status = gBS->HandleProtocol( HandleBuffer[HandleLoop], > > + &gEfiBlockIoProtocolGuid, > > + (VOID **)&BlockIo > > + ); > > + if (EFI_ERROR(Status)) { > > + Status = gBS->HandleProtocol( HandleBuffer[HandleLoop], > > + &gEfiSimpleFileSystemProtocolGuid, > > + (VOID **)&SimpleFileSystem > > + ); > > + if (EFI_ERROR(Status)) { > > + continue; > > + } > > + } > > + > > for (Index = 0; TempTable[Index] != NULL; Index++) { > > if (DevicePathCompare (&TempTable[Index], &HIDevicePath) == 0) { > > FreePool (HIDevicePath); > > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel