[Nouveau] [PATCH] volt: use kernel's 64-bit signed division function
Karol Herbst
karolherbst at gmail.com
Fri Sep 16 11:01:32 UTC 2016
yeah locks fine
Reviewed-by: Karol Herbst <karolherbst at gmail.com>
2016-09-16 11:09 GMT+02:00 Alexandre Courbot <acourbot at nvidia.com>:
> Doing direct 64 bit divisions in kernel code leads to references to
> undefined symbols on 32 bit architectures. Replace such divisions with
> calls to div64_s64 to make the module usable on 32 bit archs.
>
> Signed-off-by: Alexandre Courbot <acourbot at nvidia.com>
> ---
> drm/nouveau/nvkm/subdev/volt/base.c | 6 +++---
> lib/include/nvif/os.h | 1 +
> 2 files changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drm/nouveau/nvkm/subdev/volt/base.c b/drm/nouveau/nvkm/subdev/volt/base.c
> index 90d234231eed..e8569b04b55d 100644
> --- a/drm/nouveau/nvkm/subdev/volt/base.c
> +++ b/drm/nouveau/nvkm/subdev/volt/base.c
> @@ -116,9 +116,9 @@ nvkm_volt_map(struct nvkm_volt *volt, u8 id, u8 temp)
> return volt->speedo;
>
> if (ver == 0x10 || (ver == 0x20 && info.mode == 0)) {
> - result = (s64)info.arg[0] / 10;
> - result += ((s64)info.arg[1] * volt->speedo) / 10;
> - result += ((s64)info.arg[2] * volt->speedo * volt->speedo) / 100000;
> + result = div64_s64((s64)info.arg[0], 10);
> + result += div64_s64((s64)info.arg[1] * volt->speedo, 10);
> + result += div64_s64((s64)info.arg[2] * volt->speedo * volt->speedo, 100000);
> } else if (ver == 0x20) {
> switch (info.mode) {
> /* 0x0 handled above! */
> diff --git a/lib/include/nvif/os.h b/lib/include/nvif/os.h
> index b45a1862436e..2c1985d90474 100644
> --- a/lib/include/nvif/os.h
> +++ b/lib/include/nvif/os.h
> @@ -88,6 +88,7 @@ typedef dma_addr_t resource_size_t;
> )
> #define do_div(a,b) (a) = (a) / (b)
> #define div_u64(a,b) (a) / (b)
> +#define div64_s64(a,b) (a) / (b)
> #define likely(a) (a)
> #define unlikely(a) (a)
> #define BIT(a) (1UL << (a))
> --
> 2.9.3
>
More information about the Nouveau
mailing list