From 828ae3800dcae8c1c4292e459bb6f94aa840ce7f Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 10 Apr 2015 20:52:21 +0200 Subject: [PATCH] dde_ipxe: upgrade quota for nic_drv Issue #755 --- .../dde_ipxe/src/lib/dde_ipxe/dde_support.cc | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc b/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc index 6b9e79335..c1d649409 100644 --- a/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc +++ b/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc @@ -201,9 +201,22 @@ struct Pci_driver using namespace Genode; /* trigger that the device gets assigned to this driver */ - _pci.config_extended(_cap); - Ram_dataspace_capability ram_cap; - ram_cap = _pci.alloc_dma_buffer(size); + for (unsigned i = 0; i < 2; i++) { + try { + _pci.config_extended(_cap); + break; + } catch (Pci::Device::Quota_exceeded) { + Genode::env()->parent()->upgrade(_pci.cap(), "ram_quota=4096"); + } + } + + /* transfer quota to pci driver, otherwise it will give us a exception */ + char buf[32]; + Genode::snprintf(buf, sizeof(buf), "ram_quota=%zd", size); + Genode::env()->parent()->upgrade(_pci.cap(), buf); + + Ram_dataspace_capability ram_cap = _pci.alloc_dma_buffer(size); + _region.mapped_base = (Genode::addr_t)env()->rm_session()->attach(ram_cap); _region.base = Dataspace_client(ram_cap).phys_addr();