Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 158158
b: refs/heads/master
c: bc33f24
h: refs/heads/master
v: v3
  • Loading branch information
Paul E. McKenney authored and Ingo Molnar committed Aug 23, 2009
1 parent 2eea15a commit a06e27f
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 25 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d6714c22b43fbcbead7e7b706ff270e15f04a791
refs/heads/master: bc33f24bdca8b6e97376e3a182ab69e6cdefa989
46 changes: 42 additions & 4 deletions trunk/include/linux/rcupdate.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,16 @@ extern int rcu_scheduler_active;
(ptr)->next = NULL; (ptr)->func = NULL; \
} while (0)

#ifdef CONFIG_DEBUG_LOCK_ALLOC
extern struct lockdep_map rcu_lock_map;
# define rcu_read_acquire() \
lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_)
# define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_)
#else
# define rcu_read_acquire() do { } while (0)
# define rcu_read_release() do { } while (0)
#endif

/**
* rcu_read_lock - mark the beginning of an RCU read-side critical section.
*
Expand Down Expand Up @@ -109,7 +119,12 @@ extern int rcu_scheduler_active;
*
* It is illegal to block while in an RCU read-side critical section.
*/
#define rcu_read_lock() __rcu_read_lock()
static inline void rcu_read_lock(void)
{
__rcu_read_lock();
__acquire(RCU);
rcu_read_acquire();
}

/**
* rcu_read_unlock - marks the end of an RCU read-side critical section.
Expand All @@ -126,7 +141,12 @@ extern int rcu_scheduler_active;
* used as well. RCU does not care how the writers keep out of each
* others' way, as long as they do so.
*/
#define rcu_read_unlock() __rcu_read_unlock()
static inline void rcu_read_unlock(void)
{
rcu_read_release();
__release(RCU);
__rcu_read_unlock();
}

/**
* rcu_read_lock_bh - mark the beginning of a softirq-only RCU critical section
Expand All @@ -139,14 +159,24 @@ extern int rcu_scheduler_active;
* can use just rcu_read_lock().
*
*/
#define rcu_read_lock_bh() __rcu_read_lock_bh()
static inline void rcu_read_lock_bh(void)
{
__rcu_read_lock_bh();
__acquire(RCU_BH);
rcu_read_acquire();
}

/*
* rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section
*
* See rcu_read_lock_bh() for more information.
*/
#define rcu_read_unlock_bh() __rcu_read_unlock_bh()
static inline void rcu_read_unlock_bh(void)
{
rcu_read_release();
__release(RCU_BH);
__rcu_read_unlock_bh();
}

/**
* rcu_read_lock_sched - mark the beginning of a RCU-classic critical section
Expand All @@ -160,10 +190,14 @@ extern int rcu_scheduler_active;
static inline void rcu_read_lock_sched(void)
{
preempt_disable();
__acquire(RCU_SCHED);
rcu_read_acquire();
}
static inline void rcu_read_lock_sched_notrace(void)
{
preempt_disable_notrace();
__acquire(RCU_SCHED);
rcu_read_acquire();
}

/*
Expand All @@ -173,10 +207,14 @@ static inline void rcu_read_lock_sched_notrace(void)
*/
static inline void rcu_read_unlock_sched(void)
{
rcu_read_release();
__release(RCU_SCHED);
preempt_enable();
}
static inline void rcu_read_unlock_sched_notrace(void)
{
rcu_read_release();
__release(RCU_SCHED);
preempt_enable_notrace();
}

Expand Down
4 changes: 2 additions & 2 deletions trunk/include/linux/rcupreempt.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ static inline void rcu_bh_qs(int cpu) { }
extern void call_rcu_sched(struct rcu_head *head,
void (*func)(struct rcu_head *head));

extern void __rcu_read_lock(void) __acquires(RCU);
extern void __rcu_read_unlock(void) __releases(RCU);
extern void __rcu_read_lock(void);
extern void __rcu_read_unlock(void);
extern int rcu_pending(int cpu);
extern int rcu_needs_cpu(int cpu);

Expand Down
18 changes: 0 additions & 18 deletions trunk/include/linux/rcutree.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,38 +36,20 @@ extern void rcu_bh_qs(int cpu);
extern int rcu_pending(int cpu);
extern int rcu_needs_cpu(int cpu);

#ifdef CONFIG_DEBUG_LOCK_ALLOC
extern struct lockdep_map rcu_lock_map;
# define rcu_read_acquire() \
lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_)
# define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_)
#else
# define rcu_read_acquire() do { } while (0)
# define rcu_read_release() do { } while (0)
#endif

static inline void __rcu_read_lock(void)
{
preempt_disable();
__acquire(RCU);
rcu_read_acquire();
}
static inline void __rcu_read_unlock(void)
{
rcu_read_release();
__release(RCU);
preempt_enable();
}
static inline void __rcu_read_lock_bh(void)
{
local_bh_disable();
__acquire(RCU_BH);
rcu_read_acquire();
}
static inline void __rcu_read_unlock_bh(void)
{
rcu_read_release();
__release(RCU_BH);
local_bh_enable();
}

Expand Down

0 comments on commit a06e27f

Please sign in to comment.