3.14内核代码
rcu机制不是宣称无锁吗?
但是rcu_lock_acquire那句是个锁吗?怎么解释呢?求解惑
806 static inline void rcu_read_lock(void)
807 {
808 __rcu_read_lock();
809 __acquire(RCU);
810 rcu_lock_acquire(&rcu_lock_map);
811 rcu_lockdep_assert(rcu_is_watching(),
812 "rcu_read_lock() used illegally while idle");
813 }
同文件 line 313 rcu_lock_acquire 定义如下
313 #ifdef CONFIG_DEBUG_LOCK_ALLOC
314
315 static inline void rcu_lock_acquire(struct lockdep_map *map)
316 {
317 lock_acquire(map, 0, 0, 2, 1, NULL, _THIS_IP_);
318 }
lock_acquire的reference:
318 /*
319 * Acquire a lock.
320 *
321 * Values for "read":
322 *
323 * 0: exclusive (write) acquire
324 * 1: read-acquire (no recursion allowed)
325 * 2: read-acquire with same-instance recursion allowed
326 *
327 * Values for check:
328 *
329 * 0: disabled
330 * 1: simple checks (freeing, held-at-exit-time, etc.)
331 * 2: full validation
332 */
333 extern void lock_acquire(struct lockdep_map *lock, unsigned int subclass,
334 int trylock, int read, int check,
335 struct lockdep_map *nest_lock, unsigned long ip);
336
337 extern void lock_release(struct lockdep_map *lock, int nested,
338 unsigned long ip);