Comment définir et déclencher mon propre softirq dans le noyau linux?

Je voudrais créer mon propre softirq dans le noyau linux. Est-ce la bonne façon de le faire?

À l' init du module, je souhaite déclencher le softirq d'un appel à:

  • Dans Android comment changer la couleur d'une lettre / caractère particulier qui est recherché dans la liste
  • L'ancien constructeur de SimpleCursorAdapter a déjà disparu ... vraiment?
  • Exemple de JSoup Android
  • Afficher la valeur par défaut dans Spinner dans Android
  • Android getLine1Number () renvoie la chaîne vide
  • Comment enregistrer des images de la caméra dans Android vers un dossier spécifique?
  •  394 void open_softirq(int nr, void (*action)(struct softirq_action *)) 395 { 396 softirq_vec[nr].action = action; 397 } 

    Et dans l'extrait, j'aimerais soulever le softirq. J'ajouterai un appel à la fonction raise_softirq :

     379 void raise_softirq(unsigned int nr) 380 { 381 unsigned long flags; 382 383 local_irq_save(flags); 384 raise_softirq_irqoff(nr); 385 local_irq_restore(flags); 386 } 

    Et ajoutez mon nouveau softirq dans:

     411 /* PLEASE, avoid to allocate new softirqs, if you need not _really_ high 412 frequency threaded job scheduling. For almost all the purposes 413 tasklets are more than enough. Fe all serial device BHs et 414 al. should be converted to tasklets, not to softirqs. 415 */ 416 417 enum 418 { 419 HI_SOFTIRQ=0, 420 TIMER_SOFTIRQ, 421 NET_TX_SOFTIRQ, 422 NET_RX_SOFTIRQ, 423 BLOCK_SOFTIRQ, 424 BLOCK_IOPOLL_SOFTIRQ, 425 TASKLET_SOFTIRQ, 426 SCHED_SOFTIRQ, 427 HRTIMER_SOFTIRQ, 428 RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */ 429 MY_NEW_SOFTIRQ 430 NR_SOFTIRQS 431 }; 

    Et ici:

      60 char *softirq_to_name[NR_SOFTIRQS] = { 61 "HI", "TIMER", "NET_TX", "NET_RX", "BLOCK", "BLOCK_IOPOLL", 62 "TASKLET", "SCHED", "HRTIMER", "RCU", "MY_NEW_SOFTIRQ" 63 }; 

    Questions:

    • Ai-je raison ou j'ai-je manqué quelque chose?
    • Est-ce la bonne façon de faire cela? D'autres options?

  • Comment détecter le mouvement Google MapView dans Android?
  • Android NDK: Dalvik Heap et Native Heap - Comment se séparent entre les deux
  • Comment appeler méthode dans la forme d'activité non classe d'activité
  • Comment obtenir une résolution d'écran de votre appareil Android?
  • Aucun appareil cible trouvé studio Android 2.1.1
  • Différence dans le contexte ceci et getContext ()
  • 2 Solutions collect form web for “Comment définir et déclencher mon propre softirq dans le noyau linux?”

    Si vous souhaitez réparer le noyau et le recompiler, vous avez probablement raison (sauf que vous devriez le déplacer avant RCU_SOFTIRQ).

    Sinon, IOW si vous voulez le faire dans un module kernel, vous devez utiliser tasklet, basé sur SoftIRQ, pour faire quelque chose dans le contexte SoftIRQ:

    tasklet_init() est utilisé pour initialiser votre crochet.

    tasklet_schedule() pour planifier la tâche que vous vous inscrivez.

    Déclarez statiquement Softirq

    Déclarer statiquement votre softirq ( MY_NEW_SOFTIRQ ) en l'ajoutant à l' enum et
    char *softirq_to_name[NR_SOFTIRQS] . Recompilez le noyau.

    Inscrivez-vous Softirq à la volée

    Une fois déclarée de manière statique, notre propre softirq doit être enregistré pendant le temps d'exécution dans le module du noyau en utilisant open_softirq() . Soulevez-le dans le chemin de sortie du gestionnaire d'interruptions via raise_softirq() .

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.