From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758441Ab0DHJ5a (ORCPT ); Thu, 8 Apr 2010 05:57:30 -0400 Received: from mail-bw0-f209.google.com ([209.85.218.209]:53908 "EHLO mail-bw0-f209.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754105Ab0DHJ50 (ORCPT ); Thu, 8 Apr 2010 05:57:26 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:cc:in-reply-to:references:content-type:date :message-id:mime-version:x-mailer:content-transfer-encoding; b=G0NvGsMbnBBdNnI7ueL8aE5gnpUfwYhrwaunfKpUW/jRRGT5r8g+bgYdWOeFNCha86 saR0jbDD8mh7DxwUEl4O56DEl5+3Zr+flBBLphn0KtGCvS4OI0tALRgb1XLzbmdBFq3T HgA93RE9KtRF+hldN+Fz0q5eiu05vHks6Erqs= Subject: [BUG perf] perf_fetch_caller_regs / rewind_frame_pointer can panic From: Eric Dumazet To: Frederic Weisbecker Cc: Ingo Molnar , LKML , Peter Zijlstra , Arnaldo Carvalho de Melo , Paul Mackerras , David Miller , Archs In-Reply-To: <1269568362-13690-6-git-send-regression-fweisbec@gmail.com> References: <1269568362-13690-1-git-send-regression-fweisbec@gmail.com> <1269568362-13690-6-git-send-regression-fweisbec@gmail.com> Content-Type: text/plain; charset="UTF-8" Date: Thu, 08 Apr 2010 11:57:20 +0200 Message-ID: <1270720640.2215.43.camel@edumazet-laptop> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello Current linux-2.6 tree panics on my dev machine 64 bit kernel, 32bit user land CONFIG_FRAME_POINTER=y perf timechart record & Instant crash Call Trace: perf_trace_sched_switch+0xd5/0x120 schedule+0x6b5/0x860 retint_careful+0xd/0x21 RIP ffffffff81010955 perf_arch_fetch_caller_regs+0x15/0x40 CR2: 00000000d21f1422 rewind_frame_pointer() is probably wrong. No test performed to check frame is in current stack, or that (!user_mode_vm(regs)) static inline unsigned long rewind_frame_pointer(int n) { struct stack_frame *frame; get_bp(frame); #ifdef CONFIG_FRAME_POINTER while (n--) frame = frame->next_frame; #endif return (unsigned long)frame; }