[PATCH] [ARC] PR 88409: miscompilation due to missing cc clobber in longlong.h macros

2019-04-02 Thread Vineet Gupta
simple test such as below was failing.

| void main(int argc, char *argv[])
| {
|size_t total_time = 115424;   // expected 115.424
|double secs = (double)total_time/(double)1000;
|printf("%s %d %lf\n", "secs", total_time, secs);  // prints 113.504
|printf("%d\n", (size_t)secs);
| }

The printf eventually called into glibc stdlib/divrem.c:__mpn_divrem()
which uses the __arc__ specific inline asm macros from longlong.h which
were causing miscompilation.

include/
2019-03-28  Vineet Gupta 

PR 89877

* longlong.h [__arc__] (add_ss): Add cc clobber
(sub_ddmmss): Likewise.

Signed-off-by: Vineet Gupta 
---
 include/ChangeLog  | 7 +++
 include/longlong.h | 6 --
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/include/ChangeLog b/include/ChangeLog
index be08141deeb9..96d967d10a52 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,10 @@
+2019-03-28  Vineet Gupta 
+
+   PR 89877
+
+   * longlong.h [__arc__] (add_ss): Add cc clobber
+   (sub_ddmmss): Likewise.
+
 2019-02-11  Philippe Waroquiers  
 
* splay-tree.h (splay_tree_delete_key_fn): Update comment.
diff --git a/include/longlong.h b/include/longlong.h
index 3dd8dc3aa80c..1f0ce4204255 100644
--- a/include/longlong.h
+++ b/include/longlong.h
@@ -199,7 +199,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, 
UDItype);
   : "%r" ((USItype) (ah)), \
 "rICal" ((USItype) (bh)),  \
 "%r" ((USItype) (al)), \
-"rICal" ((USItype) (bl)))
+"rICal" ((USItype) (bl))   \
+  : "cc")
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
   __asm__ ("sub.f  %1, %4, %5\n\tsbc   %0, %2, %3" \
   : "=r" ((USItype) (sh)), \
@@ -207,7 +208,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, 
UDItype);
   : "r" ((USItype) (ah)),  \
 "rICal" ((USItype) (bh)),  \
 "r" ((USItype) (al)),  \
-"rICal" ((USItype) (bl)))
+"rICal" ((USItype) (bl))   \
+  : "cc")
 
 #define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)
 #ifdef __ARC_NORM__
-- 
2.7.4


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


[PATCH] ARC: [hsdk] Make it easier to add PAE40 region to DTB

2019-04-02 Thread Vineet Gupta
1. Bump top level address-cells/size-cells nodes to 2 (to ensure all
   down stream addresses are 64-bits, unless explicitly specified
   otherwise (in "soc" bus with all peripherals)

2. "memory" also specified with address/size 2

3. Add a commented reference for PAE40 region beyond 4GB physical
   address space

Signed-off-by: Vineet Gupta 
---
 arch/arc/boot/dts/hsdk.dts | 13 +++--
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/arch/arc/boot/dts/hsdk.dts b/arch/arc/boot/dts/hsdk.dts
index 69bc1c9e8e50..7425bb0f2d1b 100644
--- a/arch/arc/boot/dts/hsdk.dts
+++ b/arch/arc/boot/dts/hsdk.dts
@@ -18,8 +18,8 @@
model = "snps,hsdk";
compatible = "snps,hsdk";
 
-   #address-cells = <1>;
-   #size-cells = <1>;
+   #address-cells = <2>;
+   #size-cells = <2>;
 
chosen {
bootargs = "earlycon=uart8250,mmio32,0xf0005000,115200n8 
console=ttyS0,115200n8 debug print-fatal-signals=1";
@@ -105,7 +105,7 @@
#size-cells = <1>;
interrupt-parent = <&idu_intc>;
 
-   ranges = <0x 0xf000 0x1000>;
+   ranges = <0x 0x0 0xf000 0x1000>;
 
cgu_rst: reset-controller@8a0 {
compatible = "snps,hsdk-reset";
@@ -269,9 +269,10 @@
};
 
memory@8000 {
-   #address-cells = <1>;
-   #size-cells = <1>;
+   #address-cells = <2>;
+   #size-cells = <2>;
device_type = "memory";
-   reg = <0x8000 0x4000>;  /* 1 GiB */
+   reg = <0x0 0x8000 0x0 0x4000>;  /* 1 GB lowmem */
+   /* 0x1 0x 0x0 0x4000>; 1 GB highmem */
};
 };
-- 
2.7.4


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


[PATCH v3 0/5] simple sort swap function improvements

2019-04-02 Thread Andrey Abramov
This is the logical continuation of the "lib/sort & lib/list_sort:
faster and smaller" series by George Spelvin (added to linux-next
recently).

