From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756928AbdKGKhn (ORCPT ); Tue, 7 Nov 2017 05:37:43 -0500 Received: from mx1.redhat.com ([209.132.183.28]:54600 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752843AbdKGKhk (ORCPT ); Tue, 7 Nov 2017 05:37:40 -0500 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 1082982100 Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=pbonzini@redhat.com Subject: Re: [PATCH 3.16 084/294] KVM: async_pf: make rcu irq exit if not triggered from idle task To: Ben Hutchings , linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: akpm@linux-foundation.org, =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , "Paul E. McKenney" , Wanpeng Li References: From: Paolo Bonzini Message-ID: <154a88d5-3066-11ea-8baf-3c4b8b5200b9@redhat.com> Date: Tue, 7 Nov 2017 11:37:33 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Tue, 07 Nov 2017 10:37:40 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 07/11/2017 00:03, Ben Hutchings wrote: > 3.16.50-rc1 review patch. If anyone has any objections, please let me know. > > ------------------ > > From: Wanpeng Li > > commit 337c017ccdf2653d0040099433fc1a2b1beb5926 upstream. > > WARNING: CPU: 5 PID: 1242 at kernel/rcu/tree_plugin.h:323 rcu_note_context_switch+0x207/0x6b0 > CPU: 5 PID: 1242 Comm: unity-settings- Not tainted 4.13.0-rc2+ #1 > RIP: 0010:rcu_note_context_switch+0x207/0x6b0 > Call Trace: > __schedule+0xda/0xba0 > ? kvm_async_pf_task_wait+0x1b2/0x270 > schedule+0x40/0x90 > kvm_async_pf_task_wait+0x1cc/0x270 > ? prepare_to_swait+0x22/0x70 > do_async_page_fault+0x77/0xb0 > ? do_async_page_fault+0x77/0xb0 > async_page_fault+0x28/0x30 > RIP: 0010:__d_lookup_rcu+0x90/0x1e0 > > I encounter this when trying to stress the async page fault in L1 guest w/ > L2 guests running. > > Commit 9b132fbe5419 (Add rcu user eqs exception hooks for async page > fault) adds rcu_irq_enter/exit() to kvm_async_pf_task_wait() to exit cpu > idle eqs when needed, to protect the code that needs use rcu. However, > we need to call the pair even if the function calls schedule(), as seen > from the above backtrace. > > This patch fixes it by informing the RCU subsystem exit/enter the irq > towards/away from idle for both n.halted and !n.halted. > > Cc: Paolo Bonzini > Cc: Radim Krčmář > Cc: Paul E. McKenney > Signed-off-by: Wanpeng Li > Reviewed-by: Paolo Bonzini > Signed-off-by: Radim Krčmář > Signed-off-by: Ben Hutchings > --- > arch/x86/kernel/kvm.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > --- a/arch/x86/kernel/kvm.c > +++ b/arch/x86/kernel/kvm.c > @@ -150,6 +150,8 @@ void kvm_async_pf_task_wait(u32 token) > if (hlist_unhashed(&n.link)) > break; > > + rcu_irq_exit(); > + > if (!n.halted) { > local_irq_enable(); > schedule(); > @@ -158,11 +160,11 @@ void kvm_async_pf_task_wait(u32 token) > /* > * We cannot reschedule. So halt. > */ > - rcu_irq_exit(); > native_safe_halt(); > local_irq_disable(); > - rcu_irq_enter(); > } > + > + rcu_irq_enter(); > } > if (!n.halted) > finish_wait(&n.wq, &wait); > Looks good, please backport b862789aa5186d5ea3a024b7cfe0f80c3a38b980 and a2b7861bb33b2538420bb5d8554153484d3f961f as well. Thanks, Paolo