#
435c43f5 |
|
02-Jun-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced type generic_io_vec, which is similar to iovec, but uses types that are wide enough for both virtual and physical addresses. * DMABuffer, IORequest, IOScheduler,... and code using them: Use generic_io_vec and generic_{addr,size}_t where necessary. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36997 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0316483f |
|
27-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* DMAResource::TranslateNext(): Added parameter to limit the maximum operation length. * IORequest: Added owner (IORequestOwner). Also added a SetUnfinished() method, which is invoked by the I/O scheduler after all operations of the request have been finished, but the request isn't done yet. * Added debugger commands "io_request_owner" and "io_scheduler" printing information for a IORequestOwner and IOScheduler object respectively. * Implemented an actual I/O scheduling algorithm. It's a simple round robin strategy (a queue per thread) with a unidirectional elevator serializing the operations. ATM priorities are ignored, the bandwidth isn't adjusted to the device, and there are TODOs all over the place. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27216 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
025f7c32 |
|
24-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
A DMABuffer doesn't have a fixed bounce buffer assigned anymore. We do dynamically assign one when needed. Under the assumption that in most cases a bounce buffer isn't needed, we can thus prepare a lot more operations. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27185 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
61b1a536 |
|
14-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed the mix of bufferCount vs. max_segment_count with regards to B_BLOCK_DEVICE_MAX_SG_BLOCKS as pointed out by Ingo. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26972 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f8a59924 |
|
06-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added Dump() method to IORequest, IOOperation, IOBuffer, and DMABuffer. * Added KDL commands "io_request", "io_operation", "io_buffer", and "dma_buffer". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26838 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
39b5c374 |
|
05-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added a DMAResource::Init() method that gets a device node - for now, it will reuse the block_io attributes in the node to build the dma_restrictions. * DMAResource::Init() now dumps the dma_resources (should be done with the TRACE() macro later). * Turned off IOScheduler debug output. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26825 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8faff60c |
|
21-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Enabled all DMA tests, wrote some more. * Moved data buffer creation to a TestSuiteContext class. * Added checks if the I/O operation does the correct thing, ie. reads/writes the data to the right offset. * Rearranged DMA translation: we now handle the partial write case correctly (bounce buffer must always span over the whole block), and are able to join adjacent bounce buffers together. * The new _AddBounceBuffer() method also respects boundary and segment size restrictions for bounce buffers. * IOOperation now prepares the outgoing vecs/offset/length to contain the right data for the current phase (partial read begin/end/do-all); it will also make sure that the lengths of the vecs are of the same size than the whole request. * All tests are now passed, the I/O request implementation seems to be ready for integration now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26556 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
45a206a7 |
|
19-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
axeld + bonefish: More work on the I/O scheduler, more precisely mainly the DMAResource class: * When splitting requests into operations, we're now able to flexibly mix bounce buffer segments and the given physical vectors in a single operation. This reduces the number of operations. * Squashed several TODO and fleshed out more of the implementation. * Added a test driver running unit tests. There are only a few tests yet, but those pass. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26519 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6969690a |
|
18-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
bonefish + axeld: * Moved the old I/O scheduler code into the device manager, and replaced its contents completely :-) * Implemented the DMA and I/O requests/scheduler framework - for now in C++ only. It's a work in progress and not used anywhere yet. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26488 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
435c43f5912b109e7d5cf682865d2061e62fad8c |
|
02-Jun-2010 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Introduced type generic_io_vec, which is similar to iovec, but uses types that are wide enough for both virtual and physical addresses. * DMABuffer, IORequest, IOScheduler,... and code using them: Use generic_io_vec and generic_{addr,size}_t where necessary. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36997 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0316483f0ade2904583955b57cc396bf060f9027 |
|
27-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* DMAResource::TranslateNext(): Added parameter to limit the maximum operation length. * IORequest: Added owner (IORequestOwner). Also added a SetUnfinished() method, which is invoked by the I/O scheduler after all operations of the request have been finished, but the request isn't done yet. * Added debugger commands "io_request_owner" and "io_scheduler" printing information for a IORequestOwner and IOScheduler object respectively. * Implemented an actual I/O scheduling algorithm. It's a simple round robin strategy (a queue per thread) with a unidirectional elevator serializing the operations. ATM priorities are ignored, the bandwidth isn't adjusted to the device, and there are TODOs all over the place. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27216 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
025f7c3289220e25bc02d546d9f3acbcf605ae50 |
|
24-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
A DMABuffer doesn't have a fixed bounce buffer assigned anymore. We do dynamically assign one when needed. Under the assumption that in most cases a bounce buffer isn't needed, we can thus prepare a lot more operations. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27185 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
61b1a536e8e346af6559e8353786091b85629a9d |
|
14-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed the mix of bufferCount vs. max_segment_count with regards to B_BLOCK_DEVICE_MAX_SG_BLOCKS as pointed out by Ingo. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26972 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f8a59924e5a8afacf7c966c00156cf55b151cf9a |
|
06-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added Dump() method to IORequest, IOOperation, IOBuffer, and DMABuffer. * Added KDL commands "io_request", "io_operation", "io_buffer", and "dma_buffer". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26838 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
39b5c374187b8c7d7a13e8159a70eadb0f06ecb0 |
|
05-Aug-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added a DMAResource::Init() method that gets a device node - for now, it will reuse the block_io attributes in the node to build the dma_restrictions. * DMAResource::Init() now dumps the dma_resources (should be done with the TRACE() macro later). * Turned off IOScheduler debug output. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26825 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8faff60c7fe72c4dc62b3e823faac1fe244e43d5 |
|
21-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Enabled all DMA tests, wrote some more. * Moved data buffer creation to a TestSuiteContext class. * Added checks if the I/O operation does the correct thing, ie. reads/writes the data to the right offset. * Rearranged DMA translation: we now handle the partial write case correctly (bounce buffer must always span over the whole block), and are able to join adjacent bounce buffers together. * The new _AddBounceBuffer() method also respects boundary and segment size restrictions for bounce buffers. * IOOperation now prepares the outgoing vecs/offset/length to contain the right data for the current phase (partial read begin/end/do-all); it will also make sure that the lengths of the vecs are of the same size than the whole request. * All tests are now passed, the I/O request implementation seems to be ready for integration now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26556 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
45a206a7420034118693e3bbc8976083e1045e51 |
|
19-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
axeld + bonefish: More work on the I/O scheduler, more precisely mainly the DMAResource class: * When splitting requests into operations, we're now able to flexibly mix bounce buffer segments and the given physical vectors in a single operation. This reduces the number of operations. * Squashed several TODO and fleshed out more of the implementation. * Added a test driver running unit tests. There are only a few tests yet, but those pass. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26519 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6969690afee7ab446c14e04011cf5cadedb09c1b |
|
18-Jul-2008 |
Axel Dörfler <axeld@pinc-software.de> |
bonefish + axeld: * Moved the old I/O scheduler code into the device manager, and replaced its contents completely :-) * Implemented the DMA and I/O requests/scheduler framework - for now in C++ only. It's a work in progress and not used anywhere yet. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26488 a95241bf-73f2-0310-859d-f6bbb57e9c96
|