Since Spectre mitigations have made indirect function calls more
expensive, and the previous patch series implements the default
simple byte copies without them, an "optimized" custom swap
function is now a waste of time as well as code.

Patches 1 to 4 replace trivial swap functions with the built-in
(which is now much faster) and are grouped by subsystem.
Being pure code deletion patches, they are sure to bring joy to
Linus's heart.

Having reviewed all call sites, only three non-trivial swap
functions remain:  arch/x86/kernel/unwind_orc.c,
kernel/jump_label.c and lib/extable.c.

Patch #5 removes size argument from the swap function because:
1) It wasn't used.
2) Custom swap function knows what kind of objects it swaps,
so it already knows their sizes.

v1->v2: Only commit messages have changed to better explain
the purpose of commits. (Thanks to George Spelvin and Greg KH)
v2->v3: Patch #5 now completely removes the size argument

Andrey Abramov (5):
  arch/arc: unwind.c: replace swap function with built-in one
  powerpc: module_[32|64].c: replace swap function with built-in one
  ocfs2: dir,refcounttree,xattr: replace swap functions with built-in
one
  ubifs: find.c: replace swap function with built-in one
  Lib: sort.h: remove the size argument from the swap function

 arch/arc/kernel/unwind.c| 20 ++--
 arch/powerpc/kernel/module_32.c | 17 +
 arch/powerpc/kernel/module_64.c | 17 +
 arch/x86/kernel/unwind_orc.c|  2 +-
 fs/ocfs2/dir.c  | 13 +
 fs/ocfs2/refcounttree.c | 13 +++--
 fs/ocfs2/xattr.c| 15 +++
 fs/ubifs/find.c |  9 +
 include/linux/sort.h|  2 +-
 kernel/jump_label.c |  2 +-
 lib/extable.c   |  2 +-
 lib/sort.c  |  7 +++
 12 files changed, 19 insertions(+), 100 deletions(-)

-- 
2.21.0



___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


[PATCH v3 1/5] arch/arc: unwind.c: replace swap function with built-in one

2019-04-02 Thread Andrey Abramov
Replace swap_eh_frame_hdr_table_entries with built-in one, because
swap_eh_frame_hdr_table_entries does a simple byte to byte swap.

Since Spectre mitigations have made indirect function calls more
expensive, and the default simple byte copies swap is implemented
without them, an "optimized" custom swap function is now
a waste of time as well as code.

Signed-off-by: Andrey Abramov 
Reviewed by: George Spelvin 
Acked-by: Vineet Gupta 
---
v2->v3: nothing changed

 arch/arc/kernel/unwind.c | 20 ++--
 1 file changed, 2 insertions(+), 18 deletions(-)

diff --git a/arch/arc/kernel/unwind.c b/arch/arc/kernel/unwind.c
index 271e9fafa479..7610fe84afea 100644
--- a/arch/arc/kernel/unwind.c
+++ b/arch/arc/kernel/unwind.c
@@ -248,20 +248,6 @@ static int cmp_eh_frame_hdr_table_entries(const void *p1, 
const void *p2)
return (e1->start > e2->start) - (e1->start < e2->start);
 }
 
