> KeAcquireGuardedMutex - can not be acquired at dispatch level, in other
> words, this means that it can not guard the callback which is in DPC. We
> probably need another spinlock.

The kernel patch was changed to use a spinlock and 
KeAcquireInStackQueuedSpinLockAtDpcLevel() and KeAcquireInStackQueuedSpinLock().
        
> Is the patch to umad.cpp realy related here?  (to the opensm issue)

The kernel timer code controls MAD retries, so it will affect umad and opensm, 
along with the CM and anything else that tries to send a MAD.

> In the function __destroying_ioc_pnp we should probably call keflushdpcs()
> in order to make sure that the timer was really stopped. Maybe we should
> put that in the stop to make it generic?

KeFlushQueuedDpcs is in stop timer.  Personally, I don't care about ibal's pnp 
goop.

> It also seems to me that there might be still races in the synchronization
> of the timer call back. Maybe in the timer-callbac, if timeout is 0 the
> callback should not run? I must say that I still need to think about it.

This is a fairly narrow race.  The timeout is only set to 0 in stop or in the 
callback.  First, stop is never used.  Second, whether the callback starts 
before stop can set the timeout to 0 is arbitrary.  If we cared, the kernel 
locking would need to look more like the userspace locking.  As it is, the user 
and kernel abstraction simply have different behavior.  In the kernel, calling 
stop will cancel the timer, but any active callback will still run.  
Personally, I don't see an issue with this, and it matches what the kernel 
provides.  We really only care that the callback won't run after calling 
destroy, which is handled.

- Sean

_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to