The uniplexor (UNI multiplexor) is a special SVR5 DDI module that is placed between a module or driver and the rest of the Stream when they have different levels of multiprocessor support (one is multithreaded and one is not). See ``Multithreaded drivers''. The uniplexor is a multithreaded 1-to-1 multiplexor where either the upper Stream or lower Stream is bound to the same CPU as non-MP safe modules and drivers. See ``Multiplexing, STREAMS''.
For example, for a non-MP module that is pushed on a STREAM that contains an MP driver:
If you follow the
q_next pointers on such a Stream,
they seem to end at the uniplexor,
although the uniplexor itself stores information internally
about which is the next Stream.
There is no portable and DDI compliant way
to look at another queue's next pointer (
Instead, you should do one of the following:
q_ptrinformation with this implementation, because the uniplexor places messages on a queue to be processed ``at a later time'' by service procedures, since one side of the uniplexor is bound to a CPU. Often, such a message is exchanged once during the driver and module initialization, so this delay is acceptable.