svn commit: r244264 - in projects/calloutng/sys: kern sys
Alexander Motin
mav at FreeBSD.org
Sat Dec 15 14:45:34 UTC 2012
Author: mav
Date: Sat Dec 15 14:45:32 2012
New Revision: 244264
URL: http://svnweb.freebsd.org/changeset/base/244264
Log:
Add several functions for KPI completeness.
Modified:
projects/calloutng/sys/kern/kern_synch.c
projects/calloutng/sys/sys/systm.h
Modified: projects/calloutng/sys/kern/kern_synch.c
==============================================================================
--- projects/calloutng/sys/kern/kern_synch.c Sat Dec 15 14:36:41 2012 (r244263)
+++ projects/calloutng/sys/kern/kern_synch.c Sat Dec 15 14:45:32 2012 (r244264)
@@ -352,8 +352,11 @@ msleep_spin_flags(void *ident, struct mt
* to a "timo" value of one.
*/
int
-pause(const char *wmesg, int timo)
+_pause(const char *wmesg, int timo, struct bintime *bt, struct bintime *pr,
+ int flags)
{
+ struct bintime now, bt2;
+
KASSERT(timo >= 0, ("pause: timo must be >= 0"));
/* silently convert invalid timeouts */
@@ -361,6 +364,12 @@ pause(const char *wmesg, int timo)
timo = 1;
if (cold) {
+ if (bt != NULL) {
+ binuptime(&now);
+ bt2 = *bt;
+ bintime_sub(&bt2, &now);
+ timo = bt2.sec * hz + ((bt2.frac >> 32) * hz >> 32);
+ }
/*
* We delay one HZ at a time to avoid overflowing the
* system specific DELAY() function(s):
@@ -373,7 +382,7 @@ pause(const char *wmesg, int timo)
DELAY(timo * tick);
return (0);
}
- return (tsleep(&pause_wchan, 0, wmesg, timo));
+ return (_sleep(&pause_wchan, NULL, 0, wmesg, timo, bt, pr, flags));
}
/*
Modified: projects/calloutng/sys/sys/systm.h
==============================================================================
--- projects/calloutng/sys/sys/systm.h Sat Dec 15 14:36:41 2012 (r244263)
+++ projects/calloutng/sys/sys/systm.h Sat Dec 15 14:45:32 2012 (r244264)
@@ -360,9 +360,18 @@ int msleep_spin_flags(void *chan, struct
int timo, int flags) __nonnull(1);
#define msleep_spin(chan, mtx, wmesg, timo) \
msleep_spin_flags((chan), (mtx), (wmesg), (timo), 0)
-int pause(const char *wmesg, int timo);
+int _pause(const char *wmesg, int timo, struct bintime *bt,
+ struct bintime *pr, int flags);
+#define pause(wmesg, timo) \
+ _pause((wmesg), (timo), NULL, NULL, 0)
+#define pause_flags(wmesg, timo, flags) \
+ _pause((wmesg), (timo), NULL, NULL, (flags))
+#define pause_bt(wmesg, bt, pr) \
+ _pause((wmesg), 0, (bt), (pr), 0)
#define tsleep(chan, pri, wmesg, timo) \
_sleep((chan), NULL, (pri), (wmesg), (timo), NULL, NULL, 0)
+#define tsleep_flags(chan, pri, wmesg, timo, flags) \
+ _sleep((chan), NULL, (pri), (wmesg), (timo), NULL, NULL, (flags))
#define tsleep_bt(chan, pri, wmesg, bt, pr) \
_sleep((chan), NULL, (pri), (wmesg), 0, (bt), (pr), 0)
void wakeup(void *chan) __nonnull(1);
More information about the svn-src-projects
mailing list