On Mon, Jan 11, 2021 at 11:43 AM Deepak Krishnan <[email protected]>
wrote:

>
>
> On Monday, 11 January, 2021 at 1:47:22 pm UTC+5:30 Nadav Har'El wrote:
>
> Interesting. Theoretically, there is no reason why we didn't reach
>> preempt_enable() and enabled preemption. If we didn't, there is one
>> possible explanation: The thread's stack was allocated with mmap() without
>> pre-population (MAP_STACK or MAP_POPULATE), so when the thread began to
>> execute it had to page-fault its own stack, which failed.
>>
>> I'll try to prepare a test and a patch for this issue - if I can
>> reproduce it (the patch itself should be trivial).
>>
>> Stay tuned.
>>
>
> Thank you. I'll watch for your updates.
>

I just sent a patch titled "[PATCH] pthread_create() - prefault top of
stack" - can you please test it with your application?

The patch is just one line of code - with a lot of additional tests,
comments, etc. :-)

Unfortunately, this is not a 100% foolproof solution, as explained in
https://github.com/cloudius-systems/osv/issues/143 - if a thread's stack is
not pre-allocated, we can always have random (but relatively rare) crashes
when internal OSv code which has preemption disabled needs to use the stack
and crosses over to a previously unused stack page that needs to be paged
in. This should be rare, but can happen. Waldek did submit a 100% (?)
solution once, but I don't remember what became of it :-( If you can modify
your application, a good workaround is when you use mmap() to allocate
thread stacks, use the MAP_STACK option. This option is a no-op on Linux,
but does the same as MAP_POPULATE on OSv so works around these bugs.


>>
>>>
>>> Thanks
>>> Deepak
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "OSv Development" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/osv-dev/4b814e35-7384-4123-ac42-7523e292b29bn%40googlegroups.com
>>> <https://groups.google.com/d/msgid/osv-dev/4b814e35-7384-4123-ac42-7523e292b29bn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "OSv Development" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/osv-dev/dd8bc7c0-7606-4d70-bd36-893d4a934258n%40googlegroups.com
> <https://groups.google.com/d/msgid/osv-dev/dd8bc7c0-7606-4d70-bd36-893d4a934258n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/CANEVyjs8cREheSggdTwBftEkPgs%3DJn_dO8qn7Cyre_HuYOdDcw%40mail.gmail.com.

Reply via email to