View | Details | Raw Unified | Return to bug 18524
Collapse All | Expand All

(-)sys.new/i386/i386/genassym.c (+1 lines)
Lines 197-202 Link Here
197
ASSYM(GD_PRV_CADDR2, offsetof(struct globaldata, gd_prv_CADDR2));
197
ASSYM(GD_PRV_CADDR2, offsetof(struct globaldata, gd_prv_CADDR2));
198
ASSYM(GD_PRV_CADDR3, offsetof(struct globaldata, gd_prv_CADDR3));
198
ASSYM(GD_PRV_CADDR3, offsetof(struct globaldata, gd_prv_CADDR3));
199
ASSYM(GD_PRV_PADDR1, offsetof(struct globaldata, gd_prv_PADDR1));
199
ASSYM(GD_PRV_PADDR1, offsetof(struct globaldata, gd_prv_PADDR1));
200
ASSYM(GD_CPU_TIME, offsetof(struct globaldata, gd_cpu_time));
200
ASSYM(PS_IDLESTACK, offsetof(struct privatespace, idlestack));
201
ASSYM(PS_IDLESTACK, offsetof(struct privatespace, idlestack));
201
ASSYM(PS_IDLESTACK_TOP, sizeof(struct privatespace));
202
ASSYM(PS_IDLESTACK_TOP, sizeof(struct privatespace));
202
#endif
203
#endif
(-)sys.new/i386/i386/globals.s (+2 lines)
Lines 110-115 Link Here
110
	.globl	gd_ss_eflags, gd_inside_intr
110
	.globl	gd_ss_eflags, gd_inside_intr
111
	.globl  gd_prv_CMAP1, gd_prv_CMAP2, gd_prv_CMAP3, gd_prv_PMAP1
111
	.globl  gd_prv_CMAP1, gd_prv_CMAP2, gd_prv_CMAP3, gd_prv_PMAP1
112
	.globl  gd_prv_CADDR1, gd_prv_CADDR2, gd_prv_CADDR3, gd_prv_PADDR1
112
	.globl  gd_prv_CADDR1, gd_prv_CADDR2, gd_prv_CADDR3, gd_prv_PADDR1
113
	.globl  gd_cpu_time
113
114
114
	.set    gd_cpuid,globaldata + GD_CPUID
115
	.set    gd_cpuid,globaldata + GD_CPUID
115
	.set    gd_cpu_lockid,globaldata + GD_CPU_LOCKID
116
	.set    gd_cpu_lockid,globaldata + GD_CPU_LOCKID
Lines 124-129 Link Here
124
	.set    gd_prv_CADDR2,globaldata + GD_PRV_CADDR2
125
	.set    gd_prv_CADDR2,globaldata + GD_PRV_CADDR2
125
	.set    gd_prv_CADDR3,globaldata + GD_PRV_CADDR3
126
	.set    gd_prv_CADDR3,globaldata + GD_PRV_CADDR3
126
	.set    gd_prv_PADDR1,globaldata + GD_PRV_PADDR1
127
	.set    gd_prv_PADDR1,globaldata + GD_PRV_PADDR1
128
	.set    gd_cpu_time,globaldata + GD_CPU_TIME
127
#endif
129
#endif
128
130
129
#if defined(SMP) || defined(APIC_IO)
131
#if defined(SMP) || defined(APIC_IO)
(-)sys.new/i386/i386/machdep.c (+10 lines)
Lines 102-107 Link Here
102
#ifdef SMP
102
#ifdef SMP
103
#include <machine/smp.h>
103
#include <machine/smp.h>
104
#include <machine/globaldata.h>
104
#include <machine/globaldata.h>
105
#include <sys/dkstat.h>
105
#endif
106
#endif
106
#ifdef PERFMON
107
#ifdef PERFMON
107
#include <machine/perfmon.h>
108
#include <machine/perfmon.h>
Lines 131-136 Link Here
131
132
132
static MALLOC_DEFINE(M_MBUF, "mbuf", "mbuf");
133
static MALLOC_DEFINE(M_MBUF, "mbuf", "mbuf");
133
134
135
#ifdef SMP
136
static cpu0_cpu_time[NCPUSTATES];
137
#endif
138
134
int	_udatasel, _ucodesel;
139
int	_udatasel, _ucodesel;
135
u_int	atdevbase;
140
u_int	atdevbase;
136
141
Lines 1986-1991 Link Here
1986
	proc0.p_addr->u_pcb.pcb_mpnest = 1;
1991
	proc0.p_addr->u_pcb.pcb_mpnest = 1;
1987
#endif
1992
#endif
1988
	proc0.p_addr->u_pcb.pcb_ext = 0;
1993
	proc0.p_addr->u_pcb.pcb_ext = 0;
1994
1995
#ifdef SMP
1996
       /* Setup cpu0's cpu_time */
1997
       cpu_time = &cpu0_cpu_time;
