Exécution d’un thread utilisateur dans le contexte d’une interruption sous Linux

Je suis en train d’écrire une application personnalisée et autorisé à changer le code du gestionnaire d’interruptions dans le kernel Linux.

Je rencontre un thread utilisateur qui attend une interruption. Si cette interruption se produit, la première chose que je veux faire est d’exécuter ce thread utilisateur.

Y at-il un moyen de le faire fonctionner.

Merci

Créez un périphérique de caractères (c’est ce que fait le kernel, il gère les périphériques). Demandez au thread utilisateur de lire à partir de ce périphérique. Il se bloque car il n’y a pas de caractères à lire.

Lorsque l’interruption se produit, envoyez un caractère (ou un message significatif) à ce périphérique depuis votre module. Le fil va se réveiller, lire le message et continuer.

Donnez au fil de discussion une bonne priorité pour qu’il se lève tôt.

Alternativement, vous pouvez simplement kill_proc_info le thread en attente sur select ou sleep et lui envoyer un signal (fonction du kernel kill_proc_info ) et le thread se réveillera. Assurez-vous que le fil gère le signal.

Plutôt que de faire trop de choses en créant un pilote de personnage, il aurait suffi de faire une entrée sysfs. Vous pouvez faire n’importe quel appel bloquant comme lire, sélectionner / interroger sur cette entrée sysfs et l’alimenter à partir de votre gestionnaire d’interruptions.

Le problème intéressant à résoudre pour vous est

  1. que se passe-t-il si une autre interruption se produit alors que vous étiez déjà en train
  2. Et si une interruption se produisait deux fois mais que vous ne vous réveilliez qu’une fois.

etc.