Rev 5354 | Rev 6084 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5354 | Rev 5367 | ||
---|---|---|---|
Line 218... | Line 218... | ||
218 | } |
218 | } |
Line 219... | Line 219... | ||
219 | 219 | ||
220 | void *i915_gem_object_alloc(struct drm_device *dev) |
220 | void *i915_gem_object_alloc(struct drm_device *dev) |
221 | { |
221 | { |
222 | struct drm_i915_private *dev_priv = dev->dev_private; |
222 | struct drm_i915_private *dev_priv = dev->dev_private; |
223 | return kmalloc(sizeof(struct drm_i915_gem_object), 0); |
223 | return kzalloc(sizeof(struct drm_i915_gem_object), 0); |
Line 224... | Line 224... | ||
224 | } |
224 | } |
225 | 225 | ||
226 | void i915_gem_object_free(struct drm_i915_gem_object *obj) |
226 | void i915_gem_object_free(struct drm_i915_gem_object *obj) |
Line 1478... | Line 1478... | ||
1478 | 1478 | ||
1479 | unpin: |
1479 | unpin: |
Line 1480... | Line 1480... | ||
1480 | i915_gem_object_unpin_pages(obj); |
1480 | i915_gem_object_unpin_pages(obj); |
Line 1481... | Line 1481... | ||
1481 | 1481 | ||
1482 | 1482 | ||
1483 | *offset = mem; |
1483 | *offset = (uint32_t)mem; |
1484 | 1484 | ||
Line 1644... | Line 1644... | ||
1644 | return -ENOMEM; |
1644 | return -ENOMEM; |
Line 1645... | Line 1645... | ||
1645 | 1645 | ||
1646 | page_count = obj->base.size / PAGE_SIZE; |
1646 | page_count = obj->base.size / PAGE_SIZE; |
1647 | if (sg_alloc_table(st, page_count, GFP_KERNEL)) { |
1647 | if (sg_alloc_table(st, page_count, GFP_KERNEL)) { |
1648 | kfree(st); |
- | |
1649 | FAIL(); |
1648 | kfree(st); |
1650 | return -ENOMEM; |
1649 | return -ENOMEM; |
Line 1651... | Line 1650... | ||
1651 | } |
1650 | } |
1652 | 1651 | ||
Line 1660... | Line 1659... | ||
1660 | for (i = 0; i < page_count; i++) { |
1659 | for (i = 0; i < page_count; i++) { |
1661 | page = shmem_read_mapping_page_gfp(obj->base.filp, i, gfp); |
1660 | page = shmem_read_mapping_page_gfp(obj->base.filp, i, gfp); |
1662 | if (IS_ERR(page)) { |
1661 | if (IS_ERR(page)) { |
1663 | dbgprintf("%s invalid page %p\n", __FUNCTION__, page); |
1662 | dbgprintf("%s invalid page %p\n", __FUNCTION__, page); |
1664 | goto err_pages; |
1663 | goto err_pages; |
1665 | - | ||
1666 | } |
1664 | } |
1667 | #ifdef CONFIG_SWIOTLB |
1665 | #ifdef CONFIG_SWIOTLB |
1668 | if (swiotlb_nr_tbl()) { |
1666 | if (swiotlb_nr_tbl()) { |
1669 | st->nents++; |
1667 | st->nents++; |
1670 | sg_set_page(sg, page, PAGE_SIZE, 0); |
1668 | sg_set_page(sg, page, PAGE_SIZE, 0); |
Line 1686... | Line 1684... | ||
1686 | if (!swiotlb_nr_tbl()) |
1684 | if (!swiotlb_nr_tbl()) |
1687 | #endif |
1685 | #endif |
1688 | sg_mark_end(sg); |
1686 | sg_mark_end(sg); |
1689 | obj->pages = st; |
1687 | obj->pages = st; |
Line -... | Line 1688... | ||
- | 1688 | ||
- | 1689 | ||
- | 1690 | if (obj->tiling_mode != I915_TILING_NONE && |
|
- | 1691 | dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES) |
|
- | 1692 | i915_gem_object_pin_pages(obj); |
|
1690 | 1693 | ||
Line 1691... | Line 1694... | ||
1691 | return 0; |
1694 | return 0; |
1692 | 1695 | ||
1693 | err_pages: |
1696 | err_pages: |
1694 | sg_mark_end(sg); |
1697 | sg_mark_end(sg); |
1695 | for_each_sg_page(st->sgl, &sg_iter, st->nents, 0) |
1698 | for_each_sg_page(st->sgl, &sg_iter, st->nents, 0) |
1696 | page_cache_release(sg_page_iter_page(&sg_iter)); |
1699 | page_cache_release(sg_page_iter_page(&sg_iter)); |
1697 | sg_free_table(st); |
1700 | sg_free_table(st); |
1698 | kfree(st); |
1701 | kfree(st); |
1699 | FAIL(); |
1702 | |
Line 1700... | Line 1703... | ||
1700 | return PTR_ERR(page); |
1703 | return PTR_ERR(page); |
1701 | } |
1704 | } |
Line 2509... | Line 2512... | ||
2509 | int i915_vma_unbind(struct i915_vma *vma) |
2512 | int i915_vma_unbind(struct i915_vma *vma) |
2510 | { |
2513 | { |
2511 | struct drm_i915_gem_object *obj = vma->obj; |
2514 | struct drm_i915_gem_object *obj = vma->obj; |
2512 | struct drm_i915_private *dev_priv = obj->base.dev->dev_private; |
2515 | struct drm_i915_private *dev_priv = obj->base.dev->dev_private; |
2513 | int ret; |
2516 | int ret; |
2514 | - | ||
2515 | if(obj == get_fb_obj()) |
2517 | if(obj == get_fb_obj()) |
- | 2518 | { |
|
- | 2519 | WARN(1,"attempt to unbind fb object\n"); |
|
2516 | return 0; |
2520 | return 0; |
- | 2521 | }; |
|
Line 2517... | Line 2522... | ||
2517 | 2522 | ||
2518 | if (list_empty(&vma->vma_link)) |
2523 | if (list_empty(&vma->vma_link)) |
Line 2519... | Line 2524... | ||
2519 | return 0; |
2524 | return 0; |