La situation est que j'ai 2 cartes connectées ensemble via le bus PCIE. Un conseil est le rootport et un conseil est le point final. Le côté du point de terminaison a exporté une région de mémoire vers le côté du rootport.protéger la zone de mémoire partagée dans les multiprocesseurs
La communication entre deux cartes est implémentée via une file d'attente de messages logicielle. Les méta-données et le tampon de la file d'attente sont tous situés dans la région de mémoire exportée.
Les deux côtés peuvent accéder à la zone mémoire en même temps (port racine via son bus PCIE et point de terminaison via son bus local). Cela peut poser problème lorsque les deux parties tentent de mettre à jour les méta-données de la file d'attente.
Au début, j'ai essayé d'allouer un spinlock_t
sur la même région de mémoire exportée, mais comme chaque carte est uniprocesseur, the spinlock_t
n'est pas alloué de toute façon.
Quelqu'un peut-il suggérer un mécanisme pour protéger la région partagée ou recommander une autre approche pour communiquer entre deux cartes? Toutes les recommandations sont appréciées. Merci beaucoup!
Je pense que vous devriez essayer sémaphore à la place de spinlocks ... parce que sur les systèmes d'un seul processeur spinlocks n'ont aucune utilité !!! – akp