Print this page
5253 kmem_alloc/kmem_zalloc won't fail with KM_SLEEP
5254 getrbuf won't fail with KM_SLEEP


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