From patchwork Thu Jun 6 07:23:15 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maarten Lankhorst X-Patchwork-Id: 2677381 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork2.kernel.org (Postfix) with ESMTP id 8A495DF23A for ; Thu, 6 Jun 2013 07:23:47 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7B75AE6619 for ; Thu, 6 Jun 2013 00:23:47 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from youngberry.canonical.com (youngberry.canonical.com [91.189.89.112]) by gabe.freedesktop.org (Postfix) with ESMTP id D1CD5E661E for ; Thu, 6 Jun 2013 00:23:17 -0700 (PDT) Received: from 5ed49945.cm-7-5c.dynamic.ziggo.nl ([94.212.153.69] helo=[192.168.1.128]) by youngberry.canonical.com with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1UkUXT-0003AL-FB; Thu, 06 Jun 2013 07:23:15 +0000 Message-ID: <51B038E3.30800@canonical.com> Date: Thu, 06 Jun 2013 09:23:15 +0200 From: Maarten Lankhorst User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130510 Thunderbird/17.0.6 MIME-Version: 1.0 To: Fengguang Wu Subject: Re: [vt_console_print/cirrus_dirty_update] WARNING: at kernel/mutex.c:858 mutex_trylock() References: <20130606013518.GA9092@localhost> In-Reply-To: <20130606013518.GA9092@localhost> Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Hey, Op 06-06-13 03:35, Fengguang Wu schreef: > Greetings, > > I got the below dmesg and the first bad commit is > > commit 3d71c6ed43d838e593538176a9a59debe228cfb0 > Author: Maarten Lankhorst > Date: Tue Apr 2 12:33:01 2013 +0200 > > drm/ttm: convert to the reservation api > > Now that the code is compatible in semantics, flip the switch. > Use ww_mutex instead of the homegrown implementation. > > Signed-off-by: Maarten Lankhorst > > [ 13.044298] printing local APIC contents on CPU#0/0: > [ 13.044313] ------------[ cut here ]------------ > [ 13.044367] WARNING: at /c/kernel-tests/src/tip/kernel/mutex.c:858 mutex_trylock+0x87/0x220() > [ 13.044378] DEBUG_LOCKS_WARN_ON(in_interrupt()) > [ 13.044378] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.10.0-rc4-00296-ga2963dd #20 > [ 13.044379] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007 > [ 13.044390] 0000000000000009 ffff88000de039f8 ffffffff81fc86d5 ffff88000de03a38 > [ 13.044395] ffffffff810d511b ffff880000000018 ffff88000f33c690 0000000000000001 > [ 13.044398] 00000000000003f0 ffff88000f4677c8 0000000000000000 ffff88000de03a98 > [ 13.044400] Call Trace: > [ 13.044412] [] dump_stack+0x19/0x1b > [ 13.044441] [] warn_slowpath_common+0x6b/0x90 > [ 13.044445] [] warn_slowpath_fmt+0x46/0x50 > [ 13.044448] [] mutex_trylock+0x87/0x220 > [ 13.044482] [] cirrus_dirty_update+0x1cd/0x330 > [ 13.044486] [] cirrus_imageblit+0x38/0x50 > [ 13.044506] [] soft_cursor+0x22e/0x240 > [ 13.044510] [] bit_cursor+0x581/0x5b0 > [ 13.044525] [] ? vsnprintf+0x124/0x670 > [ 13.044529] [] ? get_color.isra.16+0x43/0x130 > [ 13.044532] [] fbcon_cursor+0x18a/0x1d0 > [ 13.044535] [] ? update_attr.isra.2+0xa0/0xa0 > [ 13.044556] [] hide_cursor+0x32/0xa0 > [ 13.044565] [] vt_console_print+0x103/0x3b0 > [ 13.044569] [] ? print_time+0x9c/0xb0 > [ 13.044576] [] ? print_prefix+0xa0/0xc0 > [ 13.044580] [] call_console_drivers.constprop.6+0x146/0x1f0 > [ 13.044593] [] ? do_raw_spin_unlock+0xc8/0x100 > [ 13.044597] [] console_unlock+0x2f7/0x460 > [ 13.044600] [] vprintk_emit+0x59a/0x5e0 > [ 13.044615] [] printk+0x4d/0x4f > [ 13.044650] [] print_local_APIC+0x28/0x41c > [ 13.044672] [] generic_smp_call_function_single_interrupt+0x145/0x2b0 > [ 13.044688] [] smp_call_function_single_interrupt+0x27/0x40 > [ 13.044697] [] call_function_single_interrupt+0x72/0x80 > [ 13.044707] [] ? native_safe_halt+0x6/0x10 > [ 13.044717] [] ? trace_hardirqs_on+0xd/0x10 > [ 13.044738] [] default_idle+0x59/0x120 > [ 13.044742] [] arch_cpu_idle+0x18/0x40 > [ 13.044754] [] cpu_startup_entry+0x235/0x410 > [ 13.044763] [] rest_init+0xd1/0xe0 > [ 13.044766] [] ? rest_init+0x5/0xe0 > [ 13.044778] [] start_kernel+0x425/0x493 > [ 13.044781] [] ? repair_env_string+0x5e/0x5e > [ 13.044786] [] x86_64_start_reservations+0x2a/0x2c > [ 13.044789] [] x86_64_start_kernel+0xf1/0x100 > [ 13.044799] ---[ end trace 113ad28772af4058 ]--- Thanks for catching this, I'm uncertain how to proceed here. Can you try below patch? diff --git a/drivers/gpu/drm/cirrus/cirrus_fbdev.c b/drivers/gpu/drm/cirrus/cirrus_fbdev.c index 3541b56..b27e956 100644 --- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c +++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c @@ -25,7 +25,7 @@ static void cirrus_dirty_update(struct cirrus_fbdev *afbdev, struct cirrus_bo *bo; int src_offset, dst_offset; int bpp = (afbdev->gfb.base.bits_per_pixel + 7)/8; - int ret; + int ret = -EBUSY; bool unmap = false; bool store_for_later = false; int x2, y2; @@ -39,7 +39,8 @@ static void cirrus_dirty_update(struct cirrus_fbdev *afbdev, * then the BO is being moved and we should * store up the damage until later. */ - ret = cirrus_bo_reserve(bo, true); + if (!in_interrupt()) + ret = cirrus_bo_reserve(bo, true); if (ret) { if (ret != -EBUSY) return;