For those of you who wish to download and use LiS-2.9, you MUST
recompile your drivers in the context of LiS-2.9.  Binary drivers
compiled against LiS-2.8 (or earlier) will likely not work with LiS-2.9.

The reason for this is that the size of the queue_t structure has
changed between 2.8 and 2.9.  The STREAMS functions RD(), WR() and
OTHERQ() used simple indexing of the queue-pair to develop a pointer the
related queue, thus, the size of the structure was important.

In LiS-2.9, there is a field in the queue structure that points to the
other queue of the queue pair.  It is this field that is now used to
implement these functions.  This insulates drivers from changes in the
size of the queue structures in the future.

Of course, if you have a driver that depends upon sizeof(queue_t) or
does indexing of the queue structures itself (naughty) you will need to
reompile it at every release of LiS just to be on the safe side.

While I am on this subject:  I would like to call developers attention
to two new header files:  lismem.h and lispci.h.  There are
corresponding .c files.

These files implement LiS versions of commonly used memory allocation
and PCI functions.  This includes the allocation of pages as well as
variable length areas.  The intent of these files is to define a fixed
interface to these kernel functions via subroutines (not macros) within
LiS.  This allows drivers using these functions to be more portable to
future versions of LiS and of the kernel, with only LiS needing to be
rebuilt for each new environment.  This should help reduce the
maintenance burden of STREAMS drivers into new kernel releases.

This is not academic:  The 2.4 kernel changed the values of the define
GFP_KERNEL for calling the memory allocator.  This means that a driver
compiled against the 2.2 kernel interface would pass the wrong constant
when calling the allocator in a 2.4 context.  So LiS is attempting to
interpose itself to create a stable interface.

The osif.[ch] files are also a step in this direction since they filter
all kernel calls through a genuine subroutine within LiS.  If the kernel
interface changes we have at least the possibility of preserving the
existing interface via LiS to save having to maintain multiple versions
of STREAMS drivers.

At Gcom we have succeeded in compiling our own drivers just once, and
then running the resulting code on either a 2.2 or 2.4 kernel, with LiS
providing all the needed insulation.

-- Dave

Reply via email to