On Thu, Jan 12, 2017 at 03:00:20PM +0000, Tvrtko Ursulin wrote: > > On 12/01/2017 11:33, Chris Wilson wrote: > >On Wed, Jan 11, 2017 at 09:51:03PM +0000, Chris Wilson wrote: > >>In preparation for the next patch to convert to using an anonymous union > >>and leaving the excess bytes in the union uninitialised, we first need > >>to make sure we do not compare using those uninitialised bytes. We also > >>want to preserve the compactness of the code, avoiding a second call to > >>memcmp or introducing a switch, so we take advantage of using the type > >>as an encoded size (as well as a unique identifier for each type of view). > >> > >>Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > >>--- > >> drivers/gpu/drm/i915/i915_gem_gtt.h | 14 +++++++------- > >> drivers/gpu/drm/i915/i915_vma.h | 15 +++++++++------ > >> 2 files changed, 16 insertions(+), 13 deletions(-) > >> > >>diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h > >>index 3187a260e6e1..36d85599ffc9 100644 > >>--- a/drivers/gpu/drm/i915/i915_gem_gtt.h > >>+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h > >>@@ -145,12 +145,6 @@ typedef uint64_t gen8_ppgtt_pml4e_t; > >> > >> struct sg_table; > >> > >>-enum i915_ggtt_view_type { > >>- I915_GGTT_VIEW_NORMAL = 0, > >>- I915_GGTT_VIEW_ROTATED, > >>- I915_GGTT_VIEW_PARTIAL, > >>-}; > >>- > >> struct intel_rotation_info { > >> struct intel_rotation_plane_info { > >> /* tiles */ > >>@@ -184,10 +178,16 @@ static inline u64 intel_partial_get_page_offset(const struct intel_partial_info > >> return pi->offset_size >> INTEL_PARTIAL_SIZE_BITS; > >> } > >> > >>+enum i915_ggtt_view_type { > >>+ I915_GGTT_VIEW_NORMAL = 0, > >>+ I915_GGTT_VIEW_ROTATED = sizeof(struct intel_rotation_info), > >>+ I915_GGTT_VIEW_PARTIAL = sizeof(struct intel_partial_info), > > > >One alternative to packing intel_partial_info into a u64 is to use > > > >I915_GGTT_VIEW_PARTIAL = 12, /* ideal sizeof(struct intel_partial_info) */ > > > >How horrible is that? > > Really horrible, nightmare to debug. :) > > You are happy with 12 packed bytes I gather so no need for it? I'd prefer the u64, but currently baking: struct intel_partial_info { u64 offset; unsigned int size; -}; +} __packed; + +static inline void assert_intel_partial_info_is_packed(void) +{ + BUILD_BUG_ON(sizeof(struct intel_partial_info) != sizeof(u64) + sizeof(unsigned int)); +} -- Chris Wilson, Intel Open Source Technology Centre _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx