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.