diff options
Diffstat (limited to 'kernel/rcutree.c')
-rw-r--r-- | kernel/rcutree.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c index ddbf111e9e18..055f1a941a9e 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c | |||
@@ -51,6 +51,8 @@ | |||
51 | 51 | ||
52 | /* Data structures. */ | 52 | /* Data structures. */ |
53 | 53 | ||
54 | static struct lock_class_key rcu_root_class; | ||
55 | |||
54 | #define RCU_STATE_INITIALIZER(name) { \ | 56 | #define RCU_STATE_INITIALIZER(name) { \ |
55 | .level = { &name.node[0] }, \ | 57 | .level = { &name.node[0] }, \ |
56 | .levelcnt = { \ | 58 | .levelcnt = { \ |
@@ -1666,8 +1668,7 @@ static void __init rcu_init_one(struct rcu_state *rsp) | |||
1666 | cpustride *= rsp->levelspread[i]; | 1668 | cpustride *= rsp->levelspread[i]; |
1667 | rnp = rsp->level[i]; | 1669 | rnp = rsp->level[i]; |
1668 | for (j = 0; j < rsp->levelcnt[i]; j++, rnp++) { | 1670 | for (j = 0; j < rsp->levelcnt[i]; j++, rnp++) { |
1669 | if (rnp != rcu_get_root(rsp)) | 1671 | spin_lock_init(&rnp->lock); |
1670 | spin_lock_init(&rnp->lock); | ||
1671 | rnp->gpnum = 0; | 1672 | rnp->gpnum = 0; |
1672 | rnp->qsmask = 0; | 1673 | rnp->qsmask = 0; |
1673 | rnp->qsmaskinit = 0; | 1674 | rnp->qsmaskinit = 0; |
@@ -1690,7 +1691,7 @@ static void __init rcu_init_one(struct rcu_state *rsp) | |||
1690 | INIT_LIST_HEAD(&rnp->blocked_tasks[1]); | 1691 | INIT_LIST_HEAD(&rnp->blocked_tasks[1]); |
1691 | } | 1692 | } |
1692 | } | 1693 | } |
1693 | spin_lock_init(&rcu_get_root(rsp)->lock); | 1694 | lockdep_set_class(&rcu_get_root(rsp)->lock, &rcu_root_class); |
1694 | } | 1695 | } |
1695 | 1696 | ||
1696 | /* | 1697 | /* |