Page MenuHomeFreeBSD

D38116.id115341.diff
No OneTemporary

D38116.id115341.diff

diff --git a/sys/kern/kern_clock.c b/sys/kern/kern_clock.c
--- a/sys/kern/kern_clock.c
+++ b/sys/kern/kern_clock.c
@@ -834,22 +834,15 @@
static void
watchdog_fire(void)
{
- int nintr;
- uint64_t inttotal;
- u_long *curintr;
- char *curname;
-
- curintr = intrcnt;
- curname = intrnames;
- inttotal = 0;
- nintr = sintrcnt / sizeof(u_long);
+ uint64_t inttotal = 0;
+ u_int i;
printf("interrupt total\n");
- while (--nintr >= 0) {
- if (*curintr)
- printf("%-12s %20lu\n", curname, *curintr);
- curname += strlen(curname) + 1;
- inttotal += *curintr++;
+ for (i = 0; i < intrcnt_index; ++i) {
+ if (intrcnt[i] != 0)
+ printf("%-12s %20lu\n", intrnames + i * (MAXCOMLEN + 1),
+ intrcnt[i]);
+ inttotal += intrcnt[i];
}
printf("Total %20ju\n", (uintmax_t)inttotal);
diff --git a/sys/kern/kern_intr.c b/sys/kern/kern_intr.c
--- a/sys/kern/kern_intr.c
+++ b/sys/kern/kern_intr.c
@@ -1644,7 +1644,8 @@
static int
sysctl_intrnames(SYSCTL_HANDLER_ARGS)
{
- return (sysctl_handle_opaque(oidp, intrnames, sintrnames, req));
+ return (sysctl_handle_opaque(oidp, intrnames,
+ intrcnt_index * (MAXCOMLEN + 1), req));
}
SYSCTL_PROC(_hw, OID_AUTO, intrnames,
@@ -1662,18 +1663,22 @@
if (req->flags & SCTL_MASK32) {
if (!req->oldptr)
- return (sysctl_handle_opaque(oidp, NULL, sintrcnt / 2, req));
- intrcnt32 = malloc(sintrcnt / 2, M_TEMP, M_NOWAIT);
+ return (sysctl_handle_opaque(oidp, NULL,
+ intrcnt_index * sizeof(uint32_t), req));
+ intrcnt32 = malloc(intrcnt_index * sizeof(uint32_t), M_TEMP,
+ M_NOWAIT);
if (intrcnt32 == NULL)
return (ENOMEM);
- for (i = 0; i < sintrcnt / sizeof (u_long); i++)
+ for (i = 0; i < intrcnt_index; i++)
intrcnt32[i] = intrcnt[i];
- error = sysctl_handle_opaque(oidp, intrcnt32, sintrcnt / 2, req);
+ error = sysctl_handle_opaque(oidp, intrcnt32,
+ intrcnt_index * sizeof(uint32_t), req);
free(intrcnt32, M_TEMP);
return (error);
}
#endif
- return (sysctl_handle_opaque(oidp, intrcnt, sintrcnt, req));
+ return (sysctl_handle_opaque(oidp, intrcnt,
+ intrcnt_index * sizeof(u_long), req));
}
SYSCTL_PROC(_hw, OID_AUTO, intrcnt,
@@ -1687,19 +1692,11 @@
*/
DB_SHOW_COMMAND_FLAGS(intrcnt, db_show_intrcnt, DB_CMD_MEMSAFE)
{
- u_long *i;
- char *cp;
- u_int j;
-
- cp = intrnames;
- j = 0;
- for (i = intrcnt; j < (sintrcnt / sizeof(u_long)) && !db_pager_quit;
- i++, j++) {
- if (*cp == '\0')
- break;
- if (*i != 0)
- db_printf("%s\t%lu\n", cp, *i);
- cp += strlen(cp) + 1;
- }
+ u_int i;
+
+ for (i = 0; i < intrcnt_index && !db_pager_quit; ++i)
+ if (intrcnt[i] != 0)
+ db_printf("%s\t%lu\n", intrnames + i * (MAXCOMLEN + 1),
+ intrcnt[i]);
}
#endif
diff --git a/sys/kern/subr_intr.c b/sys/kern/subr_intr.c
--- a/sys/kern/subr_intr.c
+++ b/sys/kern/subr_intr.c
@@ -149,9 +149,7 @@
/* Data for MI statistics reporting. */
u_long *intrcnt;
char *intrnames;
-size_t sintrcnt;
-size_t sintrnames;
-static u_int intrcnt_index;
+u_int intrcnt_index;
static struct intr_irqsrc *intr_map_get_isrc(u_int res_id);
static void intr_map_set_isrc(u_int res_id, struct intr_irqsrc *isrc);
@@ -185,8 +183,6 @@
M_WAITOK | M_ZERO);
intrnames = mallocarray(intrcnt_count, INTRNAME_LEN, M_INTRNG,
M_WAITOK | M_ZERO);
- sintrcnt = intrcnt_count * sizeof(u_long);
- sintrnames = intrcnt_count * INTRNAME_LEN;
irq_sources = mallocarray(intr_nirq, sizeof(struct intr_irqsrc*),
M_INTRNG, M_WAITOK | M_ZERO);
}
diff --git a/sys/powerpc/powerpc/intr_machdep.c b/sys/powerpc/powerpc/intr_machdep.c
--- a/sys/powerpc/powerpc/intr_machdep.c
+++ b/sys/powerpc/powerpc/intr_machdep.c
@@ -116,7 +116,6 @@
int base;
};
-static u_int intrcnt_index = 0;
static struct mtx intr_table_lock;
static struct powerpc_intr **powerpc_intrs;
static struct pic piclist[MAX_PICS];
@@ -131,8 +130,7 @@
u_long *intrcnt;
char *intrnames;
-size_t sintrcnt = sizeof(intrcnt);
-size_t sintrnames = sizeof(intrnames);
+u_int intrcnt_index;
int nintrcnt;
/*
@@ -181,8 +179,6 @@
M_ZERO);
intrnames = mallocarray(nintrcnt, MAXCOMLEN + 1, M_INTR, M_WAITOK |
M_ZERO);
- sintrcnt = nintrcnt * sizeof(u_long);
- sintrnames = nintrcnt * (MAXCOMLEN + 1);
intrcnt_setname("???", 0);
intrcnt_index = 1;
diff --git a/sys/sys/interrupt.h b/sys/sys/interrupt.h
--- a/sys/sys/interrupt.h
+++ b/sys/sys/interrupt.h
@@ -160,8 +160,7 @@
/* Counts and names for statistics (defined in MD code). */
extern u_long *intrcnt; /* counts for each device and stray */
extern char *intrnames; /* string table containing device names */
-extern size_t sintrcnt; /* size of intrcnt table */
-extern size_t sintrnames; /* size of intrnames table */
+extern u_int intrcnt_index; /* number of counters/names */
#ifdef DDB
void db_dump_intr_event(struct intr_event *ie, int handlers);
diff --git a/sys/x86/x86/intr_machdep.c b/sys/x86/x86/intr_machdep.c
--- a/sys/x86/x86/intr_machdep.c
+++ b/sys/x86/x86/intr_machdep.c
@@ -76,7 +76,6 @@
typedef void (*mask_fn)(void *);
-static int intrcnt_index;
static struct intsrc **interrupt_sources;
#ifdef SMP
static struct intsrc **interrupt_sorted;
@@ -97,8 +96,7 @@
u_long *intrcnt;
char *intrnames;
-size_t sintrcnt = sizeof(intrcnt);
-size_t sintrnames = sizeof(intrnames);
+u_int intrcnt_index;
int nintrcnt;
static MALLOC_DEFINE(M_INTR, "intr", "Interrupt Sources");
@@ -191,8 +189,6 @@
M_ZERO);
intrnames = mallocarray(nintrcnt, MAXCOMLEN + 1, M_INTR, M_WAITOK |
M_ZERO);
- sintrcnt = nintrcnt * sizeof(u_long);
- sintrnames = nintrcnt * (MAXCOMLEN + 1);
intrcnt_setname("???", 0);
intrcnt_index = 1;

File Metadata

Mime Type
text/plain
Expires
Wed, Feb 12, 7:39 AM (17 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16607970
Default Alt Text
D38116.id115341.diff (5 KB)

Event Timeline