124e51f36SHiten Pandya /*
29cca02b8SHiten Pandya * Copyright (c) 2003, 2004 The DragonFly Project. All rights reserved.
324e51f36SHiten Pandya *
49cca02b8SHiten Pandya * This code is derived from software contributed to The DragonFly Project
59cca02b8SHiten Pandya * by Hiten Pandya <hmp@backplane.com>.
624e51f36SHiten Pandya *
724e51f36SHiten Pandya * Redistribution and use in source and binary forms, with or without
824e51f36SHiten Pandya * modification, are permitted provided that the following conditions
924e51f36SHiten Pandya * are met:
1024e51f36SHiten Pandya *
1124e51f36SHiten Pandya * 1. Redistributions of source code must retain the above copyright
129cca02b8SHiten Pandya * notice, this list of conditions and the following disclaimer.
1324e51f36SHiten Pandya * 2. Redistributions in binary form must reproduce the above copyright
1424e51f36SHiten Pandya * notice, this list of conditions and the following disclaimer in
1524e51f36SHiten Pandya * the documentation and/or other materials provided with the
1624e51f36SHiten Pandya * distribution.
179cca02b8SHiten Pandya * 3. Neither the name of The DragonFly Project nor the names of its
189cca02b8SHiten Pandya * contributors may be used to endorse or promote products derived
199cca02b8SHiten Pandya * from this software without specific, prior written permission.
2024e51f36SHiten Pandya *
219cca02b8SHiten Pandya * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
229cca02b8SHiten Pandya * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
239cca02b8SHiten Pandya * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
249cca02b8SHiten Pandya * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
259cca02b8SHiten Pandya * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
269cca02b8SHiten Pandya * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
279cca02b8SHiten Pandya * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
289cca02b8SHiten Pandya * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
299cca02b8SHiten Pandya * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
309cca02b8SHiten Pandya * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
319cca02b8SHiten Pandya * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
329cca02b8SHiten Pandya * SUCH DAMAGE.
3324e51f36SHiten Pandya */
3424e51f36SHiten Pandya
3524e51f36SHiten Pandya /*
3624e51f36SHiten Pandya * Useful functions that are used across the source base for
3724e51f36SHiten Pandya * various purpose.
3824e51f36SHiten Pandya */
3924e51f36SHiten Pandya
4024e51f36SHiten Pandya #include <sys/param.h>
4124e51f36SHiten Pandya #include <sys/nchstats.h>
4224e51f36SHiten Pandya #include <sys/sysctl.h>
4324e51f36SHiten Pandya #include <strings.h>
44*3b40b13cSzrj
45*3b40b13cSzrj #include "kvm.h"
4624e51f36SHiten Pandya
4724e51f36SHiten Pandya /*
4824e51f36SHiten Pandya * Aggregate the per-cpu counters we retrieved via sysctl(2)
4924e51f36SHiten Pandya * to give the total across the CPUs. Use a nasty trick to
5024e51f36SHiten Pandya * aggregate the counters in the structure! YYY
5124e51f36SHiten Pandya */
5224e51f36SHiten Pandya void
kvm_nch_cpuagg(struct nchstats * unagg,struct nchstats * ttl,int cpucnt)5324e51f36SHiten Pandya kvm_nch_cpuagg(struct nchstats *unagg, struct nchstats *ttl, int cpucnt)
5424e51f36SHiten Pandya {
5524e51f36SHiten Pandya int i, off, siz;
5624e51f36SHiten Pandya siz = sizeof(struct nchstats);
5724e51f36SHiten Pandya
5824e51f36SHiten Pandya if (!unagg && !ttl)
5924e51f36SHiten Pandya return;
6024e51f36SHiten Pandya
6124e51f36SHiten Pandya bzero(ttl, siz);
6224e51f36SHiten Pandya
6324e51f36SHiten Pandya /* kick hmp@ for this nasty loop! :-) */
6424e51f36SHiten Pandya for (i = 0; i < cpucnt; ++i) {
6524e51f36SHiten Pandya for (off = 0; off < siz; off += sizeof(u_long)) {
6624e51f36SHiten Pandya *(u_long *)((char *)(*(&ttl)) + off) +=
6724e51f36SHiten Pandya *(u_long *)((char *)&unagg[i] + off);
6824e51f36SHiten Pandya }
6924e51f36SHiten Pandya }
7024e51f36SHiten Pandya }
71