From 71b2b42936df049ae0e80e7650774ad23275d635 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Fri, 24 Aug 2012 13:40:30 +0200 Subject: [PATCH] USB: Dimension back-end allocators dynamically Use avaible ram session quota to determine the size of the memory allocators. Fixes #331 --- dde_linux/src/drivers/usb/mem.h | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/dde_linux/src/drivers/usb/mem.h b/dde_linux/src/drivers/usb/mem.h index 22979e61fb..3dc65f0823 100644 --- a/dde_linux/src/drivers/usb/mem.h +++ b/dde_linux/src/drivers/usb/mem.h @@ -32,8 +32,7 @@ namespace Genode { /* configurable sizes of memory pools */ enum { - MEM_POOL = 2 * 1024 * 1024, - DMA_POOL = 3 * 1024 * 1024, + MEM_POOL_SHARE = 3 }; private: @@ -88,6 +87,12 @@ namespace Genode { return (void *)(_base + offset); } + /** + * Memory usable by back-end allocators + */ + static size_t _mem_avail() { + return env()->ram_session()->avail() - (1024 * 1024); } + public: /** @@ -146,7 +151,7 @@ namespace Genode { */ static Mem* pool() { - static Mem _p(MEM_POOL); + static Mem _p(_mem_avail() / MEM_POOL_SHARE); return &_p; } @@ -156,7 +161,7 @@ namespace Genode { */ static Mem* dma() { - static Mem _p(DMA_POOL, false); + static Mem _p(_mem_avail() - (_mem_avail() / MEM_POOL_SHARE), false); return &_p; }