aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_intr.c
diff options
context:
space:
mode:
authorJuli Mallett <jmallett@FreeBSD.org>2012-03-09 22:30:54 +0000
committerJuli Mallett <jmallett@FreeBSD.org>2012-03-09 22:30:54 +0000
commit85729c2c44a615c8ae17f5a5da15ceb1c86318ec (patch)
treea55362267afc270c4c75c6c3c2cc8b138ac0c5cd /sys/kern/kern_intr.c
parent39e77c4c504c5e2f28437f9f932825861534fc30 (diff)
downloadsrc-85729c2c44a615c8ae17f5a5da15ceb1c86318ec.tar.gz
src-85729c2c44a615c8ae17f5a5da15ceb1c86318ec.zip
Export intrcnt correctly when running under 32-bit compatibility.
Reviewed by: gonzo, nwhitehorn
Notes
Notes: svn path=/head/; revision=232751
Diffstat (limited to 'sys/kern/kern_intr.c')
-rw-r--r--sys/kern/kern_intr.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/sys/kern/kern_intr.c b/sys/kern/kern_intr.c
index 72313b5e8430..a578084d28cd 100644
--- a/sys/kern/kern_intr.c
+++ b/sys/kern/kern_intr.c
@@ -1881,6 +1881,24 @@ SYSCTL_PROC(_hw, OID_AUTO, intrnames, CTLTYPE_OPAQUE | CTLFLAG_RD,
static int
sysctl_intrcnt(SYSCTL_HANDLER_ARGS)
{
+#ifdef SCTL_MASK32
+ uint32_t *intrcnt32;
+ unsigned i;
+ int error;
+
+ 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);
+ if (intrcnt32 == NULL)
+ return (ENOMEM);
+ for (i = 0; i < sintrcnt / sizeof (u_long); i++)
+ intrcnt32[i] = intrcnt[i];
+ error = sysctl_handle_opaque(oidp, intrcnt32, sintrcnt / 2, req);
+ free(intrcnt32, M_TEMP);
+ return (error);
+ }
+#endif
return (sysctl_handle_opaque(oidp, intrcnt, sintrcnt, req));
}