Print this page
patch as-lock-macro-simplification

*** 238,260 **** * deadlocks in the style of fop_write()+as_fault()/as_*()+fop_putpage() and * fop_read()+as_fault()/as_*()+fop_getpage(). (See the Big Theory Statement * in rwlock.c for more information on the semantics of and motivation behind * RW_READER_STARVEWRITER.) */ ! #define AS_LOCK_ENTER(as, lock, type) rw_enter((lock), \ (type) == RW_READER ? RW_READER_STARVEWRITER : (type)) ! #define AS_LOCK_EXIT(as, lock) rw_exit((lock)) ! #define AS_LOCK_DESTROY(as, lock) rw_destroy((lock)) ! #define AS_LOCK_TRYENTER(as, lock, type) rw_tryenter((lock), \ (type) == RW_READER ? RW_READER_STARVEWRITER : (type)) /* * Macros to test lock states. */ ! #define AS_LOCK_HELD(as, lock) RW_LOCK_HELD((lock)) ! #define AS_READ_HELD(as, lock) RW_READ_HELD((lock)) ! #define AS_WRITE_HELD(as, lock) RW_WRITE_HELD((lock)) /* * macros to walk thru segment lists */ #define AS_SEGFIRST(as) avl_first(&(as)->a_segtree) --- 238,260 ---- * deadlocks in the style of fop_write()+as_fault()/as_*()+fop_putpage() and * fop_read()+as_fault()/as_*()+fop_getpage(). (See the Big Theory Statement * in rwlock.c for more information on the semantics of and motivation behind * RW_READER_STARVEWRITER.) */ ! #define AS_LOCK_ENTER(as, type) rw_enter(&(as)->a_lock, \ (type) == RW_READER ? RW_READER_STARVEWRITER : (type)) ! #define AS_LOCK_EXIT(as) rw_exit(&(as)->a_lock) ! #define AS_LOCK_DESTROY(as) rw_destroy(&(as)->a_lock) ! #define AS_LOCK_TRYENTER(as, type) rw_tryenter(&(as)->a_lock, \ (type) == RW_READER ? RW_READER_STARVEWRITER : (type)) /* * Macros to test lock states. */ ! #define AS_LOCK_HELD(as) RW_LOCK_HELD(&(as)->a_lock) ! #define AS_READ_HELD(as) RW_READ_HELD(&(as)->a_lock) ! #define AS_WRITE_HELD(as) RW_WRITE_HELD(&(as)->a_lock) /* * macros to walk thru segment lists */ #define AS_SEGFIRST(as) avl_first(&(as)->a_segtree)