Thanks Andrew, I haven’t changed the default PCD value. Let me check the cases 
you have mentioned. Even if it is repeated calls, I don’t think I can reach the 
count of the PCD maximum value.

I verified the “List Empty” case, where I dumped the elements and are no more 
than 2/3 in number, before I hit this assertion.

Sai


From: Andrew Fish [mailto:af...@apple.com]
Sent: Friday, June 19, 2015 5:01 PM
To: edk2-devel@lists.sourceforge.net
Subject: Re: [edk2] Assertion in Linked list - help


On Jun 19, 2015, at 4:41 PM, Saiprasad Chavali 
<s...@marvell.com<mailto:s...@marvell.com>> wrote:

Hi,
I am using the standard API to initialize the lists : 
“InitializeListHead(XXX)”. I don’t see it get stuck. If I remove the Assertion 
check, it goes through, no issues. The node values and the count are fine.


~/work/src/edk2(master)>git grep PcdMaximumLinkedListLength -- *.dec
MdePkg/MdePkg.dec:1844:  
gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|1000000|UINT32|0x00000003

The default for PcdMaximumLinkedListLength is a large value. Did you set it to 
another value in your DSC file?


What cause a memory corruption if we think that is the only case? A repeated 
call to insertion/remove? Is not happening sequentially?


Well it is C code so memory corruption is easy. Have a bad pointer, or pass the 
same data into multiple calls. If you are casting to (LIST_ENTRY *) that may be 
a bug too.

LIST_ENTRY ListData;
LIST_ENTRY *ListHead = &ListData;
LIST_ENTRY *ListEntry = &ListData;

InitializeListHead (ListHead);

for (i=0; i<2; i++) {
  InsertHeadList (ListHead, ListEntry);
}

Thanks,

Andrew Fish


Thanks
Sai



From: Andrew Fish [mailto:af...@apple.com]
Sent: Friday, June 19, 2015 4:29 PM
To: edk2-devel@lists.sourceforge.net<mailto:edk2-devel@lists.sourceforge.net>
Subject: Re: [edk2] Assertion in Linked list - help


On Jun 19, 2015, at 4:18 PM, Saiprasad Chavali 
<s...@marvell.com<mailto:s...@marvell.com>> wrote:

Hi,

I hit the Assertion (ASSERT (Count < PcdGet32 (PcdMaximumLinkedListLength))),
“Linked list is too long” inside the “InternalBaseLibIsNodeInList” of baselib 
“linkedlist.c”.

Almost all the Linked list API,  calls this function. There is not one 
particular API that throws this error when Invoked inside the Dxe Driver.

If I comment this Assertion call everything works fine. The node elements in 
the lists at any point of the time or no more than 3 or 4. So wondering what 
could be the cause of this assertion.

It happens most of the time, some kind of timing issue. Suspecting memory 
corruption of the links, if so any reason (or) is anything wrong in the way I 
initialize the linked lists?


How do you initialize the lists? The lists are circular so I guess you could 
get stuck in an infinite loop, if you initialize them incorrectly or have 
memory corruption.

Thanks,

Andrew Fish



Your help is so much appreciated.

Thanks
Sai


------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net<mailto:edk2-devel@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/edk2-devel

------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to