1998
#endif  
1989
}
1999
}
1990
2000
1991
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
2001
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
(-)sys.new/i386/i386/mp_machdep.c (-11 / +24 lines)
Lines 243-248 Link Here
243
/** XXX FIXME: what system files declare these??? */
243
/** XXX FIXME: what system files declare these??? */
244
extern struct region_descriptor r_gdt, r_idt;
244
extern struct region_descriptor r_gdt, r_idt;
245
245
246
extern long sys_time[NCPUSTATES];
247
#ifndef SMP
248
extern long cpu_time[NCPUSTATES];
249
#endif
250
246
int	bsp_apic_ready = 0;	/* flags useability of BSP apic */
251
int	bsp_apic_ready = 0;	/* flags useability of BSP apic */
247
int	mp_ncpus;		/* # of CPUs, including BSP */
252
int	mp_ncpus;		/* # of CPUs, including BSP */
248
int	mp_naps;		/* # of Applications processors */
253
int	mp_naps;		/* # of Applications processors */
Lines 1862-1867 Link Here
1862
		SMPpt[pg + 3] = 0;		/* *prv_CMAP3 */
1867
		SMPpt[pg + 3] = 0;		/* *prv_CMAP3 */
1863
		SMPpt[pg + 4] = 0;		/* *prv_PMAP1 */
1868
		SMPpt[pg + 4] = 0;		/* *prv_PMAP1 */
1864
1869
1870
		/* space for cpu time */
1871
		gd->gd_cpu_time = (long *) kmem_alloc(kernel_map, sizeof(long)
1872
                                                      * NCPUSTATES);
1873
 
1865
		/* prime data page for it to use */
1874
		/* prime data page for it to use */
1866
		gd->gd_cpuid = x;
1875
		gd->gd_cpuid = x;
1867
		gd->gd_cpu_lockid = x << 24;
1876
		gd->gd_cpu_lockid = x << 24;
Lines 2286-2293 Link Here
2286
int		checkstate_cpustate[NCPU];
2295
int		checkstate_cpustate[NCPU];
2287
u_long		checkstate_pc[NCPU];
2296
u_long		checkstate_pc[NCPU];
2288
2297
2289
extern long	cp_time[CPUSTATES];
2290
2291
#define PC_TO_INDEX(pc, prof)				\
2298
#define PC_TO_INDEX(pc, prof)				\
2292
        ((int)(((u_quad_t)((pc) - (prof)->pr_off) *	\
2299
        ((int)(((u_quad_t)((pc) - (prof)->pr_off) *	\
2293
            (u_quad_t)((prof)->pr_scale)) >> 16) & ~1)
2300
            (u_quad_t)((prof)->pr_scale)) >> 16) & ~1)
Lines 2336-2345 Link Here
2336
		if (pscnt > 1)
2343
		if (pscnt > 1)
2337
			return;
2344
			return;
2338
		p->p_uticks++;
2345
		p->p_uticks++;
2339
		if (p->p_nice > NZERO)
2346
		if (p->p_nice > NZERO) {
2340
			cp_time[CP_NICE]++;
2347
			cpu_time[CPU_NICE]++;
2341
		else
2348
			sys_time[CPU_NICE]++;
2342
			cp_time[CP_USER]++;
2349
		} else {
2350
			cpu_time[CPU_USER]++;
2351
			sys_time[CPU_NICE]++;
2352
		}
2343
		break;
2353
		break;
2344
	case CHECKSTATE_SYS:
2354
	case CHECKSTATE_SYS:
2345
#ifdef GPROF
2355
#ifdef GPROF
Lines 2358-2368 Link Here
2358
		if (pscnt > 1)
2368
		if (pscnt > 1)
2359
			return;
2369
			return;
2360
2370
2361
		if (!p)
2371
		if (!p) {
2362
			cp_time[CP_IDLE]++;
2372
			cpu_time[CPU_IDLE]++;
2363
		else {
2373
			sys_time[CPU_IDLE]++;
2374
		} else {
2364
			p->p_sticks++;
2375
			p->p_sticks++;
2365
			cp_time[CP_SYS]++;
2376
			cpu_time[CPU_SYS]++;
2377
			sys_time[CPU_SYS]++;
2366
		}
2378
		}
2367
		break;
2379
		break;
2368
	case CHECKSTATE_INTR:
2380
	case CHECKSTATE_INTR:
Lines 2384-2390 Link Here
2384
			return;
2396
			return;
2385
		if (p)
2397
		if (p)
2386
			p->p_iticks++;
2398
			p->p_iticks++;
2387
		cp_time[CP_INTR]++;
2399
		cpu_time[CPU_INTR]++;
2400
		sys_time[CPU_INTR]++;
2388
	}
2401
	}
