forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/lin…
…ux/kernel/git/tip/tip Pull RCU changes from Ingo Molnar: "The main changes in this cycle were: - Improvements to expedited grace periods (Paul E McKenney) - Performance improvements to and locktorture tests for percpu-rwsem (Oleg Nesterov, Paul E McKenney) - Torture-test changes (Paul E McKenney, Davidlohr Bueso) - Documentation updates (Paul E McKenney) - Miscellaneous fixes (Paul E McKenney, Boqun Feng, Oleg Nesterov, Patrick Marlier)" * 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (54 commits) fs/writeback, rcu: Don't use list_entry_rcu() for pointer offsetting in bdi_split_work_to_wbs() rcu: Better hotplug handling for synchronize_sched_expedited() rcu: Enable stall warnings for synchronize_rcu_expedited() rcu: Add tasks to expedited stall-warning messages rcu: Add online/offline info to expedited stall warning message rcu: Consolidate expedited CPU selection rcu: Prepare for consolidating expedited CPU selection cpu: Remove try_get_online_cpus() rcu: Stop excluding CPU hotplug in synchronize_sched_expedited() rcu: Stop silencing lockdep false positive for expedited grace periods rcu: Switch synchronize_sched_expedited() to IPI locktorture: Fix module unwind when bad torture_type specified torture: Forgive non-plural arguments rcutorture: Fix unused-function warning for torturing_tasks() rcutorture: Fix module unwind when bad torture_type specified rcu_sync: Cleanup the CONFIG_PROVE_RCU checks locking/percpu-rwsem: Clean up the lockdep annotations in percpu_down_read() locking/percpu-rwsem: Fix the comments outdated by rcu_sync locking/percpu-rwsem: Make use of the rcu_sync infrastructure locking/percpu-rwsem: Make percpu_free_rwsem() after kzalloc() safe ...
- Loading branch information
Showing
42 changed files
with
1,333 additions
and
545 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
/* | ||
* RCU-based infrastructure for lightweight reader-writer locking | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, you can access it online at | ||
* http://www.gnu.org/licenses/gpl-2.0.html. | ||
* | ||
* Copyright (c) 2015, Red Hat, Inc. | ||
* | ||
* Author: Oleg Nesterov <[email protected]> | ||
*/ | ||
|
||
#ifndef _LINUX_RCU_SYNC_H_ | ||
#define _LINUX_RCU_SYNC_H_ | ||
|
||
#include <linux/wait.h> | ||
#include <linux/rcupdate.h> | ||
|
||
enum rcu_sync_type { RCU_SYNC, RCU_SCHED_SYNC, RCU_BH_SYNC }; | ||
|
||
/* Structure to mediate between updaters and fastpath-using readers. */ | ||
struct rcu_sync { | ||
int gp_state; | ||
int gp_count; | ||
wait_queue_head_t gp_wait; | ||
|
||
int cb_state; | ||
struct rcu_head cb_head; | ||
|
||
enum rcu_sync_type gp_type; | ||
}; | ||
|
||
extern void rcu_sync_lockdep_assert(struct rcu_sync *); | ||
|
||
/** | ||
* rcu_sync_is_idle() - Are readers permitted to use their fastpaths? | ||
* @rsp: Pointer to rcu_sync structure to use for synchronization | ||
* | ||
* Returns true if readers are permitted to use their fastpaths. | ||
* Must be invoked within an RCU read-side critical section whose | ||
* flavor matches that of the rcu_sync struture. | ||
*/ | ||
static inline bool rcu_sync_is_idle(struct rcu_sync *rsp) | ||
{ | ||
#ifdef CONFIG_PROVE_RCU | ||
rcu_sync_lockdep_assert(rsp); | ||
#endif | ||
return !rsp->gp_state; /* GP_IDLE */ | ||
} | ||
|
||
extern void rcu_sync_init(struct rcu_sync *, enum rcu_sync_type); | ||
extern void rcu_sync_enter(struct rcu_sync *); | ||
extern void rcu_sync_exit(struct rcu_sync *); | ||
extern void rcu_sync_dtor(struct rcu_sync *); | ||
|
||
#define __RCU_SYNC_INITIALIZER(name, type) { \ | ||
.gp_state = 0, \ | ||
.gp_count = 0, \ | ||
.gp_wait = __WAIT_QUEUE_HEAD_INITIALIZER(name.gp_wait), \ | ||
.cb_state = 0, \ | ||
.gp_type = type, \ | ||
} | ||
|
||
#define __DEFINE_RCU_SYNC(name, type) \ | ||
struct rcu_sync_struct name = __RCU_SYNC_INITIALIZER(name, type) | ||
|
||
#define DEFINE_RCU_SYNC(name) \ | ||
__DEFINE_RCU_SYNC(name, RCU_SYNC) | ||
|
||
#define DEFINE_RCU_SCHED_SYNC(name) \ | ||
__DEFINE_RCU_SYNC(name, RCU_SCHED_SYNC) | ||
|
||
#define DEFINE_RCU_BH_SYNC(name) \ | ||
__DEFINE_RCU_SYNC(name, RCU_BH_SYNC) | ||
|
||
#endif /* _LINUX_RCU_SYNC_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.