*参照元 [#t32f6685]
#backlinks

*説明 [#sec810a5]
-パス: 複数あり
-[[linux-2.6.33/include/linux/spinlock_api_smp.h]]
--CONFIG_GENERIC_LOCKBREAK 未定義時、
または CONFIG_DEBUG_LOCK_ALLOC 定義時
-CONFIG_GENERIC_LOCKBREAK 未定義時、
または CONFIG_DEBUG_LOCK_ALLOC 定義時の場合: 
[[linux-2.6.33/include/linux/spinlock_api_smp.h]]
--[[linux-2.6.33/CONFIG_GENERIC_LOCKBREAK]]
--[[linux-2.6.33/CONFIG_DEBUG_LOCK_ALLOC]]
-[[linux-2.6.33/kernel/spinlock.c]]
--それ以外
-それ以外の場合: [[linux-2.6.33/kernel/spinlock.c]]

-FIXME: これは何?
--説明


**引数 [#za5a971e]
-raw_spinlock_t *lock
--


**返り値 [#x1b607e9]
-unsigned long
--


**参考 [#kc3d16a6]
-BUILD_LOCK_OPS() を使う場合に一緒に定義される関数
--[[linux-2.6.33/__raw_spin_lock()]]
--[[linux-2.6.33/__raw_spin_lock_irq()]]
--[[linux-2.6.33/__raw_spin_lock_irqsave()]]
--[[linux-2.6.33/__raw_spin_lock_bh()]]


*実装 [#ja03a4b7]
**CONFIG_GENERIC_LOCKBREAK 未定義時、 [#ufbb03dd]
または CONFIG_DEBUG_LOCK_ALLOC 定義時
 static inline unsigned long __raw_spin_lock_irqsave(raw_spinlock_t *lock)
 {
 	unsigned long flags;
 
 	local_irq_save(flags);
-
--[[linux-2.6.33/local_irq_save()]]

 	preempt_disable();
-
--[[linux-2.6.33/preempt_disable()]]

 	spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
-
--[[linux-2.6.33/spin_acquire()]]

 	/*
 	 * On lockdep we dont want the hand-coded irq-enable of
 	 * do_raw_spin_lock_flags() code, because lockdep assumes
 	 * that interrupts are not re-enabled during lock-acquire:
 	 */
 #ifdef CONFIG_LOCKDEP
 	LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
-
--[[linux-2.6.33/LOCK_CONTENDED()]]

 #else
 	do_raw_spin_lock_flags(lock, &flags);
-
--[[linux-2.6.33/do_raw_spin_lock_flags()]]

 #endif
 	return flags;
 }


**それ以外 [#nd08f7e8]
 BUILD_LOCK_OPS(spin, raw_spinlock);
-プリエンプションに対応したロック関数を定義する。
--[[linux-2.6.33/BUILD_LOCK_OPS()]]


*コメント [#tbcc3bbe]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS