Hi Simon,<div><br></div><div>Yes, according to the output, it works correctly on X86_64. But do you have any insights about why it would fail on X86_32? Here is my output here with arch x86_32 on qemu.</div><div><br></div>

<div><div>pmaptest.0: begin monothelic_frame test...</div><div>kernel 0: user page fault in &#39;pmaptest&#39;: addr 60000000 IP 400548 error 7</div><div>kernel 0: user page fault in &#39;pmaptest&#39;: addr 60001000 IP 400548 error 7</div>

<div>pmaptest.0: array init done!</div><div>pmaptest.0: array check fail, a[0] = 1024</div><div>pmaptest.0: two page&#39;s content are identical</div><div>a[0] = 1024, a[1024] = 1024</div><div>a[1] = 1025, a[1025] = 1025</div>

<div>a[2] = 1026, a[1026] = 1026</div><div>a[3] = 1027, a[1027] = 1027</div><div>pmaptest.0: checking if the two virtual page share the same physical page... no</div><div>pmaptest.0: begin one_page_one_frame test...</div>

<div>kernel 0: user page fault in &#39;pmaptest&#39;: addr 68000000 IP 4007b0 error 7</div><div>kernel 0: user page fault in &#39;pmaptest&#39;: addr 68001000 IP 4007b0 error 7</div><div>pmaptest.0: array init done</div>
<div>
pmaptest.0: array check done!</div></div><div><br></div><div>During the porting, I&#39;ve only changed find_ptable to get_ptable, Is it a problem?</div><div><br></div><div>For you convenience, I attached a patch for /lib/barrelfish/target/x86_32/pmap_target.c:modify_flags, in case you want to test it by yourself.</div>

<div><br></div><div>Thanks for your concern!</div><div><br></div><div>Jinghao</div><div><br><div class="gmail_quote">On Mon, May 21, 2012 at 8:08 PM, Simon Peter <span dir="ltr">&lt;<a href="mailto:speter@inf.ethz.ch" target="_blank">speter@inf.ethz.ch</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Jinghao,<br>
<br>
I&#39;ve compiled your code for x86-64 and ran it on QEMU. Here&#39;s the output I get:<br>
<br>
pmaptest.0: begin monothelic_frame test...<br>
kernel 0: user page fault in &#39;pmaptest&#39;: addr 60000000 IP 4003a0, error 0x7<br>
kernel 0: user page fault in &#39;pmaptest&#39;: addr 60001000 IP 4003a0, error 0x7<br>
pmaptest.0: array init done!<br>
pmaptest.0: begin one_page_one_frame test...<br>
kernel 0: user page fault in &#39;pmaptest&#39;: addr 68000000 IP 400560, error 0x7<br>
kernel 0: user page fault in &#39;pmaptest&#39;: addr 68001000 IP 400560, error 0x7<br>
pmaptest.0: array init done<br>
pmaptest.0: array check done!<br>
<br>
This seems to be working?<br>
<br>
Simon<br>
<br>
On 20.05.2012 16:00, <a href="mailto:jhshi@cs.hku.hk" target="_blank">jhshi@cs.hku.hk</a> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Here is my previous email, FYI.<br>
<br>
<a href="https://lists.inf.ethz.ch/pipermail/barrelfish-users/2012-May/000593.html" target="_blank">https://lists.inf.ethz.ch/<u></u>pipermail/barrelfish-users/<u></u>2012-May/000593.html</a><br>
<br>
Quoting <a href="mailto:jhshi@cs.hku.hk" target="_blank">jhshi@cs.hku.hk</a>:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Hi,<br>
<br>
For some reason, I need to work on x86_32 instead of x86_64. And I<br>
found that x86_32&#39;s pmap-&gt;f.modify_flags is NYI. So I ported it from<br>
  x86_64, as described by my previous email (link). But then I found<br>
that the port won&#39;t work properly. Personally, I don&#39;t think the<br>
problem lies in the porting but in the modify_flags itself.<br>
<br>
Here is my test case workflow:<br>
<br>
First allocate two pages using frame_alloc and map them at some<br>
&quot;safe&quot;  virtual address as read-only using pmap-&gt;f.map. Then fill<br>
the two  pages with different content. Since they are read-only,<br>
page faults  will occur when filling. I catch them and map the fault<br>
page as  read-write using pmap-&gt;f.modify_flags in the fault handler.<br>
But then I  found that the two page&#39;s content are identical, which<br>
is not supposed  to be.<br>
<br>
Then I found that if I allocate one frame for each page, instead of<br>
one monolithic frame, everything is fine.<br>
<br>
I&#39;ve summarized my test in the attached C file, which should be<br>
compiled and run under x86_32. Apology for not being able to test it<br>
  under X86_64 since I encounter some weird errors when compiling<br>
arch  x86_64. But if you substitute all the X86_32 to X86_64 in the<br>
test  file, it should work under x86_64 as well.<br>
<br>
However, if the test goes all fine under x86_64, then please give<br>
some  hint about why its x86_32&#39;s port would fail.<br>
<br>
Thanks in advance!<br>
<br>
Regards,<br>
Jinghao<br>
<br>
</blockquote>
<br>
<br>
______________________________<u></u>_________________<br>
Barrelfish-users mailing list<br>
<a href="mailto:Barrelfish-users@lists.inf.ethz.ch" target="_blank">Barrelfish-users@lists.inf.<u></u>ethz.ch</a><br>
<a href="https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users" target="_blank">https://lists.inf.ethz.ch/<u></u>mailman/listinfo/barrelfish-<u></u>users</a><br>
</blockquote>
<br>
</blockquote></div><br></div>