Associating Threads with Process Rm's

Bob Stewart robjsstewart at ...196...
Fri Jan 23 19:07:35 CET 2015


Please ignore the attachment to the last e-mail, The attached is the 
correct one.

Bob

On 01/23/2015 05:57 PM, Bob Stewart wrote:
> 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
>
>
>
> ------------------------------------------------------------------------------
> 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/1b9f2197/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] 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
[init -> sd_card_drv] CID: 0xea00d927 0x02b16703 0x44202020 0x1d414453
[init -> sd_card_drv] RCA: 0x59b4
[init -> sd_card_drv] Block::Omap3_driver::Omap3_driver(bool): SDCard driver getting mmc1 ready with dma 0
[init -> sd_card_drv] SD card detected
[init -> sd_card_drv] capacity: 60303 MiB
[init -> Autopilot] DUMMY access(): access called, not implemented
[init -> Autopilot] mktime() returned -1, the file modification time reported by stat() will be incorrect
[init -> Autopilot] void Autopilot::Datalogger::Initialize(): /Autopilot/ap_config.xml file size: 597 bytes
[init -> Autopilot] void Autopilot::Datalogger::Initialize(): last modified: 0115-01-22 21:03:12




More information about the users mailing list