cvs commit: src/sys/compat/ndis hal_var.h kern_ndis.c
ndis_var.h ntoskrnl_var.h pe_var.h subr_hal.c subr_ndis.c
subr_ntoskrn
Bill Paul
wpaul at FreeBSD.ORG
Wed Apr 14 15:04:53 PDT 2004
> > Now, I'm sure many people will be seized by the urge to criticize
> > me for doing an end run around our own spinlock implementation, but
> > it makes more sense to do it this way. Well, it does to me anyway.
>
> If you don't use atomic ops with memory barriers somewhere (like the mutex
> implementation does) then NDIS won't work on SMP. Really, IRQL is basically
> spl()s, and we don't use an spl-like model anymore. Just using mutexes for
> locking should give you all the protection you need.
Protection is all well and good, but I need to provide the right semantics
as well. I need to fool the drivers into thinking they can depend on the
usual Windows behavior, and make it easy to use the Windows data types,
and it's a pain in the butt to do that with regular mutexes.
And besides, I wanna.
Now, from subr_ntoskrnl.c:
__stdcall void
ntoskrnl_lock_dpc(/*lock*/ void)
{
kspin_lock *lock;
__asm__ __volatile__ ("" : "=c" (lock));
while (atomic_cmpset_int((volatile u_int *)lock, 0, 1) == 0)
/* do nothing */;
return;
}
__stdcall void
ntoskrnl_unlock_dpc(/*lock*/ void)
{
kspin_lock *lock;
__asm__ __volatile__ ("" : "=c" (lock));
atomic_cmpset_int((volatile u_int *)lock, 1, 0);
return;
}
These two routines do the actual work of acquiring and releasing the
lock (they map to KefAcquireSpinLockAtDpcLevel() and
KefReleaseSpinLockFromDpcLevel). Are you saying the former routine
should use atomic_cmpset_acq_int() and the latter atomic_cmpset_rel_int()?
-Bill
--
=============================================================================
-Bill Paul (510) 749-2329 | Senior Engineer, Master of Unix-Fu
wpaul at windriver.com | Wind River Systems
=============================================================================
<adamw> you're just BEGGING to face the moose
=============================================================================
More information about the cvs-src
mailing list