Alexandre Courbot
2016-Sep-16 09:09 UTC
[Nouveau] [PATCH] volt: use kernel's 64-bit signed division function
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
Karol Herbst
2016-Sep-16 11:01 UTC
[Nouveau] [PATCH] volt: use kernel's 64-bit signed division function
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 >
Apparently Analagous Threads
- [PATCH v4 20/37] volt: add coefficients
- [RESEND 08/15] drm/nouveau/nvkm/subdev/volt/gk20a: Demote kerneldoc abuses
- [PATCH 04/20] drm/nouveau/nvkm/subdev/volt/gk20a: Demote kerneldoc abuses
- [RESEND PATCH nouveau 3/3] volt: add support for GK20A
- [PATCH v4 20/37] volt: add coefficients