diff options
author | kib <kib@FreeBSD.org> | 2016-07-28 11:51:20 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2016-07-28 11:51:20 +0000 |
commit | b09e5777ab34d6c70f421ad7a7f27bc70175f4c1 (patch) | |
tree | 54272324bb973f79235a65f2638ef63cb08a3eef /sys/kern | |
parent | 72c9c91dedc4a8f81586e87c42b30a1480a643e8 (diff) | |
download | FreeBSD-src-b09e5777ab34d6c70f421ad7a7f27bc70175f4c1.zip FreeBSD-src-b09e5777ab34d6c70f421ad7a7f27bc70175f4c1.tar.gz |
MFC r303151:
Provide counter_warning(9) KPI.
MFC r303155:
Hide counted_warning(9) under #ifdef _KERNEL braces.
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/subr_prf.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/sys/kern/subr_prf.c b/sys/kern/subr_prf.c index 5698bd4..d110fbf 100644 --- a/sys/kern/subr_prf.c +++ b/sys/kern/subr_prf.c @@ -1185,3 +1185,24 @@ sbuf_hexdump(struct sbuf *sb, const void *ptr, int length, const char *hdr, } } +#ifdef _KERNEL +void +counted_warning(unsigned *counter, const char *msg) +{ + struct thread *td; + unsigned c; + + for (;;) { + c = *counter; + if (c == 0) + break; + if (atomic_cmpset_int(counter, c, c - 1)) { + td = curthread; + log(LOG_INFO, "pid %d (%s) %s%s\n", + td->td_proc->p_pid, td->td_name, msg, + c > 1 ? "" : " - not logging anymore"); + break; + } + } +} +#endif |