OSDN Git Service

intel: Create a new drm_intel_bo offset64 field.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 13 Jan 2014 22:14:36 +0000 (14:14 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 20 Jan 2014 18:58:15 +0000 (10:58 -0800)
commitedf17dbdaa525fe3a9abbbfafa768c556cfd7af2
treeadd03522798900453e62a21d6a61f85197f3ef59
parent02f93c21e6e1c3dad9d99349989daa84a8c0b5fb
intel: Create a new drm_intel_bo offset64 field.

The existing 'offset' field is unfortunately typed as 'unsigned long',
which is unfortunately only 4 bytes with a 32-bit userspace.

Traditionally, the hardware has only supported 32-bit virtual addresses,
so even though the kernel uses a __u64, the value would always fit.

However, Broadwell supports 48-bit addressing.  So with a 64-bit kernel,
the card virtual address may be too large to fit in the 'offset' field.

Ideally, we would change the type of 'offset' to be a uint64_t---but
this would break the libdrm ABI.  Instead, we create a new 'offset64'
field to hold the full 64-bit value from the kernel, and store the
32-bit truncation in the existing 'offset' field, for compatibility.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
intel/intel_bufmgr.h
intel/intel_bufmgr_gem.c