Page MenuHomeFreeBSD

D38116.1777648696.diff
No OneTemporary

Size
8 KB
Referenced Files
None
Subscribers
None

D38116.1777648696.diff

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
@@ -152,8 +152,7 @@
/* Data for statistics reporting. */
static u_long *intrcnt;
static char *intrnames;
-static size_t sintrcnt;
-static size_t sintrnames;
+static u_int intrcnt_index;
static int nintrcnt;
static bitstr_t *intrcnt_bitmap;
@@ -188,8 +187,6 @@
M_WAITOK | M_ZERO);
intrnames = mallocarray(nintrcnt, INTRNAME_LEN, M_INTRNG,
M_WAITOK | M_ZERO);
- sintrcnt = nintrcnt * sizeof(u_long);
- sintrnames = nintrcnt * INTRNAME_LEN;
/* Allocate the bitmap tracking counter allocations. */
intrcnt_bitmap = bit_alloc(nintrcnt, M_INTRNG, M_WAITOK | M_ZERO);
@@ -283,6 +280,8 @@
if (index == -1)
panic("Failed to allocate 2 counters. Array exhausted?");
bit_nset(intrcnt_bitmap, index, index + 1);
+ if (index >= intrcnt_index)
+ intrcnt_index = index + 2;
isrc->isrc_index = index;
isrc->isrc_count = &intrcnt[index];
isrc_update_name(isrc, NULL);
@@ -325,6 +324,8 @@
panic("Failed to allocate %d counters. Array exhausted?",
MAXCPU);
bit_nset(intrcnt_bitmap, index, index + MAXCPU - 1);
+ if (index >= intrcnt_index)
+ intrcnt_index = index + MAXCPU;
for (i = 0; i < MAXCPU; i++) {
snprintf(str, INTRNAME_LEN, "cpu%d:%s", i, name);
intrcnt_setname(str, index + i);
@@ -1783,7 +1784,8 @@
static int
sysctl_intrnames(SYSCTL_HANDLER_ARGS)
{
- return (sysctl_handle_opaque(oidp, intrnames, sintrnames, req));
+ return (sysctl_handle_opaque(oidp, intrnames,
+ intrcnt_index * INTRNAME_LEN, req));
}
SYSCTL_PROC(_hw, OID_AUTO, intrnames,
@@ -1801,18 +1803,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,
@@ -1826,19 +1832,11 @@
*/
DB_SHOW_COMMAND_FLAGS(intrcnt, db_show_intrcnt, DB_CMD_MEMSAFE)
{
- u_long *i;
- char *cp;
- u_int j;
+ u_int i;
- 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;
- }
+ for (i = 0; i < intrcnt_index && !db_pager_quit; ++i)
+ if (intrcnt[i] != 0)
+ db_printf("%s\t%lu\n", intrnames + i * INTRNAME_LEN,
+ intrcnt[i]);
}
#endif
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
@@ -117,7 +117,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];
@@ -133,8 +132,7 @@
#define INTRNAME_LEN (MAXCOMLEN + 1)
static u_long *intrcnt;
static char *intrnames;
-static size_t sintrcnt = sizeof(intrcnt);
-static size_t sintrnames = sizeof(intrnames);
+static u_int intrcnt_index;
static int nintrcnt;
/*
@@ -183,8 +181,6 @@
M_ZERO);
intrnames = mallocarray(nintrcnt, INTRNAME_LEN, M_INTR, M_WAITOK |
M_ZERO);
- sintrcnt = nintrcnt * sizeof(u_long);
- sintrnames = nintrcnt * INTRNAME_LEN;
intrcnt_setname("???", 0);
intrcnt_index = 1;
@@ -703,7 +699,8 @@
static int
sysctl_intrnames(SYSCTL_HANDLER_ARGS)
{
- return (sysctl_handle_opaque(oidp, intrnames, sintrnames, req));
+ return (sysctl_handle_opaque(oidp, intrnames,
+ intrcnt_index * INTRNAME_LEN, req));
}
SYSCTL_PROC(_hw, OID_AUTO, intrnames,
@@ -721,18 +718,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,
@@ -746,19 +747,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 * INTRNAME_LEN,
+ intrcnt[i]);
}
#endif
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;
@@ -98,8 +97,7 @@
#define INTRNAME_LEN (MAXCOMLEN + 1)
static u_long *intrcnt;
static char *intrnames;
-static size_t sintrcnt = sizeof(intrcnt);
-static size_t sintrnames = sizeof(intrnames);
+static u_int intrcnt_index;
static int nintrcnt;
static MALLOC_DEFINE(M_INTR, "intr", "Interrupt Sources");
@@ -192,8 +190,6 @@
M_ZERO);
intrnames = mallocarray(nintrcnt, INTRNAME_LEN, M_INTR, M_WAITOK |
M_ZERO);
- sintrcnt = nintrcnt * sizeof(u_long);
- sintrnames = nintrcnt * INTRNAME_LEN;
intrcnt_setname("???", 0);
intrcnt_index = 1;
@@ -854,7 +850,8 @@
static int
sysctl_intrnames(SYSCTL_HANDLER_ARGS)
{
- return (sysctl_handle_opaque(oidp, intrnames, sintrnames, req));
+ return (sysctl_handle_opaque(oidp, intrnames,
+ intrcnt_index * INTRNAME_LEN, req));
}
SYSCTL_PROC(_hw, OID_AUTO, intrnames,
@@ -872,18 +869,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,
@@ -897,19 +898,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 * INTRNAME_LEN,
+ intrcnt[i]);
}
#endif

File Metadata

Mime Type
text/plain
Expires
Fri, May 1, 3:18 PM (4 h, 4 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28528959
Default Alt Text
D38116.1777648696.diff (8 KB)

Event Timeline