linux/drivers/gpu/drm/i915
Michał Winiarski a5f0edf63b drm/i915: Avoid writing relocs with addresses in non-canonical form
According to PRM, some parts of HW require the addresses to be in
a canonical form, where bits [63:48] == [47]. Let's convert addresses to
canonical form prior to relocating and return converted offsets to
userspace. We also need to make sure that userspace is using addresses
in canonical form in case of softpin.

v2: Whitespace fixup, gen8_canonical_addr description (Chris, Ville)
v3: Rebase on top of softpin, fix a hole in relocate_entry,
    s/expect/require (Chris)
v4: Handle softpin in validate_exec_list (Chris)
v5: Convert back to canonical form at copy_to_user time (Chris)
v6: Don't use struct exec_object2 in place of exec_object
v7: Use sign_extend64 for converting to canonical form (Joonas),
    reject non-canonical and non-page-aligned offset for softpin (Chris)
v8: Convert back to non-canonical form in a function,
    split the test for EXEC_OBJECT_PINNED (Chris)
v9: s/canonial/canonical, drop accidental double newline (Chris)

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Michel Thierry <michel.thierry@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1451409892-13708-1-git-send-email-michal.winiarski@intel.com
Testcase: igt/gem_bad_reloc/negative-reloc-blt
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92699
Cc: drm-intel-fixes@lists.freedesktop.org
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
(cherry picked from commit 934acce3c0)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2016-01-13 10:41:58 +02:00
..
dvo_ch7xxx.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ch7017.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ivch.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ns2501.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_sil164.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_tfp410.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo.h drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
i915_cmd_parser.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
i915_debugfs.c drm/i915/debugfs: add a separate debugfs file for VBT 2015-12-16 11:30:24 +02:00
i915_dma.c drm/i915: add support for checking if we hold an RPM reference 2015-12-17 15:59:44 +02:00
i915_drv.c drm/i915: add support for checking if we hold an RPM reference 2015-12-17 15:59:44 +02:00
i915_drv.h drm/i915: Update DRIVER_DATE to 20151218 2015-12-18 20:26:17 +01:00
i915_gem_batch_pool.c
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: Only set gem object L3 cache level for IVB devices 2015-12-10 11:07:30 +01:00
i915_gem_debug.c
i915_gem_dmabuf.c
i915_gem_evict.c drm/i915: Add soft-pinning API for execbuffer 2015-12-09 10:20:17 +00:00
i915_gem_execbuffer.c drm/i915: Avoid writing relocs with addresses in non-canonical form 2016-01-13 10:41:58 +02:00
i915_gem_fence.c Linux 4.4-rc4 2015-12-08 11:04:26 +10:00
i915_gem_gtt.c drm/i915: Move Braswell stop_machine GGTT insertion workaround 2015-12-22 14:00:52 +02:00
i915_gem_gtt.h drm/i915: eliminate 'temp' in gen8_for_each_{pdd, pdpe, pml4e} macros 2015-12-10 09:36:42 +01:00
i915_gem_render_state.c drm/i915: mark GEM object pages dirty when mapped & written by the CPU 2015-12-11 18:11:53 +01:00
i915_gem_render_state.h
i915_gem_shrinker.c drm/i915: Fix kerneldoc for i915_gem_shrink_all 2015-10-13 16:21:03 +03:00
i915_gem_stolen.c drm/i915: Set the map-and-fenceable flag for preallocated objects 2015-12-17 16:59:24 +01:00
i915_gem_tiling.c drm/i915: get runtime PM reference around GEM set_tiling IOCTL 2015-11-17 18:43:30 +02:00
i915_gem_userptr.c Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2015-11-10 09:33:06 -08:00
i915_gem.c drm/i915: Only spin whilst waiting on the current request 2015-12-18 17:11:56 +01:00
i915_gpu_error.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
i915_guc_reg.h drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
i915_guc_submission.c drm/i915: mark GEM object pages dirty when mapped & written by the CPU 2015-12-11 18:11:53 +01:00
i915_ioc32.c
i915_irq.c drm/i915: add support for checking if we hold an RPM reference 2015-12-17 15:59:44 +02:00
i915_params.c Linux 4.4-rc2 2015-11-23 09:04:05 +01:00
i915_reg.h drm/i915: dual link pipe selection for bxt 2015-12-11 17:28:24 +01:00
i915_suspend.c drm/i915: Separate cherryview from valleyview 2015-12-10 11:07:24 +01:00
i915_sysfs.c drm/i915: Separate cherryview from valleyview 2015-12-10 11:07:24 +01:00
i915_trace_points.c
i915_trace.h drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
i915_vgpu.c drm/i915: Turn __raw_i915_read8() & co. in to inline functions 2015-10-26 16:28:04 +02:00
i915_vgpu.h drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_acpi.c drm/i915: Drop unnecessary #include <linux/vga_switcheroo.h> 2015-10-13 10:18:38 +02:00
intel_atomic_plane.c drm/i915: Wait for object idle without locks in atomic_commit, v2. 2015-11-02 15:50:31 +01:00
intel_atomic.c drm/i915: Calculate watermark related members in the crtc_state, v4. 2015-12-07 10:56:08 +01:00
intel_audio.c Add get_eld audio component for i915/HD-audio 2015-12-11 19:28:27 +01:00
intel_bios.c drm/i915/bios: reduce indent in parse_general_features 2015-12-16 18:02:05 +02:00
intel_bios.h drm/i915: move drmP.h include to i915_drv.h 2015-12-16 18:01:15 +02:00
intel_crt.c drm/i915: Disable FDI after the CRT port on LPT-H 2015-12-08 16:30:21 +02:00
intel_csr.c drm/i915/kbl: Fix DMC load on Kabylake. 2015-12-09 07:52:39 -08:00
intel_ddi.c Add get_eld audio component for i915/HD-audio 2015-12-11 19:28:27 +01:00
intel_display.c drm/i915: Disable primary plane if we fail to reconstruct BIOS fb (v2) 2015-12-17 08:16:43 -08:00
intel_dp_link_training.c drm/i915: Make intel_dp_source_supports_hbr2() take an intel_dp pointer 2015-11-05 15:14:56 +02:00
intel_dp_mst.c drm/i915: start adding dp mst audio 2015-12-10 10:00:46 +01:00
intel_dp.c drm/i915: prefer for_each_intel_* macros for iteration 2015-12-16 14:35:25 +02:00
intel_drv.h drm/i915: add support for checking RPM atomic sections 2015-12-17 16:37:43 +02:00
intel_dsi_panel_vbt.c
intel_dsi_pll.c drm/i915: Separate cherryview from valleyview 2015-12-10 11:07:24 +01:00
intel_dsi.c drm/i915: dual link pipe selection for bxt 2015-12-11 17:28:24 +01:00
intel_dsi.h drm/i915: fix potential dangling else problems in for_each_ macros 2015-11-25 09:29:32 +01:00
intel_dvo.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_fbc.c drm/i915: only recompress FBC after flushing a drawing operation 2015-12-03 11:38:11 -02:00
intel_fbdev.c drm/i915: Pin the ifbdev for the info->system_base GGTT mmapping 2015-12-17 16:59:24 +01:00
intel_fifo_underrun.c drm/i915: Introduce bdw_{update,enable,disable}_pipe_irq() 2015-11-26 18:55:39 +02:00
intel_frontbuffer.c
intel_guc_fwif.h drm/i915/guc: Add GuC css header parser 2015-10-21 14:31:34 +02:00
intel_guc_loader.c Linux 4.4-rc2 2015-11-23 09:04:05 +01:00
intel_guc.h drm/i915/guc: Clean up locks in GuC 2015-12-03 15:11:54 +01:00
intel_hdmi.c drm/i915: mdelay(10) considered harmful 2015-12-17 16:59:24 +01:00
intel_hotplug.c drm/i915: Separate cherryview from valleyview 2015-12-10 11:07:24 +01:00
intel_i2c.c drm/i915: Separate cherryview from valleyview 2015-12-10 11:07:24 +01:00
intel_lrc.c drm/i915: mark GEM object pages dirty when mapped & written by the CPU 2015-12-11 18:11:53 +01:00
intel_lrc.h Revert "drm/i915: Extend LRC pinning to cover GPU context writeback" 2015-12-04 17:34:40 +01:00
intel_lvds.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_mocs.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_mocs.h
intel_modes.c
intel_opregion.c drm/i915/opregion: handle VBT sizes bigger than 6 KB 2015-12-17 11:40:57 +02:00
intel_overlay.c drm/i915: Wait for object idle without locks in atomic_commit, v2. 2015-11-02 15:50:31 +01:00
intel_panel.c drm/i915/backlight: prefer dev_priv over dev pointer 2015-12-18 11:37:44 +02:00
intel_pm.c drm/i915: add support for checking RPM atomic sections 2015-12-17 16:37:43 +02:00
intel_psr.c drm/i915: PSR also doesn't have link_entry_time on SKL. 2015-12-11 16:32:56 -08:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h
intel_ringbuffer.c drm/i915/skl: Default to noncoherent access up to F0 2015-12-18 19:55:03 +02:00
intel_ringbuffer.h drm/i915: intel_ring_initialized() must be simple and inline 2015-12-10 14:14:36 +01:00
intel_runtime_pm.c drm/i915: don't enable autosuspend on platforms without RPM support 2015-12-18 15:52:31 +02:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_sideband.c
intel_sprite.c Add get_eld audio component for i915/HD-audio 2015-12-11 19:28:27 +01:00
intel_tv.c
intel_uncore.c drm/i915: use assert_rpm_wakelock_held instead of opencoding it 2015-12-17 15:59:44 +02:00
Kconfig drm/i915: Serialise updates to GGTT with access through GGTT on Braswell 2015-11-17 17:36:01 +01:00
Makefile drm/i915: Move generic link training code to a separate file 2015-11-05 15:14:56 +02:00