2016-04-04 69 views
0

下面是我爲2.x內核編寫的內核模塊的一行。什麼是SPIN_LOCK_UNLOCKED的Linux 3.16等價物?

static spinlock_t mr_lock = SPIN_LOCK_UNLOCKED; 

當我嘗試爲3.16內核編譯此模塊時,出現以下構建錯誤。

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

當我看3.16版本的linux/spinlock_types.h,它定義了spinlock_t類型這個內核,的確沒有SPIN_LOCK_UNLOCKED不變了。

但是,目前還不清楚如何初始化自旋鎖以解鎖此內核。

實現相同初始化的正確方法是什麼?

+0

內核已經改變了其內部API的次數。看看你想要達到的目前文件。 – LtWorf

+0

@ merlin2011在這裏總猜測,也許'spin_lock_init()'?這也說'SPIN_LOCK_UNLOCKED'是有效的,所以它必須在舊方:http://www.linuxgrill.com/anonymous/fire/netfilter/kernel-hacking-HOWTO-5.html – yano

+0

@LtWorf,原諒我的無知,但是您能否將我鏈接到正確使用內核SpinLocks的相關文檔?我找到了一般文檔[這裏](http://lxr.free-electrons.com/source/Documentation/kbuild/modules.txt?v=3.16)和[這裏](https://www.kernel.org/ doc /),但我不知道如何確定我所尋找的。 – merlin2011

回答

3

它取決於您如何使用它。

#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); 

我把上面的從這個

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

+0

或者由於原始變量被聲明爲'static',所以使用'static DEFINE_SPINLOCK(init_lock);'。 –

相關問題