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>
This commit is contained in:
parent
28dfe52a6e
commit
2678d9d696
|
@ -85,20 +85,14 @@ int
|
||||||
i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
|
i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv)
|
struct drm_file *file_priv)
|
||||||
{
|
{
|
||||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
|
||||||
struct drm_i915_gem_get_aperture *args = data;
|
struct drm_i915_gem_get_aperture *args = data;
|
||||||
struct drm_i915_gem_object *obj_priv;
|
|
||||||
|
|
||||||
if (!(dev->driver->driver_features & DRIVER_GEM))
|
if (!(dev->driver->driver_features & DRIVER_GEM))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
args->aper_size = dev->gtt_total;
|
args->aper_size = dev->gtt_total;
|
||||||
args->aper_available_size = args->aper_size;
|
args->aper_available_size = (args->aper_size -
|
||||||
|
atomic_read(&dev->pin_memory));
|
||||||
list_for_each_entry(obj_priv, &dev_priv->mm.active_list, list) {
|
|
||||||
if (obj_priv->pin_count > 0)
|
|
||||||
args->aper_available_size -= obj_priv->obj->size;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue