[ros-dev] ARM Guy Broke BOOT on Real Hardware

tamlin at algonet.se tamlin at algonet.se
Mon Jul 28 17:23:23 CEST 2008


Alex wrote:

>It looks like a guarded mutex is being acquired at DPC level. That's 
>pretty bad.

Well, at least it's redundant and useless. :-)

>Pushlocks shouldn't be acquired at DPC level either

Indeed. If "you" are at DPC level, you have but one synchronization to 
care about - SMP (i.e. CPU<->CPU).

>, but there's no  
>ASSERTs in the pushlock code that check for that.

An oversight that should be fixed, I'm sure (even if it happened to 
slow down the system by a whole order of magnitude, which it won't).

>MMProbeAndLockPages should never be called for paged pool addreses
>while at DPC level,

Should MmProbeAndLock ever be called at IRQL above APC level? I mean, 
what if the probing fails? Should the paging executive somehow preempt 
this call and page in the missing pages (or should it simply throw  a 
"page not present" exception - not too great to do at DPC level I'd 
say)?

>which means the driver probably called it for a
>non-paged pool address.

If my previous suspicion is correct, I build on that and suspect this 
is an error in itself. The ProbeAndLock call should be done at APC 
level (though I may be completely wrong, but do read my finishing 
line).

>In that case, the whole loop about checking if the page is present 
and  
>then faulting it in is irrelevant, and won't happen.

Right. Page fault at DPC level == Bad Move(tm).

-- 
Mike


More information about the Ros-dev mailing list