From owner-freebsd-current@FreeBSD.ORG Tue Nov 9 09:25:55 2010 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 04C871065673; Tue, 9 Nov 2010 09:25:55 +0000 (UTC) (envelope-from avg@freebsd.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id 11D838FC12; Tue, 9 Nov 2010 09:25:53 +0000 (UTC) Received: from porto.topspin.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id LAA18585; Tue, 09 Nov 2010 11:25:51 +0200 (EET) (envelope-from avg@freebsd.org) Received: from localhost.topspin.kiev.ua ([127.0.0.1]) by porto.topspin.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1PFkSc-0007Cd-Vf; Tue, 09 Nov 2010 11:25:50 +0200 Message-ID: <4CD9139D.9060302@freebsd.org> Date: Tue, 09 Nov 2010 11:25:49 +0200 From: Andriy Gapon User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.12) Gecko/20101029 Lightning/1.0b2 Thunderbird/3.1.6 MIME-Version: 1.0 To: Kostik Belousov References: <4CD3B1D2.30003@icyb.net.ua> <4CD7E401.1010206@freebsd.org> <20101108120403.GC2392@deviant.kiev.zoral.com.ua> In-Reply-To: <20101108120403.GC2392@deviant.kiev.zoral.com.ua> X-Enigmail-Version: 1.1.2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: freebsd-x11@freebsd.org, freebsd-current@freebsd.org Subject: Re: radeon_cp_texture: page fault with non-sleepable locks held X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Nov 2010 09:25:55 -0000 on 08/11/2010 14:04 Kostik Belousov said the following: > On Mon, Nov 08, 2010 at 01:50:25PM +0200, Andriy Gapon wrote: >> on 05/11/2010 09:27 Andriy Gapon said the following: >>> >>> I use FreeSBD head and KDE 4 with all the bells and whistles enabled. >>> Apparently recent KDE update has enabled even more of them, because I started to >>> have panics with a kernel that has INVARIANTS and WITNESS enabled. >> >> I tried to solve the problem by changing drmdev from mutex to sx: >> http://people.freebsd.org/~avg/drm-sx.diff > I remember that drm lock can be acquired from the interrupt thread, if > the card supports interrupts. Changing it to sx cannot work then, because > interrupt threads cannot sleep. Most likely, you are getting around it > since r600 not yet used interrupts on FreeBSD. > > I think the solution is to drop drm lock around copyin. Kostik, I looked at this some more and now I think that using sx is a step in the right direction. Rationale: 1. it seems that on Linux mutex is a sleepable lock and thus can be safely held across a page fault; and Linux mutex -> FreeBSD sx seems to be a porting technique used for kernel code before[*]. 2. DRM interrupt code uses a different lock - irq_lock, which is locked via DRM_SPINLOCK macro (expands to FreeBSD mutex); apparently even on Linux a sleep-able lock can't be acquired in interrupt handler. I use Linux this and Linux that as a justification, because the DRM code apparently originated with Linux model/idioms in mind, although the original purpose was for the code to be portable. So, what do you think about this aspect? Should you agree with the usage of sx, then the previous question pops back - how to resolve the lock order reversal between drmdev lock and user map lock (which both would be sx). [*] http://www.ukuug.org/events/eurobsdcon2009/papers/dvb_driver_paper.pdf -- Andriy Gapon