2016-04-04 5 views
0

Hier ist eine Zeile von einem Kernel-Modul, das ich für einen 2.x-Kernel geschrieben habe.Was ist das 3.16-Äquivalent von SPIN_LOCK_UNLOCKED?

Wenn ich versuche, dieses Modul für einen Kernel 3.16 zu kompilieren, erhalte ich den folgenden Erstellungsfehler.

error: ‘SPIN_LOCK_UNLOCKED’ undeclared here (not in a function) 

Wenn ich die 3.16-Version von linux/spinlock_types.h aussehen, die den spinlock_t Typ für diesen Kernel definiert, ist es in der Tat keine SPIN_LOCK_UNLOCKED mehr konstant.

Es ist jedoch nicht klar, wie ein Spinlock für diesen Kernel zu entsperren initialisiert wird.

Was ist der richtige Weg, um die gleiche Initialisierung zu erreichen?

+0

Der Kernel seine interne API mehrfach geändert hat. Sehen Sie in der aktuellen Dokumentation nach, was Sie erreichen möchten. – LtWorf

+0

@ merlin2011 Insgesamt denke hier, vielleicht 'spin_lock_init()'? Dies sagt auch, dass "SPIN_LOCK_UNLOCKED" gültig ist, also muss es auf der alten Seite sein: http://www.linuxgrill.com/anonymous/fire/netfilter/kernel-hacking-HOWTO-5.html – yano

+0

@LtWorf, Verzeihen meine Ignoranz, Könntest du mich aber mit der relevanten Dokumentation über die korrekte Verwendung von Kernel SpinLocks verlinken? Ich habe allgemeine Dokumentation gefunden [hier] (http://lxr.free-electronics.com/source/Documentation/kbuild/modules.txt?v=3.16) und [hier] (https://www.kernel.org/ doc /), aber ich bin mir nicht sicher, wie ich herausfinden soll, was ich suche. – merlin2011

Antwort

3

Es hängt davon ab, wie Sie es verwendeten.

#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) 

to replace code like: 

    spinlock_t init_lock = SPIN_LOCK_UNLOCKED; 

with the improved: 

    DEFINE_SPINLOCK(init_lock); 

nahm ich die oben von diesem

https://www.mail-archive.com/[email protected]/msg02836.html

+0

Oder, da die ursprüngliche Variable 'static' deklariert ist, verwenden Sie' static DEFINE_SPINLOCK (init_lock); '. –