Module Name: src
Committed By: thorpej
Date: Wed Jan 29 03:04:55 UTC 2020
Modified Files:
src/sys/net: net_stats.h
Log Message:
- Make _NET_STAT_GETREF()'s return value a net_stat_ref_t, which is
defined as a "void *" to prevent using a net_stat_ref_t as an array.
- For each _NET_STATADD(), etc. macro, also define a _NET_STATADD_REF()
macro that takes a ref returned by _NET_STAT_GETREF() as an argument.
This is intended to replace direct subscripting of the refernce;
consumers of this API will be updated in future commits.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/net/net_stats.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/net/net_stats.h
diff -u src/sys/net/net_stats.h:1.4 src/sys/net/net_stats.h:1.5
--- src/sys/net/net_stats.h:1.4 Fri Sep 5 06:01:24 2014
+++ src/sys/net/net_stats.h Wed Jan 29 03:04:55 2020
@@ -1,7 +1,7 @@
-/* $NetBSD: net_stats.h,v 1.4 2014/09/05 06:01:24 matt Exp $ */
+/* $NetBSD: net_stats.h,v 1.5 2020/01/29 03:04:55 thorpej Exp $ */
/*-
- * Copyright (c) 2008 The NetBSD Foundation, Inc.
+ * Copyright (c) 2008, 2020 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -35,34 +35,60 @@
#ifdef _KERNEL
#include <sys/percpu.h>
-#define _NET_STAT_GETREF(stat) ((uint64_t *)percpu_getref((stat)))
+typedef void *net_stat_ref_t;
+
+#define _NET_STAT_GETREF(stat) ((net_stat_ref_t)percpu_getref((stat)))
#define _NET_STAT_PUTREF(stat) percpu_putref((stat))
-#define _NET_STATINC(stat, x) \
+#define _NET_STATINC_REF(r, x) \
do { \
- uint64_t *_stat_ = _NET_STAT_GETREF(stat); \
+ uint64_t *_stat_ = (r); \
_stat_[x]++; \
+} while (/*CONSTCOND*/0)
+
+#define _NET_STATINC(stat, x) \
+do { \
+ net_stat_ref_t _nsr_ = _NET_STAT_GETREF(stat); \
+ _NET_STATINC_REF(_nsr_, x); \
_NET_STAT_PUTREF(stat); \
} while (/*CONSTCOND*/0)
-#define _NET_STATDEC(stat, x) \
+#define _NET_STATDEC_REF(r, x) \
do { \
- uint64_t *_stat_ = _NET_STAT_GETREF(stat); \
+ uint64_t *_stat_ = (r); \
_stat_[x]--; \
+} while (/*CONSTCOND*/0)
+
+#define _NET_STATDEC(stat, x) \
+do { \
+ net_stat_ref_t _nsr_ = _NET_STAT_GETREF(stat); \
+ _NET_STATDEC_REF(_nsr_, x); \
_NET_STAT_PUTREF(stat); \
} while (/*CONSTCOND*/0)
-#define _NET_STATADD(stat, x, v) \
+#define _NET_STATADD_REF(r, x, v) \
do { \
- uint64_t *_stat_ = _NET_STAT_GETREF(stat); \
+ uint64_t *_stat_ = (r); \
_stat_[x] += (v); \
+} while (/*CONSTCOND*/0)
+
+#define _NET_STATADD(stat, x, v) \
+do { \
+ net_stat_ref_t _nsr_ = _NET_STAT_GETREF(stat); \
+ _NET_STATADD_REF(_nsr_, x, v); \
_NET_STAT_PUTREF(stat); \
} while (/*CONSTCOND*/0)
-#define _NET_STATSUB(stat, x, v) \
+#define _NET_STATSUB_REF(r, x, v) \
do { \
- uint64_t *_stat_ = _NET_STAT_GETREF(stat); \
+ uint64_t *_stat_ = (r); \
_stat_[x] -= (v); \
+} while (/*CONSTCOND*/0)
+
+#define _NET_STATSUB(stat, x, v) \
+do { \
+ net_stat_ref_t _nsr_ = _NET_STAT_GETREF(stat); \
+ _NET_STATSUB_REF(_nsr_, x, v); \
_NET_STAT_PUTREF(stat); \
} while (/*CONSTCOND*/0)