====== Differences ====== This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
soc:2010:peper:journal:week10 [2010/07/26 15:52] peper |
soc:2010:peper:journal:week10 [2010/07/31 15:13] (current) peper |
||
---|---|---|---|
Line 3: | Line 3: | ||
==== drivers in userspace ==== | ==== drivers in userspace ==== | ||
+ | === The big issue === | ||
There is one thing that keeps bugging me in the [[http://git.etherboot.org/?p=people/peper/gpxe.git;a=shortlog;h=refs/heads/drivers|drivers branch]] - UIO-DMA and malloc. | There is one thing that keeps bugging me in the [[http://git.etherboot.org/?p=people/peper/gpxe.git;a=shortlog;h=refs/heads/drivers|drivers branch]] - UIO-DMA and malloc. | ||
UIO-DMA does the DMA mappings on a per device basis (as does kernel). I am | UIO-DMA does the DMA mappings on a per device basis (as does kernel). I am | ||
Line 33: | Line 34: | ||
* allocate the same amount of memory as for A from UIO-DMA - let's call the new chunk B | * allocate the same amount of memory as for A from UIO-DMA - let's call the new chunk B | ||
* copy A over to B | * copy A over to B | ||
- | * munmap() A | + | * munmap() A (this isn't really needed as mremap() can take care of that) |
* mremap() B to the now free location of A | * mremap() B to the now free location of A | ||
I like the last option most cause it uses the current malloc() implementation, works for tap and doesn't feel so hackish (just sophisticated ;). I am going to implement that soonish unless other ideas arise. | I like the last option most cause it uses the current malloc() implementation, works for tap and doesn't feel so hackish (just sophisticated ;). I am going to implement that soonish unless other ideas arise. | ||
+ | == Update == | ||
+ | |||
+ | "Sophisticated" didn't really work for Josh, but I have come up with something different. I have introduced separate memery pools for normal and DMA memory allocation with an API for switching the latter. | ||
+ | See [[http://git.etherboot.org/?p=people/peper/gpxe.git&a=search&h=refs/heads/drivers&st=commit&s=[malloc]+Introduce+memory+pools+and+hide+internal+API|[malloc] Introduce memory pools and hide internal API]] | ||
+ | |||
+ | === Smaller issues === | ||
+ | |||
+ | * currently ''gpxe.linux'' binary doesn't contain the ''tap'' driver - easily fixable | ||
+ | * out/in* segfault in userspace if ''iopl()'' wasn't called - will probably have to check whether the ioports were initialized on each call | ||
+ | |||
+ | == Update == | ||
+ | |||
+ | These have been fixed. Moreover, slighty related to the first one, I have come up with a [[http://git.etherboot.org/?p=people/peper/gpxe.git;a=shortlog;h=refs/heads/buildall|buildall branch]], | ||
+ | which allows building alldrivers builds on all supported arch/platform combinations and also adds a everything target that takes advantage of that and builds everything that I could think of. Should come in handy for testing patches. | ||
+ | The changes are mostly trivial, but if you want to refresh your make-foo have a look at [[http://git.etherboot.org/?p=people/peper/gpxe.git&a=search&h=refs/heads/buildall&st=commit&s=[build]+Properly+handle+multiple+goals+per+BIN+directory|[build] Properly handle multiple goals per BIN directory]]. | ||
+ | |||
+ | |||
+ | === Update === | ||
+ | |||
+ | I have updated pretty much every commit in the [[http://git.etherboot.org/?p=people/peper/gpxe.git;a=shortlog;h=refs/heads/drivers|drivers branch]], adding comments and doing cleanup. | ||