2009-12-17 3 views

Répondre

0

Ok, je l'ai. Cela se produit généralement lorsque vous entrez deux fois la même fonction, en référence à la même ressource noyau, dans un seul contexte d'exécution du noyau linux (par exemple une instance unique de softIRQ, etc.). La sortie de ceci est de s'assurer que vous ne ré-entrez pas la fonction deux fois dans le même contexte d'exécution. C'est un bug dans votre code si cela arrive.

0

Déboguer? Vous voulez dire, besoin de savoir where in the source?

+0

Merci. Mais je l'avais déjà "grepé". Je cherchais la raison de l'éventualité de cette condition. En fin de compte, a été en mesure de le comprendre. – Harty

2

Il s'agit d'un message de diagnostic destiné à signaler une éventuelle impasse.

Dans ce cas particulier, il y a une file d'attente de transmission protégée par un spinlock. En plus de ce verrou, la file d'attente de transmission maintient également un champ "owner" qui contient un CPUID qui est défini lorsque ce spinlock est maintenu.

Comme vous le savez probablement, un spinlock tournera toujours sur une CPU si le verrou demandé a déjà été pris.

Donc at this location le code vérifie si le CPU est le même que celui qui verrouille le spinlock. Si elle n'est pas sur la même CPU, elle exécute les opérations qui pourraient nécessiter le verrouillage à effectuer. D'autre part, si c'est le même CPU, quelque chose ne va pas, c'est-à-dire que nous devrions réellement tourner en attente du verrou. Probablement nous sommes arrivés ici en raison d'un gestionnaire d'interruption incorrect/moitié inférieure.

Comme cela indique un blocage potentiel, un message de diagnostic est imprimé :).

Questions connexes