this moves the reading of counters out of an interfaces ifqs into
ifq.c.
there's no semantic change, i just want to keep the knowledge about
locking in an ifq all in the same place.
ok?
Index: if.c
===================================================================
RCS file: /cvs/src/sys/net/if.c,v
retrieving revision 1.523
diff -u -p -r1.523 if.c
--- if.c 4 Nov 2017 16:58:46 -0000 1.523
+++ if.c 14 Nov 2017 00:22:13 -0000
@@ -2276,30 +2276,14 @@ void
if_getdata(struct ifnet *ifp, struct if_data *data)
{
unsigned int i;
- struct ifqueue *ifq;
- uint64_t opackets = 0;
- uint64_t obytes = 0;
- uint64_t omcasts = 0;
- uint64_t oqdrops = 0;
+
+ *data = ifp->if_data;
for (i = 0; i < ifp->if_nifqs; i++) {
- ifq = ifp->if_ifqs[i];
+ struct ifqueue *ifq = ifp->if_ifqs[i];
- mtx_enter(&ifq->ifq_mtx);
- opackets += ifq->ifq_packets;
- obytes += ifq->ifq_bytes;
- oqdrops += ifq->ifq_qdrops;
- omcasts += ifq->ifq_mcasts;
- mtx_leave(&ifq->ifq_mtx);
- /* ifq->ifq_errors */
+ ifq_add_data(ifq, data);
}
-
- *data = ifp->if_data;
- data->ifi_opackets += opackets;
- data->ifi_obytes += obytes;
- data->ifi_oqdrops += oqdrops;
- data->ifi_omcasts += omcasts;
- /* ifp->if_data.ifi_oerrors */
}
/*
Index: ifq.c
===================================================================
RCS file: /cvs/src/sys/net/ifq.c,v
retrieving revision 1.13
diff -u -p -r1.13 ifq.c
--- ifq.c 14 Nov 2017 00:00:35 -0000 1.13
+++ ifq.c 14 Nov 2017 00:22:13 -0000
@@ -289,6 +289,18 @@ ifq_destroy(struct ifqueue *ifq)
ml_purge(&ml);
}
+void
+ifq_add_data(struct ifqueue *ifq, struct if_data *data)
+{
+ mtx_enter(&ifq->ifq_mtx);
+ data->ifi_opackets += ifq->ifq_packets;
+ data->ifi_obytes += ifq->ifq_bytes;
+ data->ifi_oqdrops += ifq->ifq_qdrops;
+ data->ifi_omcasts += ifq->ifq_mcasts;
+ /* ifp->if_data.ifi_oerrors */
+ mtx_leave(&ifq->ifq_mtx);
+}
+
int
ifq_enqueue(struct ifqueue *ifq, struct mbuf *m)
{
Index: ifq.h
===================================================================
RCS file: /cvs/src/sys/net/ifq.h,v
retrieving revision 1.14
diff -u -p -r1.14 ifq.h
--- ifq.h 14 Nov 2017 00:00:35 -0000 1.14
+++ ifq.h 14 Nov 2017 00:22:13 -0000
@@ -379,6 +379,7 @@ struct ifq_ops {
void ifq_init(struct ifqueue *, struct ifnet *, unsigned int);
void ifq_attach(struct ifqueue *, const struct ifq_ops *, void *);
void ifq_destroy(struct ifqueue *);
+void ifq_add_data(struct ifqueue *, struct if_data *);
int ifq_enqueue(struct ifqueue *, struct mbuf *);
void ifq_start(struct ifqueue *);
struct mbuf *ifq_deq_begin(struct ifqueue *);