Message ID | 20200330141943.31696-1-yuehaibing@huawei.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [-next] libnvdimm/region: Fix build error | expand |
On Mon, Mar 30, 2020 at 7:23 AM YueHaibing <yuehaibing@huawei.com> wrote: > > On CONFIG_PPC32=y build fails: > > drivers/nvdimm/region_devs.c:1034:14: note: in expansion of macro ‘do_div’ > remainder = do_div(per_mapping, mappings); > ^~~~~~ > In file included from ./arch/powerpc/include/generated/asm/div64.h:1:0, > from ./include/linux/kernel.h:18, > from ./include/asm-generic/bug.h:19, > from ./arch/powerpc/include/asm/bug.h:109, > from ./include/linux/bug.h:5, > from ./include/linux/scatterlist.h:7, > from drivers/nvdimm/region_devs.c:5: > ./include/asm-generic/div64.h:243:22: error: passing argument 1 of ‘__div64_32’ from incompatible pointer type [-Werror=incompatible-pointer-types] > __rem = __div64_32(&(n), __base); \ > > Use div_u64 instead of do_div to fix this. > > Fixes: 2522afb86a8c ("libnvdimm/region: Introduce an 'align' attribute") > Signed-off-by: YueHaibing <yuehaibing@huawei.com> > --- > drivers/nvdimm/region_devs.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c > index bf239e783940..2291f0649d27 100644 > --- a/drivers/nvdimm/region_devs.c > +++ b/drivers/nvdimm/region_devs.c > @@ -564,7 +564,7 @@ static ssize_t align_store(struct device *dev, > * space for the namespace. > */ > dpa = val; > - remainder = do_div(dpa, nd_region->ndr_mappings); > + remainder = div_u64(dpa, nd_region->ndr_mappings); This is not an equivalent conversion. dpa = div_u64_rem(val, nd_region->ndr_mappings, &remainder); > if (!is_power_of_2(dpa) || dpa < PAGE_SIZE > || val > region_size(nd_region) || remainder) > return -EINVAL; > @@ -1031,7 +1031,7 @@ static unsigned long default_align(struct nd_region *nd_region) > > mappings = max_t(u16, 1, nd_region->ndr_mappings); > per_mapping = align; > - remainder = do_div(per_mapping, mappings); > + remainder = div_u64(per_mapping, mappings); Same problem here.
diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c index bf239e783940..2291f0649d27 100644 --- a/drivers/nvdimm/region_devs.c +++ b/drivers/nvdimm/region_devs.c @@ -564,7 +564,7 @@ static ssize_t align_store(struct device *dev, * space for the namespace. */ dpa = val; - remainder = do_div(dpa, nd_region->ndr_mappings); + remainder = div_u64(dpa, nd_region->ndr_mappings); if (!is_power_of_2(dpa) || dpa < PAGE_SIZE || val > region_size(nd_region) || remainder) return -EINVAL; @@ -1031,7 +1031,7 @@ static unsigned long default_align(struct nd_region *nd_region) mappings = max_t(u16, 1, nd_region->ndr_mappings); per_mapping = align; - remainder = do_div(per_mapping, mappings); + remainder = div_u64(per_mapping, mappings); if (remainder) align *= mappings;
On CONFIG_PPC32=y build fails: drivers/nvdimm/region_devs.c:1034:14: note: in expansion of macro ‘do_div’ remainder = do_div(per_mapping, mappings); ^~~~~~ In file included from ./arch/powerpc/include/generated/asm/div64.h:1:0, from ./include/linux/kernel.h:18, from ./include/asm-generic/bug.h:19, from ./arch/powerpc/include/asm/bug.h:109, from ./include/linux/bug.h:5, from ./include/linux/scatterlist.h:7, from drivers/nvdimm/region_devs.c:5: ./include/asm-generic/div64.h:243:22: error: passing argument 1 of ‘__div64_32’ from incompatible pointer type [-Werror=incompatible-pointer-types] __rem = __div64_32(&(n), __base); \ Use div_u64 instead of do_div to fix this. Fixes: 2522afb86a8c ("libnvdimm/region: Introduce an 'align' attribute") Signed-off-by: YueHaibing <yuehaibing@huawei.com> --- drivers/nvdimm/region_devs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)