Hi,
I'm running 15.11 with a base-hw kernel on a TI Am335x SoC.
I modified an existing application I had previously created, whose
design had an object which accessed processors external to the host
running Genode, via mmio. The modification involved implementing
the external processor access code in a driver and creating clients
to access the driver using the same server/client coding pattern
used in most Genode drivers. (This would give me control over the
running priority of the driver and hence the response time of the
driver code.) The driver would dynamically use the libc library for
file access.
In the scenario I have, five drivers are running providing uart,
timer, gpio, mmc, and pwm services. Now with this additional driver
(named pruss_drv) running, I experience hard to follow messages
related to ram quota allocations in the sys log (which is attached)
as follows:
1. Core hands over the available RAM amount to init as shown in this
log message-
int main(): transferred 501 MB to init
(This is correct and expected.)
2. When the new driver runs, after all the other drivers are
launched, an insufficient quota message is issued-
Insufficient quota for transfer: init -> pruss_drv
have 40960, need 143360
[init] not enough quota for a donation of 143360
bytes
[init -> pruss_drv] resource_request: ram_quota=143360
(Question about this output is what are these numbers telling
me? Are these byte or KByte quantities
or what? The total ram quota requests in all the components in the
run script is about 35 MBytes so there should be well over 400
MBytes available to init at this point. And, changing the ram quotas
in the run script or the ram quota requested in the associated
server connection does not change the value of these numbers, which
I would have thought it would.)
3. Then messages indicating that the emergency ram allocation
had to be freed to satisfy the drivers request for ram-
[init -> pruss_drv] virtual void
Genode::Platform_env::release(): used before
freeing
emergency=503808
[init -> pruss_drv] virtual void
Genode::Platform_env::release(): used after f
reeing
emergency=495616
[init] child "pruss_drv" requests resources:
ram_quota=143360
(Question: What situation has occurred to require this action
for this new driver when the other five drivers that have just been
installed did not invoke such an action? Again there should be
plenty of ram available for allocation at this point in the
execution. And, what units are these numbers in?)
4. Finally, another request for ram from the new driver is
logged-
[init -> pruss_drv] resource_request:
ram_quota=45056
[init] child "pruss_drv" requests resources:
ram_quota=45056
(Question: I assume this is for information only and not an
indication of abnormal behavior and that the allocation was actually
made. Is that correct?)
After these unexpected log messages the output from the new
driver is as expected and it appears that the initialization code in
the driver executed correctly. In the initialization, a pair of disk
files, specified in config settings, are correctly read via
libc_ffat and loaded into the external processors instruction
memories and begin there execution. So the driver appears to
be running correctly, at least initially.
Thanks in advance for any response.
Bob Stewart