> -----Ursprungliche Nachricht-----
> Von: David Welch [SMTP:we...@cw...]
> Gesendet am: Donnerstag, 16. Mai 2002 19:18
> An: rea...@li...
> Betreff: Re: [ros-kernel] crash within MmOpenMemoryAreaByAddress
>
> On Thu, May 16, 2002 at 05:14:38PM +0200, Hartmut Birr wrote:
> > There exist 10..15 places where the kernel address space is locked.
> > A thread switching should not occur at this places.
> >
> Yes but this is only necessary if the address space is locked from
> DISPATCH_LEVEL; if Mm{Map,Unmap}LockedPages are the only places that
> need this currently then they can be fixed to not need the address space
> lock.
I doesn't understand your answer. I'm not sure, if my description of the
problem was right. The problem is the corrupted memory area queue from
kernel address space. Corruption of the queue is only possible, if there
occur two calls to a function which manipulate the queue (adding or
removing of entries). The queue is protected with a fast mutex of the
address space. This means, the corruption can only occur, if the calls
comes from the same thread. It is possible that a thread has locked the
address space and than a dpc or apc from the same thread is delivered
(completion function after a call to a device driver). This dpc or apc can
also lock the address space and manipulate the memory area queue. This does
corrupt the queue. The solution is to raise the irql at each manipulation
of the kernel address space. This disables the delivering of any dcp or apc
and the thread switching from irq 0.
- Hartmut
|