Current Status
Implemented
The general functionality is finished. Mostly testing is left to be
done as well as checking in the files and doing the idb stuff. Things
to be done to make this fully functional:
-
irix/lib/libclshm:
-
Edit irix/lib/Makefile to make libclshm
-
Place irix/lib/libclshm/src/xp_shm.h in the appropriate place
-
irix/cmd/clshm/clshm_diag:
-
Build and install irix/lib/libclshm since clshm_diag depends on it.
-
#define CLSHM_USR_LIB_LINKED at beginning of clshm_diag.c.
-
Edit irix/cmd/clshm/Makefile to include lines for making clshm_diag
with the library flags.
-
Change the include line of "irix/lib/libclshm/src/xp_shm.h"
in clshm_diag.c to point to wherever it was decided that xp_shm.h will
live.
-
irix/cmd/clshm/test:
-
Edit xp_shm_wrap.h to include the place of the correct xp_shm.h
-
irix/cmd/clshm/doc/man:
-
Move part_func.3p and xp_func.3p into irix/man/man3p.
-
irix/kern/master.d/system.gen:
-
Edit to add "EXCLUDE: clshm" right after the "EXCLUDE:
if_cl" (this is general -- to actually enable -- will have
to change all "EXCLUDE"s to "USE" for all
partitioning stuff).
-
idb stuff:
-
Edit irix/cmd/clshm/Makefile idb stuff -- There is something there
commented out that I think will work, but you should probably make sure
before just adding it blindly. Need to add the clshmd.config file.
-
Edit irix/build/idb: need to add a lot -- some of these are already
there, but will be needed for "target" information. Here are
all the things I can think of:
-
etc/config/clshm.config
-
etc/init.d/sn0start
-
usr/cpu/sysgen/IP27boot/clshm.o
-
usr/etc/clshm_diag
-
usr/etc/clshmctl
-
usr/etc/clshmd
-
usr/include/sys/SN/clshm.h
-
usr/include/sys/SN/clshmd.h
-
usr/include/sys/xp_shm.h
-
usr/lib32/libclshm.so
-
usr/lib32/mips4/libclshm.so
-
usr/lib32/mips3/libclshm.so
-
usr/lib64/libclshm.so
-
usr/lib64/mips4/libclshm.so
-
usr/lib64/mips3/libclshm.so
-
usr/share/catman/a_man/man1/clshm_diag.z
-
usr/share/catman/a_man/man1/clshmctl.z
-
usr/share/catman/a_man/man1/clshmd.z
-
usr/share/catman/p_man/man3p/part_func.z
-
usr/share/catman/p_man/cat3p/part_getcount.z
-
usr/share/catman/p_man/cat3p/part_gethostname.z
-
usr/share/catman/p_man/cat3p/part_getid.z
-
usr/share/catman/p_man/cat3p/part_getlist.z
-
usr/share/catman/p_man/cat3p/part_getnode.z
-
usr/share/catman/p_man/cat3p/part_getpart.z
-
usr/share/catman/p_man/cat3p/part_setpmo.z
-
usr/share/catman/p_man/cat3p/xp_ftok.z
-
usr/share/catman/p_man/cat3p/xp_func.z
-
usr/share/catman/p_man/cat3p/xp_shmat.z
-
usr/share/catman/p_man/cat3p/xp_shmctl.z
-
usr/share/catman/p_man/cat3p/xp_shmdt.z
-
usr/share/catman/p_man/cat3p/xp_shmget.z
-
There are probably more things, but I guess that will have to be fixed
up later.
To Be Implemented
Permissions on segments????
Issues to Check Into
-
Check all kmem_zallocs and kmem_frees to make sure memory isn't being
orphaned.
-
Check for sleeping memory allocations while I am holding locks in the
clshm and xpc layer.
-
Check for other sleeping calls while I am holding locks.
Things That Would Be Nice
A lot of these issues are just wish-listed because the fact that the
setting up of a shared memory segment probably doesn't need to be that
fast and the daemon will probably not be left running indefinitely.
Speed is not as much of an issue because once the segments are set up,
there is no intervention by the driver or daemon unless there is an
error. So optimizing the setting up or tearing down of the segment is
not as important. Because of the (perhaps) limited use of this
interface, these issues may or may not ever become important.
-
Have a way to clean up keys when something goes wrong between a xp_ftok
and an xp_shmget. At this point a key can only be destroyed once a
shmget has returned the shmid in order to destroy that key.
-
Add the ability to reuse keys without doing a xp_ftok after the segment
has been destroyed.
-
Introduce finer grain locks into the clshm driver. At this point it has
only one big lock that protects everything.
-
Make the daemon multi-threaded so that it is faster.
-
Make the user library sockets to the daemon connectionless. Right now
they are connection oriented sockets.