Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux

Pull i915 drm fixes from Dave Airlie:
"These should be the last two fixes for i915, one is for a fence leak
killing X on some older GPUs, and one is a late regression partial
revert for an swiotlb/xen/i915 interaction, Konrad has promised to
figure out the proper answer, and this patch is the best thing to do
at this stage to avoid regressing"

* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
drm/i915: make compact dma scatter lists creation work with SWIOTLB backend.
drm/i915: Restore fences after resume and GPU resets

+20 -20
+2
drivers/gpu/drm/i915/i915_drv.h
··· 1697 1697 struct dma_buf *i915_gem_prime_export(struct drm_device *dev, 1698 1698 struct drm_gem_object *gem_obj, int flags); 1699 1699 1700 + void i915_gem_restore_fences(struct drm_device *dev); 1701 + 1700 1702 /* i915_gem_context.c */ 1701 1703 void i915_gem_context_init(struct drm_device *dev); 1702 1704 void i915_gem_context_fini(struct drm_device *dev);
+17 -20
drivers/gpu/drm/i915/i915_gem.c
··· 1801 1801 gfp |= __GFP_NORETRY | __GFP_NOWARN | __GFP_NO_KSWAPD; 1802 1802 gfp &= ~(__GFP_IO | __GFP_WAIT); 1803 1803 } 1804 - 1804 + #ifdef CONFIG_SWIOTLB 1805 + if (swiotlb_nr_tbl()) { 1806 + st->nents++; 1807 + sg_set_page(sg, page, PAGE_SIZE, 0); 1808 + sg = sg_next(sg); 1809 + continue; 1810 + } 1811 + #endif 1805 1812 if (!i || page_to_pfn(page) != last_pfn + 1) { 1806 1813 if (i) 1807 1814 sg = sg_next(sg); ··· 1819 1812 } 1820 1813 last_pfn = page_to_pfn(page); 1821 1814 } 1822 - 1823 - sg_mark_end(sg); 1815 + #ifdef CONFIG_SWIOTLB 1816 + if (!swiotlb_nr_tbl()) 1817 + #endif 1818 + sg_mark_end(sg); 1824 1819 obj->pages = st; 1825 1820 1826 1821 if (i915_gem_object_needs_bit17_swizzle(obj)) ··· 2126 2117 } 2127 2118 } 2128 2119 2129 - static void i915_gem_reset_fences(struct drm_device *dev) 2120 + void i915_gem_restore_fences(struct drm_device *dev) 2130 2121 { 2131 2122 struct drm_i915_private *dev_priv = dev->dev_private; 2132 2123 int i; 2133 2124 2134 2125 for (i = 0; i < dev_priv->num_fence_regs; i++) { 2135 2126 struct drm_i915_fence_reg *reg = &dev_priv->fence_regs[i]; 2136 - 2137 - if (reg->obj) 2138 - i915_gem_object_fence_lost(reg->obj); 2139 - 2140 - i915_gem_write_fence(dev, i, NULL); 2141 - 2142 - reg->pin_count = 0; 2143 - reg->obj = NULL; 2144 - INIT_LIST_HEAD(&reg->lru_list); 2127 + i915_gem_write_fence(dev, i, reg->obj); 2145 2128 } 2146 - 2147 - INIT_LIST_HEAD(&dev_priv->mm.fence_list); 2148 2129 } 2149 2130 2150 2131 void i915_gem_reset(struct drm_device *dev) ··· 2157 2158 obj->base.read_domains &= ~I915_GEM_GPU_DOMAINS; 2158 2159 } 2159 2160 2160 - /* The fence registers are invalidated so clear them out */ 2161 - i915_gem_reset_fences(dev); 2161 + i915_gem_restore_fences(dev); 2162 2162 } 2163 2163 2164 2164 /** ··· 3863 3865 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 3864 3866 i915_gem_evict_everything(dev); 3865 3867 3866 - i915_gem_reset_fences(dev); 3867 - 3868 3868 /* Hack! Don't let anybody do execbuf while we don't control the chip. 3869 3869 * We need to replace this with a semaphore, or something. 3870 3870 * And not confound mm.suspended! ··· 4189 4193 dev_priv->num_fence_regs = 8; 4190 4194 4191 4195 /* Initialize fence registers to zero */ 4192 - i915_gem_reset_fences(dev); 4196 + INIT_LIST_HEAD(&dev_priv->mm.fence_list); 4197 + i915_gem_restore_fences(dev); 4193 4198 4194 4199 i915_gem_detect_bit_6_swizzle(dev); 4195 4200 init_waitqueue_head(&dev_priv->pending_flip_queue);
+1
drivers/gpu/drm/i915/i915_suspend.c
··· 384 384 385 385 mutex_lock(&dev->struct_mutex); 386 386 387 + i915_gem_restore_fences(dev); 387 388 i915_restore_display(dev); 388 389 389 390 if (!drm_core_check_feature(dev, DRIVER_MODESET)) {