NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/50448: Xorg on 82G33/G31 Express Integrated Graphics Controller hangs



The following reply was made to PR kern/50448; it has been noted by GNATS.

From: Taylor R Campbell <riastradh%NetBSD.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost, oster%netbsd.org@localhost
Subject: Re: kern/50448: Xorg on 82G33/G31 Express Integrated Graphics Controller hangs
Date: Mon, 22 Feb 2016 19:57:06 +0000

    Date: Sun, 21 Feb 2016 22:55:01 +0000 (UTC)
    From: Greg Oster <oster%netbsd.org@localhost>
 
    Anything I can do to help with this?  I just tried to login to my
    desktop after a reboot, and it 'hung' again...
    Later...
 
 Hi, Greg!  Sorry to have been so quiet about this -- my time for
 focussed debugging has been pretty limited.
 
 One immediate workaround you can try, just to make the machine useful
 to you again right now, is to disable the new DRM/KMS code and
 re-enable the old DRM(/UMS) code.  Something like this:
 
 i915drm* at drm?
 
 no i915drmkms*
 no intelfb*
 no radeon*
 no radeondrmkmsfb*
 no nouveau*
 no nouveaufb*
 
 This hasn't undergone much testing, but it is fairly likely that most
 of that code hasn't broken.
 
 
 I have two general hypotheses about what's going on here:
 
 
 1. The i915drmkms code has allocated too many pages to graphics
 buffers, and we haven't hooked up the mechanism by which the page
 daemon can tell i915drmkms to please relinquish a few pages that
 aren't terribly important, if it doesn't mind.  Hooking up this
 mechanism shouldn't be too hard -- just need to invent a shim for
 Linux `shrinkers' and teach the uvm page daemon to invoke it.
 
 
 2. The code path you quoted involves two locks and a wait that only
 releases one of them.  The two locks are the DRM/KMS dev->struct_mutex
 and the GEM/UVM object's vmobjlock:
 
 Many paths into the DRM/KMS code path require exclusive access to
 whole the driver state, serialized by dev->struct_mutex, and I haven't
 checked but it wouldn't surprise me if this one will hold that.
 
 When we do i915_gem_object_get_pages, which calls uvm_obj_wirepages ->
 uao_get, if there are no free pages, then we have to wait -- and
 although uao_get drops the vmobjlock in order to uvm_wait, it does not
 drop dev->struct_mutex.
 
 If it turns out that this code path is serialized by dev->struct_mutex
 (which it may not be), then we'd have to find some way to disentangle
 it, or some hack to persuade uao_get to drop dev->struct_mutex.
 
 
 These hints might be enough for someone else to do some analysis or
 experiments.  If you'd like to take a look, and want any more
 hand-holding, I'd be happy to give more hints.  I won't have time to
 prepare specific patches to test for a few days at best, though -- but
 feel free to ping me in a week if I haven't piped up again.
 


Home | Main Index | Thread Index | Old Index