linux/drivers/gpu/drm
Daniel Vetter 93927ca52a drm/i915: Revert shrinker changes from "Track unbound pages"
This partially reverts

commit 6c085a728c
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Mon Aug 20 11:40:46 2012 +0200

    drm/i915: Track unbound pages

Closer inspection of that patch revealed a bunch of unrelated changes
in the shrinker:
- The shrinker count is now in pages instead of objects.
- For counting the shrinkable objects the old code only looked at the
  inactive list, the new code looks at all bounds objects (including
  pinned ones). That is obviously in addition to the new unbound list.
- The shrinker cound is no longer scaled with
  sysctl_vfs_cache_pressure. Note though that with the default tuning
  value of vfs_cache_pressue = 100 this doesn't affect the shrinker
  behaviour.
- When actually shrinking objects, the old code first dropped
  purgeable objects, then normal (inactive) objects. Only then did it,
  in a last-ditch effort idle the gpu and evict everything. The new
  code omits the intermediate step of evicting normal inactive
  objects.

Safe for the first change, which seems benign, and the shrinker count
scaling, which is a bit a different story, the endresult of all these
changes is that the shrinker is _much_ more likely to fall back to the
last-ditch resort of idling the gpu and evicting everything.  The old
code could only do that if something else evicted lots of objects
meanwhile (since without any other changes the nr_to_scan will be
smaller than the object count).

Reverting the vfs_cache_pressure behaviour itself is a bit bogus: Only
dentry/inode object caches should scale their shrinker counts with
vfs_cache_pressure. Originally I've had that change reverted, too. But
Chris Wilson insisted that it's too bogus and shouldn't again see the
light of day.

Hence revert all these other changes and restore the old shrinker
behaviour, with the minor adjustment that we now first scan the
unbound list, then the inactive list for each object category
(purgeable or normal).

A similar patch has been tested by a few people affected by the gen4/5
hangs which started to appear in 3.7, which some people bisected to
the "drm/i915: Track unbound pages" commit. But just disabling the
unbound logic alone didn't change things at all.

Note that this patch doesn't fix the referenced bugs, it only hides
the underlying bug(s) well enough to restore pre-3.7 behaviour. The
key to achieve that is to massively reduce the likelyhood of going
into a full gpu stall and evicting everything.

v2: Reword commit message a bit, taking Chris Wilson's comment into
account.

v3: On Chris Wilson's insistency, do not reinstate the rather bogus
vfs_cache_pressure change.

