linux-um archives
 help / color / mirror / Atom feed
* [uml-devel] making uml work with smp
@ 2004-06-10 11:21 Vincent Guffens
  2004-06-14 18:09 ` BlaisorBlade
  0 siblings, 1 reply; 2+ messages in thread
From: Vincent Guffens @ 2004-06-10 11:21 UTC (permalink / raw)
  To: user-mode-linux-devel

Hi,

I've tried UML+SMP with linux-2.4.24-um1. According to the project list 
on the uml site, this feature is ready but needs to be debugged.

I report here my attempt to start UML with smp with no success. However, 
as the code is already there, it would be very nice to have it work.

Would it be possible to have useful pointers toward architecture details 
that would help in understanding how to make it work. Useful techniques 
on how to debug uml+smp would also be very interesting as it looks like 
it is not going to be the trivial task of the day ...


The only changes that have to be made to compile with SMP is

*add the folowing to  arch/um/config.in

  define_bool CONFIG_SMP $CONFIG_UML_SMP
+int 'Number of CPUs' CONFIG_NR_CPUS 1

*change this line in arch/um/kernel/um_arch.c
-int ncpus = 1;
+int ncpus = 4;

*turn it on in the kernel config

When booting the machine, you can see the processors starting :
./linux-smp ubd0=cow0 umid=test devfs=nomount mode=tt
[...]
Starting up other processors:
         #1 - idle thread pid = 18502.. online
         #2 - idle thread pid = 18504.. online
         #3 - idle thread pid = 18506.. online
All CPUs are go!
Waiting on wait_init_idle (map = 0xe)
All processors have done init_idle
[..]

As expected problems occur when booting the UML machine,

1) a crash :
INIT: version 2.84 booting
Kernel panic: Kernel mode fault at addr 0x115, ip 0xa00c9066
  <6>Stopping all CPUs...CPU#0 stopping

but gdb gives the following:

Couldn't get registers: No such process.
(gdb) bt
Couldn't get registers: No such process.

but with only one processor, you can have gdb to tell you that the 
problem is in tty_open

2) sometimes there is a hang with the following backtrace

[...]
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
[hang here]

#0  0xa0181eb1 in nanosleep ()
#1  0xa00bc516 in idle_sleep (secs=10) at time.c:160
#2  0xa00b8161 in cpu_idle () at process_kern.c:210
#3  0xa000d542 in rest_init () at init/main.c:346
#4  0xa00025f9 in start_kernel () at init/main.c:440
#5  0xa00bf1ed in start_kernel_proc (unused=0x0) at process_kern.c:437
#6  0xa00c030f in signal_tramp (arg=0xa00bf1a4) at tracer.c:120









-- 
				Vincent Guffens
				PhD Student UCL/CESAME
				tel:   +32 10 47 80 30
Value your freedom, or you will lose it, teaches history.
"Don't bother us with politics," respond those who don't want to learn.
	      	-- Richard M. Stallman



-------------------------------------------------------
This SF.Net email is sponsored by: GNOME Foundation
Hackers Unite!  GUADEC: The world's #1 Open Source Desktop Event.
GNOME Users and Developers European Conference, 28-30th June in Norway
http://2004/guadec.org
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [uml-devel] making uml work with smp
  2004-06-10 11:21 [uml-devel] making uml work with smp Vincent Guffens
@ 2004-06-14 18:09 ` BlaisorBlade
  0 siblings, 0 replies; 2+ messages in thread
From: BlaisorBlade @ 2004-06-14 18:09 UTC (permalink / raw)
  To: user-mode-linux-devel

Alle 13:21, giovedì 10 giugno 2004, Vincent Guffens ha scritto:
> Hi,

> The only changes that have to be made to compile with SMP is
>
> *add the folowing to  arch/um/config.in
>
>   define_bool CONFIG_SMP $CONFIG_UML_SMP
> +int 'Number of CPUs' CONFIG_NR_CPUS 1
>
> *change this line in arch/um/kernel/um_arch.c
> -int ncpus = 1;
> +int ncpus = 4;

No, please at least make CONFIG_NR_CPUS == ncpus, PLEASE!

> *turn it on in the kernel config

Well, watch this code in the patch:

+void switch_mm_skas(int mm_fd)
+{
+       int err;
+
+#warning need cpu pid in switch_mm_skas
+       err = ptrace(PTRACE_SWITCH_MM, userspace_pid[0], 0, mm_fd);
+       if(err)
+               panic("switch_mm_skas - PTRACE_SWITCH_MM failed, errno = 
%d\n",
+                     errno);
+}
+
+void kill_off_processes_skas(void)
+{
+#warning need to loop over userspace_pids in kill_off_processes_skas
+       os_kill_process(userspace_pid[0], 1);
+}

userspace_pid[] is the array of the pids of the "userspace threads" (the 
threads in T state, i.e. ptraced, which run the actual code of the guest 
userspace). The warning complain that they should act onto the whole array.

Here, instead, you must use smp_processor_id() to determine which CPU you run 
on and then use it as userspace_pid index.

+int external_pid_skas(struct task_struct *task)
+{
+#warning Need to look up userspace_pid by cpu
+       return(userspace_pid[0]);
+}
+
+int thread_pid_skas(struct thread_struct *thread)
+{
+#warning Need to look up userspace_pid by cpu
+       return(userspace_pid[0]);
+}

Check any other usage of userspace_pid (on the code, not by debugging) and 
you've started solving the crashes. Then you can try again to see if there is 
still something.

Bye
-- 
Paolo Giarrusso, aka Blaisorblade
Linux registered user n. 292729



-------------------------------------------------------
This SF.Net email is sponsored by The 2004 JavaOne(SM) Conference
Learn from the experts at JavaOne(SM), Sun's Worldwide Java Developer
Conference, June 28 - July 1 at the Moscone Center in San Francisco, CA
REGISTER AND SAVE! http://java.sun.com/javaone/sf Priority Code NWMGYKND
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-06-14 23:40 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-06-10 11:21 [uml-devel] making uml work with smp Vincent Guffens
2004-06-14 18:09 ` BlaisorBlade

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox