diff options
| author | Keith Packard <keithp@keithp.com> | 2008-11-21 01:54:54 -0500 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2008-11-24 18:28:06 -0500 |
| commit | 2678d9d6964b29ecd1975870c7a850242b29bc5c (patch) | |
| tree | bce313afee7ef1eed42c622f7cd0e142e1ca4cdf | |
| parent | 28dfe52a6e8a1495067c4331358700a170d0ee86 (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>
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 10 |
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 | |||
| 85 | i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data, | 85 | i915_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 | } |
