<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-14360</id>
	<title>Nabble - L4Ka</title>
	<updated>2009-09-06T18:13:26Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/L4Ka-f14360.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/L4Ka-f14360.html" />
	<subtitle type="html">&lt;a href=&quot;http://www.l4ka.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;L4Ka&lt;/a&gt;&amp;nbsp;microkernel research project.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-25323786</id>
	<title>Re: booting question</title>
	<published>2009-09-06T18:13:26Z</published>
	<updated>2009-09-06T18:13:26Z</updated>
	<author>
		<name>neo anderson</name>
	</author>
	<content type="html">Finally I get this work, it is the problem that floppy image (fdimage.img) did not contain valid file system. I follow the section 2 to create floppy image that doesn't require root prvilage. Is there any chance to update the getting started page (&lt;a href=&quot;http://l4ka.org/projects/pistachio/ia32/gettingstarted.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://l4ka.org/projects/pistachio/ia32/gettingstarted.php&lt;/a&gt;)? I think that would help newbie like me. 
&lt;br&gt;&lt;br&gt;Thanks for help.
&lt;br&gt;&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;neo anderson wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;I follow the guide at &lt;a href=&quot;http://l4ka.org/projects/pistachio/ia32/gettingstarted.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://l4ka.org/projects/pistachio/ia32/gettingstarted.php&lt;/a&gt;. but whilst executing to the step to startup from qemu (qemu -fda fdimage.img), the screen is always stops at grub menu. 
&lt;br&gt;&lt;br&gt;grub&amp;gt; _
&lt;br&gt;&lt;br&gt;The config (config.out) is as below. Anything I did wrong? Thanks in advice. (In addition, the command I run almost the same as what stated in the guide, so there is no error shown while following those steps.)
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Automatically generated, don't edit
&lt;br&gt;#
&lt;br&gt;# Generated on: zion
&lt;br&gt;# At: Fri, 07 Aug 2009 12:57:52 +0000
&lt;br&gt;# Linux version 2.6.30-1-686-bigmem (Debian 2.6.30-5) (maks@debian.org) (gcc version 4.3.3 (Debian 4.3.3-15) ) #1 SMP Mon Aug 3 17:32:39 UTC 2009
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Pistachio Kernel Configuration System
&lt;br&gt;#
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Hardware
&lt;br&gt;#
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Basic Architecture
&lt;br&gt;#
&lt;br&gt;CONFIG_ARCH_X86=y
&lt;br&gt;CONFIG_ARCH_POWERPC=n
&lt;br&gt;CONFIG_ARCH_POWERPC64=n
&lt;br&gt;&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# X86 Processor Architecture
&lt;br&gt;#
&lt;br&gt;CONFIG_SUBARCH_X32=y
&lt;br&gt;CONFIG_SUBARCH_X64=n
&lt;br&gt;&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Processor Type
&lt;br&gt;#
&lt;br&gt;CONFIG_CPU_X86_I486=n
&lt;br&gt;CONFIG_CPU_X86_I586=y
&lt;br&gt;CONFIG_CPU_X86_I686=n
&lt;br&gt;CONFIG_CPU_X86_P4=n
&lt;br&gt;CONFIG_CPU_X86_K8=n
&lt;br&gt;CONFIG_CPU_X86_C3=n
&lt;br&gt;CONFIG_CPU_X86_SIMICS=n
&lt;br&gt;&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Platform
&lt;br&gt;#
&lt;br&gt;CONFIG_PLAT_PC99=y
&lt;br&gt;&lt;br&gt;CONFIG_SMP=n
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Miscellaneous
&lt;br&gt;#
&lt;br&gt;CONFIG_IOAPIC=n
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Kernel
&lt;br&gt;#
&lt;br&gt;CONFIG_IPC_FASTPATH=n
&lt;br&gt;CONFIG_DEBUG=y
&lt;br&gt;CONFIG_DEBUG_SYMBOLS=n
&lt;br&gt;CONFIG_EXPERIMENTAL=n
&lt;br&gt;CONFIG_PERFMON=n
&lt;br&gt;CONFIG_SPIN_WHEELS=n
&lt;br&gt;CONFIG_NEW_MDB=n
&lt;br&gt;CONFIG_X86_SMALL_SPACES=n
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Debugger
&lt;br&gt;#
&lt;br&gt;CONFIG_KDB=y
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Kernel Debugger Console
&lt;br&gt;#
&lt;br&gt;CONFIG_KDB_CONS_KBD=y
&lt;br&gt;CONFIG_KDB_CONS_COM=n
&lt;br&gt;&lt;br&gt;CONFIG_KDB_DISAS=n
&lt;br&gt;CONFIG_KDB_ON_STARTUP=n
&lt;br&gt;CONFIG_KDB_BREAKIN=n
&lt;br&gt;CONFIG_KDB_BREAKIN_BREAK=n
&lt;br&gt;CONFIG_KDB_BREAKIN_ESCAPE=n
&lt;br&gt;CONFIG_KDB_INPUT_HLT=n
&lt;br&gt;CONFIG_KDB_NO_ASSERTS=n
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Trace Settings
&lt;br&gt;#
&lt;br&gt;CONFIG_VERBOSE_INIT=n
&lt;br&gt;CONFIG_TRACEPOINTS=n
&lt;br&gt;CONFIG_KMEM_TRACE=n
&lt;br&gt;CONFIG_TRACEBUFFER=n
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Code Generator Options
&lt;br&gt;#
&lt;br&gt;&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Derived symbols
&lt;br&gt;#
&lt;br&gt;CONFIG_HAVE_MEMORY_CONTROL=n
&lt;br&gt;CONFIG_X86_PSE=y
&lt;br&gt;CONFIG_BIGENDIAN=n
&lt;br&gt;CONFIG_X86_SYSENTER=n
&lt;br&gt;CONFIG_X86_PGE=n
&lt;br&gt;CONFIG_X86_FXSR=n
&lt;br&gt;CONFIG_IS_32BIT=y
&lt;br&gt;CONFIG_X86_HTT=n
&lt;br&gt;CONFIG_X86_PAT=n
&lt;br&gt;CONFIG_IS_64BIT=n
&lt;br&gt;CONFIG_MULTI_ARCHITECTURE=n
&lt;br&gt;CONFIG_X86_EM64T=n
&lt;br&gt;CONFIG_X86_SMALL_SPACES_GLOBAL=n
&lt;br&gt;CONFIG_X86_TSC=y
&lt;br&gt;#
&lt;br&gt;# That's all, folks!
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/booting-question-tp24891751p25323786.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-24891751</id>
	<title>booting question</title>
	<published>2009-08-09T15:04:37Z</published>
	<updated>2009-08-09T15:04:37Z</updated>
	<author>
		<name>neo anderson</name>
	</author>
	<content type="html">&lt;br&gt;I follow the guide at &lt;a href=&quot;http://l4ka.org/projects/pistachio/ia32/gettingstarted.php&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://l4ka.org/projects/pistachio/ia32/gettingstarted.php&lt;/a&gt;. but whilst executing to the step to startup from qemu (qemu -fda fdimage.img), the screen is always stops at grub menu. 
&lt;br&gt;&lt;br&gt;grub&amp;gt; _
&lt;br&gt;&lt;br&gt;The config (config.out) is as below. Anything I did wrong? Thanks in advice. (In addition, the command I run almost the same as what stated in the guide, so there is no error shown while following those steps.)
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Automatically generated, don't edit
&lt;br&gt;#
&lt;br&gt;# Generated on: zion
&lt;br&gt;# At: Fri, 07 Aug 2009 12:57:52 +0000
&lt;br&gt;# Linux version 2.6.30-1-686-bigmem (Debian 2.6.30-5) (&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=24891751&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;maks@...&lt;/a&gt;) (gcc version 4.3.3 (Debian 4.3.3-15) ) #1 SMP Mon Aug 3 17:32:39 UTC 2009
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Pistachio Kernel Configuration System
&lt;br&gt;#
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Hardware
&lt;br&gt;#
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Basic Architecture
&lt;br&gt;#
&lt;br&gt;CONFIG_ARCH_X86=y
&lt;br&gt;CONFIG_ARCH_POWERPC=n
&lt;br&gt;CONFIG_ARCH_POWERPC64=n
&lt;br&gt;&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# X86 Processor Architecture
&lt;br&gt;#
&lt;br&gt;CONFIG_SUBARCH_X32=y
&lt;br&gt;CONFIG_SUBARCH_X64=n
&lt;br&gt;&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Processor Type
&lt;br&gt;#
&lt;br&gt;CONFIG_CPU_X86_I486=n
&lt;br&gt;CONFIG_CPU_X86_I586=y
&lt;br&gt;CONFIG_CPU_X86_I686=n
&lt;br&gt;CONFIG_CPU_X86_P4=n
&lt;br&gt;CONFIG_CPU_X86_K8=n
&lt;br&gt;CONFIG_CPU_X86_C3=n
&lt;br&gt;CONFIG_CPU_X86_SIMICS=n
&lt;br&gt;&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Platform
&lt;br&gt;#
&lt;br&gt;CONFIG_PLAT_PC99=y
&lt;br&gt;&lt;br&gt;CONFIG_SMP=n
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Miscellaneous
&lt;br&gt;#
&lt;br&gt;CONFIG_IOAPIC=n
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Kernel
&lt;br&gt;#
&lt;br&gt;CONFIG_IPC_FASTPATH=n
&lt;br&gt;CONFIG_DEBUG=y
&lt;br&gt;CONFIG_DEBUG_SYMBOLS=n
&lt;br&gt;CONFIG_EXPERIMENTAL=n
&lt;br&gt;CONFIG_PERFMON=n
&lt;br&gt;CONFIG_SPIN_WHEELS=n
&lt;br&gt;CONFIG_NEW_MDB=n
&lt;br&gt;CONFIG_X86_SMALL_SPACES=n
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Debugger
&lt;br&gt;#
&lt;br&gt;CONFIG_KDB=y
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Kernel Debugger Console
&lt;br&gt;#
&lt;br&gt;CONFIG_KDB_CONS_KBD=y
&lt;br&gt;CONFIG_KDB_CONS_COM=n
&lt;br&gt;&lt;br&gt;CONFIG_KDB_DISAS=n
&lt;br&gt;CONFIG_KDB_ON_STARTUP=n
&lt;br&gt;CONFIG_KDB_BREAKIN=n
&lt;br&gt;CONFIG_KDB_BREAKIN_BREAK=n
&lt;br&gt;CONFIG_KDB_BREAKIN_ESCAPE=n
&lt;br&gt;CONFIG_KDB_INPUT_HLT=n
&lt;br&gt;CONFIG_KDB_NO_ASSERTS=n
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Trace Settings
&lt;br&gt;#
&lt;br&gt;CONFIG_VERBOSE_INIT=n
&lt;br&gt;CONFIG_TRACEPOINTS=n
&lt;br&gt;CONFIG_KMEM_TRACE=n
&lt;br&gt;CONFIG_TRACEBUFFER=n
&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Code Generator Options
&lt;br&gt;#
&lt;br&gt;&lt;br&gt;&lt;br&gt;#
&lt;br&gt;# Derived symbols
&lt;br&gt;#
&lt;br&gt;CONFIG_HAVE_MEMORY_CONTROL=n
&lt;br&gt;CONFIG_X86_PSE=y
&lt;br&gt;CONFIG_BIGENDIAN=n
&lt;br&gt;CONFIG_X86_SYSENTER=n
&lt;br&gt;CONFIG_X86_PGE=n
&lt;br&gt;CONFIG_X86_FXSR=n
&lt;br&gt;CONFIG_IS_32BIT=y
&lt;br&gt;CONFIG_X86_HTT=n
&lt;br&gt;CONFIG_X86_PAT=n
&lt;br&gt;CONFIG_IS_64BIT=n
&lt;br&gt;CONFIG_MULTI_ARCHITECTURE=n
&lt;br&gt;CONFIG_X86_EM64T=n
&lt;br&gt;CONFIG_X86_SMALL_SPACES_GLOBAL=n
&lt;br&gt;CONFIG_X86_TSC=y
&lt;br&gt;#
&lt;br&gt;# That's all, folks!
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/booting-question-tp24891751p24891751.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23212137</id>
	<title>RE: issue in afterburner--same as &quot;	Afterburner	running problem&quot; thread</title>
	<published>2009-04-24T01:29:24Z</published>
	<updated>2009-04-24T01:29:24Z</updated>
	<author>
		<name>Jan Stoess</name>
	</author>
	<content type="html">&amp;gt; now when i do &amp;quot;make run-qemu&amp;quot; as mentioned in readme.txt, the boot
