diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-01-12 12:28:28 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-01-12 12:28:28 -0500 |
commit | 352ef571f5c5a9cb683fa1fb11f875d757275e40 (patch) | |
tree | 308518b6896d4d108e01fe36665e049fa53f7639 | |
parent | 1545dec46db3858bbce84c2065b579e2925706ab (diff) | |
parent | fee6c614a5c20783a5c28c2671c186c06e19c215 (diff) |
Merge tag 'drm-fixes-for-v4.15-rc8' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie:
- Nouveau: regression fix
- Tegra: regression fix
- vmwgfx: crasher + freed data leak
- i915: KASAN use after free fix, whitelist register to avoid hang fix,
GVT fixes
- vc4: irq/pm fix
* tag 'drm-fixes-for-v4.15-rc8' of git://people.freedesktop.org/~airlied/linux:
drm/i915: Don't adjust priority on an already signaled fence
drm/i915: Whitelist SLICE_COMMON_ECO_CHICKEN1 on Geminilake.
drm/vmwgfx: Potential off by one in vmw_view_add()
drm/tegra: sor: Fix hang on Tegra124 eDP
drm/vmwgfx: Don't cache framebuffer maps
drm/nouveau/disp/gf119: add missing drive vfunc ptr
drm/i915/gvt: Fix stack-out-of-bounds bug in cmd parser
drm/i915/gvt: Clear the shadow page table entry after post-sync
drm/vc4: Move IRQ enable to PM path
-rw-r--r-- | drivers/gpu/drm/i915/gvt/cmd_parser.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/gvt/gtt.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_engine_cs.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_lrc.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/tegra/sor.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/vc4/vc4_irq.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/vc4/vc4_v3d.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 41 |
14 files changed, 39 insertions, 43 deletions
diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c index 85d4c57870fb..49af94627c8a 100644 --- a/drivers/gpu/drm/i915/gvt/cmd_parser.c +++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c | |||
@@ -2777,12 +2777,12 @@ int intel_gvt_scan_and_shadow_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx) | |||
2777 | } | 2777 | } |
2778 | 2778 | ||
2779 | static struct cmd_info *find_cmd_entry_any_ring(struct intel_gvt *gvt, | 2779 | static struct cmd_info *find_cmd_entry_any_ring(struct intel_gvt *gvt, |
2780 | unsigned int opcode, int rings) | 2780 | unsigned int opcode, unsigned long rings) |
2781 | { | 2781 | { |
2782 | struct cmd_info *info = NULL; | 2782 | struct cmd_info *info = NULL; |
2783 | unsigned int ring; | 2783 | unsigned int ring; |
2784 | 2784 | ||
2785 | for_each_set_bit(ring, (unsigned long *)&rings, I915_NUM_ENGINES) { | 2785 | for_each_set_bit(ring, &rings, I915_NUM_ENGINES) { |
2786 | info = find_cmd_entry(gvt, opcode, ring); | 2786 | info = find_cmd_entry(gvt, opcode, ring); |
2787 | if (info) | 2787 | if (info) |
2788 | break; | 2788 | break; |
diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index 8e331142badb..64d67ff9bf08 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c | |||
@@ -1359,12 +1359,15 @@ static int ppgtt_handle_guest_write_page_table_bytes(void *gp, | |||
1359 | return ret; | 1359 | return ret; |
1360 | } else { | 1360 | } else { |
1361 | if (!test_bit(index, spt->post_shadow_bitmap)) { | 1361 | if (!test_bit(index, spt->post_shadow_bitmap)) { |
1362 | int type = spt->shadow_page.type; | ||
1363 | |||
1362 | ppgtt_get_shadow_entry(spt, &se, index); | 1364 | ppgtt_get_shadow_entry(spt, &se, index); |
1363 | ret = ppgtt_handle_guest_entry_removal(gpt, &se, index); | 1365 | ret = ppgtt_handle_guest_entry_removal(gpt, &se, index); |
1364 | if (ret) | 1366 | if (ret) |
1365 | return ret; | 1367 | return ret; |
1368 | ops->set_pfn(&se, vgpu->gtt.scratch_pt[type].page_mfn); | ||
1369 | ppgtt_set_shadow_entry(spt, &se, index); | ||
1366 | } | 1370 | } |
1367 | |||
1368 | ppgtt_set_post_shadow(spt, index); | 1371 | ppgtt_set_post_shadow(spt, index); |
1369 | } | 1372 | } |
1370 | 1373 | ||
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 18de6569d04a..5cfba89ed586 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -467,7 +467,7 @@ static void __fence_set_priority(struct dma_fence *fence, int prio) | |||
467 | struct drm_i915_gem_request *rq; | 467 | struct drm_i915_gem_request *rq; |
468 | struct intel_engine_cs *engine; | 468 | struct intel_engine_cs *engine; |
469 | 469 | ||
470 | if (!dma_fence_is_i915(fence)) | 470 | if (dma_fence_is_signaled(fence) || !dma_fence_is_i915(fence)) |
471 | return; | 471 | return; |
472 | 472 | ||
473 | rq = to_request(fence); | 473 | rq = to_request(fence); |
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 333f40bc03bb..7923dfd9963c 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -7027,6 +7027,8 @@ enum { | |||
7027 | #define GEN9_SLICE_COMMON_ECO_CHICKEN0 _MMIO(0x7308) | 7027 | #define GEN9_SLICE_COMMON_ECO_CHICKEN0 _MMIO(0x7308) |
7028 | #define DISABLE_PIXEL_MASK_CAMMING (1<<14) | 7028 | #define DISABLE_PIXEL_MASK_CAMMING (1<<14) |
7029 | 7029 | ||
7030 | #define GEN9_SLICE_COMMON_ECO_CHICKEN1 _MMIO(0x731c) | ||
7031 | |||
7030 | #define GEN7_L3SQCREG1 _MMIO(0xB010) | 7032 | #define GEN7_L3SQCREG1 _MMIO(0xB010) |
7031 | #define VLV_B0_WA_L3SQCREG1_VALUE 0x00D30000 | 7033 | #define VLV_B0_WA_L3SQCREG1_VALUE 0x00D30000 |
7032 | 7034 | ||
diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c index ab5bf4e2e28e..6074e04dc99f 100644 --- a/drivers/gpu/drm/i915/intel_engine_cs.c +++ b/drivers/gpu/drm/i915/intel_engine_cs.c | |||
@@ -1390,6 +1390,11 @@ static int glk_init_workarounds(struct intel_engine_cs *engine) | |||
1390 | if (ret) | 1390 | if (ret) |
1391 | return ret; | 1391 | return ret; |
1392 | 1392 | ||
1393 | /* WA #0862: Userspace has to set "Barrier Mode" to avoid hangs. */ | ||
1394 | ret = wa_ring_whitelist_reg(engine, GEN9_SLICE_COMMON_ECO_CHICKEN1); | ||
1395 | if (ret) | ||
1396 | return ret; | ||
1397 | |||
1393 | /* WaToEnableHwFixForPushConstHWBug:glk */ | 1398 | /* WaToEnableHwFixForPushConstHWBug:glk */ |
1394 | WA_SET_BIT_MASKED(COMMON_SLICE_CHICKEN2, | 1399 | WA_SET_BIT_MASKED(COMMON_SLICE_CHICKEN2, |
1395 | GEN8_SBE_DISABLE_REPLAY_BUF_OPTIMIZATION); | 1400 | GEN8_SBE_DISABLE_REPLAY_BUF_OPTIMIZATION); |
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c index d36e25607435..e71a8cd50498 100644 --- a/drivers/gpu/drm/i915/intel_lrc.c +++ b/drivers/gpu/drm/i915/intel_lrc.c | |||
@@ -974,6 +974,9 @@ static void execlists_schedule(struct drm_i915_gem_request *request, int prio) | |||
974 | 974 | ||
975 | GEM_BUG_ON(prio == I915_PRIORITY_INVALID); | 975 | GEM_BUG_ON(prio == I915_PRIORITY_INVALID); |
976 | 976 | ||
977 | if (i915_gem_request_completed(request)) | ||
978 | return; | ||
979 | |||
977 | if (prio <= READ_ONCE(request->priotree.priority)) | 980 | if (prio <= READ_ONCE(request->priotree.priority)) |
978 | return; | 981 | return; |
979 | 982 | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c index a2978a37b4f3..700fc754f28a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgf119.c | |||
@@ -174,6 +174,7 @@ gf119_sor = { | |||
174 | .links = gf119_sor_dp_links, | 174 | .links = gf119_sor_dp_links, |
175 | .power = g94_sor_dp_power, | 175 | .power = g94_sor_dp_power, |
176 | .pattern = gf119_sor_dp_pattern, | 176 | .pattern = gf119_sor_dp_pattern, |
177 | .drive = gf119_sor_dp_drive, | ||
177 | .vcpi = gf119_sor_dp_vcpi, | 178 | .vcpi = gf119_sor_dp_vcpi, |
178 | .audio = gf119_sor_dp_audio, | 179 | .audio = gf119_sor_dp_audio, |
179 | .audio_sym = gf119_sor_dp_audio_sym, | 180 | .audio_sym = gf119_sor_dp_audio_sym, |
diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c index b0a1dedac802..476079f1255f 100644 --- a/drivers/gpu/drm/tegra/sor.c +++ b/drivers/gpu/drm/tegra/sor.c | |||
@@ -2656,6 +2656,9 @@ static int tegra_sor_probe(struct platform_device *pdev) | |||
2656 | name, err); | 2656 | name, err); |
2657 | goto remove; | 2657 | goto remove; |
2658 | } | 2658 | } |
2659 | } else { | ||
2660 | /* fall back to the module clock on SOR0 (eDP/LVDS only) */ | ||
2661 | sor->clk_out = sor->clk; | ||
2659 | } | 2662 | } |
2660 | 2663 | ||
2661 | sor->clk_parent = devm_clk_get(&pdev->dev, "parent"); | 2664 | sor->clk_parent = devm_clk_get(&pdev->dev, "parent"); |
diff --git a/drivers/gpu/drm/vc4/vc4_irq.c b/drivers/gpu/drm/vc4/vc4_irq.c index 26eddbb62893..3dd62d75f531 100644 --- a/drivers/gpu/drm/vc4/vc4_irq.c +++ b/drivers/gpu/drm/vc4/vc4_irq.c | |||
@@ -209,9 +209,6 @@ vc4_irq_postinstall(struct drm_device *dev) | |||
209 | { | 209 | { |
210 | struct vc4_dev *vc4 = to_vc4_dev(dev); | 210 | struct vc4_dev *vc4 = to_vc4_dev(dev); |
211 | 211 | ||
212 | /* Undo the effects of a previous vc4_irq_uninstall. */ | ||
213 | enable_irq(dev->irq); | ||
214 | |||
215 | /* Enable both the render done and out of memory interrupts. */ | 212 | /* Enable both the render done and out of memory interrupts. */ |
216 | V3D_WRITE(V3D_INTENA, V3D_DRIVER_IRQS); | 213 | V3D_WRITE(V3D_INTENA, V3D_DRIVER_IRQS); |
217 | 214 | ||
diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c index 622cd43840b8..493f392b3a0a 100644 --- a/drivers/gpu/drm/vc4/vc4_v3d.c +++ b/drivers/gpu/drm/vc4/vc4_v3d.c | |||
@@ -327,6 +327,9 @@ static int vc4_v3d_runtime_resume(struct device *dev) | |||
327 | return ret; | 327 | return ret; |
328 | 328 | ||
329 | vc4_v3d_init_hw(vc4->dev); | 329 | vc4_v3d_init_hw(vc4->dev); |
330 | |||
331 | /* We disabled the IRQ as part of vc4_irq_uninstall in suspend. */ | ||
332 | enable_irq(vc4->dev->irq); | ||
330 | vc4_irq_postinstall(vc4->dev); | 333 | vc4_irq_postinstall(vc4->dev); |
331 | 334 | ||
332 | return 0; | 335 | return 0; |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c index 21c62a34e558..87e8af5776a3 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | |||
@@ -2731,6 +2731,8 @@ static int vmw_cmd_dx_view_define(struct vmw_private *dev_priv, | |||
2731 | } | 2731 | } |
2732 | 2732 | ||
2733 | view_type = vmw_view_cmd_to_type(header->id); | 2733 | view_type = vmw_view_cmd_to_type(header->id); |
2734 | if (view_type == vmw_view_max) | ||
2735 | return -EINVAL; | ||
2734 | cmd = container_of(header, typeof(*cmd), header); | 2736 | cmd = container_of(header, typeof(*cmd), header); |
2735 | ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, | 2737 | ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface, |
2736 | user_surface_converter, | 2738 | user_surface_converter, |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index 0545740b3724..641294aef165 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | |||
@@ -697,7 +697,6 @@ vmw_du_plane_duplicate_state(struct drm_plane *plane) | |||
697 | vps->pinned = 0; | 697 | vps->pinned = 0; |
698 | 698 | ||
699 | /* Mapping is managed by prepare_fb/cleanup_fb */ | 699 | /* Mapping is managed by prepare_fb/cleanup_fb */ |
700 | memset(&vps->guest_map, 0, sizeof(vps->guest_map)); | ||
701 | memset(&vps->host_map, 0, sizeof(vps->host_map)); | 700 | memset(&vps->host_map, 0, sizeof(vps->host_map)); |
702 | vps->cpp = 0; | 701 | vps->cpp = 0; |
703 | 702 | ||
@@ -760,11 +759,6 @@ vmw_du_plane_destroy_state(struct drm_plane *plane, | |||
760 | 759 | ||
761 | 760 | ||
762 | /* Should have been freed by cleanup_fb */ | 761 | /* Should have been freed by cleanup_fb */ |
763 | if (vps->guest_map.virtual) { | ||
764 | DRM_ERROR("Guest mapping not freed\n"); | ||
765 | ttm_bo_kunmap(&vps->guest_map); | ||
766 | } | ||
767 | |||
768 | if (vps->host_map.virtual) { | 762 | if (vps->host_map.virtual) { |
769 | DRM_ERROR("Host mapping not freed\n"); | 763 | DRM_ERROR("Host mapping not freed\n"); |
770 | ttm_bo_kunmap(&vps->host_map); | 764 | ttm_bo_kunmap(&vps->host_map); |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h index ff9c8389ff21..cd9da2dd79af 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | |||
@@ -175,7 +175,7 @@ struct vmw_plane_state { | |||
175 | int pinned; | 175 | int pinned; |
176 | 176 | ||
177 | /* For CPU Blit */ | 177 | /* For CPU Blit */ |
178 | struct ttm_bo_kmap_obj host_map, guest_map; | 178 | struct ttm_bo_kmap_obj host_map; |
179 | unsigned int cpp; | 179 | unsigned int cpp; |
180 | }; | 180 | }; |
181 | 181 | ||
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c index 90b5437fd787..b68d74888ab1 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | |||
@@ -114,7 +114,7 @@ struct vmw_screen_target_display_unit { | |||
114 | bool defined; | 114 | bool defined; |
115 | 115 | ||
116 | /* For CPU Blit */ | 116 | /* For CPU Blit */ |
117 | struct ttm_bo_kmap_obj host_map, guest_map; | 117 | struct ttm_bo_kmap_obj host_map; |
118 | unsigned int cpp; | 118 | unsigned int cpp; |
119 | }; | 119 | }; |
120 | 120 | ||
@@ -695,7 +695,8 @@ static void vmw_stdu_dmabuf_cpu_commit(struct vmw_kms_dirty *dirty) | |||
695 | s32 src_pitch, dst_pitch; | 695 | s32 src_pitch, dst_pitch; |
696 | u8 *src, *dst; | 696 | u8 *src, *dst; |
697 | bool not_used; | 697 | bool not_used; |
698 | 698 | struct ttm_bo_kmap_obj guest_map; | |
699 | int ret; | ||
699 | 700 | ||
700 | if (!dirty->num_hits) | 701 | if (!dirty->num_hits) |
701 | return; | 702 | return; |
@@ -706,6 +707,13 @@ static void vmw_stdu_dmabuf_cpu_commit(struct vmw_kms_dirty *dirty) | |||
706 | if (width == 0 || height == 0) | 707 | if (width == 0 || height == 0) |
707 | return; | 708 | return; |
708 | 709 | ||
710 | ret = ttm_bo_kmap(&ddirty->buf->base, 0, ddirty->buf->base.num_pages, | ||
711 | &guest_map); | ||
712 | if (ret) { | ||
713 | DRM_ERROR("Failed mapping framebuffer for blit: %d\n", | ||
714 | ret); | ||
715 | goto out_cleanup; | ||
716 | } | ||
709 | 717 | ||
710 | /* Assume we are blitting from Host (display_srf) to Guest (dmabuf) */ | 718 | /* Assume we are blitting from Host (display_srf) to Guest (dmabuf) */ |
711 | src_pitch = stdu->display_srf->base_size.width * stdu->cpp; | 719 | src_pitch = stdu->display_srf->base_size.width * stdu->cpp; |
@@ -713,7 +721,7 @@ static void vmw_stdu_dmabuf_cpu_commit(struct vmw_kms_dirty *dirty) | |||
713 | src += ddirty->top * src_pitch + ddirty->left * stdu->cpp; | 721 | src += ddirty->top * src_pitch + ddirty->left * stdu->cpp; |
714 | 722 | ||
715 | dst_pitch = ddirty->pitch; | 723 | dst_pitch = ddirty->pitch; |
716 | dst = ttm_kmap_obj_virtual(&stdu->guest_map, ¬_used); | 724 | dst = ttm_kmap_obj_virtual(&guest_map, ¬_used); |
717 | dst += ddirty->fb_top * dst_pitch + ddirty->fb_left * stdu->cpp; | 725 | dst += ddirty->fb_top * dst_pitch + ddirty->fb_left * stdu->cpp; |
718 | 726 | ||
719 | 727 | ||
@@ -772,6 +780,7 @@ static void vmw_stdu_dmabuf_cpu_commit(struct vmw_kms_dirty *dirty) | |||
772 | vmw_fifo_commit(dev_priv, sizeof(*cmd)); | 780 | vmw_fifo_commit(dev_priv, sizeof(*cmd)); |
773 | } | 781 | } |
774 | 782 | ||
783 | ttm_bo_kunmap(&guest_map); | ||
775 | out_cleanup: | 784 | out_cleanup: |
776 | ddirty->left = ddirty->top = ddirty->fb_left = ddirty->fb_top = S32_MAX; | 785 | ddirty->left = ddirty->top = ddirty->fb_left = ddirty->fb_top = S32_MAX; |
777 | ddirty->right = ddirty->bottom = S32_MIN; | 786 | ddirty->right = ddirty->bottom = S32_MIN; |
@@ -1109,9 +1118,6 @@ vmw_stdu_primary_plane_cleanup_fb(struct drm_plane *plane, | |||
1109 | { | 1118 | { |
1110 | struct vmw_plane_state *vps = vmw_plane_state_to_vps(old_state); | 1119 | struct vmw_plane_state *vps = vmw_plane_state_to_vps(old_state); |
1111 | 1120 | ||
1112 | if (vps->guest_map.virtual) | ||
1113 | ttm_bo_kunmap(&vps->guest_map); | ||
1114 | |||
1115 | if (vps->host_map.virtual) | 1121 | if (vps->host_map.virtual) |
1116 | ttm_bo_kunmap(&vps->host_map); | 1122 | ttm_bo_kunmap(&vps->host_map); |
1117 | 1123 | ||
@@ -1277,33 +1283,11 @@ vmw_stdu_primary_plane_prepare_fb(struct drm_plane *plane, | |||
1277 | */ | 1283 | */ |
1278 | if (vps->content_fb_type == SEPARATE_DMA && | 1284 | if (vps->content_fb_type == SEPARATE_DMA && |
1279 | !(dev_priv->capabilities & SVGA_CAP_3D)) { | 1285 | !(dev_priv->capabilities & SVGA_CAP_3D)) { |
1280 | |||
1281 | struct vmw_framebuffer_dmabuf *new_vfbd; | ||
1282 | |||
1283 | new_vfbd = vmw_framebuffer_to_vfbd(new_fb); | ||
1284 | |||
1285 | ret = ttm_bo_reserve(&new_vfbd->buffer->base, false, false, | ||
1286 | NULL); | ||
1287 | if (ret) | ||
1288 | goto out_srf_unpin; | ||
1289 | |||
1290 | ret = ttm_bo_kmap(&new_vfbd->buffer->base, 0, | ||
1291 | new_vfbd->buffer->base.num_pages, | ||
1292 | &vps->guest_map); | ||
1293 | |||
1294 | ttm_bo_unreserve(&new_vfbd->buffer->base); | ||
1295 | |||
1296 | if (ret) { | ||
1297 | DRM_ERROR("Failed to map content buffer to CPU\n"); | ||
1298 | goto out_srf_unpin; | ||
1299 | } | ||
1300 | |||
1301 | ret = ttm_bo_kmap(&vps->surf->res.backup->base, 0, | 1286 | ret = ttm_bo_kmap(&vps->surf->res.backup->base, 0, |
1302 | vps->surf->res.backup->base.num_pages, | 1287 | vps->surf->res.backup->base.num_pages, |
1303 | &vps->host_map); | 1288 | &vps->host_map); |
1304 | if (ret) { | 1289 | if (ret) { |
1305 | DRM_ERROR("Failed to map display buffer to CPU\n"); | 1290 | DRM_ERROR("Failed to map display buffer to CPU\n"); |
1306 | ttm_bo_kunmap(&vps->guest_map); | ||
1307 | goto out_srf_unpin; | 1291 | goto out_srf_unpin; |
1308 | } | 1292 | } |
1309 | 1293 | ||
@@ -1350,7 +1334,6 @@ vmw_stdu_primary_plane_atomic_update(struct drm_plane *plane, | |||
1350 | stdu->display_srf = vps->surf; | 1334 | stdu->display_srf = vps->surf; |
1351 | stdu->content_fb_type = vps->content_fb_type; | 1335 | stdu->content_fb_type = vps->content_fb_type; |
1352 | stdu->cpp = vps->cpp; | 1336 | stdu->cpp = vps->cpp; |
1353 | memcpy(&stdu->guest_map, &vps->guest_map, sizeof(vps->guest_map)); | ||
1354 | memcpy(&stdu->host_map, &vps->host_map, sizeof(vps->host_map)); | 1337 | memcpy(&stdu->host_map, &vps->host_map, sizeof(vps->host_map)); |
1355 | 1338 | ||
1356 | if (!stdu->defined) | 1339 | if (!stdu->defined) |