Associating Threads with Process Rm's

Bob Stewart robjsstewart at ...196...
Fri Jan 23 18:57:41 CET 2015


p.s.
As a test of the need for a pager, when the object based on Thread is 
changed to include the following start(), is initializes correctly as 
shown in the attached log.

void start()
         {
             Thread_capability ap = Thread::cap();
             env()->pd_session()->bind_thread(ap);
             Pager_capability pc = env()->rm_session()->add_client(ap);
             env()->cpu_session()->set_pager(ap, pc);
             entry();
         }
Bob

On 01/23/2015 05:21 PM, Bob Stewart wrote:
> Thank you for the reply, Norman.
>
> I am running base-hw on 14.11.
>
> The complete log output is attached. As you can see there is no 
> faulting address displayed. It sure looks like its complaining about 
> the absence of a pager.
>
> The run script is fairly extensive. Over the weekend, I'll try to 
> strip it down to only the elements that appear to be involved in the 
> issue and  reproduce it with that script, Then, I can submit it via git.
>
> I'll build your documentation and see if that helps me.
>
> Thanks for the help.
>
> Bob
>
>
> On 01/23/2015 03:28 PM, Norman Feske wrote:
>> Hello Bob,
>>
>>> I have an application whose main function creates an object instance
>>> based on a Thread. That instance creates another object instance whose
>>> main purpose is to read and write to an ffat file system through the
>>> libc plug-in for that purpose. As soon as this object attempts to 
>>> access
>>> the file system a error message complaining about no pager object
>>> implemented ("/void
>>> Genode::Pager_object::unresolved_page_fault_occurred(): not
>>> implemented/") occurs.
>> this message is printed by the base-hw version of core if a program
>> crashes (it corresponds to a segmentation fault on Linux). It would be
>> interesting to see the surrounding log output of the message you quoted.
>> Normally, core prints the instruction pointer and name of the thread
>> that caused the trouble.
>>
>>> On re-reading the Architecture documentation about RM in the Core, it
>>> *very* briefly explains that a thread capability for a pager needs 
>>> to be
>>> created for the thread, using an add_client function call. I assumed
>>> this would be done in the thread entry() member function and added the
>>> following line of code at the the beginning of that function:
>>>
>>> Thread_capability ap = Thread::cap();
>>> Pager_capability pc = env()->rm_session()->add_client(ap);
>>> env()->cpu_session()->set_pager(ap, pc);
>>>
>>> This did not work and I got he same error message about no pager 
>>> object.
>> I think you are on the wrong track. For implementing your service, you
>> should not need to deal with the peculiarities of page-fault handling or
>> thread creation at all.
>>
>>> I'm obviously confused about what's going with a process's region
>>> manager handling of threads. Could someone please enlighten me?
>> To get a clearer picture, you may find the documentation useful that I
>> am currently writing. In particular the Sections "Component creation"
>> (in the Architecture chapter) and "Page-fault handling" (in the
>> Under-the-hood chapter) might be of interest:
>>
>>    https://github.com/nfeske/genode-manual
>>
>> Right now, the document is not finished. So you have to go through the
>> trouble to build it yourself (see the README for the instructions). I
>> hope that it is still useful.
>>
>> To investigate your problem, may you consider to make your branch along
>> with a run script publicly available (e.g., on GitHub) so that I can
>> reproduce it?
>>
>> Cheers
>> Norman
>>
>>
>
>
>
> ------------------------------------------------------------------------------
> New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
> GigeNET is offering a free month of service with a new server in Ashburn.
> Choose from 2 high performing configs, both with 100TB of bandwidth.
> Higher redundancy.Lower latency.Increased capacity.Completely compliant.
> http://p.sf.net/sfu/gigenet
>
>
> _______________________________________________
> genode-main mailing list
> genode-main at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/genode-main


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.genode.org/pipermail/users/attachments/20150123/093b4a25/attachment.html>
-------------- next part --------------
Starting kernel ...

kernel initialized
Genode 14.11-9-g36ca049 <local changes>
int main(): --- create local services ---
int main(): --- start init ---
int main(): transferred 505 MB to init
int main(): --- init created, waiting for exit condition ---
[init -> ctrl_module] --- Beaglebone Control Module Server ---
[init -> uart_drv] int main(int, char**): --- OMAP3 UART driver started ---
[init -> platform_drv] --- bbb platform driver running ---
[init -> ffat_fs] int main(int, char**): FAT filesystem server running
[init -> pwm_drv] --- am33xx pwm driver ---
[init -> sd_card_drv] --- OMAP3 SD card driver ---
[init -> ctrl_module] gpio 4 mode 2 dirn=1, pullup or down = 1
[init -> ctrl_module] gpio 5 mode 2 dirn=1, pullup or down = 1
[init -> ctrl_module] gpio 22 mode 4 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 23 mode 4 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 50 mode 6 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 51 mode 6 dirn=0, pullup or down = 0
[init -> ffat_fs] int main(int, char**): FAT filesystem going to wait for signal
[init -> ctrl_module] gpio 66 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 67 mode 7 dirn=1, pullup or down = 0
[init -> bbb_platform_client] --- bbb platform being configured ---
[init -> ctrl_module] gpio 68 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 69 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 89 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 78 mode 4 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 79 mode 4 dirn=1, pullup or down = 0
[init -> bbb_platform_client] Enabled dmtimer 3 freq = 2
[init -> bbb_platform_client] Enabled dmtimer 4 freq = 1
[init -> bbb_platform_client] Enabled dmtimer 5 freq = 1
[init -> bbb_platform_client] Enabled dmtimer 6 freq = 1
[init -> bbb_platform_client] Enabled dmtimer 7 freq = 1
[init -> bbb_platform_client] Enabled PWM 1
[init -> bbb_platform_client] Enabled PWM 2
[init -> gpio_drv] --- am33xx gpio driver ---
[init -> bbb_platform_client] Enabled UART 5
[init -> platform_drv] void Ccm::ipu_clk_enable(BeagleBoneBlack::Device): Enabling MMC0
[init -> bbb_platform_client] Enabled MMC 0
[init -> platform_drv] void Ccm::ipu_clk_enable(BeagleBoneBlack::Device): Enabling MMC1
[init -> bbb_platform_client] Enabled MMC 1
[init -> platform_drv] void Ccm::ipu_clk_enable(BeagleBoneBlack::Device): I2C Function clock idle state is 0
[init -> pwm_drv] PWM port 0, num 1, period 31250, duty 1562, polarity 1, name=North
[init -> platform_drv] void Ccm::ipu_clk_enable(BeagleBoneBlack::Device): I2C Function clock is 1
[init -> bbb_platform_client] Enabled I2C 1
[init -> pwm_drv] PWM port 1, num 1, period 31250, duty 1562, polarity 1, name=South
[init -> pwm_drv] PWM port 0, num 2, period 31250, duty 1562, polarity 1, name=East
[init -> pwm_drv] PWM port 1, num 2, period 31250, duty 1562, polarity 1, name=West
[init] virtual void Genode::Child_policy::exit(int): child "bbb_platform_client" exited with exit value 0
[init -> gpio_drv] gpio 53 mode O value=0
[init -> gpio_drv] gpio 54 mode O value=0
[init -> gpio_drv] gpio 55 mode O value=0
[init -> gpio_drv] gpio 56 mode O value=0
[init -> i2c_drv] --- am33xx i2c driver ---
[init -> dmtimer_drv] --- am33xx DMtimer driver ---
[init -> Autopilot] void init_libc_ffat(): using the libc_ffat plugin
[init -> Autopilot] --- Autopilot application starting ---
[init -> Autopilot] fault handler: waiting for fault signal
[init -> pwm_drv] 4 Motors initialized
[init -> Autopilot] ---------- GPIO IRQ handler ----------
[init -> Autopilot] int main(): shared mem [1] is now 0x0[2] is 0x0
[init -> Autopilot] int main(): shared mem [1] is now 0x0[2] is 0x0
[init -> Autopilot] virtual void Autopilot::Motors::entry(): Starting PWM
[init -> uart_drv] virtual Uart::Driver* main(int, char**)::Omap_uart_driver_factory::create(unsigned int, un
signed int, Uart::Char_avail_callback&): Baudrate is not defined. Use default 115200
void Genode::Pager_object::unresolved_page_fault_occurred(): not implemented
unknown signal context




More information about the users mailing list