[Intel-gfx] [PATCH v3] drm/i915/perf: Wrap 64bit divides in do_div()

Robert Bragg robert at sixbynine.org
Tue Nov 29 10:29:34 UTC 2016


On Wed, Nov 23, 2016 at 3:07 PM, Chris Wilson <chris at chris-wilson.co.uk>
wrote:

> 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 at intel.com>
> Fixes: d79651522e89 ("drm/i915: Enable i915 perf stream for Haswell OA
> unit")
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Robert Bragg <robert at sixbynine.org>
> ---
>  drivers/gpu/drm/i915/i915_perf.c | 13 +++++++------
>  1 file 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) {
> --
> 2.10.2
>
>
This looks good to me, thanks.

Reviewed-by: Robert Bragg <robert at sixbynine.org>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20161129/4de7bc11/attachment.html>


More information about the Intel-gfx mailing list