;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ; Program: Unload_block_counter ; Author: Bruce Ellis ; Synopsis: Cleans up after disk monitor. ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .library /sys$library:lib.mlb/ .link /sys$system:sys.stb/ $ddtdef $ucbdef $irpdef header=12 devnam: .long 15 .address 10$ 10$: .blkb 15 dev_prompt: .ascid /enter disk to be unmonitored:/ .entry unload_block_ctr,^m<> ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ; Get device name to unload monitor for ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pushal devnam pushal dev_prompt pushal devnam calls #3,g^lib$get_input blbs r0,lab $exit_s r0 ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ; UNLoad the code to monitor disk activity ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lab: $cmkrnl_s routin=kernel_setup ret ;*********************************************************************** ; Kernel mode setup code ;*********************************************************************** .entry kernel_setup,^m ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ; Grab a write mutex on the i/o database ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ moval g^ioc$gl_mutex,r0 jsb g^sch$lockw ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ; Search for ucb address of this device ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ moval devnam,r1 jsb g^ioc$searchdev pushl r1 ;Save the ucb address pushl r0 ;save the device status moval g^ioc$gl_mutex,r0 ;Free up the mutex on the io database movl g^sch$gl_curpcb,r4 jsb g^sch$unlock popl r0 ;restore the return status blbc r0,dev_error ;If error scram movl g^exe$gl_sitespec,r0 ;save the pointer to pool ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ; reset the start i/o to point to original and deallocate code ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ popl r1 ;restore the ucb address setipl ucb$b_fipl(r1) ;synch with driver movl ucb$l_ddt(r1),r5 ;get the driver dispatch table address movl header(r0),ddt$l_start(r5) ;save actual start i/o jsb g^exe$deanonpaged ;give up the pool clrl g^exe$gl_sitespec ;mark the sitespec as unused setipl #0 movl #ss$_normal,r0 dev_error: pool_error: ret .end unload_block_ctr