aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2008-11-21 01:54:54 -0500
committerDave Airlie <airlied@redhat.com>2008-11-24 18:28:06 -0500
commit2678d9d6964b29ecd1975870c7a850242b29bc5c (patch)
treebce313afee7ef1eed42c622f7cd0e142e1ca4cdf /drivers/gpu
parent28dfe52a6e8a1495067c4331358700a170d0ee86 (diff)
drm/i915: Subtract total pinned bytes from available aperture size
The old code was wandering through the active list looking for pinned buffers; there may be other pinned buffers around. Fortunately, we keep a count of the total amount of pinned memory and can use that instead. Signed-off-by: Keith Packard <keithp@keithp.com> Signed-off-by: Eric Anholt <eric@anholt.net> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index edc805afde05..6e4c6dd50659 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -85,20 +85,14 @@ int
85i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data, 85i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
86 struct drm_file *file_priv) 86 struct drm_file *file_priv)
87{ 87{
88 drm_i915_private_t *dev_priv = dev->dev_private;
89 struct drm_i915_gem_get_aperture *args = data; 88 struct drm_i915_gem_get_aperture *args = data;
90 struct drm_i915_gem_object *obj_priv;
91 89
92 if (!(dev->driver->driver_features & DRIVER_GEM)) 90 if (!(dev->driver->driver_features & DRIVER_GEM))
93 return -ENODEV; 91 return -ENODEV;
94 92
95 args->aper_size = dev->gtt_total; 93 args->aper_size = dev->gtt_total;
96 args->aper_available_size = args->aper_size; 94 args->aper_available_size = (args->aper_size -
97 95 atomic_read(&dev->pin_memory));
98 list_for_each_entry(obj_priv, &dev_priv->mm.active_list, list) {
99 if (obj_priv->pin_count > 0)
100 args->aper_available_size -= obj_priv->obj->size;
101 }
102 96
103 return 0; 97 return 0;
104} 98}