Skip to content

Commit

Permalink
powerpc: module_[32|64].c: replace swap function with built-in one
Browse files Browse the repository at this point in the history
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 <st5pub@yandex.ru>
Reviewed-by: George Spelvin <lkml@sdf.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/994931554238042@iva8-b333b7f98ab0.qloud-c.yandex.net
  • Loading branch information
Andrey Abramov authored and Michael Ellerman committed May 11, 2020
1 parent 2f62870 commit bac7ca7
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 32 deletions.
17 changes: 1 addition & 16 deletions arch/powerpc/kernel/module_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,21 +67,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,
Expand Down Expand Up @@ -118,7 +103,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,
Expand Down
17 changes: 1 addition & 16 deletions arch/powerpc/kernel/module_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -226,21 +226,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)
Expand All @@ -264,7 +249,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
Expand Down

0 comments on commit bac7ca7

Please sign in to comment.