> I get 'PM: FS died' error when I boot with new image (with my change).
> And the OS gets stuck.
Just a wild guess, there is something wrong with the process table.
I was also stuck as I could not enlarge it (adding more process entries).
Therefore, there can not be more than 100 processes with the
current MINIX3.
--
Rahmat M. Samik-Ibrahim
VauLSMORG -- http://vlsm.org/
Just a wild guess, there is something wrong with the process table.
On Wed, Sep 9, 2009 at 12:43 AM, Ravi L<moury...@gmail.com> wrote:
> I get 'PM: FS died' error when I boot with new image (with my change).
> And the OS gets stuck.
I was also stuck as I could not enlarge it (adding more process entries).
Therefore, there can not be more than 100 processes with the
current MINIX3.
Have you try it? I tried to increase "#define _NR_PROCS 100"
with no luck. I have reported this problem on 27 June 2009 to
this list with no response. See also;
URL:
http://groups.google.com/group/minix3/browse_thread/thread/2100956fc8fed126
00224 if ( (dst_ptr->p_rts_flags & (RECEIVING | SENDING)) == RECEIVING &&
00225 (dst_ptr->p_getfrom == ANY || dst_ptr->p_getfrom ==
caller_ptr->p_nr)) {
00226 /* Destination is indeed waiting for this message. */
00227 CopyMess(caller_ptr->p_nr, caller_ptr, m_ptr, dst_ptr,
00228 dst_ptr->p_messbuf);
00229 if ((dst_ptr->p_rts_flags &= ~RECEIVING) == 0)
enqueue(dst_ptr);
00230 } else if ( ! (flags & NON_BLOCKING)) {
00231 /* Destination is not waiting. Block and dequeue caller. */
00232 caller_ptr->p_messbuf = m_ptr;
00233 if (caller_ptr->p_rts_flags == 0) dequeue(caller_ptr);
00234 caller_ptr->p_rts_flags |= SENDING;
00235 caller_ptr->p_sendto = dst;
00236
00237 /* Process is now blocked. Put in on the destination's queue.
*/
00238 xpp = &dst_ptr->p_caller_q; /* find end of list */
00239 while (*xpp != NIL_PROC) xpp = &(*xpp)->p_q_link;
00240 *xpp = caller_ptr; /* add caller to end
*/
00241 caller_ptr->p_q_link = NIL_PROC; /* mark new end of
list */
Specifically if the sender and receiver are both running what guarantees
that this code is thread safe
00239 while (*xpp != NIL_PROC) xpp = &(*xpp)->p_q_link;
00240 *xpp = caller_ptr; /* add caller to end
*/
What happens if the receiver chain is modified between lines 239 and 240 ? I
know interrupts are off during a syscall but the receiver could be running
on another hyper thread or core.
Curious ,
Ben
As Erik pointed out, Minix does not support SMP yet. This code is not
thread safe. Turning off the interrupts work sort of as a lock as the
code cannot be preempted, which in turn means that no other code is
executing. Replacing this by simple locking is not enough though and
the code needs some redesign because some places expect that no other
process is scheduled _anywhere_. It is currently under development,
hopefully available soon.
Cheers, T.
>> URL:
>> http://groups.google.com/group/minix3/browse_thread/thread/2100956fc8fed126
> By erlarging proc I meant adding new variables. But still changing _NR_PROCS
> should work too. You didn't describe what happened after you had done it
> (and what exactly you had done).
When I tried this a couple of months ago, I even could not slightly increasing
_NR_PROCS. I have just tried a Minix3 guest again (2 GB RAM size) with
kernel 3.1.4 build 5220 on kubuntu 9.04/vmware-player 2.5.3 build-185404.
I wrote a small program "fo" that forks children to fill the process table.
Test #1: _NR_PROC = 256
There were process table full warnings, but no crashes.
Test #2: _NR_PROC = 386
There were process table full warnings, and many children crashed:
PM: coredump signal 11
VM: pagefault: SIGSEGV badaddr nopage write
BUT NO SYSTEM PANIC.
Test #3: _NR_PROC = 512
The system panic.
M: slaballoc.c:338:slabfree: objstats failed
[...] Panic in forkexit.c