diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-11-23 18:07:14 +0300 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-11-29 14:41:33 +0300 |
commit | 24603935830b2bb2a8536ea1b68d49a9f82451fe (patch) | |
tree | 3639da31b5ef8c99f4d240a055e8264dd5a59314 | |
parent | 49d73912cbfcaa3eba109a44ee71200c12fa27ef (diff) | |
download | linux-24603935830b2bb2a8536ea1b68d49a9f82451fe.tar.xz |
drm/i915/perf: Wrap 64bit divides in do_div()
Just a couple of naked 64bit divides causing link errors on 32bit
builds, with:
ERROR: "__udivdi3" [drivers/gpu/drm/i915/i915.ko] undefined!
v2: do_div() is only u64/u32, we need a u32/u64!
v3: div_u64() == u64/u32, div64_u64() == u64/u64
Reported-by: kbuild test robot <fengguang.wu@intel.com>
Fixes: d79651522e89 ("drm/i915: Enable i915 perf stream for Haswell OA unit")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Robert Bragg <robert@sixbynine.org>
Link: http://patchwork.freedesktop.org/patch/msgid/20161123150714.24449-1-chris@chris-wilson.co.uk
Reviewed-by: Robert Bragg <robert@sixbynine.org>
-rw-r--r-- | drivers/gpu/drm/i915/i915_perf.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c index 95512824922b..14de9a4eee27 100644 --- a/drivers/gpu/drm/i915/i915_perf.c +++ b/drivers/gpu/drm/i915/i915_perf.c @@ -974,8 +974,8 @@ static void i915_oa_stream_disable(struct i915_perf_stream *stream) static u64 oa_exponent_to_ns(struct drm_i915_private *dev_priv, int exponent) { - return 1000000000ULL * (2ULL << exponent) / - dev_priv->perf.oa.timestamp_frequency; + return div_u64(1000000000ULL * (2ULL << exponent), + dev_priv->perf.oa.timestamp_frequency); } static const struct i915_perf_stream_ops i915_oa_stream_ops = { @@ -1051,16 +1051,17 @@ static int i915_oa_stream_init(struct i915_perf_stream *stream, dev_priv->perf.oa.periodic = props->oa_periodic; if (dev_priv->perf.oa.periodic) { - u64 period_ns = oa_exponent_to_ns(dev_priv, - props->oa_period_exponent); + u32 tail; dev_priv->perf.oa.period_exponent = props->oa_period_exponent; /* See comment for OA_TAIL_MARGIN_NSEC for details * about this tail_margin... */ - dev_priv->perf.oa.tail_margin = - ((OA_TAIL_MARGIN_NSEC / period_ns) + 1) * format_size; + tail = div64_u64(OA_TAIL_MARGIN_NSEC, + oa_exponent_to_ns(dev_priv, + props->oa_period_exponent)); + dev_priv->perf.oa.tail_margin = (tail + 1) * format_size; } if (stream->ctx) { |