|  | @@ | 
|  | typedef qlock_t; | 
|  | @@ | 
|  | -struct mutex | 
|  | +qlock_t | 
|  |  | 
|  | @@ | 
|  | expression E; | 
|  | @@ | 
|  | -mutex_init( | 
|  | +qlock_init( | 
|  | E) | 
|  |  | 
|  | @@ | 
|  | expression E; | 
|  | @@ | 
|  | -mutex_lock( | 
|  | +qlock( | 
|  | E) | 
|  |  | 
|  | @@ | 
|  | expression E; | 
|  | @@ | 
|  | -mutex_trylock( | 
|  | +canqlock( | 
|  | E) | 
|  |  | 
|  | @@ | 
|  | expression E; | 
|  | @@ | 
|  | -mutex_unlock( | 
|  | +qunlock( | 
|  | E) | 
|  |  | 
|  | // the netif_addr_lock is a spinlock in linux, but it seems to protect the list | 
|  | // of addresses.  That's the 'qlock' (great name) in plan 9 | 
|  | @@ | 
|  | expression DEV; | 
|  | @@ | 
|  | -netif_addr_lock(DEV) | 
|  | +qlock(&DEV->qlock) | 
|  |  | 
|  | @@ | 
|  | expression DEV; | 
|  | @@ | 
|  | -netif_addr_unlock(DEV) | 
|  | +qunlock(&DEV->qlock) | 
|  |  | 
|  | @@ | 
|  | expression DEV; | 
|  | @@ | 
|  | -netif_addr_lock_bh(DEV) | 
|  | +qlock(&DEV->qlock) | 
|  |  | 
|  | @@ | 
|  | expression DEV; | 
|  | @@ | 
|  | -netif_addr_unlock_bh(DEV) | 
|  | +qunlock(&DEV->qlock) | 
|  |  | 
|  | @@ | 
|  | expression AMT; | 
|  | expression VARP; | 
|  | @@ | 
|  | -atomic_add(AMT, VARP) | 
|  | +atomic_add(VARP, AMT) | 
|  |  | 
|  | @@ | 
|  | expression E; | 
|  | @@ | 
|  | -atomic_dec_and_test(E) | 
|  | +atomic_sub_and_test(E, 1) |