2017-09-19 1 views
3

J'essaie de savoir si les net_device_ops de Linux sont sérialisés par l'appelant ou si le pilote implémentant ces ops doit prendre en charge la sérialisation (ou qu'ils peuvent être appelés simultanément)).Le noyau Linux net_device_ops sérialisé par l'appelant

Par exemple, pour la même instance de pilote, ndo_start_xmit est-il à nouveau appelé (par exemple, à une autre unité centrale) avant que le pilote ait terminé l'appel ndo_start_xmit en cours? J'ai cherché comment d'autres pilotes de net_device font cela mais il semble qu'ils supposent que la sérialisation de ndo_start_xmit est faite par l'appelant (veuillez me corriger si je me trompe).

Cependant, j'ai également cherché si l'appelant utilise et spinlock ou un autre mécanisme de verrouillage, mais je ne pouvais pas en trouver un. Si un tel mécanisme de verrouillage (appelant) existe, veuillez me diriger vers le code qui le fait.

Répondre

1

Dans la plupart des cas, c'est l'appelant qui doit prendre en charge la sérialisation, et net_device_ops sont généralement implémentés en mode verrou-non-averti. Cependant, il est possible que vous pouvez toujours trouver une sorte de verrouillage intérieurnet_device_ops fait par certains pilotes pour leurs internes fins - il est juste possible, par exemple, qu'un conducteur a besoin d'accéder à son propres données globales/compteurs dans un rappel.

ndo_start_xmit, en effet, pourrait être un exemple très éloquent à observer où le verrouillage peut résider. Dans ce cas, en effet, un verrou est maintenu par l'appelant de la couche supérieure. Vous pouvez trouver utile de jeter un oeil à la corresponding place dans la fonction du noyau dev_queue_xmit(). Comme vous le voyez, le verrou est acquis avant d'appeler dev_hard_start_xmit()function qui à son tour appelle xmit_one()function. Il est facile de suivre plus loin, à savoir, vous pouvez observer netdev_start_xmit()code appelant ndo_start_xmit fourni par le pilote.

En outre, il pourrait être utile de lire Linux Device Drivers, 3e édition livre, à savoir le paragraphe 17.5.1 dans le section17,5. J'espère que cela vous aidera.