Frank Hofmann wrote:
> 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.

strm_info::print -a mi_lowat | /W 0x401

Seems to work.

-- Rich


Reply via email to