Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

doe5ter

unregistriert

1

03.05.2010, 08:32

clone() und seine Argumente

Hallo Leute,

ich habe ein Problem mit dem clone-Aufruf.
Als Argument für die aufzurufende Funktion gebe ich eine Struktur mit.

Quellcode

1
2
3
4
5
typedef struct virt_cpu{
  int   vcpu_id; // einfach eine id
  void  (*fn)(void*); // pointer auf die eigentliche Funktion
  void* fn_args; // Argumente
}vCPU;


clone sieht folgendermaßen aus:

Quellcode

1
2
3
4
5
6
7
		childpid = clone( jump_start,(void*)(((long)stack)+MEM_SIZE),
				      CLONE_SIGHAND  |
				      CLONE_VM       |
				      CLONE_THREAD   |
				      CLONE_FILES    |
				      CLONE_FS,
				      &vcpus[i]);


vcpus ist dann ein array von der struct.
Damit ich die aus clone entstehende Prozesse an eine bestimmte CPU binden kann,
brauche ich eine "Sprungbrett"-Funktion.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int 
jump_start(void* arg){

  cpu_set_t cpuset;
  uint64_t cpumask = 1;

  vCPU* vcpu=(vCPU*)arg;
  
  CPU_ZERO(&cpuset); //cpu_set_t auf 0 setzen
  CPU_SET(cpumask,&cpuset); //Prozessor rein
  
  if((sched_setaffinity(0,sizeof(cpu_set_t),&cpuset)) < 0){
    perror("sched_setaffinity() failed");
    return -1;
  }
  vcpu->fn(vcpu->fn_args); // hier knallt es.
 return 0;


Irgendwas schlägt fehlt, wenn der strukturpointer übergeben wird.
ich kann leider nicht rausfinden, wo der Fehler liegt.
Wäre nett wenn ihr mir weiterhelfen könntet.

Thema bewerten