289 preempt_disable();
290 spin_acquire(&lock->dep_map, subclass, 0, _RET_IP_);
291 LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock);
292}
293EXPORT_SYMBOL(_spin_lock_nested);
294
295unsigned long __lockfunc _spin_lock_irqsave_nested(spinlock_t *lock, int subclass)
296{
297 unsigned long flags;
298
299 local_irq_save(flags);
300 preempt_disable();
301 spin_acquire(&lock->dep_map, subclass, 0, _RET_IP_);
302
303
304
305
306
307#ifdef CONFIG_LOCKDEP
308 LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock);
309#else
310 _raw_spin_lock_flags(lock, &flags);
311#endif
312 return flags;
313}
314EXPORT_SYMBOL(_spin_lock_irqsave_nested);
315
316void __lockfunc _spin_lock_nest_lock(spinlock_t *lock,
317 struct lockdep_map *nest_lock)
318{
319 preempt_disable();
320 spin_acquire_nest(&lock->dep_map, 0, 0, nest_lock, _RET_IP_);
321 LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock);
322}
323EXPORT_SYMBOL(_spin_lock_nest_lock);
324
325#endif
326
327void __lockfunc _spin_unlock(spinlock_t *lock)
328{
329 spin_release(&lock->dep_map, 1, _RET_IP_);