-static void swap_eh_frame_hdr_table_entries(void *p1, void *p2, int size)
-{
-   struct eh_frame_hdr_table_entry *e1 = p1;
-   struct eh_frame_hdr_table_entry *e2 = p2;
-   unsigned long v;
-
-   v = e1->start;
-   e1->start = e2->start;
-   e2->start = v;
-   v = e1->fde;
-   e1->fde = e2->fde;
-   e2->fde = v;
-}
-
 static void init_unwind_hdr(struct unwind_table *table,
void *(*alloc) (unsigned long))
 {
@@ -354,10 +340,8 @@ static void init_unwind_hdr(struct unwind_table *table,
}
WARN_ON(n != header->fde_count);
 
-   sort(header->table,
-n,
-sizeof(*header->table),
-cmp_eh_frame_hdr_table_entries, swap_eh_frame_hdr_table_entries);
+   sort(header->table, n,
+sizeof(*header->table), cmp_eh_frame_hdr_table_entries, NULL);
 
table->hdrsz = hdrSize;
smp_wmb();
-- 
2.21.0



___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


[PATCH v3 2/5] powerpc: module_[32|64].c: replace swap function with built-in one

2019-04-02 Thread Andrey Abramov
Replace relaswap with built-in one, because relaswap
does a simple byte to byte swap.

Since Spectre mitigations have made indirect function calls more
expensive, and the default simple byte copies swap is implemented
without them, an "optimized" custom swap function is now
a waste of time as well as code.

Signed-off-by: Andrey Abramov 
Reviewed by: George Spelvin 
Acked-by: Michael Ellerman  (powerpc)
---
v2->v3: nothing changed

 arch/powerpc/kernel/module_32.c | 17 +
 arch/powerpc/kernel/module_64.c | 17 +
 2 files changed, 2 insertions(+), 32 deletions(-)

diff --git a/arch/powerpc/kernel/module_32.c b/arch/powerpc/kernel/module_32.c
index 88d83771f462..c311e8575d10 100644
--- a/arch/powerpc/kernel/module_32.c
+++ b/arch/powerpc/kernel/module_32.c
@@ -79,21 +79,6 @@ static int relacmp(const void *_x, const void *_y)
return 0;
 }
 
