<div dir="ltr">Hi,<br><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Dec 5, 2015 at 12:28 AM, Alexey Kodanev <span dir="ltr"><<a href="mailto:alexey.kodanev@oracle.com" target="_blank">alexey.kodanev@oracle.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<div><div class="h5"><br>
<br>
On 11/27/2015 01:24 PM, Li Wang wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
shmget()/shmat() fails to allocate huge pages shared memory segment<br>
with EINVAL if its size is not in the range [ N*HUGE_PAGE_SIZE - 4095,<br>
N*HUGE_PAGE_SIZE ]. This is a problem in the memory segment size round<br>
up algorithm. The requested size is rounded up to PAGE_SIZE (4096), but<br>
if this roundup does not match HUGE_PAGE_SIZE (2Mb) boundary - the<br>
allocation fails.<br>
<br>
This bug is present in all RHEL6 versions, but not in RHEL7. It looks<br>
like this was fixed in mainstream kernel > v3.3 by the following patches:<br>
<br>
091d0d5 shm: fix null pointer deref when userspace specifies invalid hugepage size<br>
af73e4d hugetlbfs: fix mmap failure in unaligned size request<br>
42d7395 mm: support more pagesizes for MAP_HUGETLB/SHM_HUGETLB<br>
40716e2 hugetlbfs: fix alignment of huge page requests<br>
<br>
Signed-off-by: Li Wang <<a href="mailto:liwang@redhat.com" target="_blank">liwang@redhat.com</a>><br>
---<br>
  runtest/hugetlb                                    |   1 +<br> 
<br>
+ *<br>
+ * AUTHOR<br>
</blockquote></div></div>
Authors</blockquote><div>got.<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
+void shm_test(int size)<br>
+{<br>
+       int shmid;<br>
+       char *shmaddr;<br>
+       key_t key = 5;<br>
+<br>
+       shmid = shmget(key, size, SHM_R | SHM_W | IPC_CREAT | SHM_HUGETLB);<br>
</blockquote>
<br></div></div>
Why not just "shmid = shmget(IPC_PRIVATE, size, 0600 | IPC_CREAT | SHM_HUGETLB);"? Do we need a key_t for the test?<span class=""><br></span></blockquote><div><br>ok, good! I tried to remove the key, it still works.<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+       if (shmid < 0)<br>
+               tst_brkm(TBROK | TERRNO, cleanup, "shmget");<br>
</blockquote>
<br></span>
The message should be at least "shmget failed".</blockquote><div>got.<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+                       tst_resm(TPASS, "No regression found.");<br>
+               }<br>
</blockquote>
<br></div></div>
These two loops look very similar.<br>
We can just call the test with -i 15 iterations in runtest, no need for such a redundancy.<br></blockquote><div>yeah, that would be simpler. agreed.<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Otherwise it looks good.<br></blockquote><div>thanks for reviewing this patch. I will sent V2 next week.<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Best regards,<br>
Alexey<div class="HOEnZb"><div class="h5"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+       }<br>
+<br>
+       cleanup();<br>
+       tst_exit();<br>
+}<br>
</blockquote>
<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>Regards,<br></div>Li Wang<br></div><div>Email: <a href="mailto:liwang@redhat.com" target="_blank">liwang@redhat.com</a><br></div></div></div></div></div></div>
</div></div>