2016-03-31 9 views
5

Se ho la seguente funzione kernel thread:È necessario usare kthread_stop se torniamo dal thread del kernel?

int thread_fn() { 
    printk(KERN_INFO "In thread1");  
    return 0; 
} 

Ho ancora bisogno di utilizzare la funzione kthread_stop() qui?

return nella funzione thread fa arrestare ed uscire il thread del kernel?

+0

Immagino che dovresti essere in grado di dire guardando il codice che avvia un thread e vedendo se imposta lo stack del thread con un indirizzo di ritorno che andrebbe in qualche modo sano di mente. –

risposta

1

Se si guarda come kthread() è implemented, alla riga 209 chiama threadfn(data) e memorizza il codice di uscita in ret; quindi chiama do_exit(ret).

Quindi un semplice ritorno dal tuo threadfn è sufficiente.

Se si guarda la documentazione di kthread_stop, si dice che:

  • set kthread_should_stop al return true;
  • riattiva il thread;
  • attende il thread per uscire.

Ciò significa che kthread_stop() deve essere chiamato dall'esterno di un thread per interrompere il thread. Dal momento che aspetta che il thread finisca, non devi chiamarlo all'interno del thread o potresti bloccarlo!

Inoltre, la documentazione dice che informa solo il thread che dovrebbe uscire, e che il thread dovrebbe chiamare kthread_should_stop per scoprirlo. Quindi, una lunga durata threadfn potrebbe fare questo:

int thread_fn() { 
    printk(KERN_INFO "In thread1"); 
    while (!kthread_should_stop()) { 
     get_some_work_to_do_or_block(); 
     if (have_work_to_do()) 
      do_work(); 
    } 
    return 0; 
} 

Ma se la funzione non è longevo, chiamando kthread_should_stop non è necessario.

Problemi correlati