-static void relaswap(void *_x, void *_y, int size)
-{
-   uint32_t *x, *y, tmp;
-   int i;
-
-   y = (uint32_t *)_x;
-   x = (uint32_t *)_y;
-
-   for (i = 0; i < sizeof(Elf32_Rela) / sizeof(uint32_t); i++) {
-   tmp = x[i];
-   x[i] = y[i];
-   y[i] = tmp;
-   }
-}
-
 /* Get the potential trampolines size required of the init and
non-init sections */
 static unsigned long get_plt_size(const Elf32_Ehdr *hdr,
@@ -130,7 +115,7 @@ static unsigned long get_plt_size(const Elf32_Ehdr *hdr,
 */
sort((void *)hdr + sechdrs[i].sh_offset,
 sechdrs[i].sh_size / sizeof(Elf32_Rela),
-sizeof(Elf32_Rela), relacmp, relaswap);
+sizeof(Elf32_Rela), relacmp, NULL);
 
ret += count_relocs((void *)hdr
 + sechdrs[i].sh_offset,
diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c
index 8661eea78503..0c833d7f36f1 100644
--- a/arch/powerpc/kernel/module_64.c
+++ b/arch/powerpc/kernel/module_64.c
@@ -231,21 +231,6 @@ static int relacmp(const void *_x, const void *_y)
return 0;
 }
 
-static void relaswap(void *_x, void *_y, int size)
-{
-   uint64_t *x, *y, tmp;
-   int i;
-
-   y = (uint64_t *)_x;
-   x = (uint64_t *)_y;
-
-   for (i = 0; i < sizeof(Elf64_Rela) / sizeof(uint64_t); i++) {
-   tmp = x[i];
-   x[i] = y[i];
-   y[i] = tmp;
-   }
-}
-
 /* Get size of potential trampolines required. */
 static unsigned long get_stubs_size(const Elf64_Ehdr *hdr,
const Elf64_Shdr *sechdrs)
@@ -269,7 +254,7 @@ static unsigned long get_stubs_size(const Elf64_Ehdr *hdr,
 */
sort((void *)sechdrs[i].sh_addr,
 sechdrs[i].sh_size / sizeof(Elf64_Rela),
-sizeof(Elf64_Rela), relacmp, relaswap);
+sizeof(Elf64_Rela), relacmp, NULL);
 
relocs += count_relocs((void *)sechdrs[i].sh_addr,
   sechdrs[i].sh_size
-- 
2.21.0



___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


[PATCH v3 3/5] ocfs2: dir, refcounttree, xattr: replace swap functions with built-in one

2019-04-02 Thread Andrey Abramov
Replace dx_leaf_sort_swap, swap_refcount_rec and swap_xe functions
with built-in one, because they do only a simple byte to byte swap.

Since Spectre mitigations have made indirect function calls more
expensive, and the default simple byte copies swap is implemented
without them, an "optimized" custom swap function is now
a waste of time as well as code.

Signed-off-by: Andrey Abramov 
Reviewed by: George Spelvin 
---
v2->v3: nothing changed

 fs/ocfs2/dir.c  | 13 +
 fs/ocfs2/refcounttree.c | 13 +++--
 fs/ocfs2/xattr.c| 15 +++
 3 files changed, 7 insertions(+), 34 deletions(-)

diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c
index c121abbdfc7d..4b86b181df0a 100644
--- a/fs/ocfs2/dir.c
+++ b/fs/ocfs2/dir.c
@@ -3529,16 +3529,6 @@ static int dx_leaf_sort_cmp(const void *a, const void *b)
return 0;
 }
 
-static void dx_leaf_sort_swap(void *a, void *b, int size)
-{
-   struct ocfs2_dx_entry *entry1 = a;
-   struct ocfs2_dx_entry *entry2 = b;
-
-   BUG_ON(size != sizeof(*entry1));
-
-   swap(*entry1, *entry2);
-}
-
 static int ocfs2_dx_leaf_same_major(struct ocfs2_dx_leaf *dx_leaf)
 {
struct ocfs2_dx_entry_list *dl_list = &dx_leaf->dl_list;
@@ -3799,8 +3789,7 @@ static int ocfs2_dx_dir_rebalance(struct ocfs2_super 
*osb, struct inode *dir,
 * This block is changing anyway, so we can sort it in place.
 */
sort(dx_leaf->dl_list.de_entries, num_used,
-sizeof(struct ocfs2_dx_entry), dx_leaf_sort_cmp,
-dx_leaf_sort_swap);
+sizeof(struct ocfs2_dx_entry), dx_leaf_sort_cmp, NULL);
 
ocfs2_journal_dirty(handle, dx_leaf_bh);
 
diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c
index 1dc9a08e8bdc..7bbc94d23a0c 100644
--- a/fs/ocfs2/refcounttree.c
+++ b/fs/ocfs2/refcounttree.c
@@ -1400,13 +1400,6 @@ static int cmp_refcount_rec_by_cpos(const void *a, const 
void *b)
return 0;
 }
 
-static void swap_refcount_rec(void *a, void *b, int size)
-{
-   struct ocfs2_refcount_rec *l = a, *r = b;
-
-   swap(*l, *r);
-}
-
 /*
  * The refcount cpos are ordered by their 64bit cpos,
  * But we will use the low 32 bit to be the e_cpos in the b-tree.
@@ -1482,7 +1475,7 @@ static int ocfs2_divide_leaf_refcount_block(struct 
buffer_head *ref_leaf_bh,
 */
sort(&rl->rl_recs, le16_to_cpu(rl->rl_used),
 sizeof(struct ocfs2_refcount_rec),
-cmp_refcount_rec_by_low_cpos, swap_refcount_rec);
+cmp_refcount_rec_by_low_cpos, NULL);
 
ret = ocfs2_find_refcount_split_pos(rl, &cpos, &split_index);
if (ret) {
@@ -1507,11 +1500,11 @@ static int ocfs2_divide_leaf_refcount_block(struct 
buffer_head *ref_leaf_bh,
 
sort(&rl->rl_recs, le16_to_cpu(rl->rl_used),
 sizeof(struct ocfs2_refcount_rec),
-cmp_refcount_rec_by_cpos, swap_refcount_rec);
+cmp_refcount_rec_by_cpos, NULL);
 
sort(&new_rl->rl_recs, le16_to_cpu(new_rl->rl_used),
 sizeof(struct ocfs2_refcount_rec),
-cmp_refcount_rec_by_cpos, swap_refcount_rec);
+cmp_refcount_rec_by_cpos, NULL);
 
