Commit 24603935 authored by Chris Wilson's avatar Chris Wilson

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: default avatarkbuild test robot <fengguang.wu@intel.com>
Fixes: d7965152 ("drm/i915: Enable i915 perf stream for Haswell OA unit")
Signed-off-by: default avatarChris 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.ukReviewed-by: default avatarRobert Bragg <robert@sixbynine.org>
parent 49d73912
...@@ -974,8 +974,8 @@ static void i915_oa_stream_disable(struct i915_perf_stream *stream) ...@@ -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) static u64 oa_exponent_to_ns(struct drm_i915_private *dev_priv, int exponent)
{ {
return 1000000000ULL * (2ULL << exponent) / return div_u64(1000000000ULL * (2ULL << exponent),
dev_priv->perf.oa.timestamp_frequency; dev_priv->perf.oa.timestamp_frequency);
} }
static const struct i915_perf_stream_ops i915_oa_stream_ops = { 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, ...@@ -1051,16 +1051,17 @@ static int i915_oa_stream_init(struct i915_perf_stream *stream,
dev_priv->perf.oa.periodic = props->oa_periodic; dev_priv->perf.oa.periodic = props->oa_periodic;
if (dev_priv->perf.oa.periodic) { if (dev_priv->perf.oa.periodic) {
u64 period_ns = oa_exponent_to_ns(dev_priv, u32 tail;
props->oa_period_exponent);
dev_priv->perf.oa.period_exponent = props->oa_period_exponent; dev_priv->perf.oa.period_exponent = props->oa_period_exponent;
/* See comment for OA_TAIL_MARGIN_NSEC for details /* See comment for OA_TAIL_MARGIN_NSEC for details
* about this tail_margin... * about this tail_margin...
*/ */
dev_priv->perf.oa.tail_margin = tail = div64_u64(OA_TAIL_MARGIN_NSEC,
((OA_TAIL_MARGIN_NSEC / period_ns) + 1) * format_size; oa_exponent_to_ns(dev_priv,
props->oa_period_exponent));
dev_priv->perf.oa.tail_margin = (tail + 1) * format_size;
} }
if (stream->ctx) { if (stream->ctx) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment