#
65cdc13e |
|
29-May-2023 |
Augustin Cavalier <waddlesplash@gmail.com> |
kernel: Migrate struct generic_io_vec to a private header outside src/. This way it is more easily accessed from drivers outside the kernel, which it soon will be, without having to add an explicit UseHeaders. (The drivers that use it already all use the IOScheduler.) No functional change. Change-Id: Ibc2d2678e37d9d7ab73391cb17b72cca86f92132 Reviewed-on: https://review.haiku-os.org/c/haiku/+/6477 Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
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
|