Today the RCU handling in Xen is affecting scheduling in several ways.
It is raising sched softirqs without any real need and it requires
tasklets for rcu_barrier(), which interacts badly with core scheduling.
This small series repairs those issues.
Additionally some ASSERT()s are added for verification of sane rcu
handling. In order to avoid those triggering right away the obvious
violations are fixed. This includes making rcu locking functions type
safe.
Changes in V3:
- type safe locking functions (functions instead of macros)
- per-lock debug additions
- new patches 4 and 6
- fixed races
Changes in V2:
- use get_cpu_maps() in rcu_barrier() handling
- avoid recursion in rcu_barrier() handling
- new patches 3 and 4
Juergen Gross (6):
xen/rcu: use rcu softirq for forcing quiescent state
xen/rcu: don't use stop_machine_run() for rcu_barrier()
xen: add process_pending_softirqs_norcu() for keyhandlers
xen/rcu: fix rcu_lock_domain()
xen/rcu: add assertions to debug build
xen/rcu: add per-lock counter in debug builds
xen/arch/x86/mm/p2m-ept.c | 2 +-
xen/arch/x86/numa.c | 4 +-
xen/common/domain.c | 1 +
xen/common/keyhandler.c | 6 +-
xen/common/multicall.c | 1 +
xen/common/preempt.c | 5 +-
xen/common/rcupdate.c | 109 ++++++++++++++++++++--------
xen/common/softirq.c | 19 ++++-
xen/common/wait.c | 1 +
xen/drivers/passthrough/amd/pci_amd_iommu.c | 2 +-
xen/drivers/passthrough/vtd/iommu.c | 2 +-
xen/drivers/vpci/msi.c | 4 +-
xen/include/xen/rcupdate.h | 75 +++++++++++++++----
xen/include/xen/sched.h | 6 +-
xen/include/xen/softirq.h | 2 +
15 files changed, 179 insertions(+), 60 deletions(-)
--
2.16.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel