Article View: vmsnet.internals
Article #260RE: moving DDT for CDdriver etc.
From: raxco!galaxy.dnet!gleeve
Date: Wed, 02 Sep 1992 13:18
Date: Wed, 02 Sep 1992 13:18
82 lines
4376 bytes
4376 bytes
I don't know of anything that would be harmed by moving the DDT for
the victim disk to the UCB of a CDdriver caching driver. However
I would like to make a plea for extensibility.
The idea of pointing ucb$l_ddt at a DDT that physically resides
in a UCB of some other device like CDdriver is a wonderful way to
make finding the corresponding device fast and reliable.
It suffers from the disadvantage that it works for ONE driver
only as proposed. That is, if I come along and try to steal the
DDT again and happen to use the original driver's UCB$L_DDT
link, the new DDB winds up in MY UCB, and CDdriver will find the
DDB in the wrong place.
What I would suggest is adoption and publication of some standard
that is extensible. It will involve some chaining, but will not
break the first time a second app tries to use it.
The notion is to produce a UCB extension that looks like this:
.long ident-pattern
.long previous-DDB-address
ucb$a_victimddb:
.blkl nnnn ;however long this needs to be, look it up
With such a standard in force, if I find the DDB from ucb$l_ddb
of the victim device, I can check ident-pattern against my
own program's pattern, and if it matches I just go ahead and use
offsets from there to find my driver's UCB and thus its data
(e.g. the CDdriver UCB). If it does not match, I chain using
the previous-DDB-address and keep looking for my pattern, and
when I find it (in usually one or two tries at most), I have
found my UCB and can go on from there.
The pattern choice is arbitrary, and I have no great objections
to making it two longs, but I think one is enough by prejudice.
It is necessary of course that this chain never be removed
or broken once established, though the contents of the DDB copy
in the area labelled "ucb$a_victimddb" above could of course
be altered if one wanted to turn off a program. However it is
essential that the original device (e.g. the disk being cached
by cddriver) NOT just have its' ucb$l_ddt replaced by the
original value if this is done, since someone else may have
grabbed the pointer and be using it for other purposes.
I would suggest a similar strategy be used for stealing
FDT table bits also. These can be made to coexist rather nicely
if one has a structure somewhat along these lines for FDT routines
to be added to a driver's FDT chain.
.long ident-pattern; unique for each application
.long old-fdt-table-address-from-before-patch
newfdt: functab <mask for disk legal functions>
functab <mask for disk buffered functions>
functab myswitch,<mask of all 1's>
functab mypatch1,<mask>
functab mypatch2,<mask>
...
functab mypatchn,<mask>
functab to_orig,<mask of all 1's>
myswitch:
tstl myonoff
bneq 1$
rsb
1$: addl2 #<12*<# of patch FDT routines I added>>,r8
rsb
to_orig:
movl newfdt-4,r8 ;point to original FDT point
addl2 #<16-12>,r8 ;pass the 2 entry masks
;back up since sysqioreq adds 12
rsb ;off to the previous FDT routines.
myonoff: .long 0 ;my global switch, can be before or
;after the rest, doesn't matter since only
;my code knows about it.
This scheme too will let multiple independent programs get
along without clobbering one another (unless by chance their
identifiers collide). One can imagine ways to pick identifiers
that will seldom collide...RAD50 encoding of programmer's initials
for one word and binary encoding of some date (-1900) that is
significant to that person in the other word, for instance. Other
schemes can be tried as desired.
What say the rest of the forum?
Glenn Everhart
Everhart@Raxco.com
215 358 5875
Technical Details
Message-ID:
<9209021345.AA08910@relay1.UU.NET>Path:
arc1-ca.pugleaf.net!sparky!uunet!haven.umd.edu!darwin.sura.net!zaphod.mps.ohio-state.edu!news.acns.nwu.edu!network.ucsd.edu!mvb.saic.com!macro32Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!sparky!uunet!haven.umd.edu!darwin.sura.net!zaphod.mps.ohio-state.edu!news.acns.nwu.edu!network.ucsd.edu!mvb.saic.com!macro32 From: raxco!galaxy.dnet!gleeve@uunet.UU.NET Newsgroups: vmsnet.internals Subject: RE: moving DDT for CDdriver etc. Message-ID: <9209021345.AA08910@relay1.UU.NET> Date: Wed, 2 Sep 92 09:18:16 -0400 Organization: Macro32<==>Vmsnet.Internals Gateway X-Gateway-Source-Info: Mailing List Lines: 83