From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751149AbdEaMDT (ORCPT ); Wed, 31 May 2017 08:03:19 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:33757 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751009AbdEaMDQ (ORCPT ); Wed, 31 May 2017 08:03:16 -0400 From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: jiangshanlai@gmail.com, josh@joshtriplett.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, Linu Cherian , "Paul E. McKenney" Subject: [PATCH 0/2] srcu: allow using same SRCU in process and interrupt context Date: Wed, 31 May 2017 14:03:09 +0200 Message-Id: <1496232191-13439-1-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Linu Cherian reported a WARN in cleanup_srcu_struct when shutting down a guest that has iperf running on a VFIO assigned device. This happens because irqfd_wakeup calls srcu_read_lock(&kvm->irq_srcu) in interrupt context, while a worker thread does the same inside kvm_set_irq. If the interrupt happens while the worker thread is executing __srcu_read_lock, lock_count can fall behind. (KVM is using SRCU here not really for the "sleepable" part, but rather due to its faster detection of grace periods). As discussed with Paul, this patch changes __this_cpu_inc to this_cpu_inc in __srcu_read_lock, thus removing the restriction that SRCU can only be used in process context. Split in two parts so that srcuclassic and header changes can be backported to stable releases. Because of the backport, the two commit messages are more or less cut-and-pasted. Ok for 4.12? Paolo Paolo Bonzini (2): srcutiny, srcutree: allow using same SRCU in process and interrupt context srcuclassic: allow using same SRCU in process and interrupt context include/linux/srcu.h | 2 -- include/linux/srcutiny.h | 2 +- kernel/rcu/rcutorture.c | 4 ++-- kernel/rcu/srcu.c | 5 ++--- kernel/rcu/srcutiny.c | 21 ++++++++++----------- kernel/rcu/srcutree.c | 5 ++--- 6 files changed, 17 insertions(+), 22 deletions(-) -- 1.8.3.1