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