sys/src/iociopost.c File Reference

QIO I/O postprocessing - TODO still more doc. More...

#include <linux/smp.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <asm/hw_irq.h>
#include <cxbdef.h>
#include <bufiodef.h>
#include <dyndef.h>
#include <irpdef.h>
#include <acbdef.h>
#include <ipldef.h>
#include <pridef.h>
#include <ipl.h>
#include <phddef.h>
#include <system_data_cells.h>
#include <internals.h>
#include <rsndef.h>
#include <exe_routines.h>
#include <ioc_routines.h>
#include <sch_routines.h>
#include <queue.h>
#include <linux/slab.h>
#include <statedef.h>

Go to the source code of this file.

Defines

#define IO__WRITEPBLK   11
#define IO__WRITELBLK   32
#define IO__WRITEVBLK   48

Functions

 kfreebuf (void *d)
 free single buffer or buffer chain
 movbuf (struct _irp *i)
 move i/o buffer data
 dirpost (struct _irp *i)
 dirpost entry point
 bufpost (struct _irp *i)
 buffered read completion - see 5.2 21.7.3.1
asmlinkage void ioc_iopost (void)
 I/O postprocessing - se 5.2 21.7.
 ioc_bufpost (struct _irp *i)


Detailed Description

QIO I/O postprocessing - TODO still more doc.

Author:
Roar Thronęs

Definition in file iociopost.c.


Define Documentation

#define IO__WRITELBLK   32

#define IO__WRITEPBLK   11

Referenced by bufpost(), and generic_direct_IO().

#define IO__WRITEVBLK   48


Function Documentation

bufpost ( struct _irp i  ) 

buffered read completion - see 5.2 21.7.3.1

dirpost may be mixed into this, too? TODO check

Parameters:
i irp

TODO common entrypoint and if bufio bit set only do bufio part?

increment biocnt TODO redo

21.7.3.1 buffered read completion

a little workaround, must be there, but forgot most of it TODO

TODO maybe because some dirio ended up here? TODO check driver configs

invoke movbuf

if mailbox read, call ravail. TODO check read func

dirpost to begin here?

21.7.3.2 common completion

should be either of these iocnt increments

copy eventual diagnostic with movbuf - MISSING

decr ccb_w_ioc - MISSING

if last channel i/o and deaccess pending, call ioc_wakacp - MISSING

set iosb iost etc

do an eventual setting of common event flag - MISSING

deallocate irpes, if any - MISSING?

check for quota bit set, then do ast - MISSING TODO redo

post event flag

queue ast

otherwise free irp

return to sch_astdel

Definition at line 123 of file iociopost.c.

References _pcb, _acb::acb_b_rmod, _acb::acb_l_ast, ctl_gl_pcb, IO__WRITEPBLK, _irp::irp_l_func, _irp::irp_l_iosb, _irp::irp_l_sts, _irp::irp_l_svapte, kfree(), movbuf(), _phd::phd_l_biocnt, _phd::phd_l_diocnt, sch_postef(), sch_qast(), and sch_std_ravail().

Referenced by ioc_bufpost(), and ioc_iopost().

dirpost ( struct _irp i  ) 

dirpost entry point

TODO restructure

Definition at line 113 of file iociopost.c.

Referenced by ioc_iopost().

ioc_bufpost ( struct _irp i  ) 

needed by end of file system dispatcher

Definition at line 333 of file iociopost.c.

References bufpost(), _irp::irp_b_rmod, _irp::irp_l_astprm, and _irp::irp_l_wind.

Referenced by ioc_iopost().

asmlinkage void ioc_iopost ( void   ) 

I/O postprocessing - se 5.2 21.7.

set ipl

extra global cli TODO check why and still needed?

fetch irp from postprocessing queues

21.7.1 check if negative irp pid (a routine), then perform system i/o completion and call this - MISSING

21.7.2 normal i/o completion

checks bufio flag

21.7.2.2 buffered i/o completion

maybe do ioc_mapvblk - MISSING

do mmg_unlock - MISSING

test present irpes - MISSING

increment diocnt - MISSING?

store bufpost ast in irp and use kast

21.7.2.3 final steps in ioc_iopost - TODO restructure, double

spinlock

spinunlock

reiterate

21.7.2.1 buffered i/o completion

increment biocnt - MISSING?

if filacp set also incr diocnt - MISSING

invoke credit_bytcnt - MISSING

store bufpost ast in irp and use kast

21.7.2.3 final steps in ioc_iopost - TODO restructure, double

spinlock

spinunlock

reiterate

Definition at line 207 of file iociopost.c.

References _pcb, bufpost(), ctl_gl_pcb, dirpost(), exe_ipid_to_pcb(), ioc_bufpost(), ioc_gq_postiq, IPL__IOPOST, IPL__SYNCH, _irp::irp_b_rmod, _irp::irp_l_ast, _irp::irp_l_sts, sch_postef(), sch_qast(), smp_gl_cpu_data, SPIN_IOPOST, and SPIN_SCHED.

kfreebuf ( void *  d  ) 

free single buffer or buffer chain

Parameters:
d buffer

Definition at line 39 of file iociopost.c.

References _bufio::bufio_b_type, _cxb::cxb_l_link, _cxb::cxb_ps_pktdata, DYN_C_BUFIO, DYN_C_CXB, and kfree().

Referenced by movbuf().

movbuf ( struct _irp i  ) 

move i/o buffer data

may be single buffer or chain, then free the buffer

Parameters:
i irp containing the buffer

Definition at line 69 of file iociopost.c.

References _bufio::bufio_b_type, _bufio::bufio_ps_uva32, _bufio::bufio_w_size, _cxb::cxb_l_link, _cxb::cxb_ps_uva32, _cxb::cxb_w_length, DYN_C_BUFIO, DYN_C_CXB, _irp::irp_l_bcnt, _irp::irp_l_svapte, and kfreebuf().

Referenced by bufpost().


Generated on Fri Oct 9 10:26:01 2009 for FreeVMS by  doxygen 1.5.5