2436 DRM_DEVICE;
2437
2438 if (dev->driver->use_gem != 1)
2439 return ENODEV;
2440
2441 return i915_gem_ring_throttle(dev, fpriv);
2442 }
2443
2444 static int
2445 i915_gem_object_get_page_list(struct drm_gem_object *obj)
2446 {
2447 struct drm_i915_gem_object *obj_priv = obj->driver_private;
2448 caddr_t va;
2449 long i;
2450
2451 if (obj_priv->page_list)
2452 return 0;
2453 pgcnt_t np = btop(obj->size);
2454
2455 obj_priv->page_list = kmem_zalloc(np * sizeof(caddr_t), KM_SLEEP);
2456 if (obj_priv->page_list == NULL) {
2457 DRM_ERROR("Faled to allocate page list\n");
2458 return ENOMEM;
2459 }
2460
2461 for (i = 0, va = obj->kaddr; i < np; i++, va += PAGESIZE) {
2462 obj_priv->page_list[i] = va;
2463 }
2464 return 0;
2465 }
2466
2467
2468 int i915_gem_init_object(struct drm_gem_object *obj)
2469 {
2470 struct drm_i915_gem_object *obj_priv;
2471
2472 obj_priv = drm_calloc(1, sizeof(*obj_priv), DRM_MEM_DRIVER);
2473 if (obj_priv == NULL)
2474 return ENOMEM;
2475
2476 /*
2477 * We've just allocated pages from the kernel,
2478 * so they've just been written by the CPU with
2479 * zeros. They'll need to be clflushed before we
|
2436 DRM_DEVICE;
2437
2438 if (dev->driver->use_gem != 1)
2439 return ENODEV;
2440
2441 return i915_gem_ring_throttle(dev, fpriv);
2442 }
2443
2444 static int
2445 i915_gem_object_get_page_list(struct drm_gem_object *obj)
2446 {
2447 struct drm_i915_gem_object *obj_priv = obj->driver_private;
2448 caddr_t va;
2449 long i;
2450
2451 if (obj_priv->page_list)
2452 return 0;
2453 pgcnt_t np = btop(obj->size);
2454
2455 obj_priv->page_list = kmem_zalloc(np * sizeof(caddr_t), KM_SLEEP);
2456
2457 for (i = 0, va = obj->kaddr; i < np; i++, va += PAGESIZE) {
2458 obj_priv->page_list[i] = va;
2459 }
2460 return 0;
2461 }
2462
2463
2464 int i915_gem_init_object(struct drm_gem_object *obj)
2465 {
2466 struct drm_i915_gem_object *obj_priv;
2467
2468 obj_priv = drm_calloc(1, sizeof(*obj_priv), DRM_MEM_DRIVER);
2469 if (obj_priv == NULL)
2470 return ENOMEM;
2471
2472 /*
2473 * We've just allocated pages from the kernel,
2474 * so they've just been written by the CPU with
2475 * zeros. They'll need to be clflushed before we
|