&lt;br&gt;&amp;gt; process
&lt;br&gt;&amp;gt; starts but when it tries to load the ramdisk, it gets struck there and
&lt;br&gt;&amp;gt; nothing
&lt;br&gt;&amp;gt; comes up after that.
&lt;br&gt;&lt;br&gt;Ok since there are many possible failure scenarios, I don't have a standard answer. In general, however, you want to find out what the guest and monitor are doing. A couple of options to do this:
&lt;br&gt;&lt;br&gt;- Use L4 Tracepoints, a source code based tracing facility to log predefined kernel and user events such as IPC, page faults, etc. Tracepoints are configured and used via KDB (&amp;quot;r&amp;quot;); they must be enabled in the pistachio kernel menu. You can instruct KDB to print the event to the console and/or to enter KDB upon the event.
&lt;br&gt;- Use L4 Tracebuffer, a memory buffer that logs all the kernel and user tracepoints into an in-memory log buffer. Tracepoints are also configured and used via KDB (&amp;quot;y&amp;quot;); they must also be enabled in the pistachio kernel menu.
&lt;br&gt;- Find out, via KDB and the binary executables, where guest and monitor are running and what data is contained on their stack. You can do so by again using KDB to inspect TCBs, stack pointer, instruction pointer and the memory they are referencing.
&lt;br&gt;&lt;br&gt;&lt;br&gt;Best,
&lt;br&gt;-Jan
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;Jan Stoess
&lt;br&gt;System Architecture Group
&lt;br&gt;University of Karlsruhe
&lt;br&gt;Phone: +49 (721) 608-4056
&lt;br&gt;Fax: +49 (721) 608-7664
&lt;br&gt;eMail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23212137&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;stoess@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/issue-in-afterburner--same-as-%22%09Afterburner-running-problem%22-thread-tp23183512p23212137.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23183512</id>
	<title>issue in afterburner--same as &quot;	Afterburner running problem&quot; thread</title>
	<published>2009-04-22T11:15:28Z</published>
	<updated>2009-04-22T11:15:28Z</updated>
	<author>
		<name>Amit Mahajan-2</name>
	</author>
	<content type="html">Hi
&lt;br&gt;&lt;br&gt;One more problem here :)
&lt;br&gt;&lt;br&gt;I tried using afterburner also. did the stuff mentioned in readme.txt.
&lt;br&gt;&lt;br&gt;I was able to create a bootable iimage as mentioned.
&lt;br&gt;&lt;br&gt;now when i do &amp;quot;make run-qemu&amp;quot; as mentioned in readme.txt, the boot process
&lt;br&gt;starts but when it tries to load the ramdisk, it gets struck there and nothing
&lt;br&gt;comes up after that.
&lt;br&gt;&lt;br&gt;It is same as the issue mentioned in previous thread named &amp;quot;	Afterburner running
&lt;br&gt;problem:&amp;quot;.
&lt;br&gt;&lt;br&gt;I entered in kdb and looked into the stuff. things look good there.i saw some
&lt;br&gt;irq's, roottask and some other stuff there in schedule q.
&lt;br&gt;&lt;br&gt;can you please suggest what more needs to be chacked and what can be wrong here.
&lt;br&gt;&lt;br&gt;thanks
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/issue-in-afterburner--same-as-%22%09Afterburner-running-problem%22-thread-tp23183512p23183512.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23090018</id>
	<title>Check out my photos on Facebook</title>
	<published>2009-04-16T19:26:21Z</published>
	<updated>2009-04-16T19:26:21Z</updated>
	<author>
		<name>Muhammad Saufy Rohmad</name>
	</author>
	<content type="html">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;
&lt;html&gt;
    &lt;head&gt;
      &lt;title&gt;Facebook&lt;/title&gt;
      &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
    &lt;/head&gt;
    &lt;body style=&quot;margin: 0px; padding:0px;&quot; dir=&quot;ltr&quot;&gt;
      &lt;!-- container table is 98% b/c yahoo mail needs 1% to display right --&gt;
      &lt;table width=&quot;98%&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;40&quot;&gt;&lt;tr&gt;
          &lt;td bgcolor=&quot;#F7F7F7&quot; width=&quot;100%&quot; style=&quot;font-family: 'lucida grande', tahoma, verdana, arial, sans-serif;&quot;&gt;
            &lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;620&quot;&gt;
              &lt;tr&gt;
                &lt;td align=&quot;left&quot; bgcolor=&quot;#3b5998&quot; valign=&quot;middle&quot; style=&quot;padding: 4px 8px; font-size: 16px; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; color: #fff;&quot;&gt;&lt;span style=&quot;font-weight: bold; letter-spacing: -0.03em;&quot;&gt;facebook&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
            &lt;/table&gt; &lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;620&quot; style=&quot;border-bottom: 1px solid #3b5998; border-left: 1px solid #ccc; border-right: 1px solid #ccc;&quot; bgcolor=&quot;#ffffff&quot;&gt;
              &lt;tr&gt;&lt;td align=&quot;left&quot; bgcolor=&quot;#ffffff&quot; width=&quot;100&quot; style=&quot;padding: 18px 18px 10px 18px&quot; valign=&quot;top&quot;&gt;&lt;a href=&quot;http://www.facebook.com/p.php?i=546038458&amp;k=3XCU54UZSXVM51AAVEW5TP&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://profile.ak.facebook.com/v229/205/76/s546038458_8428.jpg&quot; style=&quot;border: 1px solid #c0c0c0; width: 100px&quot; alt=&quot;Muhammad Saufy Rohmad&quot; name=&quot;Muhammad Saufy Rohmad&quot;&gt;&lt;/a&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;4&quot; border=&quot;0&quot;&gt;&lt;tr&gt;&lt;td align=&quot;left&quot; style=&quot;font-size: 11px; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; color: #666666; padding-left: 4px;&quot;&gt;Muhammad Saufy Rohmad has:&lt;br /&gt;89 friends&lt;br /&gt;1 photo&lt;br /&gt;1 note&lt;br /&gt;42 wall posts&lt;br /&gt;2 groups&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor=&quot;white&quot; width=&quot;*&quot; style=&quot;font-size: 11px; padding: 18px 18px 18px 0px; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif;&quot; valign=&quot;top&quot; align=&quot;left&quot;&gt;&lt;h1 style=&quot;font-size: 13px; margin: 0; padding: 0;&quot;&gt;Check out my photos on Facebook&lt;/h1&gt;&lt;br /&gt;Hi L4ka,&lt;br /&gt;&lt;br /&gt;I
set up a Facebook profile where I can post my pictures, videos and events and I want to add you as a friend so you can see it. First, you need to join Facebook! Once you join, you can also create your own profile.&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
Muhammad&lt;br /&gt;&lt;br /&gt;&lt;table width=&quot;100%&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tr&gt;&lt;td style=&quot;background-color: #FFF8CC; border: 1px solid #FFE222; padding: 10px; font-size: 11px;&quot;&gt;&lt;div style=&quot;font-weight: bold; margin-bottom: 3px;&quot;&gt;To sign up for Facebook, follow the link below:&lt;/div&gt;&lt;a style=&quot;color: #3b5998; text-decoration: none;&quot; href=&quot;http://www.facebook.com/p.php?i=546038458&amp;k=3XCU54UZSXVM51AAVEW5TP&amp;r&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.facebook.com/p.php?i=546038458&amp;k=3XCU54UZSXVM51AAVEW5TP&amp;r&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt; &lt;/tr&gt;
          &lt;/table&gt;
          &lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;620&quot;&gt;
           &lt;tr&gt;
            &lt;td style=&quot;color: #999999; padding: 10px; font-size: 11px; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif;&quot;&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23090018&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;l4ka@...&lt;/a&gt; was invited to join Facebook by Muhammad Saufy Rohmad. If you do not wish to receive this type of email from Facebook in the future, please click &lt;a href=&quot;http://www.facebook.com/o.php?k=44c717&amp;amp;u=1251778254&amp;amp;mid=51e5fbG4a9c9eceG0G8&quot; style=&quot;color: #3b5998&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; to unsubscribe.&lt;br /&gt;Facebook's offices are located at 156 University Ave., Palo Alto, CA 94301.&lt;/td&gt;
            &lt;/tr&gt;
           &lt;/table&gt;
          &lt;/td&gt;
        &lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;&lt;img src=&quot;http://www.facebook.com/email_open_log_pic.php?k=3XCU54UZSXVM51AAVEW5TP&amp;h=77697321668&amp;t=1&quot; /&gt;


</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Check-out-my-photos-on-Facebook-tp23090018p23090018.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22973541</id>
	<title>Re: [PATCH] fix improper return of local sender TID in propagated IPC</title>
	<published>2009-04-09T08:36:36Z</published>
	<updated>2009-04-09T08:36:36Z</updated>
	<author>
		<name>Kalle A. Sandstrom</name>
	</author>
	<content type="html">On Wed, Apr 08, 2009 at 02:24:24PM +0200, Jan Stoess wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; Thanks for the patch. It makes sense to me, and I have committed it to the
&lt;br&gt;&amp;gt; repository. Apparently the local ID logic doesn't handle the propagation
&lt;br&gt;&amp;gt; case very well. 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;No doubt there could be a more elegant solution as well, but that one seems
&lt;br&gt;to do the locally right thing, for what it's worth.
&lt;br&gt;&lt;br&gt;&amp;gt; &amp;gt; As requiring that the VirtualSender TCR always contain a global TID when
&lt;br&gt;&amp;gt; &amp;gt; propagation is specified in the message tag, I'd like to recommend that
&lt;br&gt;&amp;gt; &amp;gt; the L4.X2 spec be revised accordingly.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Hmm. I actually wouldn't want change the spec. The implementation follows
&lt;br&gt;&amp;gt; the spec, not vice versa. And just because the implementation doesn't
&lt;br&gt;&amp;gt; handle every (corner) case or contains bugs, I don't see any conceptual
&lt;br&gt;&amp;gt; reason why local IDs shouldn't be used when propagating messages. 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;That sounds reasonable too, i.e. the kernel can convert a local ID in
&lt;br&gt;VirtualSender to the appropriate ID for returning to the IPC recipient where
&lt;br&gt;necessary -- entirely regardless of which format the ID given by the IPC
&lt;br&gt;sender was in.
&lt;br&gt;&lt;br&gt;It's good to know this was just an implementation artifact.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;gt; [2] IMO, silently disabling propagation is the wrong thing to do as it
&lt;br&gt;&amp;gt; &amp;gt; tells the sender that the IPC operation succeeded as specified when it
&lt;br&gt;&amp;gt; &amp;gt; did not. This behaviour also diverges from that of Pistachio 0.4 .
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; That's debatable. The spec says: &amp;quot;If originator thread and current sender,
&lt;br&gt;&amp;gt; or current sender and receiver reside in the same address space,
&lt;br&gt;&amp;gt; propagation is always permitted. Otherwise, IPC occurs unpropagated.&amp;quot;. The
&lt;br&gt;&amp;gt; implementation actually implements that behavior, and it seems to be an
&lt;br&gt;&amp;gt; unwanted side-effect that local IDs don't work there and that the
&lt;br&gt;&amp;gt; implementation then continues with the IPC, but unpropagated.
&lt;/div&gt;&lt;br&gt;I should've said &amp;quot;... that the IPC operation succeeded as expected by the
&lt;br&gt;caller when it did not&amp;quot;, i.e. my critique was toward the spec rather than
&lt;br&gt;the implementation.
&lt;br&gt;&lt;br&gt;It would be interesting to learn the rationale for this behaviour. From a
&lt;br&gt;naive reading of the way IPC is specified in L4.X2, propagation feels like a
&lt;br&gt;hack (i.e. the designers having added a new behaviour to the IPC syscall and
&lt;br&gt;a new TCR, but keeping the existing set of error conditions so as to re-use
&lt;br&gt;existing code without modification) -- but that sounds implausible given how
&lt;br&gt;it fits with clans-and-chiefs, which (IIRC) has been around for quite a
&lt;br&gt;while.
&lt;br&gt;&lt;br&gt;&amp;gt; An ASSERT catching local IDs might be more appropriate in this case.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;Agreed. Even if non-propagation with &amp;quot;p&amp;quot; set were reported as an error
&lt;br&gt;status, there don't seem to be any obvious things that the sender could do
&lt;br&gt;to recover besides logging the unexpected condition and general attempts to
&lt;br&gt;return to a known-good state.
&lt;br&gt;&lt;br&gt;On the other hand, delivering a &amp;quot;not quite propagated&amp;quot; message to the
&lt;br&gt;recipient may cause all sorts of confusion in operations where the sender's
&lt;br&gt;ID is significant. On the third hand, a case can be made that regardless of
&lt;br&gt;whether delivery occurs, the system as a whole is already behaving in an
&lt;br&gt;undefined manner and that lossage of some kind is bound to occur. (Side
&lt;br&gt;effects of such a misdelivery would presumably be limited to things that are
&lt;br&gt;identified by the ID of the propagator, and so wouldn't be devastating by
&lt;br&gt;themselves.)
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Kalle A. Sandstro&amp;quot;m &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22973541&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ksandstr@...&lt;/a&gt;
&lt;br&gt;746B 4B14: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BFB5 6D3B 0758 CFBE 11F9 &amp;nbsp;DF41 4C28 67FB 746B 4B14
&lt;br&gt;void *truth = &amp;truth; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://ksandstr.iki.fi/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://ksandstr.iki.fi/&lt;/a&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--fix-improper-return-of-local-sender-TID-in-propagated-IPC-tp22762155p22973541.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22949340</id>
	<title>RE: [PATCH] fix improper return of local sender TID in propagated IPC</title>
	<published>2009-04-08T05:24:24Z</published>
	<updated>2009-04-08T05:24:24Z</updated>
	<author>
		<name>Jan Stoess</name>
	</author>
	<content type="html">Hello Kalle,
&lt;br&gt;&lt;br&gt;Thanks for the patch. It makes sense to me, and I have committed it to the repository. Apparently the local ID logic doesn't handle the propagation case very well. 
&lt;br&gt;&lt;br&gt;&amp;gt; As requiring that the VirtualSender TCR always contain a global TID
&lt;br&gt;&amp;gt; when propagation is specified in the message tag, I'd like to recommend
&lt;br&gt;&amp;gt; that the
&lt;br&gt;&amp;gt; L4.X2 spec be revised accordingly.
&lt;br&gt;&lt;br&gt;Hmm. I actually wouldn't want change the spec. The implementation follows the spec, not vice versa. And just because the implementation doesn't handle every (corner) case or contains bugs, I don't see any conceptual reason why local IDs shouldn't be used when propagating messages. 
&lt;br&gt;&lt;br&gt;&amp;gt; If it matters for a short patch like this, the attached changeset is
&lt;br&gt;&amp;gt; licensed under the two-clause BSD license as given at the start of the
&lt;br&gt;&amp;gt; source file it modifies.
&lt;br&gt;&lt;br&gt;Yes, that actually matters. BSD license is fine, though. Thanks.
&lt;br&gt;&lt;br&gt;&amp;gt; [2] IMO, silently disabling propagation is the wrong thing to do as it
&lt;br&gt;&amp;gt; tells
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; the sender that the IPC operation succeeded as specified when it
&lt;br&gt;&amp;gt; did
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; not. This behaviour also diverges from that of Pistachio 0.4 .
&lt;br&gt;&lt;br&gt;That's debatable. The spec says: &amp;quot;If originator thread and current sender, or
&lt;br&gt;current sender and receiver reside in the same address space, propagation is always permitted.
&lt;br&gt;Otherwise, IPC occurs unpropagated.&amp;quot;. The implementation actually implements that behavior, and it seems to be an unwanted side-effect that local IDs don't work there and that the implementation then continues with the IPC, but unpropagated. An ASSERT catching local IDs might be more appropriate in this case.
&lt;br&gt;&lt;br&gt;Best,
&lt;br&gt;-Jan
&lt;br&gt;&lt;br&gt;--
&lt;br&gt;Jan Stoess
&lt;br&gt;System Architecture Group
&lt;br&gt;University of Karlsruhe
&lt;br&gt;Phone: +49 (721) 608-4056
&lt;br&gt;Fax: +49 (721) 608-7664
&lt;br&gt;eMail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22949340&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;stoess@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--fix-improper-return-of-local-sender-TID-in-propagated-IPC-tp22762155p22949340.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22762155</id>
	<title>[PATCH] fix improper return of local sender TID in propagated IPC</title>
	<published>2009-03-28T15:36:50Z</published>
	<updated>2009-03-28T15:36:50Z</updated>
	<author>
		<name>Kalle A. Sandstrom</name>
	</author>
	<content type="html">&lt;br&gt;The attached patch[1] fixes a problem where a recipient may get the thread
&lt;br&gt;ID of a propagating thread rather than the propagator's VirtualSender TCR.
&lt;br&gt;&lt;br&gt;This misbehaviour was observed when the propagator and the recipient were in
&lt;br&gt;one address space and the original sender was in another, and the propagator
&lt;br&gt;went through a blocking send phase to deliver the message. The issue was
&lt;br&gt;that at the end of the last function in kernel/src/api/v4/ipc.cc,
&lt;br&gt;from_tcb-&amp;gt;get_global_id() was used interchangeably with
&lt;br&gt;current-&amp;gt;get_partner() when in the propagating case they almost certainly
&lt;br&gt;refer to distinct threads.
&lt;br&gt;&lt;br&gt;As for why this was only observed in a blocking-send case and not in the
&lt;br&gt;non-blocking case, I have no idea. I only drilled down from the return value
&lt;br&gt;observed by the recipient, and correcting it seemed the right thing to do.
&lt;br&gt;&lt;br&gt;&lt;br&gt;The changeset also enforces, using an ASSERT(), the notion that the virtual
&lt;br&gt;sender in IPC propagation is always identified by global TID. This is
&lt;br&gt;supported by lines 313-329 in kernel/src/api/v4/ipc.cc, which silently
&lt;br&gt;disables[2] propagation if VirtualSender is not a global TID (as a local TID
&lt;br&gt;cannot be equal to the result of get_global_id() of the virtual sender's
&lt;br&gt;tcb_t).
&lt;br&gt;&lt;br&gt;As requiring that the VirtualSender TCR always contain a global TID when
&lt;br&gt;propagation is specified in the message tag, I'd like to recommend that the
&lt;br&gt;L4.X2 spec be revised accordingly.
&lt;br&gt;&lt;br&gt;&lt;br&gt;If it matters for a short patch like this, the attached changeset is
&lt;br&gt;licensed under the two-clause BSD license as given at the start of the
&lt;br&gt;source file it modifies.
&lt;br&gt;&lt;br&gt;&lt;br&gt;[1] hg bundle -- I hope this is the correct format
&lt;br&gt;&lt;br&gt;[2] IMO, silently disabling propagation is the wrong thing to do as it tells
&lt;br&gt;&amp;nbsp; &amp;nbsp; the sender that the IPC operation succeeded as specified when it did
&lt;br&gt;&amp;nbsp; &amp;nbsp; not. This behaviour also diverges from that of Pistachio 0.4 .
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Kalle A. Sandstro&amp;quot;m &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22762155&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ksandstr@...&lt;/a&gt;
&lt;br&gt;746B 4B14: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BFB5 6D3B 0758 CFBE 11F9 &amp;nbsp;DF41 4C28 67FB 746B 4B14
&lt;br&gt;void *truth = &amp;truth; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://ksandstr.iki.fi/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://ksandstr.iki.fi/&lt;/a&gt;&lt;br&gt;&lt;br /&gt; &lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;pistachio-propagate-partner-properly.hg&lt;/strong&gt; (1K) &lt;a href=&quot;http://old.nabble.com/attachment/22762155/0/pistachio-propagate-partner-properly.hg&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--fix-improper-return-of-local-sender-TID-in-propagated-IPC-tp22762155p22762155.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22704179</id>
	<title>How about a 0.5 release?</title>
	<published>2009-03-25T08:19:05Z</published>
	<updated>2009-03-25T08:19:05Z</updated>
	<author>
		<name>Kalle A. Sandstrom</name>
	</author>
	<content type="html">&lt;br&gt;The 0.4 release has become very old. Old enough to not compile with a modern
