From owner-svn-src-all@FreeBSD.ORG Fri May 13 05:27:58 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E11C7106566C; Fri, 13 May 2011 05:27:58 +0000 (UTC) (envelope-from mdf@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CE1978FC12; Fri, 13 May 2011 05:27:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p4D5Rwfq060923; Fri, 13 May 2011 05:27:58 GMT (envelope-from mdf@svn.freebsd.org) Received: (from mdf@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p4D5RwSk060914; Fri, 13 May 2011 05:27:58 GMT (envelope-from mdf@svn.freebsd.org) Message-Id: <201105130527.p4D5RwSk060914@svn.freebsd.org> From: Matthew D Fleming Date: Fri, 13 May 2011 05:27:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r221829 - in head/sys: kern sys ufs/ffs X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 May 2011 05:27:59 -0000 Author: mdf Date: Fri May 13 05:27:58 2011 New Revision: 221829 URL: http://svn.freebsd.org/changeset/base/221829 Log: Use a name instead of a magic number for kern_yield(9) when the priority should not change. Fetch the td_user_pri under the thread lock. This is probably not necessary but a magic number also seems preferable to knowing the implementation details here. Requested by: Jason Behmer < jason DOT behmer AT isilon DOT com > Modified: head/sys/kern/kern_synch.c head/sys/kern/kern_sysctl.c head/sys/kern/vfs_bio.c head/sys/kern/vfs_mount.c head/sys/kern/vfs_subr.c head/sys/kern/vfs_vnops.c head/sys/sys/priority.h head/sys/ufs/ffs/ffs_softdep.c Modified: head/sys/kern/kern_synch.c ============================================================================== --- head/sys/kern/kern_synch.c Fri May 13 04:54:01 2011 (r221828) +++ head/sys/kern/kern_synch.c Fri May 13 05:27:58 2011 (r221829) @@ -551,7 +551,7 @@ maybe_yield(void) { if (should_yield()) - kern_yield(curthread->td_user_pri); + kern_yield(PRI_USER); } void @@ -562,6 +562,8 @@ kern_yield(int prio) td = curthread; DROP_GIANT(); thread_lock(td); + if (prio == PRI_USER) + prio = td->td_user_pri; if (prio >= 0) sched_prio(td, prio); mi_switch(SW_VOL | SWT_RELINQUISH, NULL); Modified: head/sys/kern/kern_sysctl.c ============================================================================== --- head/sys/kern/kern_sysctl.c Fri May 13 04:54:01 2011 (r221828) +++ head/sys/kern/kern_sysctl.c Fri May 13 05:27:58 2011 (r221829) @@ -1590,7 +1590,7 @@ userland_sysctl(struct thread *td, int * SYSCTL_XUNLOCK(); if (error != EAGAIN) break; - kern_yield(curthread->td_user_pri); + kern_yield(PRI_USER); } CURVNET_RESTORE(); Modified: head/sys/kern/vfs_bio.c ============================================================================== --- head/sys/kern/vfs_bio.c Fri May 13 04:54:01 2011 (r221828) +++ head/sys/kern/vfs_bio.c Fri May 13 05:27:58 2011 (r221829) @@ -2234,7 +2234,7 @@ buf_daemon() while (numdirtybuffers > lodirtybuffers) { if (buf_do_flush(NULL) == 0) break; - kern_yield(-1); + kern_yield(PRI_UNCHANGED); } lodirtybuffers = lodirtysave; Modified: head/sys/kern/vfs_mount.c ============================================================================== --- head/sys/kern/vfs_mount.c Fri May 13 04:54:01 2011 (r221828) +++ head/sys/kern/vfs_mount.c Fri May 13 05:27:58 2011 (r221829) @@ -1644,7 +1644,7 @@ __mnt_vnode_next(struct vnode **mvp, str KASSERT((*mvp)->v_mount == mp, ("marker vnode mount list mismatch")); if (should_yield()) { MNT_IUNLOCK(mp); - kern_yield(-1); + kern_yield(PRI_UNCHANGED); MNT_ILOCK(mp); } vp = TAILQ_NEXT(*mvp, v_nmntvnodes); Modified: head/sys/kern/vfs_subr.c ============================================================================== --- head/sys/kern/vfs_subr.c Fri May 13 04:54:01 2011 (r221828) +++ head/sys/kern/vfs_subr.c Fri May 13 05:27:58 2011 (r221829) @@ -718,7 +718,7 @@ next_iter: continue; MNT_IUNLOCK(mp); yield: - kern_yield(-1); + kern_yield(PRI_UNCHANGED); relock_mnt: MNT_ILOCK(mp); } @@ -831,7 +831,7 @@ vnlru_proc(void) vnlru_nowhere++; tsleep(vnlruproc, PPAUSE, "vlrup", hz * 3); } else - kern_yield(-1); + kern_yield(PRI_UNCHANGED); } } Modified: head/sys/kern/vfs_vnops.c ============================================================================== --- head/sys/kern/vfs_vnops.c Fri May 13 04:54:01 2011 (r221828) +++ head/sys/kern/vfs_vnops.c Fri May 13 05:27:58 2011 (r221829) @@ -491,7 +491,7 @@ vn_rdwr_inchunks(rw, vp, base, len, offs break; offset += chunk; base = (char *)base + chunk; - kern_yield(curthread->td_user_pri); + kern_yield(PRI_USER); } while (len); if (aresid) *aresid = len + iaresid; Modified: head/sys/sys/priority.h ============================================================================== --- head/sys/sys/priority.h Fri May 13 04:54:01 2011 (r221828) +++ head/sys/sys/priority.h Fri May 13 05:27:58 2011 (r221829) @@ -117,6 +117,12 @@ #define PRI_MIN_IDLE (224) #define PRI_MAX_IDLE (PRI_MAX) +#ifdef _KERNEL +/* Other arguments for kern_yield(9). */ +#define PRI_USER -2 /* Change to current user priority. */ +#define PRI_UNCHANGED -1 /* Do not change priority. */ +#endif + struct priority { u_char pri_class; /* Scheduling class. */ u_char pri_level; /* Normal priority level. */ Modified: head/sys/ufs/ffs/ffs_softdep.c ============================================================================== --- head/sys/ufs/ffs/ffs_softdep.c Fri May 13 04:54:01 2011 (r221828) +++ head/sys/ufs/ffs/ffs_softdep.c Fri May 13 05:27:58 2011 (r221829) @@ -1412,7 +1412,7 @@ softdep_process_worklist(mp, full) */ if (should_yield()) { FREE_LOCK(&lk); - kern_yield(-1); + kern_yield(PRI_UNCHANGED); bwillwrite(); ACQUIRE_LOCK(&lk); }