Tested-by: Greg KH <gregkh@linuxfoundation.org>
Tested-by: Dave Kleikamp <dave.kleikamp@oracle.com>
References: https://bugs.freedesktop.org/show_bug.cgi?id=55984
References: https://bugs.freedesktop.org/show_bug.cgi?id=57122
References: https://bugs.freedesktop.org/show_bug.cgi?id=56916
References: https://bugs.freedesktop.org/show_bug.cgi?id=57136
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: stable@vger.kernel.org
Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2013-01-10 18:02:44 +01:00
..
ast drm/ttm: remove no_wait_reserve, v3 2012-12-10 20:21:30 +10:00
cirrus drm/ttm: remove no_wait_reserve, v3 2012-12-10 20:21:30 +10:00
exynos drm/exynos: add gsc ipp driver 2012-12-15 02:40:00 +09:00
gma500 drm/gma500: drm_connector_property -> drm_object_property 2012-11-30 10:20:11 -06:00
i2c drm/i2c: drm_connector_property -> drm_object_property 2012-11-30 10:20:12 -06:00
i810
i915 drm/i915: Revert shrinker changes from "Track unbound pages" 2013-01-10 18:02:44 +01:00
mga
mgag200 drm/ttm: remove no_wait_reserve, v3 2012-12-10 20:21:30 +10:00
nouveau drm/nve0/graph: fix fuc, and enable acceleration on all known chipsets 2012-12-23 22:59:32 +10:00
r128
radeon Merge branch 'drm-fixes-3.8' of git://people.freedesktop.org/~agd5f/linux into drm-next 2012-12-30 13:02:48 +10:00
savage
shmobile drm/shmob: drm_connector_property -> drm_object_property 2012-11-30 10:20:11 -06:00
sis
tdfx
tegra Revert "drm: tegra: protect DC register access with mutex" 2012-12-30 21:58:20 +10:00
ttm drm/ttm: fix delayed ttm_bo_cleanup_refs_and_unlock delayed handling 2012-12-20 07:46:20 +10:00
udl drm/udl: drm_connector_property -> drm_object_property 2012-11-30 10:20:11 -06:00
via
vmwgfx drm/ttm: remove no_wait_reserve, v3 2012-12-10 20:21:30 +10:00
ati_pcigart.c
drm_agpsupport.c
drm_auth.c
drm_buffer.c
drm_bufs.c
drm_cache.c
drm_context.c
drm_crtc_helper.c drm/doc: integrate crtc helper api into docbook 2012-11-28 20:19:58 +10:00
drm_crtc.c drm: remove legacy drm_connector_property fxns 2012-11-30 10:30:48 -06:00
drm_debugfs.c
drm_dma.c
drm_dp_helper.c drm/doc: add new dp helpers into drm DocBook 2012-11-28 20:26:53 +10:00
drm_drv.c
drm_edid_load.c
drm_edid_modes.h
drm_edid.c Merge branch 'drm-intel-fixes' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2012-12-16 06:05:03 +00:00
drm_encoder_slave.c
drm_fb_cma_helper.c
drm_fb_helper.c drm: remove legacy drm_connector_property fxns 2012-11-30 10:30:48 -06:00
drm_fops.c drm: set dev_mapping before calling drm_open_helper 2012-11-07 10:51:15 +10:00
drm_gem_cma_helper.c
drm_gem.c
drm_global.c
drm_hashtab.c drm: Add a hash-tab rcu-safe API 2012-11-28 18:36:05 +10:00
drm_info.c
drm_ioc32.c
drm_ioctl.c drm: add support for monotonic vblank timestamps 2012-11-20 16:06:16 +10:00
drm_irq.c drm: hold event_lock while accessing vblank_event_list 2012-11-29 03:30:34 -08:00
drm_lock.c
drm_memory.c
drm_mm.c drm: Only evict the blocks required to create the requested hole 2013-01-08 11:52:02 +01:00
drm_modes.c
drm_pci.c drm/pci: add missing variable initialization 2012-11-29 18:20:31 +10:00
drm_platform.c
drm_prime.c
drm_proc.c
drm_scatter.c
drm_stub.c drm: add support for monotonic vblank timestamps 2012-11-20 16:06:16 +10:00
drm_sysfs.c drm: remove legacy drm_connector_property fxns 2012-11-30 10:30:48 -06:00
drm_trace_points.c
drm_trace.h
drm_usb.c
drm_vm.c
Kconfig drm: Add NVIDIA Tegra20 support 2012-11-20 15:43:41 +10:00
Makefile drm: only build ati_pcigart if PCI enabled 2012-11-28 20:12:29 +10:00
README.drm

************************************************************
* For the very latest on DRI development, please see:      *
*     http://dri.freedesktop.org/                          *
************************************************************

The Direct Rendering Manager (drm) is a device-independent kernel-level
device driver that provides support for the XFree86 Direct Rendering
Infrastructure (DRI).

The DRM supports the Direct Rendering Infrastructure (DRI) in four major
ways:

    1. The DRM provides synchronized access to the graphics hardware via
       the use of an optimized two-tiered lock.

    2. The DRM enforces the DRI security policy for access to the graphics
       hardware by only allowing authenticated X11 clients access to
       restricted regions of memory.

    3. The DRM provides a generic DMA engine, complete with multiple
       queues and the ability to detect the need for an OpenGL context
       switch.

    4. The DRM is extensible via the use of small device-specific modules
       that rely extensively on the API exported by the DRM module.


Documentation on the DRI is available from:
    http://dri.freedesktop.org/wiki/Documentation
    http://sourceforge.net/project/showfiles.php?group_id=387
    http://dri.sourceforge.net/doc/

For specific information about kernel-level support, see:

    The Direct Rendering Manager, Kernel Support for the Direct Rendering
    Infrastructure
    http://dri.sourceforge.net/doc/drm_low_level.html

    Hardware Locking for the Direct Rendering Infrastructure
    http://dri.sourceforge.net/doc/hardware_locking_low_level.html

    A Security Analysis of the Direct Rendering Infrastructure
    http://dri.sourceforge.net/doc/security_low_level.html