Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 09 Nov 2008 00:34:06 +0000
From:      "Poul-Henning Kamp" <phk@phk.freebsd.dk>
To:        "David Christensen" <davidch@broadcom.com>
Cc:        "freebsd-current@freebsd.org" <freebsd-current@freebsd.org>
Subject:   Re: Dumping Large Binary Buffer Through Sysctl 
Message-ID:  <44713.1226190846@critter.freebsd.dk>
In-Reply-To: Your message of "Sat, 08 Nov 2008 16:28:11 PST." <5D267A3F22FD854F8F48B3D2B52381933936483700@IRVEXCHCCR01.corp.ad.broadcom.com>

next in thread | previous in thread | raw e-mail | index | archive | help

In message <5D267A3F22FD854F8F48B3D2B52381933936483700@IRVEXCHCCR01.corp.ad.bro
adcom.com>, "David Christensen" writes:
>> >I'm looking for a way to dump a large binary debug buffer=3D20
>> >in a driver to a file.  I've currently implemented this
>> >with SYSCTL_ADD_OPAQUE() and it works fine but running the
>> >"sysctl -a" command causes this buffer to be dumped which
>> >is something of a pain.  Is there a better way to do this?
>>=20
>> Much better idea:  memory map it, that way your driver does
>> not even discover that userland peeks over its shoulder.
>
>I found the CTLFLAG_SKIP attribute which hides the sysctl and=20
>makes things a lot better.  How do I "memory map" the buffer?
>Can you give me a function name or point to an example where=20
>this is done so I can look into it further?

You implemente a cdevsw->mmap() function that tells the kernel
where it is, then in userland, you open the device and
call mmap(2).

See sys/kern/subr_devstat.c for an example.



-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk@FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?44713.1226190846>