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);
                }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to