My platform is ARM926 and only has 8 MB memory .
The WinCE 6.0 Kernel always read address: 0x41 to cause data abort when
booting.
I try to trace the kernel code and find out the issue.
SystemStartupFunc => PagePoolInit => InitPoolFromParameters => HoldPages
The data abort is issued by HoldPages function in following code:
physmem.c Line 689
if (GET_CPRIO(pCurThread) < GET_CPRIO(pCleanupThread))
The value of pCleanupThread is NULL at this time.

The value of pCleanupThread wiil be assigned to pCurThread after
PagePoolInit function.

How to fix the issue?
Assign the value for pCleanupThread before call PagePoolInit ?
Or check if the pCleanupThread is NULL in physmem.c Line 689?

Or that isn't a bug! Is it caused by other issue?

Best Regards,
Jason Ni

Re: WinCE 6.0 Kernel bug? by Steve

Steve
Sun Nov 04 19:50:22 PST 2007

> physmem.c Line 689
This sort of failure almost always indicates a bug in the memory init in
your startup code, OEMAddressTable or the Config.bib.

Steve Maillet
http://www.EmbeddedFusion.com


Re: WinCE 6.0 Kernel bug? by JasonNi

JasonNi
Sun Nov 04 21:46:01 PST 2007

Dear Sir,
Thanks for your reply.
I check the Start of free RAM is 803ef000, and my memory 8MB map is
0x80000000 - 0x807FFFFF.
Total remain memory is about 4 MB.
And the default Loader Pool needs 3 MB, File Pool need 1MB.
This causes the low memory condition hit at PagePoolInit state.

Should I add the IOCTL_HAL_GET_POOL_PARAMETERS in my OEM IOCTL to change the
Loader pool and File pool size to meet our platform memory ?

What is recommended size for loader and file pool if the free memory is only
4 MB?

Best Regards,
Jason Ni

"Steve Maillet (MVP)" wrote:

> > physmem.c Line 689
> This sort of failure almost always indicates a bug in the memory init in
> your startup code, OEMAddressTable or the Config.bib.
>
> Steve Maillet
> http://www.EmbeddedFusion.com
>

Re: WinCE 6.0 Kernel bug? by Ross

Ross
Mon Nov 05 14:52:10 PST 2007

This is indeed a kernel bug. Basically its a race condition between
PagePoolInit and initializing pCleanupThread. We've fixed this in our
current code base to do the initialize 1st. That said, you are getting low
on memory at a very early stage and there will likely be other issues due to
low memory if you got passed this one. You can workaround the issue by 1)
Adding memory memory, or 2) Reducing your memory footprint. If you'd like to
see a fix for this (QFE), please open a support request. You can do this by
either contacting whomever you obtained Windows CE from or you can use the
following link:
http://support.microsoft.com/oas/default.aspx?&c1=509&gprid=12015&

You can mention this thread / my name to expedite your request.

Thanks for reporting this,
Ross Jordan
Windows CE kernel team

"Jason Ni" <Jason Ni@discussions.microsoft.com> wrote in message
news:F07AD114-ED44-4CE2-AA87-BA500E5EB124@microsoft.com...
> My platform is ARM926 and only has 8 MB memory .
> The WinCE 6.0 Kernel always read address: 0x41 to cause data abort when
> booting.
> I try to trace the kernel code and find out the issue.
> SystemStartupFunc => PagePoolInit => InitPoolFromParameters => HoldPages
> The data abort is issued by HoldPages function in following code:
> physmem.c Line 689
> if (GET_CPRIO(pCurThread) < GET_CPRIO(pCleanupThread))
> The value of pCleanupThread is NULL at this time.
>
> The value of pCleanupThread wiil be assigned to pCurThread after
> PagePoolInit function.
>
> How to fix the issue?
> Assign the value for pCleanupThread before call PagePoolInit ?
> Or check if the pCleanupThread is NULL in physmem.c Line 689?
>
> Or that isn't a bug! Is it caused by other issue?
>
> Best Regards,
> Jason Ni