vmware and i915 fixes
-----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJaBRSBAAoJEAx081l5xIa+XDoQAIrNH5h8o72oDls3if5t1ZLx 8aQW7LBFXUvlG8W6hmeT63xSVkDHfLHK5/6QZ96EdSAiUY/pt7mduW54V6xAzYr8 RBtOgAiLY1KQ9p3m0CoO5c9Mids3KcoUpVZlfhdnAETekDCNoWItbRxd3h/sufmN SJi7LN3Ra1O83IFgeidREdvQlB+1zwaMrH/sxbDDmssSpUBtQon+F2P4/jZxawhO JZaw0EFWvwNMCbA2415jQrwgkvd9OZfzeaYhzJ5VZtprO6xi9xXmIFknAzrsluwO WaecwktXOfvZHVYEYpjZmeoP/BcHINGsb7luPW5ee6EznnN5lXgdKNfNtrLwwuoL MYC+dJcM5203IWEm96iQwfvWCojLsBM7KbH+/1oUWcI/ipoOngebgpdlUUc5q8bd GkPXXJZVxYL14NiJr6iWx045Hk+KgmeDbEtsHZjiDM6t2PG0V1Q3+iI+oU4AUgc7 Px3IOTqIOZJsS2WGDIAAmWyON3RKnZPc7ewargAJyQaR/GthoPKt/TIhMSz74Lxj gn8SV0yih+ZDxrUGApkpJZfTNaIYCKbAz/yyP0GWNQIE4XpPPTggpwQgEUn/yzP+ owNn34Iw9QPLBp1sIXglCebaYHmG54PcWjr86I1wY9nIYB/UFwF7AMjRl47Z/4+M AaDrzESPuVs3MIWSYt4e =MO5T -----END PGP SIGNATURE----- Merge tag 'drm-fixes-for-v4.14-rc9' of git://people.freedesktop.org/~airlied/linux Pull drm fixes from Dave Airlie: "Last few patches to wrap up. Two i915 fixes that are on their way to stable, one vmware black screen bug, and one const patch that I was going to drop, but it was clearly a pretty safe one liner" * tag 'drm-fixes-for-v4.14-rc9' of git://people.freedesktop.org/~airlied/linux: drm/i915: Deconstruct struct sgt_dma initialiser drm/i915: Reject unknown syncobj flags drm/vmwgfx: Fix Ubuntu 17.10 Wayland black screen issue drm/vmwgfx: constify vmw_fence_ops
This commit is contained in:
commit
3e81277a6e
|
@ -2094,6 +2094,11 @@ get_fence_array(struct drm_i915_gem_execbuffer2 *args,
|
|||
goto err;
|
||||
}
|
||||
|
||||
if (fence.flags & __I915_EXEC_FENCE_UNKNOWN_FLAGS) {
|
||||
err = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
|
||||
syncobj = drm_syncobj_find(file, fence.handle);
|
||||
if (!syncobj) {
|
||||
DRM_DEBUG("Invalid syncobj handle provided\n");
|
||||
|
@ -2101,6 +2106,9 @@ get_fence_array(struct drm_i915_gem_execbuffer2 *args,
|
|||
goto err;
|
||||
}
|
||||
|
||||
BUILD_BUG_ON(~(ARCH_KMALLOC_MINALIGN - 1) &
|
||||
~__I915_EXEC_FENCE_UNKNOWN_FLAGS);
|
||||
|
||||
fences[n] = ptr_pack_bits(syncobj, fence.flags, 2);
|
||||
}
|
||||
|
||||
|
|
|
@ -832,10 +832,14 @@ static void gen8_ppgtt_clear_4lvl(struct i915_address_space *vm,
|
|||
}
|
||||
}
|
||||
|
||||
struct sgt_dma {
|
||||
static inline struct sgt_dma {
|
||||
struct scatterlist *sg;
|
||||
dma_addr_t dma, max;
|
||||
};
|
||||
} sgt_dma(struct i915_vma *vma) {
|
||||
struct scatterlist *sg = vma->pages->sgl;
|
||||
dma_addr_t addr = sg_dma_address(sg);
|
||||
return (struct sgt_dma) { sg, addr, addr + sg->length };
|
||||
}
|
||||
|
||||
struct gen8_insert_pte {
|
||||
u16 pml4e;
|
||||
|
@ -916,11 +920,7 @@ static void gen8_ppgtt_insert_3lvl(struct i915_address_space *vm,
|
|||
u32 unused)
|
||||
{
|
||||
struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
|
||||
struct sgt_dma iter = {
|
||||
.sg = vma->pages->sgl,
|
||||
.dma = sg_dma_address(iter.sg),
|
||||
.max = iter.dma + iter.sg->length,
|
||||
};
|
||||
struct sgt_dma iter = sgt_dma(vma);
|
||||
struct gen8_insert_pte idx = gen8_insert_pte(vma->node.start);
|
||||
|
||||
gen8_ppgtt_insert_pte_entries(ppgtt, &ppgtt->pdp, &iter, &idx,
|
||||
|
@ -933,11 +933,7 @@ static void gen8_ppgtt_insert_4lvl(struct i915_address_space *vm,
|
|||
u32 unused)
|
||||
{
|
||||
struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
|
||||
struct sgt_dma iter = {
|
||||
.sg = vma->pages->sgl,
|
||||
.dma = sg_dma_address(iter.sg),
|
||||
.max = iter.dma + iter.sg->length,
|
||||
};
|
||||
struct sgt_dma iter = sgt_dma(vma);
|
||||
struct i915_page_directory_pointer **pdps = ppgtt->pml4.pdps;
|
||||
struct gen8_insert_pte idx = gen8_insert_pte(vma->node.start);
|
||||
|
||||
|
@ -1632,13 +1628,10 @@ static void gen6_ppgtt_insert_entries(struct i915_address_space *vm,
|
|||
unsigned act_pt = first_entry / GEN6_PTES;
|
||||
unsigned act_pte = first_entry % GEN6_PTES;
|
||||
const u32 pte_encode = vm->pte_encode(0, cache_level, flags);
|
||||
struct sgt_dma iter;
|
||||
struct sgt_dma iter = sgt_dma(vma);
|
||||
gen6_pte_t *vaddr;
|
||||
|
||||
vaddr = kmap_atomic_px(ppgtt->pd.page_table[act_pt]);
|
||||
iter.sg = vma->pages->sgl;
|
||||
iter.dma = sg_dma_address(iter.sg);
|
||||
iter.max = iter.dma + iter.sg->length;
|
||||
do {
|
||||
vaddr[act_pte] = pte_encode | GEN6_PTE_ADDR_ENCODE(iter.dma);
|
||||
|
||||
|
|
|
@ -721,7 +721,7 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
|
|||
* allocation taken by fbdev
|
||||
*/
|
||||
if (!(dev_priv->capabilities & SVGA_CAP_3D))
|
||||
mem_size *= 2;
|
||||
mem_size *= 3;
|
||||
|
||||
dev_priv->max_mob_pages = mem_size * 1024 / PAGE_SIZE;
|
||||
dev_priv->prim_bb_mem =
|
||||
|
|
|
@ -224,7 +224,7 @@ static long vmw_fence_wait(struct dma_fence *f, bool intr, signed long timeout)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static struct dma_fence_ops vmw_fence_ops = {
|
||||
static const struct dma_fence_ops vmw_fence_ops = {
|
||||
.get_driver_name = vmw_fence_get_driver_name,
|
||||
.get_timeline_name = vmw_fence_get_timeline_name,
|
||||
.enable_signaling = vmw_fence_enable_signaling,
|
||||
|
|
|
@ -829,6 +829,7 @@ struct drm_i915_gem_exec_fence {
|
|||
|
||||
#define I915_EXEC_FENCE_WAIT (1<<0)
|
||||
#define I915_EXEC_FENCE_SIGNAL (1<<1)
|
||||
#define __I915_EXEC_FENCE_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SIGNAL << 1))
|
||||
__u32 flags;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue