diff options
author | Juli Mallett <jmallett@FreeBSD.org> | 2012-03-09 22:30:54 +0000 |
---|---|---|
committer | Juli Mallett <jmallett@FreeBSD.org> | 2012-03-09 22:30:54 +0000 |
commit | 85729c2c44a615c8ae17f5a5da15ceb1c86318ec (patch) | |
tree | a55362267afc270c4c75c6c3c2cc8b138ac0c5cd /sys/kern/kern_intr.c | |
parent | 39e77c4c504c5e2f28437f9f932825861534fc30 (diff) | |
download | src-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.c | 18 |
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)); } |