git: kernel - lwkt_token revamp

看板DFBSD_commit作者時間15年前 (2010/06/07 02:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
commit 3b998fa96afe52828957ea4f65d15320eb0fe240 Author: Matthew Dillon <dillon@apollo.backplane.com> Date: Sun Jun 6 10:26:42 2010 -0700 kernel - lwkt_token revamp * Simplify the token API. Hide the lwkt_tokref mechanics and simplify the lwkt_gettoken()/lwkt_reltoken() API to remove the need to declare and pass a lwkt_tokref along with the token. This makes tokens operate more like locks. There is a minor restriction that tokens must be unlocked in exactly the reverse order they were locked in, and another restriction limiting the maximum number of tokens a thread can hold to defined value (32 for now). The tokrefs are now an array embedded in the thread structure. * Improve performance when blocking and unblocking threads with recursively held tokens. * Improve performance when acquiring the same token recursively. This operation is now O(1) and requires no locks or critical sections of any sort. This will allow us to acquire redundant tokens in deep call paths without having to worry about performance issues. * Add a flags field to the lwkt_token and lwkt_tokref structures and add a flagged feature which will acquire the MP lock along with a particular token. This will be used as a transitory mechanism in upcoming MPSAFE work. The mplock feature in the token structure can be directly connected to a mpsafe sysctl without being vulnerable to state-change races. Summary of changes: sys/ddb/db_ps.c | 4 +- .../linux/i386/linprocfs/linprocfs_subr.c | 19 +- sys/emulation/ndis/kern_ndis.c | 50 ++--- sys/emulation/ndis/subr_ntoskrnl.c | 57 ++--- sys/kern/kern_lockf.c | 6 +- sys/kern/lwkt_thread.c | 11 +- sys/kern/lwkt_token.c | 244 ++++++++++---------- sys/kern/subr_disk.c | 21 +- sys/kern/subr_kobj.c | 14 +- sys/kern/subr_rman.c | 52 ++--- sys/kern/sys_pipe.c | 144 +++++------- sys/kern/vfs_bio.c | 5 +- sys/kern/vfs_lock.c | 2 +- sys/kern/vfs_mount.c | 62 ++--- sys/kern/vfs_subr.c | 83 +++---- sys/kern/vfs_sync.c | 22 +- sys/kern/vfs_vm.c | 5 +- sys/kern/vfs_vopops.c | 19 ++- sys/netproto/smb/smb_subr.h | 1 - sys/platform/pc32/i386/busdma_machdep.c | 9 +- sys/platform/pc64/x86_64/busdma_machdep.c | 9 +- sys/platform/vkernel/platform/busdma_machdep.c | 9 +- sys/platform/vkernel64/platform/busdma_machdep.c | 9 +- sys/sys/mount.h | 8 +- sys/sys/rman.h | 5 +- sys/sys/thread.h | 48 +++-- sys/sys/thread2.h | 12 - sys/vfs/fifofs/fifo_vnops.c | 93 ++++---- sys/vfs/gnu/ext2fs/ext2_ihash.c | 37 ++-- sys/vfs/gnu/ext2fs/ext2_vnops.c | 15 +- sys/vfs/hammer/hammer_vnops.c | 10 +- sys/vfs/hpfs/hpfs_hash.c | 31 +-- sys/vfs/hpfs/hpfs_vfsops.c | 2 +- sys/vfs/isofs/cd9660/cd9660_node.c | 21 +- sys/vfs/msdosfs/msdosfs_denode.c | 26 +-- sys/vfs/nfs/nfs_subs.c | 6 +- sys/vfs/nfs/nfs_vnops.c | 5 +- sys/vfs/ntfs/ntfs_ihash.c | 24 +-- sys/vfs/ntfs/ntfs_vfsops.c | 1 - sys/vfs/udf/udf_vfsops.c | 2 +- sys/vfs/udf/udf_vnops.c | 19 +- sys/vfs/ufs/ffs_rawread.c | 5 +- sys/vfs/ufs/ffs_softdep.c | 16 +- sys/vfs/ufs/ufs_ihash.c | 37 ++-- sys/vfs/ufs/ufs_vnops.c | 10 +- 45 files changed, 581 insertions(+), 709 deletions(-) http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/3b998fa96afe52828957ea4f65d15320eb0fe240 -- DragonFly BSD source repository
文章代碼(AID): #1C2-9adO (DFBSD_commit)