Thanks everyone. We will post patches to this mailing list that aligns to this proposal.
Thanks, Ray -----Original Message----- From: [email protected] <[email protected]> On Behalf Of gaoliming Sent: Wednesday, September 29, 2021 8:51 AM To: 'Brian J. Johnson' <[email protected]>; [email protected]; Ni, Ray <[email protected]>; 'Marvin Häuser' <[email protected]>; [email protected]; Chan, Amy <[email protected]>; 'Andrew Fish' <[email protected]> Cc: Kinney, Michael D <[email protected]>; 'Gao, Liming' <[email protected]>; Liu, Zhiguang <[email protected]>; Wang, Jian J <[email protected]>; Gao, Zhichao <[email protected]> Subject: 回复: [edk2-devel] RFC: Add BaseLib/QuickSort in MdePkg Johnson: I also agree this proposal to make BufferOneElement parameter mandatory. Thanks Liming > -----邮件原件----- > 发件人: Brian J. Johnson <[email protected]> > 发送时间: 2021年9月29日 6:26 > 收件人: [email protected]; [email protected]; Marvin Häuser > <[email protected]>; [email protected]; 'gaoliming' > <[email protected]>; Chan, Amy <[email protected]>; 'Andrew > Fish' <[email protected]> > 抄送: Kinney, Michael D <[email protected]>; 'Gao, Liming' > <[email protected]>; Liu, Zhiguang <[email protected]>; Wang, > Jian J <[email protected]>; Gao, Zhichao <[email protected]> > 主题: Re: [edk2-devel] RFC: Add BaseLib/QuickSort in MdePkg > > I'll add my agreement to Marvin and Jeff: a low-level sort routine > like this should let the caller be in charge of memory allocation, so > it can be used in the widest variety of contexts (SEC, exception > handlers, APs, > etc.) So let's make the BufferOneElement parameter mandatory. > > Brian J. Johnson > > -------- Original Message -------- > From: Ni, Ray [mailto:[email protected]] > Sent: Monday, September 27, 2021, 8:49 PM > To: Marvin Häuser <[email protected]>, [email protected] > <[email protected]>, [email protected] > <[email protected]>, 'gaoliming' <[email protected]>, Chan, > Amy <[email protected]>, 'Andrew Fish' <[email protected]> > Cc: Kinney, Michael D <[email protected]>, 'Gao, Liming' > <[email protected]>, Liu, Zhiguang <[email protected]>, Wang, > Jian J <[email protected]>, Gao, Zhichao <[email protected]> > Subject: [edk2-devel] RFC: Add BaseLib/QuickSort in MdePkg > > Marvin, > I agree with your concerns, in a certain level. But I didn't treat it > as a very big problem of having caller pass the BufferOneElement > "intelligently". > > I am ok to use your option 1), making BufferOneElement mandatory. > Caller should always supply the buffer that's sufficient to hold one > element. > > By the way, I don't want to propose "swap-without-using-temporary-value" > method to avoid using the "BufferOneElement"? > Because that makes the simple thing complicated! > > Thanks, > Ray > > > -----Original Message----- > > From: Marvin Häuser <[email protected]> > > Sent: Monday, September 27, 2021 5:09 PM > > To: [email protected]; [email protected]; Ni, Ray > <[email protected]>; 'gaoliming' > > <[email protected]>; Chan, Amy <[email protected]>; 'Andrew > Fish' <[email protected]> > > Cc: Kinney, Michael D <[email protected]>; 'Gao, Liming' > <[email protected]>; Liu, Zhiguang > > <[email protected]>; Wang, Jian J <[email protected]>; Gao, > Zhichao <[email protected]> > > Subject: Re: [edk2-devel] RFC: Add BaseLib/QuickSort in MdePkg > > > > On 27/09/2021 10:50, [email protected] wrote: > >> For former caller, they could still keep as is to call the old API > >> in MdeModulePkg. I think Ray's design is compatible change for existing > >> code. > >> Only when the existing code wants to remove the dependency on > >> MdeModuelPkg, they could migrate to the new API in baselib. > >> > >> I agree with one split-API desgin what you mentioned. > >> But my point is to define one API in baselib and to make the > >> baselib not depend on memory allocation. And another wrapper API > >> could be designed to be placed in any other class. > > > > Oh sure, it could totally live in another class. I'd just like to > > have those two models (caller- and callee-owned buffer) strictly > > separate, I personally do not mind where exactly they are implemented. > > Thanks! > > > > Best regards, > > Marvin > > > >> > >> ------------------------------------------------------------------- > >> ----- > >> Jeff > >> [email protected] > >> > >> *From:* Marvin Häuser <mailto:[email protected]> > >> *Date:* 2021-09-27 16:14 > >> *To:* [email protected] > >> <mailto:[email protected]>; [email protected] > >> <mailto:[email protected]>; Ni, Ray <mailto:[email protected]>; > >> 'gaoliming' <mailto:[email protected]>; Chan, Amy > >> <mailto:[email protected]>; 'Andrew Fish' > <mailto:[email protected]> > >> *CC:* Kinney, Michael D <mailto:[email protected]>; > 'Gao, > >> Liming' <mailto:[email protected]>; Liu, Zhiguang > >> <mailto:[email protected]>; Wang, Jian J > >> <mailto:[email protected]>; Gao, Zhichao > >> <mailto:[email protected]> > >> *Subject:* Re: [edk2-devel] RFC: Add BaseLib/QuickSort in > MdePkg > >> On 27/09/2021 02:45, [email protected] wrote: > >> > Making baselib implementation depend on MemoryAllocationLib > >> > (indirectly on Pei Service and gBS), it may prevent > >> > this base API using at some seneraio. i don't think it's better. > >> That is why I asked about a split-API scenario, one of which > >> does > not > >> depend on dynamic memory allocation (SetVariable-like) and one > does > >> (wrapper-like). > >> > Add this parameter and make this parameter is optional, > >> > 1, when NULL, use the local 256 bytes stack > >> > 2, if 256 bytes stack is not enough, return > RETURE_BUFFER_TOO_SAMLL, > >> > 3, caller check the return status, to do nothing or to allocate > >> enough > >> > buffer for retry > >> > > >> > This is just like SetVariable()'s implementation. > >> Yes, and because that is SetVariable's implementation, we have > >> library > >> functions to make it less error-prone and more convenient [1]. As a > >> matter of fact, we have a (semi-lax) policy in our codebases to avoid > >> such functions like the plague and use those library wrappers > >> where-ever > >> it can make sense. The only super-rare exceptions I can think of are > >> when we know the size of the element ahead of time. Also > >> SetVariable has > >> no arbitrary constraint on when it may work the first time, and > >> there is > >> code that will fail when the first return is not > EFI_BUFFER_TOO_SMALL. > >> This solution honestly yields even more problems, because it > >> introduces > >> a Status return which was not there before. For common code > safety > >> and > >> quality policy, this requires the value *must* be retrieved and > >> checked > >> in some fashion. So all callers, no matter the prior knowledge of the > >> element size, now need either a runtime check and handling for a > >> status > >> that they (may) know can never be returned, or ASSERTs if the > >> function > >> spec really imposes the arbitrary 256 Bytes constraint. Latter > >> doesn't > >> really work I think. What if someone wants to sort in SEC and > noticed > >> they only have 64 Bytes on the stack to work with, realistically? Any > >> code depending on the 256 Byte constraint, passing NULL and > >> not > doing > >> additional handling, would seize to work. Former is too > >> complicated, see > >> wrappers. In my opinion, the memory must *either* be fully > managed by > >> the caller *or* the callee (and you may have both in separate > >> functions, > >> as I suggested), but not sometimes here, sometimes there. > >> Best regards, > >> Marvin > >> [1] > >> > > > https://github.com/tianocore/edk2/blob/46b4606ba23498d3d0e66b53e498e > b3d5d592586/MdePkg/Library/UefiLib/UefiLib.c#L > > 1309-L1360 > >> > > >> > > >> > >> ------------------------------------------------------------------------ > >> > Jeff > >> > [email protected] > >> > > >> > *From:* Marvin Häuser <mailto:[email protected]> > >> > *Date:* 2021-09-26 19:20 > >> > *To:* devel <mailto:[email protected]>; ray.ni > >> > <mailto:[email protected]>; gaoliming > >> > <mailto:[email protected]>; Chan, Amy > >> > <mailto:[email protected]>; 'Andrew Fish' > >> <mailto:[email protected]> > >> > *CC:* Kinney, Michael D > <mailto:[email protected]>; > >> 'Gao, > >> > Liming' <mailto:[email protected]>; Liu, Zhiguang > >> > <mailto:[email protected]>; Wang, Jian J > >> > <mailto:[email protected]>; Gao, Zhichao > >> > <mailto:[email protected]> > >> > *Subject:* Re: [edk2-devel] RFC: Add BaseLib/QuickSort > in MdePkg > >> > Hey Ray, > >> > In my opinion that spec is too complicated. For some cases > it is > >> > obvious, but I think the last anyone wants to see is a > >> > (STATIC_)ASSERT > >> > before most QuickSort calls to ensure the element size > >> *really* is <= > >> > 256 Bytes. In my opinion, there are two roads: > >> > 1) Make the parameter required (I think this is what Liming > >> > suggested). > >> > The caller would always need to provide said buffer, and it > >> can do > >> > as it > >> > sees fit - on the stack, in a pool, in a page, who knows. > >> > 2) Remove the parameter entirely. The library would > depend on > >> > MemoryAllocationLib again, but also would have an > >> optimisation by > >> > choosing stack vs pool based on ElementSize. > >> > Usually I would prefer 2), as it is less prone to caller > >> errors, but > >> > considering the low-level nature of edk2, I can totally see > the > >> > point to > >> > allow the caller to control whether there are dynamic > memory > >> > allocations > >> > made or not as possible with 1). 2) could technically also be > a > >> > wrapper > >> > for 1) if you want granular control and convenience/safety > >> (why not > >> > actually?). > >> > Both approaches have the advantage that it is crystal-clear > >> what the > >> > caller's job is - to always or to never allocate the buffer. > >> > Best regards, > >> > Marvin > >> > On 26/09/2021 04:24, Ni, Ray wrote: > >> > > > >> > > Liming, > >> > > > >> > > The purpose of the optional BufferOneElement is to ease > >> consumer’s > >> > > life assuming most of the time the element size should be > >> > smaller than > >> > > 256. > >> > > > >> > > Are you saying that it’s a bit hard to calculate the actual > >> > value of > >> > > sizeof (Element) when writing code? > >> > > > >> > > I recommend consumer always allocates memory if it’s > hard > >> to judge > >> > > sizeof (Element) < 256. > >> > > > >> > > Searching edk2 code, I can find below code using > >> PerformQuickSort(): > >> > > > >> > > 1. ShellPkg/UefiShellCommandLib: It’s sorting array of > >> > > (EFI_DEVICE_PATH_PROTOCOL *). > >> > > 2. UefiCpuPkg/CpuCacheInfoLib: It’s sorting array of > >> > CPU_CACHE_INFO. > >> > > 3. MinPlatformPkg/AcpiTables: It’s sorting array of > >> > EFI_CPU_ID_ORDER_MAP. > >> > > 4. MdeModulePkg/UefiBootManagerLib: It’s sorting > array of > >> > > EFI_BOOT_MANAGER_LOAD_OPTION. > >> > > 5. MdeModulePkg/CapsuleApp: It’s sorting array of > >> (EFI_FILE_INFO *) > >> > > 6. CryptoPkg/CrtWrapper: It’s sorting array of > (unknown > >> type). > >> > > 7. RedfishPkg/RedfishCrtLib: It’s sorting array of > >> (unknown type). > >> > > > >> > > For 1~5, it’s easy to know that the size of the element is > >> smaller > >> > > than 256. The AllocatePool() can be skipped. > >> > > > >> > > Thanks, > >> > > > >> > > Ray > >> > > > >> > > *From:*gaoliming <[email protected]> > >> > > *Sent:* Sunday, September 26, 2021 10:01 AM > >> > > *To:* Ni, Ray <[email protected]>; [email protected]; > >> Chan, Amy > >> > > <[email protected]>; 'Andrew Fish' > <[email protected]> > >> > > *Cc:* Kinney, Michael D <[email protected]>; > >> 'Gao, Liming' > >> > > <[email protected]>; Liu, Zhiguang > >> <[email protected]>; > >> > Wang, > >> > > Jian J <[email protected]>; Gao, Zhichao > >> <[email protected]> > >> > > *Subject:* 回复: [edk2-devel] RFC: Add > BaseLib/QuickSort in > >> MdePkg > >> > > > >> > > Ray: > >> > > > >> > > I may suggest to always require BufferOneElement. The > >> consumer code > >> > > may not know ElementSize. To avoid the error, the > consumer > >> must > >> > > allocate buffer for BufferOneElement. If so, > >> BufferOneElement is > >> > the > >> > > required parameter. > >> > > > >> > > Thanks > >> > > > >> > > Liming > >> > > > >> > > *发件人**:*Ni, Ray <[email protected] > >> <mailto:[email protected]>> > >> > > *发送时间:* 2021年9月24日 11:53 > >> > > *收件人:* [email protected] > <mailto:[email protected]>; > >> Ni, > >> > Ray > >> > > <[email protected] <mailto:[email protected]>>; Chan, > Amy > >> > > <[email protected] <mailto:[email protected]>>; > gaoliming > >> > > <[email protected] > <mailto:[email protected]>>; > >> > 'Andrew > >> > > Fish' <[email protected] <mailto:[email protected]>> > >> > > *抄送:* Kinney, Michael D <[email protected] > >> > > <mailto:[email protected]>>; 'Gao, Liming' > >> > > <[email protected] <mailto:[email protected]>>; > Liu, > >> Zhiguang > >> > > <[email protected] > <mailto:[email protected]>>; > >> Wang, > >> > Jian J > >> > > <[email protected] <mailto:[email protected]>>; > Gao, > >> > Zhichao > >> > > <[email protected] > <mailto:[email protected]>> > >> > > *主题:* RE: [edk2-devel] RFC: Add BaseLib/QuickSort in > MdePkg > >> > > > >> > > More details on new QuickSort() API: > >> > > > >> > > The new API needs to carry additional parameter > >> “BufferOneElement”. > >> > > > >> > > This parameter gives QuickSort() the temporary buffer for > >> > swapping in > >> > > sorting. > >> > > > >> > > It’s to avoid BaseLib depends on MemoryAllocationLib. > >> > > > >> > > … > >> > > > >> > > @param [in] BufferOneElement When ElementSize > > 256, caller > >> > needs to > >> > > provide a buffer whose size > >> > > equals to > ElementSize. It’s > >> used by > >> > > QuickSort() for swapping in sorting. > >> > > > >> > > When ElementSize <= 256, QuickSort() uses a local stack > >> 256-byte > >> > buffer. > >> > > > >> > > @retval EFI_INVALID_PARAMETER When (ElementSize > > 256) and > >> > > (BufferOneElement == NULL). > >> > > > >> > > … > >> > > > >> > > VOID > >> > > > >> > > EFIAPI > >> > > > >> > > QuickSort ( > >> > > > >> > > IN OUT > VOID *BufferToSort, > >> > > > >> > > IN CONST UINTN ElementCount, > >> > > > >> > > IN CONST UINTN ElementSize, > >> > > > >> > > IN SORT_COMPARE CompareFunction, > >> > > > >> > > IN VOID *BufferOneElement OPTIONAL > >> > > > >> > > ); > >> > > > >> > > Any comments? > >> > > > >> > > *From:*[email protected] > <mailto:[email protected]> > >> > > <[email protected] <mailto:[email protected]>> > *On > >> Behalf Of > >> > > *Ni, Ray > >> > > *Sent:* Wednesday, September 22, 2021 2:04 PM > >> > > *To:* Chan, Amy <[email protected] > >> <mailto:[email protected]>>; > >> > > gaoliming <[email protected] > >> > > <mailto:[email protected]>>; 'Andrew Fish' > >> <[email protected] > >> > > <mailto:[email protected]>>; 'edk2-devel-groups-io' > >> > > <[email protected] <mailto:[email protected]>> > >> > > *Cc:* Kinney, Michael D <[email protected] > >> > > <mailto:[email protected]>>; 'Gao, Liming' > >> > > <[email protected] <mailto:[email protected]>>; > Liu, > >> Zhiguang > >> > > <[email protected] > <mailto:[email protected]>>; > >> Wang, > >> > Jian J > >> > > <[email protected] <mailto:[email protected]>>; > Gao, > >> > Zhichao > >> > > <[email protected] > <mailto:[email protected]>> > >> > > *Subject:* Re: [edk2-devel] RFC: Add BaseLib/QuickSort > in > >> MdePkg > >> > > > >> > > I don’t see objection so far. > >> > > > >> > > So, the final solution is: > >> > > > >> > > 1. Add QuickSort() API to BaseLib in MdePkg. > >> > > 2. Update existing MdeModulePkg/SortLib to use > >> QuickSort() in the > >> > > implementation (proposed by Andrew Fish and > Liming Gao) > >> > > 3. Update UefiCpuPkg to use QuickSortLib to remove > improper > >> > > dependency on MdeModulePkg > >> > > > >> > > Thanks, > >> > > > >> > > Ray > >> > > > >> > > *From:*Ni, Ray > >> > > *Sent:* Thursday, September 16, 2021 10:48 AM > >> > > *To:* Chan, Amy <[email protected] > >> <mailto:[email protected]>>; > >> > > gaoliming <[email protected] > >> > > <mailto:[email protected]>>; 'Andrew Fish' > >> <[email protected] > >> > > <mailto:[email protected]>>; 'edk2-devel-groups-io' > >> > > <[email protected] <mailto:[email protected]>> > >> > > *Cc:* Kinney, Michael D <[email protected] > >> > > <mailto:[email protected]>>; 'Gao, Liming' > >> > > <[email protected] <mailto:[email protected]>>; > Liu, > >> Zhiguang > >> > > <[email protected] > <mailto:[email protected]>>; > >> Wang, > >> > Jian J > >> > > <[email protected] <mailto:[email protected]>>; > Gao, > >> > Zhichao > >> > > <[email protected] > <mailto:[email protected]>> > >> > > *Subject:* RE: [edk2-devel] RFC: Add BaseLib/QuickSort > in > >> MdePkg > >> > > > >> > > Amy, > >> > > > >> > > No. We only Add QuickSort() function API into BaseLib.h. > >> > > > >> > > *From:*Chan, Amy <[email protected] > >> <mailto:[email protected]>> > >> > > *Sent:* Thursday, September 16, 2021 10:46 AM > >> > > *To:* gaoliming <[email protected] > >> > > <mailto:[email protected]>>; 'Andrew Fish' > >> <[email protected] > >> > > <mailto:[email protected]>>; 'edk2-devel-groups-io' > >> > > <[email protected] <mailto:[email protected]>> > >> > > *Cc:* Ni, Ray <[email protected] > >> <mailto:[email protected]>>; Kinney, > >> > > Michael D <[email protected] > >> > > <mailto:[email protected]>>; 'Gao, Liming' > >> > > <[email protected] <mailto:[email protected]>>; > Liu, > >> Zhiguang > >> > > <[email protected] > <mailto:[email protected]>>; > >> Wang, > >> > Jian J > >> > > <[email protected] <mailto:[email protected]>>; > Gao, > >> > Zhichao > >> > > <[email protected] > <mailto:[email protected]>> > >> > > *Subject:* RE: [edk2-devel] RFC: Add BaseLib/QuickSort > in > >> MdePkg > >> > > > >> > > Just to double confirm, will we have the null instance of > >> > QuickSort in > >> > > MdePkg? > >> > > > >> > > Regards, > >> > > > >> > > Amy > >> > > > >> > > *From:*gaoliming <[email protected] > >> > > <mailto:[email protected]>> > >> > > *Sent:* Thursday, September 16, 2021 10:23 AM > >> > > *To:* 'Andrew Fish' <[email protected] > >> <mailto:[email protected]>>; > >> > > 'edk2-devel-groups-io' <[email protected] > >> > > <mailto:[email protected]>> > >> > > *Cc:* Ni, Ray <[email protected] > >> <mailto:[email protected]>>; Kinney, > >> > > Michael D <[email protected] > >> > > <mailto:[email protected]>>; 'Gao, Liming' > >> > > <[email protected] <mailto:[email protected]>>; > Liu, > >> Zhiguang > >> > > <[email protected] > <mailto:[email protected]>>; > >> Wang, > >> > Jian J > >> > > <[email protected] <mailto:[email protected]>>; > Gao, > >> > Zhichao > >> > > <[email protected] > <mailto:[email protected]>>; > >> Chan, Amy > >> > > <[email protected] <mailto:[email protected]>> > >> > > *Subject:* 回复: [edk2-devel] RFC: Add > BaseLib/QuickSort in > >> MdePkg > >> > > > >> > > Andrew: > >> > > > >> > > Thanks for your suggestion. I think your idea is better. > >> We add new > >> > > QuickSort() API to BaseLib, and update SortLib library > >> instance to > >> > > consume BaseLib QuickSort() API. This way has no change > in > >> current > >> > > SortLib library class. It is the compatible solution. > >> > > > >> > > Thanks > >> > > > >> > > Liming > >> > > > >> > > *发件人**:*Andrew Fish <[email protected] > >> <mailto:[email protected]>> > >> > > *发送时间:* 2021年9月16日 10:13 > >> > > *收件人:* edk2-devel-groups-io <[email protected] > >> > > <mailto:[email protected]>>; Liming Gao > >> > <[email protected] > >> > > <mailto:[email protected]>> > >> > > *抄送:* Ni, Ray <[email protected] > >> <mailto:[email protected]>>; Mike > >> > > Kinney <[email protected] > >> > > <mailto:[email protected]>>; Gao, Liming > >> > > <[email protected] <mailto:[email protected]>>; > Liu, > >> Zhiguang > >> > > <[email protected] > <mailto:[email protected]>>; > >> Wang, > >> > Jian J > >> > > <[email protected] <mailto:[email protected]>>; > Gao, > >> > Zhichao > >> > > <[email protected] > <mailto:[email protected]>>; > >> Chan, Amy > >> > > <[email protected] <mailto:[email protected]>> > >> > > *主题:* Re: [edk2-devel] RFC: Add BaseLib/QuickSort in > MdePkg > >> > > > >> > > On Sep 15, 2021, at 6:26 PM, gaoliming > >> <[email protected] > >> > > <mailto:[email protected]>> wrote: > >> > > > >> > > Ray: > >> > > > >> > > SortLib has been added since 2015. I would > suggest to > >> still keep > >> > > this library class. To resolve the package > dependency, my > >> > proposal > >> > > is to move the library class header file SortLib.h > from > >> > > MdeModulePkg to MdePkg, and still keep the > library > >> instance in > >> > > MdeModulePkg. This proposal has no impact on > the existing > >> > platform. > >> > > > >> > > If we add QuickSort() API to the BaseLib can we not just > >> port the > >> > > existing MdeModulePkg/SortLib to use QuickSort() in the > >> > > implementation? Or is there some other way to add the > new > >> thing > >> > in a > >> > > backward compatible way. > >> > > > >> > > Thanks, > >> > > > >> > > Andrew Fish > >> > > > >> > > Thanks > >> > > > >> > > Liming > >> > > > >> > > *发件人**:*[email protected] > >> > > <mailto:[email protected]><[email protected] > >> > > <mailto:[email protected]>>*代表***Ni, Ray > >> > > *发送时间:*2021年9月14日14:15 > >> > > *收件人:*Kinney, Michael D > <[email protected] > >> > > <mailto:[email protected]>>; Gao, Liming > >> > > <[email protected] > <mailto:[email protected]>>; Liu, > >> > > Zhiguang <[email protected] > >> > <mailto:[email protected]>>; > >> > > Wang, Jian J <[email protected] > >> > > <mailto:[email protected]>>; Gao, Zhichao > >> > > <[email protected] > <mailto:[email protected]>> > >> > > *抄送:*[email protected] > <mailto:[email protected]>; > >> > Chan, Amy > >> > > <[email protected] > <mailto:[email protected]>> > >> > > *主题:*[edk2-devel] RFC: Add BaseLib/QuickSort > in MdePkg > >> > > > >> > > Hi package maintainers of MdePkg, > MdeModulePkg and > >> ShellPkg, > >> > > community, > >> > > > >> > > A commit (UefiCpuPkg/CpuCacheInfoLib: Sort > >> CpuCacheInfo array > >> > > > >> > > >> > <https://github.com/tianocore/edk2/commit/4de77ae9890d241271f543e919 > 5ab3516f3abec6>) > >> > > to UefiCpuPkg let > >> > > UefiCpuPkg depend on MdeModulePkg because > the SortLib > >> class and > >> > > instances are all in MdeModulePkg. > >> > > > >> > > UefiCpuPkg depending on MdeModulePkg breaks > the rule that > >> > > “UefiCpuPkg should ONLY depend on MdePkg”. > >> > > > >> > > To address this issue, there are two approaches: > >> > > > >> > > 1. Duplicate the sort logic in UefiCpuPkg to not > >> depend on > >> > > MdeModulePkg/SortLib > >> > > 2. Add QuickSort() API to BaseLib in MdePkg. > >> > > > >> > > Approach #2 (MdePkg/BaseLib/QuickSort) makes > more > >> sense because > >> > > quick sort is a standard algorithm. > >> > > > >> > > We encourage consumers to update their code to > use the > >> quick > >> > sort > >> > > in MdePkg and gradually deprecate today’s > >> MdeModulePkg/SortLib. > >> > > > >> > > If you don’t have concerns, I plan to: > >> > > > >> > > 1. “Add QuickSort() to BaseLib” and update all > existing > >> > consumers > >> > > to use this API instead. > >> > > > >> > > VOID > >> > > > >> > > EFIAPI > >> > > > >> > > QuickSort ( > >> > > > >> > > IN OUT VOID *BufferT > oSort, > >> > > > >> > > IN CONST UINTN Count, > >> > > > >> > > IN CONST UINTN ElementSize, > >> > > > >> > > IN SORT_COMPARE Compare > Function > >> > > > >> > > ); > >> > > > >> > > 2. “Add new ShellPkg/SortCompareLib” > >> > > > >> > > Background: ShellPkg requires to sort > >> devicepath/string so 3 > >> > APIs > >> > > in UefiSortLib (DevicePathCompare, > StringNoCaseCompare, > >> > > StringCompare) are provided for Shell usage. we > can > >> move the 3 > >> > > APIs to the SortCompareLib and update Shell code > to use > >> > > BaseLib/QuickSort directly, with the sort compare > >> function from > >> > > SortCompareLib. > >> > > > >> > > Any concerns? > >> > > > >> > > Thanks, > >> > > > >> > > Ray > >> > > > >> > > > >> > > >> > > >> > >> > > > > > > > > > -- > > Brian > > -------------------------------------------------------------------- > > "Remember that ignorance is expensive." > -- From LLIB > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#81264): https://edk2.groups.io/g/devel/message/81264 Mute This Topic: https://groups.io/mt/85940710/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
