Fri Oct 13 14:16:53 1995 Francisco J. Ballesteros <nemo@nautilus.uc3m.es (Francisco J. Ballesteros)>
* lis.install: Added step 0. to make a backup of changed files
(they're copied to .DIST files).
Sat Oct 7 04:58:59 1995 Francisco J. Ballesteros <nemo@nautilus.uc3m.es (Francisco J. Ballesteros)>
* (drivers): Now streams drivers are under drivers/str/ so we
could unpack them in place under /usr/src/linux.
Sat Oct 7 03:25:13 1995 Francisco J. Ballesteros <nemo@nautilus.uc3m.es (Francisco J. Ballesteros)>
* drivers/: major number have to be numbered folowing the host
kernel convention. In the Linux kernel they're defined in
include/linux/major.h. I've added major numbers there for loopback
driver and streams fifos. Add any other major number there.
LiS devices are created with plain mknod, no special magic is needed.
* More fixes and lis module (un)loading tested with Linux 1.2.13
Fri Sep 29 13:14:29 1995 Francisco J. Ballesteros <nemo@nautilus.uc3m.es (Francisco J. Ballesteros)>
* INSTALL: Added this file a quick-how-to build LiS w/ a Linux kernel.
* Every symlink is deleted. head headers are in include/sys/LiS,
not in the head and linked again from include/sys/LiS. There's
just a include/sys directory and not an include/linux (NOTE: this
link was to make <linux/...> includes try first w/ LiS ones and
then with Linux ones).
* include/sys/LiS/share.h: now this includes strport which in turn
includes linux-mdep.h.
* include/sys/strport.h: This was almost the same thing that
mdep.h, so I've changed strport.h to be a big if-if-if file
selecting one mdep.h file; mdep now is dos-mdep.h or linux-mdep.h
or ... w/ stuff to port LiS to a dos testing env. or Linux kernel
or ...
Wed Sep 27 14:42:34 1995 Francisco J. Ballesteros Camara <fcamara@rueda>
* Merging changes to make LiS a loadable module
(kmodule.patch.tgz) from Denis Froschauer:
Denis Froschauer 100741.1151@compuserve.com wrote after making LiS become a
Linux loadable module:
--------------------------------------------------
95/09/26
1. General considerations
I have ftp'ed your sources September, 20 and made changes to make a linux
loadable module.
At this time, the module lis.o (copied in /lib/modules/<version>/misc) can
be loaded by 'modprobe lis' and unloaded by 'modprobe -r lis'. I think its
very easy to debug and test (... on my slow 386 25).
I have tested anything but load and unload module.
The kernel version I'm working is 1.2.13.
I have read your archive in /usr/src/linux (this is where I compile my
Linuxes).
I have not understoud your symbolic link linux -> sys and sys/linux -> sys/linux.
I have removed him.
I have'nt use your root Makefile but I have modified the Linux root Makefile
to scan the head directory.
I send to you the file diffLiS.gz made with : 'diff -cr head.orig head'
in /incoming of your ftp site.
Please check on my changes. I'm sure that some of these changes are not
the best.
------------------------------------------------------------
2. Changes in directory /usr/src/linux/include/sys
* sysmacros.h removed because it is selected instead of the linux/sysmacros.h
which contain the defines minor() and major()
* strport.h : added #include <linux/modules> and #include <linux/version.h>
in the top, for make LiS a Linux module.
* stropts.h : STR define remplaced by STRIOC to avoid redefinition.
------------------------------------------------------------
3. Changes in directory /usr/src/linux/head
* In each C source, I have included strport.h in the top, for make LiS a module.
* Makefile changed to support modules conditional compilation flags
'-DMODULES -DCONFIG_MODVERSIONS'
and '-Wall -Wstrict-prototypes -O2 -fomit-frame-pointer' flags like
other kernel parts
and -DLiS.
* buffcall.c : few modification to avoid warnings due to -Wall
* buffcall.h : idem
* errmsg.c : idem
* events.c : macro MALLOC used instead of ALLOC
* head.c : the big stuff !!
- declaration of 'current' not made (I think) by any .h
- some unused variables
- uninitialised pointers. I have made changes when I can.
- S_ISDEV replaced by S_ISCHR
- some little errors like allob() called insted of allocb()
- some functions calls not prefixed by lis_
- some tests <0 with uint variable
- arguments band and flags inverted in lis_strputpmsg (cf. DDI/DKI guide)
- idem for lis_strgetpmsg
* head.h : changes reflecting changes in head.c
* mdep.c : I suppose mdep is 'machine dependant'. So I move the
file_operation structure here.
__get_free_page changed in get_free_page
* mdep.h : removed #include <linux/modules.h> now in strport.h
* mod.c : changes to register a Streams driver. May be we have to register it
to character drivers subsystem ? I'm not sure.
* msg.c : drv_usectohz() function not found anywhere. I replace it by 100.
* msg.h : changes for -Wstrict-prototypes
* msgutl.c : I don't find MEMCPY anywhere. replace by memcpy.
* poll.c : lis_syspoll() moved in syscalls.c
* queue.c : inline functions contained in queue.h are moved here. They made
unresolved symbols when the module is loaded into the kernel.
* stream.c : struct file_operations moved in mdep.c and system calls
moved in syscalls.c
* wait.c : inline functions contained in wait.h are moved here. They made
unresolved symbols when the module is loaded into the kernel.
* syscalls.c : NEW FILE compiled separately and linked with the kernel.
------------------------------------------------------------
4. Changes in Linux to install new system calls
All changes are prefixed by '#ifdef LiS' .
* Makefile
* arch/i386/kernel/entry.S
* include/asm/unistd.h
* include/linux/unistd.h
* include/linux/fs.h :
added putpmsg and getpmsg in file_operations structure.
------------------------------------------------------------
5. TODO
* think how must be numbered Streams drivers (major numbers)
* how to create devices special files
* write a dummy Streams driver as a Linux module and test the loading,
registration in LiS.
* first tests with open, read, write, close on this driver.
* add the three new syscalls in libc
* write the very important 'clone'.
* study the internal connexion between select() and lis_poll(). I think
that LiS must be an open system to applications that already manage
devices with select() like sockets, ttys.
Wed Sep 27 09:20:08 1995 Francisco J. Ballesteros Camara <nemo@nautilus>
* mdep.h (splstr/splx): now these two macros take one int
argmument (the psw) for the sake of portability. Such macros are
defined for linux just to inc/dec a global counter. When the
counter gets to zero we do an sti() and when it becomes 1 we do a cli()
Thu Sep 21 11:25:32 1995 Francisco J. Ballesteros <nemo@nautilus.uc3m.es (Francisco J. Ballesteros)>
* (head): incomplete files as of today are:
stream.c: init & termination
queue.c: few routines to be implemented (band handling)
head.c: just more features to be implemented (including poll & passfd)
poll.c: should be considered as not implemented
Sat Aug 5 17:39:29 1995 Francisco J. Ballesteros <nemo@nautilus.uc3m.es (Francisco J. Ballesteros)>
* head/head.c (copyout_blks): should be unified w/ copyout_msg()
(really??)
(lis_init_head): iocseq should be initialized w/ some random value to
avoid problems in the future.
Fri Sep 9 01:40:49 1995 Francisco J. Ballesteros <nemo@nautilus.uc3m.es (Francisco J. Ballesteros)>
* head/head.c (has_ioc_res): M_IOC* and M_COPY* should have a bit
pattern such that this function could be implemented by means of
binary `&'. (beware that any other M_* could be using the same
trick, so dont change M_* tag values w/o ensuring nothing else
gets broken).
Wed Sep 6 14:10:30 1995 Francisco J. Ballesteros <nemo@nautilus.uc3m.es (Francisco J. Ballesteros)>
* head/stream.c (queuerun): STREAMS scheduling doesn't seems to be
too fine. Should redesign streams scheduling taking into account
system scheduling. e.g. having so many queues to find streams w/
things to be done. Woudn't be better just to have only one
sched. queue and then ask if scan/sched-svc-procs needs to be
done?
(lis_scantmout_handler): I would do just a lis_putnext for the
held msg,... (i.e. process just the held msg). (Hmmm, must think)
* You should check also head/TODO to find more things to be done.
* head/stream.c (queuerun): It's prohibitive the time we've
interrupts disabled here. We'll need to use Linux wait queue
management stuff to dissable interrupts only to avoid dangling
references. Mix in some flag to avoid running queuerun twice and
voila!
Tue Sep 5 09:26:14 1995 Francisco J. Ballesteros Camara <fcamara@rueda>
* head/: It's compiled. It's still incomplete (some minor chunks
needs to be written :- maybe just about a 1% or 5%).
Mon Sep 4 12:12:30 1995 Francisco J. Ballesteros Camara <fcamara@rueda>
* TODO: this will be the to-do list for the stream head, it'll
contain puntual things to do, i.e. things that another volunteer
should peek.
Mon Jun 6 18:26:16 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* head/msg.c: FREE w/ two args?? (commented out the size (2nd)
parm). The struct mdbblock must be defined. Would be a Good Thing
to implemente que memory management.
* include/sys/strconfig.h (LIS_STRDEV_RANGE): If this is defined
as 0x0..010...0 wee could use & 0xf..f10...0 instead of '-'.
* head/mod.h: Hmmmmm, where's initialized f_info??
* head/mod.c (lis_register_strdev): if the slot is busy we should
just return no error. Actualy I'm not so sure the (un)register mod
& str should be as they're now.
Sun Jun 5 17:02:55 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* head/mod.h: fmodsw & fstrsw should be combined into the same
* array (perhaps reserving a few slots for drivers and a few more
for root).
* Started makefile to compile LiS. a few modules compiled.
Sat Jun 4 21:00:52 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* stream.h strmsg.h stropts.h strpoll.h sysmacros.h: change
<linux/> by <sys/>
* head/mdep.c: here'll be the kernel<->LiS entry points. Added
lis_memfree() to notify LiS that kmem gets free'd
Wed Jun 22 21:45:01 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* head/: to do things / improvements:
bufcall: when kernel free is called & lis_strbcwait -> must set
qrunflag (to process bufcalls/esbbcalls).
Tue Jun 21 21:41:07 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* the stream head: code is complete but
-- poll()'s not implemented --well, I've code out there but I
guess it's better to include this as the last thing. It heavily
depends on a linux kernel that changes fast.
-- locks should be added/fixed.
-- tty stuff should be added.
-- code has not been compiled.
-- code has not been tested.
-- code has not been revised wrt SVr4 manuals,etc.
-- some ioctls pending
-- prty bands should be added/fixed
-- prty msgs should be fixed in rd/wr getmsg/putmsg
And the current ls is (problably head.[ch] is to be split...)
TODO - the to-be-done list
buffcall.[ch] - buffcall mgmt
errmsg.[ch] - LiS errors & panics tools
events.[ch] - streams events mgmt
fifo.h - this is the fifo strtab
flow.[ch] - flow handling -- Hmmm perhaps it could be merged
head.[ch] - head main stuff syscalls actual implementation,...
mod.[ch] - module & driver info
mod.[ch] - module handling
msg.[ch] - basic streams messages mgmt
msgutl.[ch] - some additional utilities to manage streams messages
poll.[ch] - scratch version for polling stuff [more code at home]
queue.[ch] - streams queues mgmt
safe.c - Graham's SAFE fns and adds on should be here
share.h - shared stuff
stats.[ch] - streams statistics go here
stream.c - entry points to LiS, system calls, etc.
test.c - Graham's testing main()
wait.[ch] - wait queues & lock stuff
Tue Jun 21 17:19:14 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* head/head.c (lis_strioctl): permanent links are implemented by
incrementing the reference counter for the file struct on plinks
and decrementing on punlinks. The RC scheeme is:
-- plinks/punlinks inc/dec f->f_count for the muxing driver, so if
the mux is closed the file entry will be kept alive. They will
also inc/dec the stdata structs refcnts for both the muxing and
muxed streams, so the heads are kept alive on close.
-- stream open/close will inc/dec stdata structs (stream heads)
sd_refcnt, when it's come to zero (no open descriptor and no
permanent link held on) head will be deallocated.
Mon Jun 20 18:11:16 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* head/head.c (lis_strdoioctl): It's inefficient. We should give
it the msg as an argument to avoid innecessary copying.
(str_alloc_mux): I guess it'd be better to alloc an arry for muxs.
arry size could be preconfigured per device. Anyway have to change
the sd_mux w/ a pointer to stmux_t and impose a limit in the
number of muxed streams per mux.
Sun Jun 19 20:51:55 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* head/head.c: There're some points where we could optimize. Many
fields for the structs involved are used only in special cases. We
could alloc & initialize them when needed. We could also do what
Solaris does w/ structs initialization. Use a object cache to keep
initialized objects pre-initialized when released.
Mon Jun 13 17:23:40 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* head/head.c: Pending I_SETSIGs:
S_OUTPUT,S_WRNORM,S_WRBAND: the write side events, this should
be checked when the head wr queue gets backenabled.(?)
S_MSG(?): we always issue this (M_SIG w/ sigpoll @ str head rd q)
prty band must also be checked. I guess the code I've been writting
has broken even norm band processing. :(
I_FDINSERT: not implemented
(copyin_str): currently it uses a new memory page. It should be
implemented in a better way.
Fri Jun 10 00:31:44 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* head/head.c (lis_str*): Should check str head err flags in each
syscall.
Mon Jun 6 21:56:06 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* head/head.c (lis_str...): In such funtions (but open) the inode
is locked to avoid funny race conditions. When we first have a
working version it'll be time to stretch locks. Not paid much
attention to locking. It'd be good a combination of inode +
wqueues locks
* head/*.c: In functions w/ skeleton completed but ignoring issues
such a flag mgmt (head/queue/... behaviour flags, etc.) and
second-pass issues such as doing muxing, cloning,... the `STATUS'
tag is set to `complete(?)' (note the question mark). You know for
sure you have to revisit such functions when adding ioctls, code
for nice features, etc.
Sun Jun 5 21:18:55 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* head/stream.c (lis_stropen): Should we down/up(i->i_sem) ?
Fri Jun 3 01:00:32 1994 Francisco J. Ballesteros <nemo@rigel.uc3m.es>
* head/stream.c (lis_stropen): Another thing to check is that
errnos are the same SVr4 returns. This needs just a few runs in a
SVr4 machine.
* head/stream.c: Will go on in a up-down fashion. Will follow file
ops entry points and writing code until each of them is
completed. By now I'll ignore is uninterruptable sleeps/awakenings
are needed instead of interruptable ones. Will also ignore muxing
and band issues. When the code is more or less working I'll go
back to fix/add them.
* head/stream.c (lis_stropen): probably would be better to use a
semaphore in stdata than a wait_queue + lock char.
Beware also that RD(),WR(),... macros do more check than needed in
the stream head internal code, I mean that if we know a queue is a
write queue then its rd queue is just q-1, not RD(q); and so on...
Fri Jun 2 06:05:56 1995 Francisco J. Ballesteros <fcamara@pleyade>
* include: Ok, I've done some work w/ the include stuff. My idea
was to fix the user includes (U know, <sys/...> to use
<sys/LiS/...> for internal stuff. Such internal stuff are the
headers for internal files (see below). I've adopted the lis_
prefix for definitions in internal headers and redefine them in
the external ones (to be a-la-SVR4).
Anyway I've not checked user headers to be SVR4 compliant. (See
the paragraph w/ label (1).
* src: Created directory for the head stuff, exported includes are
also moved to include/sys/ so we could use std <> delimiters for
#include directive.
* head: it has been splitted. Now we have some files:
TODO - the to-be-done list
buffcall.[ch] - buffcall mgmt
events.[ch] - streams events mgmt
msg.[ch] - basic streams messages mgmt
msgutl.[ch] - some more utilities to manage streams messages
queue.[ch] - streams queues mgmt
stats.[ch] - streams statistics go here
flow.[ch] - flow handling -- Hmmm perhaps it could be merged
mod.[ch] - module handling
stream.c - this is the main chunk (scheduling, etc.)
test.c - Graham's testing main()
I guess we could also create poll.[ch] to split internal poll code
safe functions should also be moved to safe.[ch], but as their
just for debug I'll leave them in stream.c by the moment.
(1)-> We are now in position to split development in the head. One guy could
go writing good headers (compliant w/ SVR4) other guy could add
DDI/DKI headers for Linux and I could proceed filling up the
internal head code (this last job can now also split ).
* Also have added prefix lis_ to exported vars & functions to
follow kernel hacker's guidelines. By now we could follow with the
multi-file version. In a stabilized version we could just merge it
away to avoid global namespace pollution, i.e. extern -> static
conversion.
Fri Mar 24 16:35 1995 Gram (gram@aztec.co.za)
* removed infinite recursion in definitions of EXPORT:, etc
* add strport.h, for system-dependent stuff. This should also
be used to conditionally compile for kernel implementation
or user-space testbed. Also, I don't favour basing this
too much on a particular system like Solaris; I think we
must aim for DDI/DKI conformance. That is all that matters.
It should be possible to write most of the code independent
of the particular kernel (stream heads may be an exception).
Let's aim for that.
Mon Feb 27 21:17:48 1995 Francisco J. Ballesteros (nemo@hades)
* strmsg.h: Have to continue w/ API. continue at esballoc().
Mon Feb 13 20:22:07 1995 Francisco J. Ballesteros <nemo@hades>
* modstreams/stropts.h: should assign STREAMS ioctls
(FMNAMESZ): Should /import/ the max module name size.
* modstreams/strmsg.h: I think every ioctl() should be
transparent.
(STIPRI/STOPRI): should define priorities to put the process
to sleep and and awake it.... must think
(STRHIGH/STRLOW): must adjust high/low wat. marks
(MAXIOCBSZ): must adjust max ioctl block size.
Sun Feb 12 20:42:40 1995 Francisco J. Ballesteros <nemo@hades>
* modstreams/: kick off -> I'm just writing headers showing which
fields of structs (etc) are for the usr and which are for the
implementation of STREAMS framework. This should be considered the
Linux STREAMS specification. Interface is a modified Solaris
STREAMS stuff, i.e. Let's provide a Solaris-like STREAMS usr
interface.
* streams.c: STREAMS implementation. Hmmm probably we should split
this.
* strmsg.h: The STREAMS message stuff. Msg format, structs,
symbols, etc.
* stropts.h: The STREAMS operations stuff. ioctls, putmsg, etc.
* poll.h: the poll()ing stuff. Event definitions, etc.
Fri Feb 10 14:19:01 1995 Francisco J. Ballesteros Camara (fcamara@antares)
* stream.h: the names used for both functions and data are kept as
close as possible to the Solaris STREAMS stuff. This is to make
easier the migration from SunOS/Solaris to Linux.
must split it into modules: for kernel lvl, modules lvl, drivers lvl,
statistics,etc....
Thu Feb 9 16:39:44 1995 Francisco J. Ballesteros Camara (fcamara@antares)
* fs.h: changed struct inode to contain a pointer to the stream data
(stdata) struct. As a stream inode will not have to know about sockets
I decide to make a union and use the i_socket field storage for
the new i_stdata entry. Such pointer will point to the appropriate
linux module.
* I start writing down some basic streams structures and modifying
what I think it's more or less obvious [see ./linux.changes/...
comments with "--nemo"].
* Modules:
we have four system calls:
sys_create_module(name,size)
sys_init_module(name,code,codesize,modroutines)
sys_delete_module(name)
sys_get_kernel_syms(kernel_sym_table)
I guess we could give a str_init() and str_close() to initilize
and terminate the STREAMS framework. It's the service()
procedures, and the remaining scheduling issues the ones that
could retain us from making STREAMS a module. Anyway we could just
modify the kernel itself as little as possible and keep the whole
thing encapsulated in a module. Of course STREAMS modules could be
also /modules/. :)
I'll say "linux module" to refer to modules of
/usr/src/linux/kernel/modules.c and "str module" to refer to
STREAMS modules. (need not to be the same ;).
----------------------------------------------------------------------
# Local Variables: ***
# mode:change-log ***
# comment-column:60 ***
# comment-start: "-" ***
# comment-end: "-" ***
# change-log-default-name: "NOTES" ***
# End: ***