Speicherbarrieren und Linux Kernel Spinlock auf TILE-Gx

8

In der Linux-Kernel-Spinlock-Implementierung für die TILE-Gx-Architektur sieht es so aus, als würden sie beim Sperren (nur beim Entsperren) keine Speicherbarrieren ausgeben:

Ссылка

Dann verstehe ich nicht, warum Befehle nicht über der Verriegelung neu angeordnet werden können, was dazu führen würde, dass Anweisungen, die der Programmierer für wahr hält, ausgeführt werden, bevor die Sperre ausgeführt wird?

Andere Architekturen scheinen zumindest eine Compiler-Barriere zu haben:

  • ARMs Spinlock hat eine Speicherbarriere:

    Ссылка

    Mit Kommentar:

    %Vor%
  • Und der Spinlock von x86 hat eine Compiler-Barriere:

    Ссылка

    Mit Kommentar:

    %Vor%

Warum ist TILE-Gx anders? Ich dachte, sein Speichermodell sei so schwach wie ARMs Speichermodell. Und warum haben sie nicht einmal eine Compiler-Barriere?

    
hakos 12.12.2013, 17:14
quelle

1 Antwort

1

Die Sperrfunktion arch_spin_lock verwendet arch_spin_lock_slow , was wiederum cmpxchg verwendet. Die Implementierung von cmpxchg enthält eine Speicherbarrierenanweisung (siehe Ссылка ).

    
Squatting Bear 08.03.2014 11:06
quelle