--- src/sys/i386/include/Attic/atomic.h 2005/05/25 01:44:12 1.11 +++ src/sys/i386/include/Attic/atomic.h 2005/05/25 22:59:20 1.12 @@ -169,6 +169,8 @@ atomic_poll_release_int(volatile u_int * * bit 0-30 interrupt handler disabled bits (counter) * bit 31 interrupt handler currently running bit (1 = run) * + * atomic_intr_cond_try(P) Attempt to set bit 31. Returns non-zero + * on success, 0 on failure. * * atomic_intr_cond_enter(P, func, arg) * Increment the request counter and attempt to @@ -273,6 +275,17 @@ atomic_intr_cond_enter(atomic_intr_t *p, } static __inline +int +atomic_intr_cond_try(atomic_intr_t *p) +{ + int data; + + __asm __volatile(MPLOCKED "btsl $31,%1; setnc %%al; andl $255,%%eax" + : "=a"(data) : "m"(*p)); + return(data); +} + +static __inline void atomic_intr_cond_exit(atomic_intr_t *p, void (*func)(void *), void *arg) {