On Wed, 21 Feb 2007, Brian Utterback wrote:

> Because of the design of streams, it is sometimes the case that one
> would like to increase the stream head queue size. Streams modules
> can do this, but there is no way to do it outside the stream, except
> by increasing the default value.
>
> The defaults are controlled by a struct called "strm_info". If I print
> this out I get:
>
>> strm_info::print
> {
>    mi_idnum = 0
>    mi_idname = 0x18640f0 "strrhead"
>    mi_minpsz = 0
>    mi_maxpsz = 0xffffffffffffffff
>    mi_hiwat = 0x1400
>    mi_lowat = 0x400
> }
>>
>
> The time honored incantation that services uses to set this for
> customers is:
>
> echo strm_info+0x2c/W 3e030 | /usr/bin/mdb -kw  /dev/ksyms
>
> This bothers me for several reasons. First, the use of the constant
> offset 0x2c. Second, that the location specified by strm_info+0x2c
> is the lower half of the mi_lowat member, which I think will be
> a problem on x86.
>
> However, I can't seem to find a way to specify symbolically the
> mi_lowat location for writing. It didn't work to specify
> strm_info.mi_lowat as the address. Is there something I'm missing?

Well, using:

> strm_info::print -a mi_lowat
fffffffffbc76360 mi_lowat = 0x400

you get the address. It is possible to shellscript this into an 
automatism; but I don't know if it's possible with one mdb pipe. 
Extracting just the address from above works via e.g.:

> ::eval 'strm_info::print -a mi_lowat ! cut -d" " -f1'
fffffffffbc76360

but mdb doesn't accept a pipe '|' after ::eval anymore, I.e. what would've 
been obvious for me to try:

> ::eval 'strm_info::print -a mi_lowat ! cut -d" " -f1' | /W 3e030

doesn't work, anything after the last '|' on this line is just ignored.


I'd be extremely grateful for an ability to get the output of:

        ::offsetof
        ::sizeof
        ::eval

into an mdb variable; Can this be done somehow ?

FrankH.

Reply via email to