tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: scsipi: physio split the request



thorpej%me.com@localhost (Jason Thorpe) writes:

>> You need a really huge amount of RAM for that, and also a huge
>> KVA space.

>...but it doesn't have to be that way.

>The fundamental problem is that for physio, we currently have to map the buffer into kernel space at all.

Mapping into KVA is another problem.

>  We really should have a more abstract way to describe memory that is passed down to device drivers that currently take struct buf *s, call it an I/O memory descriptor ("iomd"). This iomd would have, say, an array of vm_page *'s, or perhaps an array of paddr_t's, but would also have a pointer to the buffer as mapped into kernel address space.

The problem is that currently we and also some hardware cannot handle
such a construct.

>Then a new bus_dmamap_load_iomd() call could take an iomd as an argument, and skip doing a bunch of work (calling into the pmap later to get the physical address), and just build the bus_dma_segment_t's directly.

There is hardware that can only handle a single bus_dma_segment.

So that's:

- support some more abstract MAXPHYS (i.e. not a global constant).
- make buffers based on scatter-gather lists instead of a single linear
  piece of memory.
- make drivers use these scatter-gather buffers
- try to emulate this behaviour when hardware is too limited.
- make other users of buffers compatible with scatter-gather lists

That's a long way to go and still not related to mapping buffers into KVA.

-- 
-- 
                                Michael van Elst
Internet: mlelstv%serpens.de@localhost
                                "A potential Snark may lurk in every tree."


Home | Main Index | Thread Index | Old Index