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)