From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753230AbbE3EMA (ORCPT ); Sat, 30 May 2015 00:12:00 -0400 Received: from aserp1040.oracle.com ([141.146.126.69]:17383 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750836AbbE3ELw (ORCPT ); Sat, 30 May 2015 00:11:52 -0400 Message-ID: <556937E3.8020601@oracle.com> Date: Sat, 30 May 2015 00:09:07 -0400 From: Sasha Levin User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: hpa@zytor.com, doug.hatch@hp.com, oleg@redhat.com, raghavendra.kt@linux.vnet.ibm.com, peterz@infradead.org, bp@alien8.de, linux-kernel@vger.kernel.org, riel@redhat.com, daniel@numascale.com, scott.norton@hp.com, boris.ostrovsky@oracle.com, akpm@linux-foundation.org, tglx@linutronix.de, david.vrabel@citrix.com, paolo.bonzini@gmail.com, Waiman.Long@hp.com, paulmck@linux.vnet.ibm.com, torvalds@linux-foundation.org, konrad.wilk@oracle.com, mingo@kernel.org, linux-tip-commits@vger.kernel.org Subject: Re: [tip:locking/core] locking/pvqspinlock, x86: Implement the paravirt qspinlock call patching References: <1429901803-29771-10-git-send-email-Waiman.Long@hp.com> In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Source-IP: aserv0021.oracle.com [141.146.126.233] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/08/2015 09:27 AM, tip-bot for Peter Zijlstra (Intel) wrote: > Commit-ID: f233f7f1581e78fd9b4023f2e7d8c1ed89020cc9 > Gitweb: http://git.kernel.org/tip/f233f7f1581e78fd9b4023f2e7d8c1ed89020cc9 > Author: Peter Zijlstra (Intel) > AuthorDate: Fri, 24 Apr 2015 14:56:38 -0400 > Committer: Ingo Molnar > CommitDate: Fri, 8 May 2015 12:37:09 +0200 > > locking/pvqspinlock, x86: Implement the paravirt qspinlock call patching > > We use the regular paravirt call patching to switch between: > > native_queued_spin_lock_slowpath() __pv_queued_spin_lock_slowpath() > native_queued_spin_unlock() __pv_queued_spin_unlock() > > We use a callee saved call for the unlock function which reduces the > i-cache footprint and allows 'inlining' of SPIN_UNLOCK functions > again. > > We further optimize the unlock path by patching the direct call with a > "movb $0,%arg1" if we are indeed using the native unlock code. This > makes the unlock code almost as fast as the !PARAVIRT case. > > This significantly lowers the overhead of having > CONFIG_PARAVIRT_SPINLOCKS enabled, even for native code. > > Signed-off-by: Peter Zijlstra (Intel) > Signed-off-by: Waiman Long > Signed-off-by: Peter Zijlstra (Intel) > Cc: Andrew Morton > Cc: Boris Ostrovsky > Cc: Borislav Petkov > Cc: Daniel J Blueman > Cc: David Vrabel > Cc: Douglas Hatch > Cc: H. Peter Anvin > Cc: Konrad Rzeszutek Wilk > Cc: Linus Torvalds > Cc: Oleg Nesterov > Cc: Paolo Bonzini > Cc: Paul E. McKenney > Cc: Peter Zijlstra > Cc: Raghavendra K T > Cc: Rik van Riel > Cc: Scott J Norton > Cc: Thomas Gleixner > Cc: virtualization@lists.linux-foundation.org > Cc: xen-devel@lists.xenproject.org > Link: http://lkml.kernel.org/r/1429901803-29771-10-git-send-email-Waiman.Long@hp.com > Signed-off-by: Ingo Molnar Hey Peter, I'm seeing this on the latest -next kernel: [ 8693.503262] BUG: KASan: out of bounds access in __pv_queued_spin_lock_slowpath+0x84e/0x8c0 at addr ffffffffb9495950 [ 8693.503271] Read of size 8 by task swapper/9/0 [ 8693.503289] Address belongs to variable pv_lock_ops+0x10/0x240 [ 8693.503301] CPU: 9 PID: 0 Comm: swapper/9 Tainted: G D 4.1.0-rc5-next-20150529-sasha-00039-g7fd455d-dirty #2263 [ 8693.503335] ffffffffb6a1423a b6f92731d7a76ba3 ffff8802b349f918 ffffffffb6a1423a [ 8693.503355] 0000000000000000 ffff8802b349f9a8 ffff8802b349f998 ffffffffad5c70ee [ 8693.503375] ffffffffad2eb58e 0000000000000004 0000000000000086 1ffff1011953cbb4 [ 8693.503379] Call Trace: [ 8693.503409] ? dump_stack (lib/dump_stack.c:52) [ 8693.503426] dump_stack (lib/dump_stack.c:52) [ 8693.503454] kasan_report_error (mm/kasan/report.c:132 mm/kasan/report.c:193) [ 8693.503463] ? __pv_queued_spin_lock_slowpath (./arch/x86/include/asm/paravirt.h:730 kernel/locking/qspinlock.c:410) [ 8693.503474] ? kasan_report_error (mm/kasan/report.c:186) [ 8693.503488] ? trace_hardirqs_off_caller (./arch/x86/include/asm/current.h:14 kernel/locking/lockdep.c:2652) [ 8693.503504] __asan_report_load8_noabort (mm/kasan/report.c:230 mm/kasan/report.c:251) [ 8693.503517] ? __pv_queued_spin_lock_slowpath (./arch/x86/include/asm/paravirt.h:730 kernel/locking/qspinlock.c:410) [ 8693.503526] __pv_queued_spin_lock_slowpath (./arch/x86/include/asm/paravirt.h:730 kernel/locking/qspinlock.c:410) [ 8693.503541] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503557] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.503566] ? trace_hardirqs_off_caller (./arch/x86/include/asm/current.h:14 kernel/locking/lockdep.c:2652) [ 8693.503578] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503589] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.503605] ? native_iret (arch/x86/kernel/entry_64.S:806) [ 8693.503614] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503623] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.503631] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503639] ? async_page_fault (arch/x86/kernel/entry_64.S:1261) [ 8693.503663] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503681] ? native_iret (arch/x86/kernel/entry_64.S:806) [ 8693.503691] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503699] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.503730] ? trace_hardirqs_off_caller (./arch/x86/include/asm/current.h:14 kernel/locking/lockdep.c:2652) [ 8693.503743] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503754] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.503772] ? native_iret (arch/x86/kernel/entry_64.S:806) [ 8693.503784] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503794] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.503802] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503814] ? async_page_fault (arch/x86/kernel/entry_64.S:1261) [ 8693.503829] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503845] ? native_iret (arch/x86/kernel/entry_64.S:806) [ 8693.503854] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503863] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.503872] ? trace_hardirqs_off_caller (./arch/x86/include/asm/current.h:14 kernel/locking/lockdep.c:2652) [ 8693.503888] ? async_page_fault (arch/x86/kernel/entry_64.S:1261) [ 8693.503897] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503907] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.503922] ? native_iret (arch/x86/kernel/entry_64.S:806) [ 8693.503935] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503943] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.503962] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503970] ? async_page_fault (arch/x86/kernel/entry_64.S:1261) [ 8693.503980] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.503994] ? native_iret (arch/x86/kernel/entry_64.S:806) [ 8693.504002] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.504014] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.504029] ? trace_hardirqs_off_caller (./arch/x86/include/asm/current.h:14 kernel/locking/lockdep.c:2652) [ 8693.504042] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.504052] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.504064] ? native_iret (arch/x86/kernel/entry_64.S:806) [ 8693.504077] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.504086] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.504093] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.504102] ? async_page_fault (arch/x86/kernel/entry_64.S:1261) [ 8693.504112] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.504126] ? native_iret (arch/x86/kernel/entry_64.S:806) [ 8693.504135] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.504146] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.504161] ? trace_hardirqs_off_caller (./arch/x86/include/asm/current.h:14 kernel/locking/lockdep.c:2652) [ 8693.504172] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.504185] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.504201] ? native_iret (arch/x86/kernel/entry_64.S:806) [ 8693.504224] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.504233] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.504240] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.504252] ? async_page_fault (arch/x86/kernel/entry_64.S:1261) [ 8693.504263] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.504276] ? native_iret (arch/x86/kernel/entry_64.S:806) [ 8693.504295] ? error_sti (arch/x86/kernel/entry_64.S:1334) [ 8693.504303] ? trace_hardirqs_off_thunk (arch/x86/lib/thunk_64.S:43) [ 8693.504311] Memory state around the buggy address: [ 8693.504320] ffffffffb9495800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 8693.504326] ffffffffb9495880: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 8693.504337] >ffffffffb9495900: 00 00 00 00 00 00 00 00 00 00 00 00 fa fa fa fa [ 8693.504347] ^ [ 8693.504353] ffffffffb9495980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 8693.504363] ffffffffb9495a00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Thanks, Sasha