*split_cpos = cpos;
return 0;
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index 3a24ce3deb01..b3e6f42baf78 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -4175,15 +4175,6 @@ static int cmp_xe(const void *a, const void *b)
return 0;
 }
 
-static void swap_xe(void *a, void *b, int size)
-{
-   struct ocfs2_xattr_entry *l = a, *r = b, tmp;
-
-   tmp = *l;
-   memcpy(l, r, sizeof(struct ocfs2_xattr_entry));
-   memcpy(r, &tmp, sizeof(struct ocfs2_xattr_entry));
-}
-
 /*
  * When the ocfs2_xattr_block is filled up, new bucket will be created
  * and all the xattr entries will be moved to the new bucket.
@@ -4249,7 +4240,7 @@ static void ocfs2_cp_xattr_block_to_bucket(struct inode 
*inode,
trace_ocfs2_cp_xattr_block_to_bucket_end(offset, size, off_change);
 
sort(target + offset, count, sizeof(struct ocfs2_xattr_entry),
-cmp_xe, swap_xe);
+cmp_xe, NULL);
 }
 
 /*
@@ -,7 +4435,7 @@ static int ocfs2_defrag_xattr_bucket(struct inode *inode,
 */
sort(entries, le16_to_cpu(xh->xh_count),
 sizeof(struct ocfs2_xattr_entry),
-cmp_xe_offset, swap_xe);
+cmp_xe_offset, NULL);
 
/* Move all name/values to the end of the bucket. */
xe = xh->xh_entries;
@@ -4486,7 +4477,7 @@ static int ocfs2_defrag_xattr_bucket(struct inode *inode,
/* sort the entries by their name_hash. */
sort(entries, le16_to_cpu(xh->xh_count),
 sizeof(struct ocfs2_xattr_entry),
-cmp_xe, swap_xe);
+cmp_xe, NULL);
 
buf = bucket_buf;
for (i = 0; i < bucket->bu_blocks; i++, buf += blocksize)
-- 
2.21.0



___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://

[PATCH v3 4/5] ubifs: find.c: replace swap function with built-in one

2019-04-02 Thread Andrey Abramov
Replace swap_dirty_idx function with built-in one,
because swap_dirty_idx does only a simple byte to byte swap.

Since Spectre mitigations have made indirect function calls more
expensive, and the default simple byte copies swap is implemented
without them, an "optimized" custom swap function is now
a waste of time as well as code.

Signed-off-by: Andrey Abramov 
Reviewed by: George Spelvin 
---
v2->v3: nothing changed

 fs/ubifs/find.c | 9 +
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/fs/ubifs/find.c b/fs/ubifs/find.c
index f9646835b026..5deaae7fcead 100644
--- a/fs/ubifs/find.c
+++ b/fs/ubifs/find.c
@@ -747,12 +747,6 @@ static int cmp_dirty_idx(const struct ubifs_lprops **a,
return lpa->dirty + lpa->free - lpb->dirty - lpb->free;
 }
 
-static void swap_dirty_idx(struct ubifs_lprops **a, struct ubifs_lprops **b,
-  int size)
-{
-   swap(*a, *b);
-}
-
 /**
  * ubifs_save_dirty_idx_lnums - save an array of the most dirty index LEB nos.
  * @c: the UBIFS file-system description object
@@ -772,8 +766,7 @@ int ubifs_save_dirty_idx_lnums(struct ubifs_info *c)
   sizeof(void *) * c->dirty_idx.cnt);
/* Sort it so that the dirtiest is now at the end */
sort(c->dirty_idx.arr, c->dirty_idx.cnt, sizeof(void *),
-(int (*)(const void *, const void *))cmp_dirty_idx,
-(void (*)(void *, void *, int))swap_dirty_idx);
+(int (*)(const void *, const void *))cmp_dirty_idx, NULL);
dbg_find("found %d dirty index LEBs", c->dirty_idx.cnt);
if (c->dirty_idx.cnt)
dbg_find("dirtiest index LEB is %d with dirty %d and free %d",
-- 
2.21.0



___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


[PATCH v3 5/5] Lib: sort.h: remove the size argument from the swap function

2019-04-02 Thread Andrey Abramov
Removes size argument from the swap function because:
1) It wasn't used.
2) Custom swap function knows what kind of objects it swaps,
so it already knows their sizes.