&lt;br&gt;version of G++, old enough for the compiler it _can_ be compiled with to not
&lt;br&gt;ship in the two most recent major releases of Debian GNU/Linux. That is
&lt;br&gt;quite old indeed.
&lt;br&gt;&lt;br&gt;So my question is: are there plans to do a 0.5 release of L4Ka::Pistachio?
&lt;br&gt;&lt;br&gt;To provide a bit of context, over the past three or so years I've been
&lt;br&gt;hobbyhorsing together an Unix-like operating system personality on top of
&lt;br&gt;the Pistachio microkernel. (It's available under the GPLv3 at
&lt;br&gt;&lt;a href=&quot;http://muix.ath.cx&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://muix.ath.cx&lt;/a&gt;&amp;nbsp;for those interested.) For now, it has been written
&lt;br&gt;against the 0.4 headers and quirks[1], but that revision has become
&lt;br&gt;virtually unusable by itself due to reasons mentioned above, and others.
&lt;br&gt;&lt;br&gt;Thus I couldn't release a 0.1 of µiX even if I wanted to: it'd be
&lt;br&gt;unbuildable against the (soon five years old) Pistachio 0.4 simply because
&lt;br&gt;Pistachio can't be compiled as found in the 0.4 tarball on l4ka.org . The
&lt;br&gt;unsatisfactory alternatives would involve taking a development version from
&lt;br&gt;the Mercurial tree and tarballing it up for distribution as a &amp;quot;companion to
&lt;br&gt;µiX 0.1&amp;quot;, or developing a large and ultimately pointless patchset against
&lt;br&gt;Pistachio 0.4 to make it compile with g++ 4.3 .
&lt;br&gt;&lt;br&gt;If there are significant issues featurewise with regard to releasing 0.5 as
&lt;br&gt;a snapshot of the Mercurial tree[2], then are these issues large enough to
&lt;br&gt;not release a 0.5 given the problems in retaining 0.4 as the most recent
&lt;br&gt;formal release?
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;[1] such as the extra parentheses in a caching hint #define, and how the
&lt;br&gt;&amp;nbsp; &amp;nbsp; header file that defines L4_BootRec_t isn't copied into the install
&lt;br&gt;&amp;nbsp; &amp;nbsp; directory.
&lt;br&gt;&lt;br&gt;[2] I noted paths in the scheduling code marked as &amp;quot;hole&amp;quot;, and a major
&lt;br&gt;&amp;nbsp; &amp;nbsp; problem in kickstart failing to avoid stepping on boot modules when
&lt;br&gt;&amp;nbsp; &amp;nbsp; relocating sigma0, the root task and so forth.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Kalle A. Sandstro&amp;quot;m &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22704179&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ksandstr@...&lt;/a&gt;
&lt;br&gt;746B 4B14: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BFB5 6D3B 0758 CFBE 11F9 &amp;nbsp;DF41 4C28 67FB 746B 4B14
&lt;br&gt;void *truth = &amp;truth; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://ksandstr.iki.fi/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://ksandstr.iki.fi/&lt;/a&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-about-a-0.5-release--tp22704179p22704179.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22396416</id>
	<title>Re: Fastpath on x32: Every single cycle</title>
	<published>2009-03-08T03:11:59Z</published>
	<updated>2009-03-08T03:11:59Z</updated>
	<author>
		<name>Moritz Kroll</name>
	</author>
	<content type="html">*bump*
&lt;br&gt;Any comments are appreciated!
&lt;br&gt;&lt;br&gt;----- Original Message ----- 
&lt;br&gt;From: &amp;quot;Moritz Kroll&amp;quot; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22396416&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Moritz.Kroll@...&lt;/a&gt;&amp;gt;
&lt;br&gt;To: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22396416&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;l4ka@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Sent: Monday, February 23, 2009 9:23 PM
&lt;br&gt;Subject: Fastpath on x32: Every single cycle
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;I don't understand, why on the receive side MR_1 and MR_2 are loaded into 
&lt;br&gt;&amp;gt;registers (EBX and EBP). In many cases they may be unused and even if they 
&lt;br&gt;&amp;gt;would be used, they could easily be fetched by the user (especially as the 
&lt;br&gt;&amp;gt;UTCB pointer is already available in EDI).
&lt;br&gt;&amp;gt; You may argue, that MR_0 is loaded from the UTCB anyway, so MR_1 and MR_2 
&lt;br&gt;&amp;gt; are already in the cache. But why has MR_0 to be loaded, if it is 
&lt;br&gt;&amp;gt; initially in ESI?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Here's a suggestion what can be done (without small spaces) to keep ESI 
&lt;br&gt;&amp;gt; untouched (l4ka-pistachio-38b2e96fc5a6\kernel\src\glue\v4-x86\x32\trap.S):
&lt;br&gt;&amp;gt; 1. Use &amp;quot;test $0x3f, %esi&amp;quot; instead of &amp;quot;and $0x3f, %esi; test %esi, %esi&amp;quot; 
&lt;br&gt;&amp;gt; (one byte more, but doesn't change ESI)
&lt;br&gt;&amp;gt; 2. Use EDX instead of ESI for &amp;quot;dest&amp;quot; starting from label 3
&lt;br&gt;&amp;gt; 3. Move &amp;quot;popl %ecx&amp;quot; to label 7 (should be unaffected by page table switch, 
&lt;br&gt;&amp;gt; makes ECX free to use)
&lt;br&gt;&amp;gt; 4. Use &amp;quot;movl %cr3, %ecx; cmpl %eax, %ecx&amp;quot; instead of &amp;quot;movl %cr3, %edx; 
&lt;br&gt;&amp;gt; cmpl %eax, %edx&amp;quot; (don't use EDX anymore)
&lt;br&gt;&amp;gt; 5. Remove all &amp;quot;load MRs&amp;quot; lines (9 bytes and three memory accesses less)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If you can also spare the copy of MR_0 to the destination UTCB, I think 
&lt;br&gt;&amp;gt; this would also save you one cache line, if no untyped words are 
&lt;br&gt;&amp;gt; transmitted. According to the L4 X.2 reference manual MR_0 is not mapped 
&lt;br&gt;&amp;gt; to memory, anyway.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; What do you think, does this make sense?
&lt;br&gt;&amp;gt; It would require a change of the (not stable) specification, but I don't 
&lt;br&gt;&amp;gt; see any reason for MR_1 and MR_2 to be received in registers on x32.
&lt;br&gt;&amp;gt; Btw, why are MR_1 and MR_2 stored in the UTCB again in L4_Ipc, when they 
&lt;br&gt;&amp;gt; have just been loaded from there?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Best regards
&lt;br&gt;&amp;gt; Moritz 
&lt;/div&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-Fastpath-on-x32%3A-Every-single-cycle-tp22396416p22396416.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22396412</id>
	<title>Re: StringItem length</title>
	<published>2009-03-08T03:11:17Z</published>
	<updated>2009-03-08T03:11:17Z</updated>
	<author>
		<name>Moritz Kroll</name>
	</author>
	<content type="html">*bump*
&lt;br&gt;Any comments are appreciated.
&lt;br&gt;&lt;br&gt;----- Original Message ----- 
&lt;br&gt;From: &amp;quot;Moritz Kroll&amp;quot; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22396412&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Moritz.Kroll@...&lt;/a&gt;&amp;gt;
&lt;br&gt;To: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22396412&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;l4ka@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Sent: Monday, February 23, 2009 4:12 PM
&lt;br&gt;Subject: StringItem length
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; The &amp;quot;current&amp;quot; L4 X.2 reference manual (2006-11-17) states on page 56 
&lt;br&gt;&amp;gt; (section 5.4 StringItem) that the &amp;quot;maximum string length is 4 M bytes, 
&lt;br&gt;&amp;gt; even if the according field is 54 bits wide on 64-bit processors&amp;quot;.
&lt;br&gt;&amp;gt; Two questions:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 1. How do you encode a string size of 4 MB on 32-bit?
&lt;br&gt;&amp;gt; As far as I see it's not possible (only 22 length bits) and there is no 
&lt;br&gt;&amp;gt; implicit +1 used in the kernel source code. If this is intended (probably 
&lt;br&gt;&amp;gt; to allow zero-length strings (why?)), the manual should be more clear on 
&lt;br&gt;&amp;gt; the maximum size ((4 M - 1) bytes).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2. Who enforces the maximum size on 64-bit (x64)?
&lt;br&gt;&amp;gt; For intra-space string copies I didn't find any reason why e.g. a 10 GB 
&lt;br&gt;&amp;gt; copy shouldn't work. For an inter-space string copy still even any 1 GB 
&lt;br&gt;&amp;gt; copy should work, as the copy area has a size of 2 GB. I have no idea, 
&lt;br&gt;&amp;gt; what will happen to larger copies, though. I guess an unhandled kernel 
&lt;br&gt;&amp;gt; pagefault when the memcpy reaches the end of the copy area?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Best regards
&lt;br&gt;&amp;gt; Moritz 
&lt;/div&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-StringItem-length-tp22396412p22396412.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22169377</id>
	<title>Fastpath on x32: Every single cycle</title>
	<published>2009-02-23T12:23:25Z</published>
	<updated>2009-02-23T12:23:25Z</updated>
	<author>
		<name>Moritz Kroll</name>
	</author>
	<content type="html">I don't understand, why on the receive side MR_1 and MR_2 are loaded into 
&lt;br&gt;registers (EBX and EBP). In many cases they may be unused and even if they 
&lt;br&gt;would be used, they could easily be fetched by the user (especially as the 
&lt;br&gt;UTCB pointer is already available in EDI).
&lt;br&gt;You may argue, that MR_0 is loaded from the UTCB anyway, so MR_1 and MR_2 
&lt;br&gt;are already in the cache. But why has MR_0 to be loaded, if it is initially 
&lt;br&gt;in ESI?
&lt;br&gt;&lt;br&gt;Here's a suggestion what can be done (without small spaces) to keep ESI 
&lt;br&gt;untouched (l4ka-pistachio-38b2e96fc5a6\kernel\src\glue\v4-x86\x32\trap.S):
&lt;br&gt;1. Use &amp;quot;test $0x3f, %esi&amp;quot; instead of &amp;quot;and $0x3f, %esi; test %esi, %esi&amp;quot; (one 
&lt;br&gt;byte more, but doesn't change ESI)
&lt;br&gt;2. Use EDX instead of ESI for &amp;quot;dest&amp;quot; starting from label 3
&lt;br&gt;3. Move &amp;quot;popl %ecx&amp;quot; to label 7 (should be unaffected by page table switch, 
&lt;br&gt;makes ECX free to use)
&lt;br&gt;4. Use &amp;quot;movl %cr3, %ecx; cmpl %eax, %ecx&amp;quot; instead of &amp;quot;movl %cr3, %edx; cmpl 
&lt;br&gt;%eax, %edx&amp;quot; (don't use EDX anymore)
&lt;br&gt;5. Remove all &amp;quot;load MRs&amp;quot; lines (9 bytes and three memory accesses less)
&lt;br&gt;&lt;br&gt;If you can also spare the copy of MR_0 to the destination UTCB, I think this 
&lt;br&gt;would also save you one cache line, if no untyped words are transmitted. 
&lt;br&gt;According to the L4 X.2 reference manual MR_0 is not mapped to memory, 
&lt;br&gt;anyway.
&lt;br&gt;&lt;br&gt;What do you think, does this make sense?
&lt;br&gt;It would require a change of the (not stable) specification, but I don't see 
&lt;br&gt;any reason for MR_1 and MR_2 to be received in registers on x32.
&lt;br&gt;Btw, why are MR_1 and MR_2 stored in the UTCB again in L4_Ipc, when they 
&lt;br&gt;have just been loaded from there?
&lt;br&gt;&lt;br&gt;Best regards
&lt;br&gt;Moritz 
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Fastpath-on-x32%3A-Every-single-cycle-tp22169377p22169377.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22163373</id>
	<title>StringItem length</title>
	<published>2009-02-23T07:12:53Z</published>
	<updated>2009-02-23T07:12:53Z</updated>
	<author>
		<name>Moritz Kroll</name>
	</author>
	<content type="html">The &amp;quot;current&amp;quot; L4 X.2 reference manual (2006-11-17) states on page 56 
&lt;br&gt;(section 5.4 StringItem) that the &amp;quot;maximum string length is 4 M bytes, even 
&lt;br&gt;if the according field is 54 bits wide on 64-bit processors&amp;quot;.
&lt;br&gt;Two questions:
&lt;br&gt;&lt;br&gt;1. How do you encode a string size of 4 MB on 32-bit?
&lt;br&gt;As far as I see it's not possible (only 22 length bits) and there is no 
&lt;br&gt;implicit +1 used in the kernel source code. If this is intended (probably to 
&lt;br&gt;allow zero-length strings (why?)), the manual should be more clear on the 
&lt;br&gt;maximum size ((4 M - 1) bytes).
&lt;br&gt;&lt;br&gt;2. Who enforces the maximum size on 64-bit (x64)?
&lt;br&gt;For intra-space string copies I didn't find any reason why e.g. a 10 GB copy 
&lt;br&gt;shouldn't work. For an inter-space string copy still even any 1 GB copy 
&lt;br&gt;should work, as the copy area has a size of 2 GB. I have no idea, what will 
&lt;br&gt;happen to larger copies, though. I guess an unhandled kernel pagefault when 
&lt;br&gt;the memcpy reaches the end of the copy area?
&lt;br&gt;&lt;br&gt;Best regards
&lt;br&gt;Moritz 
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/StringItem-length-tp22163373p22163373.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22158664</id>
	<title>RE: Double allocation of UTCB__MAPPING in Pistachio</title>
	<published>2009-02-23T02:09:26Z</published>
	<updated>2009-02-23T02:09:26Z</updated>
	<author>
		<name>Philipp Kupferschmied</name>
	</author>
	<content type="html">&amp;gt; I guess, the first mapping should be removed. Am I right?
&lt;br&gt;&lt;br&gt;I think you're right. Seems as if this had been introduced when the implementations for IA32 and AMD64 were merged. I removed the first mapping.
&lt;br&gt;&lt;br&gt;Thanks for the hint,
&lt;br&gt;Philipp
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Double-allocation-of-UTCB__MAPPING-in-Pistachio-tp22148974p22158664.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22148974</id>
	<title>Double allocation of UTCB__MAPPING in Pistachio</title>
	<published>2009-02-22T09:04:28Z</published>
	<updated>2009-02-22T09:04:28Z</updated>
	<author>
		<name>Moritz Kroll</name>
	</author>
	<content type="html">This looks like a double commit in 
&lt;br&gt;l4ka-pistachio-38b2e96fc5a6/kernel/src/glue/v4-x86/space.cc:703:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; /* MYUTCB mapping
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* allocate a full page for all myutcb pointers.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* access must be performed via gs:0, when setting up the gdt
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* each processor gets a full cache line to avoid bouncing
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* page is user-writable and global
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp; &amp;nbsp; EXTERN_KMEM_GROUP(kmem_misc);
&lt;br&gt;&amp;nbsp; &amp;nbsp; add_mapping((addr_t)UTCB_MAPPING,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; virt_to_phys(kmem.alloc(kmem_misc, X86_PAGE_SIZE)),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pgent_t::size_4k, true, false, true);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; EXTERN_KMEM_GROUP(kmem_misc);
&lt;br&gt;&amp;nbsp; &amp;nbsp; utcb_page = kmem.alloc(kmem_misc, X86_PAGE_SIZE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; ASSERT(utcb_page);
&lt;br&gt;&amp;nbsp; &amp;nbsp; add_mapping((addr_t)UTCB_MAPPING, &amp;nbsp;virt_to_phys(utcb_page),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pgent_t::size_4k, true, false, true);
&lt;br&gt;&lt;br&gt;I guess, the first mapping should be removed. Am I right?
&lt;br&gt;&lt;br&gt;Best regards
&lt;br&gt;Moritz Kroll 
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Double-allocation-of-UTCB__MAPPING-in-Pistachio-tp22148974p22148974.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-21462924</id>
	<title>Re: Compiling L4Ka::Pistachio with SMP support</title>
	<published>2009-01-14T11:06:23Z</published>
	<updated>2009-01-14T11:06:23Z</updated>
	<author>
		<name>Jim Whitehead II-2</name>
	</author>
	<content type="html">On Wed, Jan 14, 2009 at 6:54 PM, Jan Stoess &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=21462924&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;stoess@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; Have you tried enabling APIC support? This is a prerequisite for SMP, although the cml2 config system doesn't enforce it.
&lt;br&gt;&lt;br&gt;Indeed it builds correctly with APIC enabled. &amp;nbsp;Thanks for the heads
&lt;br&gt;up, I was hoping it was just something silly that i missed!
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -Jan
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Jan Stoess
&lt;br&gt;&amp;gt; System Architecture Group
&lt;br&gt;&amp;gt; University of Karlsruhe
&lt;br&gt;&amp;gt; Phone: +49 (721) 608-4056
&lt;br&gt;&amp;gt; Fax: +49 (721) 608-7664
&lt;br&gt;&amp;gt; eMail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=21462924&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;stoess@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Compiling-L4Ka%3A%3APistachio-with-SMP-support-tp21461603p21462924.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-21462715</id>
	<title>RE: Compiling L4Ka::Pistachio with SMP support</title>
	<published>2009-01-14T10:54:46Z</published>
	<updated>2009-01-14T10:54:46Z</updated>
	<author>
		<name>Jan Stoess</name>
	</author>
	<content type="html">Have you tried enabling APIC support? This is a prerequisite for SMP, although the cml2 config system doesn't enforce it.
&lt;br&gt;&lt;br&gt;-Jan
&lt;br&gt;--
&lt;br&gt;Jan Stoess
&lt;br&gt;System Architecture Group
&lt;br&gt;University of Karlsruhe
&lt;br&gt;Phone: +49 (721) 608-4056
&lt;br&gt;Fax: +49 (721) 608-7664
&lt;br&gt;eMail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=21462715&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;stoess@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Compiling-L4Ka%3A%3APistachio-with-SMP-support-tp21461603p21462715.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-21461603</id>
	<title>Compiling L4Ka::Pistachio with SMP support</title>
	<published>2009-01-14T10:02:23Z</published>
	<updated>2009-01-14T10:02:23Z</updated>
	<author>
		<name>Jim Whitehead II-2</name>
	</author>
	<content type="html">I had no problems cloning the Pistachio repository and compiling the
&lt;br&gt;default kernel, but I'm having an issue whenever I enable SMP support
&lt;br&gt;in the kernel. &amp;nbsp;The specific error is in interrupt.cc with an
&lt;br&gt;undeclared 'is_pending'.
&lt;br&gt;&lt;br&gt;/home/jnwhiteh/l4ka-pistachio/kernel/src/api/v4/interrupt.cc: In function `void
&lt;br&gt;&amp;nbsp; &amp;nbsp;migrate_interrupt_end(tcb_t*)':
&lt;br&gt;/home/jnwhiteh/l4ka-pistachio/kernel/src/api/v4/interrupt.cc:411: error: `
&lt;br&gt;&amp;nbsp; &amp;nbsp;is_pending' undeclared (first use this function)
&lt;br&gt;/home/jnwhiteh/l4ka-pistachio/kernel/src/api/v4/interrupt.cc:411: error: (Each
&lt;br&gt;&amp;nbsp; &amp;nbsp;undeclared identifier is reported only once for each function it appears
&lt;br&gt;&amp;nbsp; &amp;nbsp;in.)
&lt;br&gt;make[1]: *** [src/api/v4/interrupt.o] Error 1
&lt;br&gt;make[1]: Leaving directory `/home/jnwhiteh/l4ka-pistachio/x86-kernel-build'
&lt;br&gt;make: *** [all] Error 2
&lt;br&gt;&lt;br&gt;The full compile log can be found at &lt;a href=&quot;http://l4ka.pastey.net/106311&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://l4ka.pastey.net/106311&lt;/a&gt;.
&lt;br&gt;Has anyone run into this error or is there a known fix for the issue?
&lt;br&gt;&lt;br&gt;Jim Whitehead
&lt;br&gt;University of Oxford
&lt;br&gt;Computing Laboratory
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Compiling-L4Ka%3A%3APistachio-with-SMP-support-tp21461603p21461603.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-20909563</id>
	<title>CAmkES: component-based development for L4</title>
	<published>2008-12-08T22:36:59Z</published>
	<updated>2008-12-08T22:36:59Z</updated>
	<author>
		<name>Ihor Kuz</name>
	</author>
	<content type="html">&lt;br&gt;NICTA is happy to announce the first open source release of CAmkES.
&lt;br&gt;&lt;br&gt;CAmkES provides an easier way to develop OKL4-based software and &amp;nbsp;
&lt;br&gt;systems.
&lt;br&gt;&lt;br&gt;It is a component-based software development and runtime framework &amp;nbsp;
&lt;br&gt;for OKL4, allowing microkernel-based systems to be modelled and built &amp;nbsp;
&lt;br&gt;as a set of interacting software components. These software &amp;nbsp;
&lt;br&gt;components have explicit interaction interfaces and a system design &amp;nbsp;
&lt;br&gt;that explicitly details the connections between the components.
&lt;br&gt;&lt;br&gt;The development framework provides:
&lt;br&gt;* a language to describe component interfaces, components, and whole &amp;nbsp;
&lt;br&gt;component-based systems;
&lt;br&gt;* a tool that processes these descriptions to combine programmer- 
&lt;br&gt;provided component code with generated scaffolding and glue code to &amp;nbsp;
&lt;br&gt;build a complete, bootable, system image;
&lt;br&gt;* full integration in the OKL4 environment and build system.
&lt;br&gt;&lt;br&gt;Find out more about CAmkES, download it, and try it out here:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://www.ertos.nicta.com.au/software/camkes/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.ertos.nicta.com.au/software/camkes/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;On behalf of the CAmkES team,
&lt;br&gt;&lt;br&gt;Ihor
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Ihor Kuz
&lt;br&gt;Senior Researcher
&lt;br&gt;&lt;br&gt;NICTA | Locked Bag 6016 | UNSW, Sydney NSW 1466
&lt;br&gt;T + 61 2 8306 0582 | F +61 2 8306 0406
&lt;br&gt;www.nicta.com.au l &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=20909563&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ihor.kuz@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/CAmkES%3A-component-based-development-for-L4-tp20909563p20909563.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-20013875</id>
	<title>Re: How does pistachio deal with the priority inversion?</title>
	<published>2008-10-16T06:20:02Z</published>
	<updated>2008-10-16T06:20:02Z</updated>
	<author>
		<name>Raphael Neider</name>
	</author>
	<content type="html">&amp;gt; &amp;gt; The woken thread will be dispatched no later than on the next timer
&lt;br&gt;&amp;gt; &amp;gt; interrupt (see above case 2). It might be run earlier (case 1 above), but
&lt;br&gt;&amp;gt; &amp;gt; then it can run for a complete timeslice (which is typically much longer
&lt;br&gt;&amp;gt; &amp;gt; than the timer period).
&lt;br&gt;&lt;br&gt;&amp;gt; Yeah, that's what i want. Thanks a lot. &amp;nbsp;What's more, does time donation (you
&lt;br&gt;&amp;gt; said which is typically much longer than the timer period) happened here? &amp;nbsp;if
&lt;br&gt;&amp;gt; so, could you explain it (time donation) a little more for me? 
&lt;br&gt;&lt;br&gt;Typical timeslices are 10ms (on x86), the timer interrupt fires every 1000us
&lt;br&gt;(microseconds), i.e., every 1ms or 10 times per timeslice. That's what I meant
&lt;br&gt;with timeslices being much longer that the timer period.
&lt;br&gt;&lt;br&gt;Timeslice donation always occurs when we switch threads behind the scheduler's
&lt;br&gt;back, i.e., during IPC. The kernel scheduler maintains a timeslice_tcb, which
&lt;br&gt;is a pointer to the thread on whose timeslice we run (and on which we base our
&lt;br&gt;decisions as to whether the current timeslice is over or not), but this is
&lt;br&gt;updated only in schedule(), end_of_timeslice(), and preempt_thread(), none of
&lt;br&gt;which is called during IPC. There we just use switch_to() ...
&lt;br&gt;&lt;br&gt;If the low prio thread B sends an IPC to the high prio thread A, A will be
&lt;br&gt;woken and immediately dispatched (bypassing the scheduler) and continue
&lt;br&gt;execution on B's timeslice until the timeslice expires (or A yields or blocks).
&lt;br&gt;At the end of B's timeslice, the scheduler will be invoked and probably select
&lt;br&gt;A to run. This time, however, also the timeslice_tcb is updated to point to A,
&lt;br&gt;so that A will run on its own timeslice.
&lt;br&gt;&lt;br&gt;&amp;gt; &amp;gt; The L4 kernel is not preemptible (interrupts are disabled while inside the
&lt;br&gt;&amp;gt; &amp;gt; kernel) except during string IPC and possibly during the recursive unmap
&lt;br&gt;&amp;gt; &amp;gt; operation: Here we explicitly enable interrupts to reduce IRQ handler
&lt;br&gt;&amp;gt; &amp;gt; latency. &amp;nbsp;All other code paths through the kernel are rather short, so that
&lt;br&gt;&amp;gt; &amp;gt; making the kernel preemptible would not pay.
&lt;br&gt;&lt;br&gt;&amp;gt; I known that for IA32 when entering kernel space, it's must through the int
&lt;br&gt;&amp;gt; gate(or call gate) whether interrupt or system call. &amp;nbsp;And the after through
&lt;br&gt;&amp;gt; the gate ,all interrupts will be disabled(set IF flag). &amp;nbsp;But, I didn't find
&lt;br&gt;&amp;gt; where these interrupts be enabled again?. &amp;nbsp;Enabled when the interrupted
&lt;br&gt;&amp;gt; thread(or any thread?) return back to user level?
&lt;br&gt;&lt;br&gt;Yes, interrupts are either implicitly turned on when leaving the kernel via
&lt;br&gt;iret (return from interrupt) or explicitly via sti (set interrupt flag, thus
&lt;br&gt;*enabling* interrupts) just before leaving the kernel via sysexit/sysret on
&lt;br&gt;the IPC path.
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;Raphael
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-does-pistachio-deal-with-the-priority-inversion--tp19989281p20013875.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-20007541</id>
	<title>RE: How does pistachio deal with the priority inversion?</title>
	<published>2008-10-15T22:50:31Z</published>
	<updated>2008-10-15T22:50:31Z</updated>
	<author>
		<name>lion</name>
	</author>
	<content type="html">&lt;html&gt;
&lt;head&gt;

&lt;/head&gt;
&lt;body class='hmmessage'&gt;
&amp;gt; The woken thread will&lt;BR&gt;&amp;gt; be dispatched no later than on the next timer interrupt (see above case 2).&lt;BR&gt;&amp;gt; It might be run earlier (case 1 above), but then it can run for a complete&lt;BR&gt;&amp;gt; timeslice (which is typically much longer than the timer period).&lt;BR&gt;&lt;BR&gt;
Yeah,that's what i want. Thanks a lot.&lt;BR&gt;
What's more,does time donation(you said which is typically much longer than the timer period) happened here?&lt;BR&gt;
if so ,could you explain it(time donation) a little more for me? &lt;BR&gt;
&lt;BR&gt;&amp;gt; The L4 kernel is not preemptible (interrupts are disabled while inside&lt;BR&gt;&amp;gt; the kernel) except during string IPC and possibly during the recursive&lt;BR&gt;&amp;gt; unmap operation: Here we explicitly enable interrupts to reduce IRQ handler&lt;BR&gt;&amp;gt; latency.&lt;BR&gt;
&amp;gt; All other code paths through the kernel are rather short, so that making&lt;BR&gt;&amp;gt; the kernel preemptible would not pay.&lt;BR&gt;
&lt;BR&gt;I known that for IA32 when entering kernel space, it's must through the int gate(or call gate) whether interrupt or system call.&lt;BR&gt;
And the after through the gate ,all interrupts will be disabled(set IF flag).&lt;BR&gt;
But, I didn't find where these interrupts&amp;nbsp;be enabled again?.&amp;nbsp; Enabled when&amp;nbsp;the interrupted&amp;nbsp;thread(or any thread?) return back to user level?&amp;nbsp;&lt;BR&gt;
&amp;nbsp;&lt;BR&gt;
Thank you for your time!&lt;BR&gt;
&lt;BR&gt;---&lt;BR&gt;Best regards&lt;BR&gt;&lt;BR&gt;Bo Liu&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;div class='shrinkable-quote'&gt;&lt;BR&gt;&amp;gt; Date: Wed, 15 Oct 2008 13:32:04 +0200&lt;BR&gt;&amp;gt; From: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=20007541&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;neider@...&lt;/a&gt;&lt;BR&gt;&amp;gt; To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=20007541&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bo-liu@...&lt;/a&gt;&lt;BR&gt;&amp;gt; CC: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=20007541&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;l4ka@...&lt;/a&gt;&lt;BR&gt;&amp;gt; Subject: Re: How does pistachio deal with the priority inversion?&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; &amp;gt; &amp;gt; IPC won't start at all as B will never run.&lt;BR&gt;&amp;gt; &amp;gt; So thread A will Blocked for a very long time untill B gets to run?&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; Yes. However, you can use timeouts in A's IPC operation to avoid/recover&lt;BR&gt;&amp;gt; from such situations.&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; &amp;gt; &amp;gt; L4 leaves this problem to the OS on top, it does not deal with&lt;BR&gt;&amp;gt; &amp;gt; &amp;gt; starvation/priority inversion at all. Scheduling on L4 is still not&lt;BR&gt;&amp;gt; &amp;gt; &amp;gt; solved satisfactorily.&lt;BR&gt;&amp;gt; &amp;gt; &lt;BR&gt;&amp;gt; &amp;gt; NOw, I am messed by L4's schedule mechanism. It' based on static priority and&lt;BR&gt;&amp;gt; &amp;gt; timeslice. When a very high priority thread being wakeup. It will be&lt;BR&gt;&amp;gt; &amp;gt; scheduled untill a time interrupt happen?&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; How can a high priority thread wake up?&lt;BR&gt;&amp;gt; 1. receive IPC&lt;BR&gt;&amp;gt; 2. timeout, detected at some timer interrupt&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; In the first case, either a user thread or an interrupt thread explicitly&lt;BR&gt;&amp;gt; calls the high priority thread, immediately scheduling it for execution.&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; In the second case, I assume, the scheduler is invoked after having detected&lt;BR&gt;&amp;gt; that a (high priority) thread has reached a timeout.&lt;BR&gt;&amp;gt; But even if I am wrong and we do not immediately schedule the timed-out thread,&lt;BR&gt;&amp;gt; it will be scheduled after the end of the current timeslice (given no thread&lt;BR&gt;&amp;gt; with a still higher priority becomes ready in the meantime).&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; I am not sure about the 'until' in your question: The woken thread will&lt;BR&gt;&amp;gt; be dispatched no later than on the next timer interrupt (see above case 2).&lt;BR&gt;&amp;gt; It might be run earlier (case 1 above), but then it can run for a complete&lt;BR&gt;&amp;gt; timeslice (which is typically much longer than the timer period).&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; &amp;gt; And does Pistachio support kernel preempt like the linux kernel 2.6?&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; The L4 kernel is not preemptible (interrupts are disabled while inside&lt;BR&gt;&amp;gt; the kernel) except during string IPC and possibly during the recursive&lt;BR&gt;&amp;gt; unmap operation: Here we explicitly enable interrupts to reduce IRQ handler&lt;BR&gt;&amp;gt; latency.&lt;BR&gt;&amp;gt; All other code paths through the kernel are rather short, so that making&lt;BR&gt;&amp;gt; the kernel preemptible would not pay.&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; Hope that helped,&lt;BR&gt;&amp;gt; Raphael&lt;BR&gt;&amp;gt; &lt;/div&gt;&lt;BR&gt;&lt;br /&gt;&lt;hr /&gt;Get news, entertainment and everything you care about at Live.com. &lt;a href='http://www.live.com/getstarted.aspx ' target='_new' rel=&quot;nofollow&quot;&gt;Check it out!&lt;/a&gt;&lt;/body&gt;
&lt;/html&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-does-pistachio-deal-with-the-priority-inversion--tp19989281p20007541.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19991685</id>
	<title>Re: How does pistachio deal with the priority inversion?</title>
	<published>2008-10-15T04:32:04Z</published>
	<updated>2008-10-15T04:32:04Z</updated>
	<author>
		<name>Raphael Neider</name>
	</author>
	<content type="html">&amp;gt; &amp;gt; IPC won't start at all as B will never run.
&lt;br&gt;&amp;gt; So thread A will Blocked for a very long time untill B gets to run?
&lt;br&gt;&lt;br&gt;Yes. However, you can use timeouts in A's IPC operation to avoid/recover
&lt;br&gt;from such situations.
&lt;br&gt;&lt;br&gt;&amp;gt; &amp;gt; L4 leaves this problem to the OS on top, it does not deal with
&lt;br&gt;&amp;gt; &amp;gt; starvation/priority inversion at all. Scheduling on L4 is still not
&lt;br&gt;&amp;gt; &amp;gt; solved satisfactorily.
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt; NOw, I am messed by L4's schedule mechanism. It' based on static priority and
&lt;br&gt;&amp;gt; timeslice. &amp;nbsp;When a very high priority thread being wakeup. It will be
&lt;br&gt;&amp;gt; scheduled untill a time interrupt happen?
&lt;br&gt;&lt;br&gt;How can a high priority thread wake up?
&lt;br&gt;&amp;nbsp; 1. receive IPC
&lt;br&gt;&amp;nbsp; 2. timeout, detected at some timer interrupt
&lt;br&gt;&lt;br&gt;In the first case, either a user thread or an interrupt thread explicitly
&lt;br&gt;calls the high priority thread, immediately scheduling it for execution.
&lt;br&gt;&lt;br&gt;In the second case, I assume, the scheduler is invoked after having detected
&lt;br&gt;that a (high priority) thread has reached a timeout.
&lt;br&gt;But even if I am wrong and we do not immediately schedule the timed-out thread,
&lt;br&gt;it will be scheduled after the end of the current timeslice (given no thread
&lt;br&gt;with a still higher priority becomes ready in the meantime).
&lt;br&gt;&lt;br&gt;I am not sure about the 'until' in your question: The woken thread will
&lt;br&gt;be dispatched no later than on the next timer interrupt (see above case 2).
&lt;br&gt;It might be run earlier (case 1 above), but then it can run for a complete
&lt;br&gt;timeslice (which is typically much longer than the timer period).
&lt;br&gt;&lt;br&gt;&amp;gt; And does Pistachio support kernel preempt like the linux kernel 2.6?
&lt;br&gt;&lt;br&gt;The L4 kernel is not preemptible (interrupts are disabled while inside
&lt;br&gt;the kernel) except during string IPC and possibly during the recursive
&lt;br&gt;unmap operation: Here we explicitly enable interrupts to reduce IRQ handler
&lt;br&gt;latency.
&lt;br&gt;All other code paths through the kernel are rather short, so that making
&lt;br&gt;the kernel preemptible would not pay.
&lt;br&gt;&lt;br&gt;Hope that helped,
&lt;br&gt;Raphael
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-does-pistachio-deal-with-the-priority-inversion--tp19989281p19991685.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19990179</id>
	<title>RE: How does pistachio deal with the priority inversion?</title>
	<published>2008-10-15T02:41:46Z</published>
	<updated>2008-10-15T02:41:46Z</updated>
	<author>
		<name>lion</name>
	</author>
	<content type="html">&lt;html&gt;
&lt;head&gt;

&lt;/head&gt;
&lt;body class='hmmessage'&gt;
&amp;gt; &lt;BR&gt;&amp;gt; IPC won't start at all as B will never run.&lt;BR&gt;&amp;gt; &lt;BR&gt;
So thread A will Blocked for a very long time untill B gets to run?&lt;BR&gt;
&amp;nbsp;&lt;BR&gt;
&amp;gt; &lt;BR&gt;&amp;gt; L4 leaves this problem to the OS on top, it does not deal with&lt;BR&gt;&amp;gt; starvation/priority inversion at all. Scheduling on L4 is still&lt;BR&gt;&amp;gt; not solved satisfactorily.&lt;BR&gt;
&amp;nbsp;&lt;BR&gt;
NOw, I am messed by L4's schedule mechanism. It' based on static priority and timeslice.&lt;BR&gt;
When a very high priority thread being wakeup. It will be scheduled untill a time interrupt happen?&lt;BR&gt;
And does Pistachio support kernel preempt&amp;nbsp;like the linux kernel 2.6?&lt;BR&gt;
&amp;nbsp;&lt;BR&gt;
Thanks a lot!&lt;BR&gt;&lt;BR&gt;---&lt;BR&gt;Best regards&lt;BR&gt;&lt;BR&gt;Bo Liu&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;br /&gt;&lt;hr /&gt;Discover the new Windows Vista &lt;a href='http://search.msn.com/results.aspx?q=windows+vista&amp;mkt=en-US&amp;form=QBRE' target='_new' rel=&quot;nofollow&quot;&gt;Learn more!&lt;/a&gt;&lt;/body&gt;
&lt;/html&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-does-pistachio-deal-with-the-priority-inversion--tp19989281p19990179.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19989717</id>
	<title>Re: How does pistachio deal with the priority inversion?</title>
	<published>2008-10-15T02:11:53Z</published>
	<updated>2008-10-15T02:11:53Z</updated>
	<author>
		<name>Raphael Neider</name>
	</author>
	<content type="html">Hi Bob,
&lt;br&gt;&lt;br&gt;&amp;gt; When a high priority thread A perform IPC receive from B, but B is not
&lt;br&gt;&amp;gt; in polling state. So A blocked. &amp;nbsp;Before B can perform the IPC that
&lt;br&gt;&amp;gt; unblocks A, a third thread C with priority between A and B becomes
&lt;br&gt;&amp;gt; ready,preempts B and runs. If lots of such thread C, IPC will be very
&lt;br&gt;&amp;gt; slow.
&lt;br&gt;&lt;br&gt;IPC won't start at all as B will never run.
&lt;br&gt;&lt;br&gt;&amp;gt; How &amp;nbsp;pistachio deal with this? I read some code,it seems no special
&lt;br&gt;&amp;gt; process. &amp;nbsp;Thanks!
&lt;br&gt;&lt;br&gt;L4 leaves this problem to the OS on top, it does not deal with
&lt;br&gt;starvation/priority inversion at all. Scheduling on L4 is still
&lt;br&gt;not solved satisfactorily.
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;Raphael
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-does-pistachio-deal-with-the-priority-inversion--tp19989281p19989717.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19989281</id>
	<title>How does pistachio deal with the priority inversion?</title>
	<published>2008-10-15T00:25:15Z</published>
	<updated>2008-10-15T00:25:15Z</updated>
	<author>
		<name>lion</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Hi, All. Question again.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;When a high priority thread A perform IPC receive from B, but B is not in polling state. So A blocked.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Before B can perform the IPC that unblocks A, a third thread C with priority
&lt;br&gt;between A and B becomes ready,preempts B and runs. If lots of such thread C,
&lt;br&gt;IPC will be very slow.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;How &amp;nbsp;pistachio deal with this? I read some code,it seems no special process.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Thanks!
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;Best regards
&lt;br&gt;&lt;br&gt;Bo Liu
&lt;br&gt;&lt;br&gt;&lt;br&gt;_________________________________________________________________
&lt;br&gt;Discover the new Windows Vista
&lt;br&gt;&lt;a href=&quot;http://search.msn.com/results.aspx?q=windows+vista&amp;mkt=en-US&amp;form=QBRE&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://search.msn.com/results.aspx?q=windows+vista&amp;mkt=en-US&amp;form=QBRE&lt;/a&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-does-pistachio-deal-with-the-priority-inversion--tp19989281p19989281.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19969723</id>
	<title>RE: only kernel can access copy_area ?</title>
	<published>2008-10-14T02:13:01Z</published>
	<updated>2008-10-14T02:13:01Z</updated>
	<author>
		<name>lion</name>
	</author>
	<content type="html">&lt;html&gt;
&lt;head&gt;

&lt;/head&gt;
&lt;body class='hmmessage'&gt;
Thank you Raphael. It's so clearly! &lt;BR&gt;It seems easy and simple. But I couldn't understand it before. &lt;BR&gt;
I think i need introspection and think more.&amp;nbsp;&lt;BR&gt;
&lt;BR&gt;---&lt;BR&gt;Best regards&lt;BR&gt;&lt;BR&gt;Bo Liu&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;div class='shrinkable-quote'&gt;&lt;BR&gt;&amp;gt; Date: Tue, 14 Oct 2008 10:29:35 +0200&lt;BR&gt;&amp;gt; From: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=19969723&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;neider@...&lt;/a&gt;&lt;BR&gt;&amp;gt; To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=19969723&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bo-liu@...&lt;/a&gt;&lt;BR&gt;&amp;gt; CC: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=19969723&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;l4ka@...&lt;/a&gt;&lt;BR&gt;&amp;gt; Subject: Re: only kernel can access copy_area ?&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; On 2008-10-14 at 00:33, lion wrote:&lt;BR&gt;&amp;gt; &amp;gt; &lt;BR&gt;&amp;gt; &amp;gt; Still uncleanly about that...&lt;BR&gt;&amp;gt; &amp;gt; About the copy_area's implemention.&lt;BR&gt;&amp;gt; &amp;gt; &lt;BR&gt;&amp;gt; &amp;gt; &amp;gt; About the copy_area,&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; The copy area is a temporary mapping of a part of B's address space (the&lt;BR&gt;&amp;gt; destination of the string transfer) into the kernel region in order to&lt;BR&gt;&amp;gt; make B's memory accessible while A's address space is active (otherwise&lt;BR&gt;&amp;gt; there would be no name, i.e., virtual address in A's address space, to&lt;BR&gt;&amp;gt; access that memory).&lt;BR&gt;&amp;gt; In principle, both A and B could access the mapping area: it is not protected&lt;BR&gt;&amp;gt; by means of page protections (the page is user accessible due to its page&lt;BR&gt;&amp;gt; table entry being copied from B and the page being user accessible there) nor&lt;BR&gt;&amp;gt; by means of segmentation (on x86, due to L4 not using segments for protection&lt;BR&gt;&amp;gt; at all except with small spaces).&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; But: The copy area is unmapped&lt;BR&gt;&amp;gt; (a) before A returns to user mode after the IPC and/or&lt;BR&gt;&amp;gt; (b) at the next thread switch (whichever occurs first),&lt;BR&gt;&amp;gt; so neither A nor B (nor any other thread at user level) has a chance of&lt;BR&gt;&amp;gt; actually accessing B's memory by means of the copy area.&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; Now back to answering your questions:&lt;BR&gt;&amp;gt; &amp;gt; &amp;gt; when A sends a message to B, only kernel A and user B can access &lt;BR&gt;&amp;gt; &amp;gt; &amp;gt; the copy_area. But user A can not. Is these correct ? And why ?&lt;BR&gt;&amp;gt; That's not correct. Theoretically, user A, user B, kernel A, and kernel B&lt;BR&gt;&amp;gt; can access the copy area, but due to kernel guarantees as to which thread&lt;BR&gt;&amp;gt; actually runs, only kernel A gets the chance to do so.&lt;BR&gt;&amp;gt; The `why' should have been answered above.&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; &amp;gt; &amp;gt; In my opinion, the page table of A's copy_area is copyed from B which&lt;BR&gt;&amp;gt; &amp;gt; &amp;gt; is user accessiable.&lt;BR&gt;&amp;gt; &amp;gt; &amp;gt; So,user A can access the copy_area. Is that right?&lt;BR&gt;&amp;gt; Again: Yes, but only in theory as user A never runs while the mapping exists.&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; Hoping that helped to clear things up a bit,&lt;BR&gt;&amp;gt; Raphael&lt;BR&gt;&amp;gt; &lt;/div&gt;&lt;BR&gt;&lt;br /&gt;&lt;hr /&gt;Explore the seven wonders of the world &lt;a href='http://search.msn.com/results.aspx?q=7+wonders+world&amp;mkt=en-US&amp;form=QBRE' target='_new' rel=&quot;nofollow&quot;&gt;Learn more!&lt;/a&gt;&lt;/body&gt;
&lt;/html&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/only-kernel-can-access-copy_area---tp19508830p19969723.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19969223</id>
	<title>Re: only kernel can access copy_area ?</title>
	<published>2008-10-14T01:29:35Z</published>
	<updated>2008-10-14T01:29:35Z</updated>
	<author>
		<name>Raphael Neider</name>
	</author>
	<content type="html">On 2008-10-14 at 00:33, lion wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Still uncleanly about that...
&lt;br&gt;&amp;gt; About the copy_area's implemention.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;About the copy_area,
&lt;br&gt;&lt;br&gt;The copy area is a temporary mapping of a part of B's address space (the
&lt;br&gt;destination of the string transfer) into the kernel region in order to
&lt;br&gt;make B's memory accessible while A's address space is active (otherwise
&lt;br&gt;there would be no name, i.e., virtual address in A's address space, to
&lt;br&gt;access that memory).
&lt;br&gt;In principle, both A and B could access the mapping area: it is not protected
&lt;br&gt;by means of page protections (the page is user accessible due to its page
&lt;br&gt;table entry being copied from B and the page being user accessible there) nor
&lt;br&gt;by means of segmentation (on x86, due to L4 not using segments for protection
&lt;br&gt;at all except with small spaces).
&lt;br&gt;&lt;br&gt;But: The copy area is unmapped
&lt;br&gt;&amp;nbsp; &amp;nbsp; (a) before A returns to user mode after the IPC and/or
&lt;br&gt;&amp;nbsp; &amp;nbsp; (b) at the next thread switch (whichever occurs first),
&lt;br&gt;so neither A nor B (nor any other thread at user level) has a chance of
&lt;br&gt;actually accessing B's memory by means of the copy area.
&lt;br&gt;&lt;br&gt;Now back to answering your questions:
&lt;br&gt;&amp;gt; &amp;gt; when A sends a message to B, only kernel A and user B can access 
&lt;br&gt;&amp;gt; &amp;gt; the copy_area. But user A can not. Is these correct ? And why ?
&lt;br&gt;That's not correct. Theoretically, user A, user B, kernel A, and kernel B
&lt;br&gt;can access the copy area, but due to kernel guarantees as to which thread
&lt;br&gt;actually runs, only kernel A gets the chance to do so.
&lt;br&gt;The `why' should have been answered above.
&lt;br&gt;&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;In my opinion, the page table of A's copy_area is copyed from B which
&lt;br&gt;&amp;gt; &amp;gt; is user accessiable.
&lt;br&gt;&amp;gt; &amp;gt; So,user A can access the copy_area. Is that right?
&lt;br&gt;Again: Yes, but only in theory as user A never runs while the mapping exists.
&lt;br&gt;&lt;br&gt;Hoping that helped to clear things up a bit,
&lt;br&gt;Raphael
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/only-kernel-can-access-copy_area---tp19508830p19969223.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19968415</id>
	<title>Re: only kernel can access copy_area ?</title>
	<published>2008-10-14T00:32:55Z</published>
	<updated>2008-10-14T00:32:55Z</updated>
	<author>
		<name>lion</name>
	</author>
	<content type="html">Still uncleanly about that...
&lt;br&gt;About the copy_area's implemention.
&lt;br&gt;&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;lion wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;Hi, all 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Thank you for these days' help.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Now, I am learning about &amp;nbsp;ipc. And have a question again. Sorry for troubling you!
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;About the copy_area,when A sends a message to B, only kernel A and user B can access 
&lt;br&gt;the copy_area. But user A can not. Is these correct ? And why ?
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;In my opinion, the page table of A's copy_area is copyed from B which is user accessiable.
&lt;br&gt;So,user A can access the copy_area. Is that right?
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Thank you
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;---Best regardsBo Liu
&lt;br&gt;_________________________________________________________________
&lt;br&gt;News, entertainment and everything you care about at Live.com. Get it now!
&lt;br&gt;&lt;a href=&quot;http://www.live.com/getstarted.aspx&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.live.com/getstarted.aspx&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/only-kernel-can-access-copy_area---tp19508830p19968415.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19564959</id>
	<title>RE: What's the difference between Quantum and Timeslice ?</title>
	<published>2008-09-18T18:43:29Z</published>
	<updated>2008-09-18T18:43:29Z</updated>
	<author>
		<name>lion</name>
	</author>
	<content type="html">&lt;br&gt;Thanks Raphael. 
&lt;br&gt;&lt;br&gt;I have got there differences now.
&lt;br&gt;&lt;br&gt;An addition question. In handle_timer_interrupt(schedule.cc), 
&lt;br&gt;why useing &amp;nbsp;(get_prio_queue(current)-&amp;gt;current_timeslice -= get_timer_tick_length()) &amp;lt;= 0 to determine 
&lt;br&gt;whether end of a thread's timeslice? &amp;nbsp;
&lt;br&gt;Why not just use &amp;quot;(tcb-&amp;gt;current_timeslice -= get_timer_tick_length) &amp;lt;= 0&amp;quot;. 
&lt;br&gt;&lt;br&gt;So as in end_of_timeslice():
&lt;br&gt;tcb-&amp;gt;current_timeslice = prio_queue-&amp;gt;current_timeslice + tcb-&amp;gt;timeslice_length;
&lt;br&gt;prio_queue-&amp;gt;current_timeslice = prio_queue-&amp;gt;get(get_priority (tcb))-&amp;gt;current_timeslice;
&lt;br&gt;&lt;br&gt;Why there must &amp;nbsp;a prio_queue-&amp;gt;current_timeslice but not just use tcb-&amp;gt;timeslice ?
&lt;br&gt;&lt;br&gt;Thank you for you time!
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;Best regards
&lt;br&gt;&lt;br&gt;Bo Liu
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Date: Thu, 18 Sep 2008 11:04:12 +0200
&lt;br&gt;&amp;gt; From: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=19564959&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;neider@...&lt;/a&gt;
&lt;br&gt;&amp;gt; To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=19564959&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bo-liu@...&lt;/a&gt;; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=19564959&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;l4ka@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Subject: Re: What's the difference between Quantum and Timeslice ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hi Bob,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; What's the difference between Quantum and Timeslice ?
&lt;br&gt;&amp;gt;&amp;gt; Timeslice is used for thread scheduler. Then Quantum used for what ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; A new timeslice is allocated every time a thread is scheduled and (only)
&lt;br&gt;&amp;gt; serves to implement round-robin-scheduling: after at most &amp;quot;timeslice&amp;quot;
&lt;br&gt;&amp;gt; time, the thread is preempted and another thread can be scheduled. The
&lt;br&gt;&amp;gt; preempted thread may be scheduled again.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The (total) quantum was intended to limit the total time the thread may
&lt;br&gt;&amp;gt; spend executing on any CPU. It is decreased every time a timer interrupt
&lt;br&gt;&amp;gt; occurs (just like timeslices are, see schedule.cc,
&lt;br&gt;&amp;gt; handle_timer_interrupt()), but never reset automatically (only via a
&lt;br&gt;&amp;gt; schedule syscall). Once a thread runs out of time (no quantum left), it
&lt;br&gt;&amp;gt; will not be scheduled again (a preemption IPC should be sent to its
&lt;br&gt;&amp;gt; scheduler, but that's disabled due to major problems, see scheduler.cc,
&lt;br&gt;&amp;gt; total_quantum_expired()).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In short, the timeslice determines for how long a thread can
&lt;br&gt;&amp;gt; continuously occupy a CPU before being preempted, the quantum limits the
&lt;br&gt;&amp;gt; total time the thread may spend on the CPUs accumulated over all
&lt;br&gt;&amp;gt; occasions the thread was scheduled.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Regards,
&lt;br&gt;&amp;gt; Raphael
&lt;/div&gt;&lt;br&gt;_________________________________________________________________
&lt;br&gt;Discover the new Windows Vista
&lt;br&gt;&lt;a href=&quot;http://search.msn.com/results.aspx?q=windows+vista&amp;mkt=en-US&amp;form=QBRE&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://search.msn.com/results.aspx?q=windows+vista&amp;mkt=en-US&amp;form=QBRE&lt;/a&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/What%27s-the-difference-between-Quantum-and-Timeslice---tp19548444p19564959.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19548829</id>
	<title>Re: What's the difference between Quantum and Timeslice ?</title>
	<published>2008-09-18T02:04:12Z</published>
	<updated>2008-09-18T02:04:12Z</updated>
	<author>
		<name>Raphael Neider</name>
	</author>
	<content type="html">Hi Bob,
&lt;br&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; What's the difference between Quantum and Timeslice ?
&lt;br&gt;&amp;gt; Timeslice is used for thread scheduler. Then Quantum used for what ?
&lt;br&gt;&lt;br&gt;A new timeslice is allocated every time a thread is scheduled and (only)
&lt;br&gt;serves to implement round-robin-scheduling: after at most &amp;quot;timeslice&amp;quot;
&lt;br&gt;time, the thread is preempted and another thread can be scheduled. The
&lt;br&gt;preempted thread may be scheduled again.
&lt;br&gt;&lt;br&gt;The (total) quantum was intended to limit the total time the thread may
&lt;br&gt;spend executing on any CPU. It is decreased every time a timer interrupt
&lt;br&gt;occurs (just like timeslices are, see schedule.cc,
&lt;br&gt;handle_timer_interrupt()), but never reset automatically (only via a
&lt;br&gt;schedule syscall). Once a thread runs out of time (no quantum left), it
&lt;br&gt;will not be scheduled again (a preemption IPC should be sent to its
&lt;br&gt;scheduler, but that's disabled due to major problems, see scheduler.cc,
&lt;br&gt;total_quantum_expired()).
&lt;br&gt;&lt;br&gt;In short, the timeslice determines for how long a thread can
&lt;br&gt;continuously occupy a CPU before being preempted, the quantum limits the
&lt;br&gt;total time the thread may spend on the CPUs accumulated over all
&lt;br&gt;occasions the thread was scheduled.
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;Raphael
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/What%27s-the-difference-between-Quantum-and-Timeslice---tp19548444p19548829.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19548444</id>
	<title>What's the difference between Quantum and Timeslice ?</title>
	<published>2008-09-18T01:35:37Z</published>
	<updated>2008-09-18T01:35:37Z</updated>
	<author>
		<name>lion</name>
	</author>
	<content type="html">&lt;br&gt;Hi, All
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; What's the difference between Quantum and Timeslice ?
&lt;br&gt;Timeslice is used for thread scheduler. Then Quantum used for what ?
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;---
&lt;br&gt;Best regards
&lt;br&gt;&lt;br&gt;Bo Liu
&lt;br&gt;&lt;br&gt;&lt;br&gt;_________________________________________________________________
&lt;br&gt;Discover the new Windows Vista
&lt;br&gt;&lt;a href=&quot;http://search.msn.com/results.aspx?q=windows+vista&amp;mkt=en-US&amp;form=QBRE&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://search.msn.com/results.aspx?q=windows+vista&amp;mkt=en-US&amp;form=QBRE&lt;/a&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/What%27s-the-difference-between-Quantum-and-Timeslice---tp19548444p19548444.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19508830</id>
	<title>only kernel can access copy_area ?</title>
	<published>2008-09-16T03:01:25Z</published>
	<updated>2008-09-16T03:01:25Z</updated>
	<author>
		<name>lion</name>
	</author>
	<content type="html">&lt;html&gt;
&lt;head&gt;

&lt;/head&gt;
&lt;body class='hmmessage'&gt;
Hi, all &lt;BR&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thank you for these days' help.&lt;BR&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Now, I am learning about&amp;nbsp; ipc. And have a question again. Sorry for troubling you!&lt;BR&gt;
&amp;nbsp;&lt;BR&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; About the copy_area,when A sends a message to B, only kernel A and user B can access &lt;BR&gt;
the copy_area. But user A can not. Is these correct ? And why ?&lt;BR&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; In my opinion, the page table of A's copy_area is copyed from B whick&amp;nbsp;is user accessiable.&lt;BR&gt;
So,user A can access&amp;nbsp;the copy_area. Is that right?&lt;BR&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thank you&lt;BR&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;---&lt;BR&gt;Best regards&lt;BR&gt;&lt;BR&gt;Bo Liu&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;br /&gt;&lt;hr /&gt;Get news, entertainment and everything you care about at Live.com. &lt;a href='http://www.live.com/getstarted.aspx ' target='_new' rel=&quot;nofollow&quot;&gt;Check it out!&lt;/a&gt;&lt;/body&gt;
&lt;/html&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/only-kernel-can-access-copy_area---tp19508830p19508830.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19433884</id>
	<title>Re: How to access VRAM physical address on L4 ?</title>
	<published>2008-09-11T05:38:25Z</published>
	<updated>2008-09-11T05:38:25Z</updated>
	<author>
		<name>Philipp Kupferschmied</name>
	</author>
	<content type="html">&amp;gt; All pager's has to &amp;quot;ask&amp;quot; sigma0 for the page. Whether it becomeing the
&lt;br&gt;&amp;gt; performance bottleneck.
&lt;br&gt;&lt;br&gt;On system startup, user-level pager(s) should request the memory they need from sigma0. Thus, once the system is completely up and running, sigma0 has no pages left to give out, and there should be no reason for user-level pagers or other threads to interact with sigma0 any more.
&lt;br&gt;Consequently, the performance of sigma0 is no longer important once the other pagers are running and have acquired their memory.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;Philipp
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-to-access-VRAM-physical-address-on-L4---tp19406612p19433884.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19426091</id>
	<title>RE: How to access VRAM physical address on L4 ?</title>
	<published>2008-09-10T18:12:31Z</published>
	<updated>2008-09-10T18:12:31Z</updated>
	<author>
		<name>lion</name>
	</author>
	<content type="html">&lt;html&gt;
&lt;head&gt;

&lt;/head&gt;
&lt;body class='hmmessage'&gt;
Thank you, Philipp.&amp;nbsp; It's clearly. &lt;BR&gt;
Another little question. &lt;BR&gt;
All&amp;nbsp;pager's has to &quot;ask&quot; sigma0 for the page. Whether it becomeing the &amp;nbsp;performance bottleneck.&lt;BR&gt;&lt;BR&gt;---&lt;BR&gt;Best regards&lt;BR&gt;&lt;BR&gt;Bo Liu&lt;BR&gt;&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; Your pager has to &quot;ask&quot; sigma0 for the page(s) it needs, and it has to set its receive window accordingly. The receive window allows the pager to specify to where the fpage that sigma0 returns is mapped.&lt;BR&gt;&amp;gt; Convenience functions for requesting memory from sigma0 can be found in user/include/l4/sigma0.h&lt;BR&gt;&amp;gt; &lt;BR&gt;&amp;gt; Hope this helps,&lt;BR&gt;&amp;gt; Philipp&lt;BR&gt;&lt;BR&gt;&lt;br /&gt;&lt;hr /&gt;Explore the seven wonders of the world &lt;a href='http://search.msn.com/results.aspx?q=7+wonders+world&amp;mkt=en-US&amp;form=QBRE' target='_new' rel=&quot;nofollow&quot;&gt;Learn more!&lt;/a&gt;&lt;/body&gt;
&lt;/html&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-to-access-VRAM-physical-address-on-L4---tp19406612p19426091.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-19417842</id>
	<title>Re: How to access VRAM physical address on L4 ?</title>
	<published>2008-09-10T09:36:12Z</published>
	<updated>2008-09-10T09:36:12Z</updated>
	<author>
		<name>Philipp Kupferschmied</name>
	</author>
	<content type="html">&amp;gt; Our own pager not sigma0 can do these map?
&lt;br&gt;&lt;br&gt;Your pager has to &amp;quot;ask&amp;quot; sigma0 for the page(s) it needs, and it has to set its receive window accordingly. The receive window allows the pager to specify to where the fpage that sigma0 returns is mapped.
&lt;br&gt;Convenience functions for requesting memory from sigma0 can be found in user/include/l4/sigma0.h
&lt;br&gt;&lt;br&gt;Hope this helps,
&lt;br&gt;Philipp
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-to-access-VRAM-physical-address-on-L4---tp19406612p19417842.html" />
</entry>

</feed>