2389
	if (p != NULL) {
2402
	if (p != NULL) {
2390
		schedclock(p);
2403
		schedclock(p);
(-)sys.new/i386/include/globaldata.h (+1 lines)
Lines 65-70 Link Here
65
	caddr_t		gd_prv_CADDR2;
65
	caddr_t		gd_prv_CADDR2;
66
	caddr_t		gd_prv_CADDR3;
66
	caddr_t		gd_prv_CADDR3;
67
	unsigned	*gd_prv_PADDR1;
67
	unsigned	*gd_prv_PADDR1;
68
	long		*gd_cpu_time;
68
#endif
69
#endif
69
	u_int		gd_astpending;
70
	u_int		gd_astpending;
70
};
71
};
(-)sys.new/i386/include/globals.h (+3 lines)
Lines 108-113 Link Here
108
#define	prv_CADDR2	GLOBAL_RVALUE(prv_CADDR2, caddr_t)
108
#define	prv_CADDR2	GLOBAL_RVALUE(prv_CADDR2, caddr_t)
109
#define	prv_CADDR3	GLOBAL_RVALUE(prv_CADDR3, caddr_t)
109
#define	prv_CADDR3	GLOBAL_RVALUE(prv_CADDR3, caddr_t)
110
#define	prv_PADDR1	GLOBAL_RVALUE(prv_PADDR1, unsigned *)
110
#define	prv_PADDR1	GLOBAL_RVALUE(prv_PADDR1, unsigned *)
111
#define cpu_time        GLOBAL_LVALUE(cpu_time, long *)    
111
#endif
112
#endif
112
#endif	/*UP kernel*/
113
#endif	/*UP kernel*/
113
114
Lines 125-130 Link Here
125
#ifdef USER_LDT
126
#ifdef USER_LDT
126
GLOBAL_FUNC(currentldt)
127
GLOBAL_FUNC(currentldt)
127
#endif
128
#endif
129
130
GLOBAL_FUNC(cpu_time)
128
131
129
#ifdef SMP
132
#ifdef SMP
130
GLOBAL_FUNC(cpuid)
133
GLOBAL_FUNC(cpuid)
(-)sys.new/kern/kern_clock.c (-13 / +21 lines)
Lines 69-79 Link Here
69
static void initclocks __P((void *dummy));
69
static void initclocks __P((void *dummy));
70
SYSINIT(clocks, SI_SUB_CLOCKS, SI_ORDER_FIRST, initclocks, NULL)
70
SYSINIT(clocks, SI_SUB_CLOCKS, SI_ORDER_FIRST, initclocks, NULL)
71
71
72
/* Some of these don't belong here, but it's easiest to concentrate them. */
72
/* System wide statistics */
73
#if defined(SMP) && defined(BETTER_CLOCK)
73
long           sys_time[NCPUSTATES];
74
long cp_time[CPUSTATES];
74
75
#else
75
#ifndef SMP
76
static long cp_time[CPUSTATES];
76
/* In the SMP case, this is in the per cpu private page */
77
long           cpu_time[NCPUSTATES];
77
#endif
78
#endif
78
79
79
long tk_cancc;
80
long tk_cancc;
Lines 343-352 Link Here
343
		 * Charge the time as appropriate.
344
		 * Charge the time as appropriate.
344
		 */
345
		 */
345
		p->p_uticks++;
346
		p->p_uticks++;
346
		if (p->p_nice > NZERO)
347
		if (p->p_nice > NZERO) {
347
			cp_time[CP_NICE]++;
348
			cpu_time[CPU_NICE]++;
348
		else
349
			sys_time[CPU_NICE]++;
349
			cp_time[CP_USER]++;
350
		} else {
351
			cpu_time[CPU_USER]++;
352
			sys_time[CPU_USER]++;
353
		}
350
	} else {
354
	} else {
351
#ifdef GPROF
355
#ifdef GPROF
352
		/*
356
		/*
Lines 383-394 Link Here
383
		if (CLKF_INTR(frame)) {
387
		if (CLKF_INTR(frame)) {
384
			if (p != NULL)
388
			if (p != NULL)
385
				p->p_iticks++;
389
				p->p_iticks++;
386
			cp_time[CP_INTR]++;
390
			cpu_time[CPU_INTR]++;
391
			sys_time[CPU_INTR]++;
387
		} else if (p != NULL) {
392
		} else if (p != NULL) {
388
			p->p_sticks++;
393
			p->p_sticks++;
389
			cp_time[CP_SYS]++;
394
			cpu_time[CPU_SYS]++;
390
		} else
395
			sys_time[CPU_SYS]++;
391
			cp_time[CP_IDLE]++;
396
		} else {
397
			cpu_time[CPU_IDLE]++;
398
			sys_time[CPU_IDLE]++;
399
		}
392
	}
400
	}
393
	pscnt = psdiv;
401
	pscnt = psdiv;
394
402
(-)sys.new/sys/dkstat.h (-6 / +6 lines)
Lines 42-53 Link Here
42
#ifndef _SYS_DKSTAT_H_
42
#ifndef _SYS_DKSTAT_H_
43
#define _SYS_DKSTAT_H_ 1
43
#define _SYS_DKSTAT_H_ 1
44
44
45
#define	CP_USER		0
45
#define	CPU_USER		0
46
#define	CP_NICE		1
46
#define	CPU_NICE		1
47
#define	CP_SYS		2
47
#define	CPU_SYS			2
48
#define	CP_INTR		3
48
#define	CPU_INTR		3
49
#define	CP_IDLE		4
49
#define	CPU_IDLE		4
50
#define	CPUSTATES	5
50
#define	NCPUSTATES		5
51
51
52
#ifdef _KERNEL
52
#ifdef _KERNEL

Return to bug 18524