Signed-off-by: Andrey Abramov 
Reviewed by: George Spelvin 
---
 arch/x86/kernel/unwind_orc.c | 2 +-
 include/linux/sort.h | 2 +-
 kernel/jump_label.c  | 2 +-
 lib/extable.c| 2 +-
 lib/sort.c   | 7 +++
 5 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/arch/x86/kernel/unwind_orc.c b/arch/x86/kernel/unwind_orc.c
index 89be1be1790c..dc410b567189 100644
--- a/arch/x86/kernel/unwind_orc.c
+++ b/arch/x86/kernel/unwind_orc.c
@@ -176,7 +176,7 @@ static struct orc_entry *orc_find(unsigned long ip)
return orc_ftrace_find(ip);
 }
 
-static void orc_sort_swap(void *_a, void *_b, int size)
+static void orc_sort_swap(void *_a, void *_b)
 {
struct orc_entry *orc_a, *orc_b;
struct orc_entry orc_tmp;
diff --git a/include/linux/sort.h b/include/linux/sort.h
index 2b99a5dd073d..13bb4635b5f1 100644
--- a/include/linux/sort.h
+++ b/include/linux/sort.h
@@ -6,6 +6,6 @@
 
 void sort(void *base, size_t num, size_t size,
  int (*cmp)(const void *, const void *),
- void (*swap)(void *, void *, int));
+ void (*swap)(void *, void *));
 
 #endif
diff --git a/kernel/jump_label.c b/kernel/jump_label.c
index bad96b476eb6..6b1187b8a060 100644
--- a/kernel/jump_label.c
+++ b/kernel/jump_label.c
@@ -45,7 +45,7 @@ static int jump_label_cmp(const void *a, const void *b)
return 0;
 }
 
-static void jump_label_swap(void *a, void *b, int size)
+static void jump_label_swap(void *a, void *b)
 {
long delta = (unsigned long)a - (unsigned long)b;
struct jump_entry *jea = a;
diff --git a/lib/extable.c b/lib/extable.c
index f54996fdd0b8..0515a94538ca 100644
--- a/lib/extable.c
+++ b/lib/extable.c
@@ -28,7 +28,7 @@ static inline unsigned long ex_to_insn(const struct 
exception_table_entry *x)
 #ifndef ARCH_HAS_RELATIVE_EXTABLE
 #define swap_exNULL
 #else
-static void swap_ex(void *a, void *b, int size)
+static void swap_ex(void *a, void *b)
 {
struct exception_table_entry *x = a, *y = b, tmp;
int delta = b - a;
diff --git a/lib/sort.c b/lib/sort.c
index 50855ea8c262..8704750e6bde 100644
--- a/lib/sort.c
+++ b/lib/sort.c
@@ -114,7 +114,7 @@ static void swap_bytes(void *a, void *b, size_t n)
} while (n);
 }
 
-typedef void (*swap_func_t)(void *a, void *b, int size);
+typedef void (*swap_func_t)(void *a, void *b);
 
 /*
  * The values are arbitrary as long as they can't be confused with
@@ -138,7 +138,7 @@ static void do_swap(void *a, void *b, size_t size, 
swap_func_t swap_func)
else if (swap_func == SWAP_BYTES)
swap_bytes(a, b, size);
else
-   swap_func(a, b, (int)size);
+   swap_func(a, b);
 }
 
 /**
@@ -186,8 +186,7 @@ static size_t parent(size_t i, unsigned int lsbit, size_t 
size)
  * it less suitable for kernel use.
  */
 void sort(void *base, size_t num, size_t size,
- int (*cmp_func)(const void *, const void *),
- void (*swap_func)(void *, void *, int size))
+ int (*cmp_func)(const void *, const void *), swap_func_t swap_func)
 {
/* pre-scale counters for performance */
size_t n = num * size, a = (num/2) * size;
-- 
2.21.0



___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc