lkml.org 
[lkml]   [2022]   [Oct]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.15 3/8] powerpc/math-emu: Remove -w build flag and fix warnings
    Date
    From: Christophe Leroy <christophe.leroy@csgroup.eu>

    [ Upstream commit 7245fc5bb7a966852d5bd7779d1f5855530b461a ]

    As reported by Nathan, the module_init() macro was not taken into
    account because the header was missing. That means spe_mathemu_init()
    was never called.

    This should have been detected by gcc at build time, but due to
    '-w' flag it went undetected.

    Removing that flag leads to many warnings hence errors.

    Fix those warnings then remove the -w flag.

    Reported-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Reviewed-by: Nathan Chancellor <nathan@kernel.org>
    Link: https://lore.kernel.org/r/2663961738a46073713786d4efeb53100ca156e7.1662134272.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/powerpc/math-emu/Makefile | 2 --
    arch/powerpc/math-emu/math.c | 18 +++++-----
    arch/powerpc/math-emu/math_efp.c | 57 +++++++++++++++++---------------
    include/math-emu/op-common.h | 3 ++
    4 files changed, 42 insertions(+), 38 deletions(-)

    diff --git a/arch/powerpc/math-emu/Makefile b/arch/powerpc/math-emu/Makefile
    index a8794032f15f..26fef2e5672e 100644
    --- a/arch/powerpc/math-emu/Makefile
    +++ b/arch/powerpc/math-emu/Makefile
    @@ -16,5 +16,3 @@ obj-$(CONFIG_SPE) += math_efp.o

    CFLAGS_fabs.o = -fno-builtin-fabs
    CFLAGS_math.o = -fno-builtin-fabs
    -
    -ccflags-y = -w
    diff --git a/arch/powerpc/math-emu/math.c b/arch/powerpc/math-emu/math.c
    index 36761bd00f38..936a9a149037 100644
    --- a/arch/powerpc/math-emu/math.c
    +++ b/arch/powerpc/math-emu/math.c
    @@ -24,9 +24,9 @@ FLOATFUNC(mtfsf);
    FLOATFUNC(mtfsfi);

    #ifdef CONFIG_MATH_EMULATION_HW_UNIMPLEMENTED
    -#undef FLOATFUNC(x)
    +#undef FLOATFUNC
    #define FLOATFUNC(x) static inline int x(void *op1, void *op2, void *op3, \
    - void *op4) { }
    + void *op4) { return 0; }
    #endif

    FLOATFUNC(fadd);
    @@ -396,28 +396,28 @@ do_mathemu(struct pt_regs *regs)

    case XCR:
    op0 = (void *)&regs->ccr;
    - op1 = (void *)((insn >> 23) & 0x7);
    + op1 = (void *)(long)((insn >> 23) & 0x7);
    op2 = (void *)&current->thread.TS_FPR((insn >> 16) & 0x1f);
    op3 = (void *)&current->thread.TS_FPR((insn >> 11) & 0x1f);
    break;

    case XCRL:
    op0 = (void *)&regs->ccr;
    - op1 = (void *)((insn >> 23) & 0x7);
    - op2 = (void *)((insn >> 18) & 0x7);
    + op1 = (void *)(long)((insn >> 23) & 0x7);
    + op2 = (void *)(long)((insn >> 18) & 0x7);
    break;

    case XCRB:
    - op0 = (void *)((insn >> 21) & 0x1f);
    + op0 = (void *)(long)((insn >> 21) & 0x1f);
    break;

    case XCRI:
    - op0 = (void *)((insn >> 23) & 0x7);
    - op1 = (void *)((insn >> 12) & 0xf);
    + op0 = (void *)(long)((insn >> 23) & 0x7);
    + op1 = (void *)(long)((insn >> 12) & 0xf);
    break;

    case XFLB:
    - op0 = (void *)((insn >> 17) & 0xff);
    + op0 = (void *)(long)((insn >> 17) & 0xff);
    op1 = (void *)&current->thread.TS_FPR((insn >> 11) & 0x1f);
    break;

    diff --git a/arch/powerpc/math-emu/math_efp.c b/arch/powerpc/math-emu/math_efp.c
    index 39b84e7452e1..47ecd5d66391 100644
    --- a/arch/powerpc/math-emu/math_efp.c
    +++ b/arch/powerpc/math-emu/math_efp.c
    @@ -218,6 +218,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    case AB:
    case XCR:
    FP_UNPACK_SP(SA, va.wp + 1);
    + fallthrough;
    case XB:
    FP_UNPACK_SP(SB, vb.wp + 1);
    break;
    @@ -226,8 +227,8 @@ int do_spe_mathemu(struct pt_regs *regs)
    break;
    }

    - pr_debug("SA: %ld %08lx %ld (%ld)\n", SA_s, SA_f, SA_e, SA_c);
    - pr_debug("SB: %ld %08lx %ld (%ld)\n", SB_s, SB_f, SB_e, SB_c);
    + pr_debug("SA: %d %08x %d (%d)\n", SA_s, SA_f, SA_e, SA_c);
    + pr_debug("SB: %d %08x %d (%d)\n", SB_s, SB_f, SB_e, SB_c);

    switch (func) {
    case EFSABS:
    @@ -278,7 +279,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    } else {
    SB_e += (func == EFSCTSF ? 31 : 32);
    FP_TO_INT_ROUND_S(vc.wp[1], SB, 32,
    - (func == EFSCTSF));
    + (func == EFSCTSF) ? 1 : 0);
    }
    goto update_regs;

    @@ -287,7 +288,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    FP_CLEAR_EXCEPTIONS;
    FP_UNPACK_DP(DB, vb.dp);

    - pr_debug("DB: %ld %08lx %08lx %ld (%ld)\n",
    + pr_debug("DB: %d %08x %08x %d (%d)\n",
    DB_s, DB_f1, DB_f0, DB_e, DB_c);

    FP_CONV(S, D, 1, 2, SR, DB);
    @@ -301,7 +302,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    FP_SET_EXCEPTION(FP_EX_INVALID);
    } else {
    FP_TO_INT_ROUND_S(vc.wp[1], SB, 32,
    - ((func & 0x3) != 0));
    + ((func & 0x3) != 0) ? 1 : 0);
    }
    goto update_regs;

    @@ -312,7 +313,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    FP_SET_EXCEPTION(FP_EX_INVALID);
    } else {
    FP_TO_INT_S(vc.wp[1], SB, 32,
    - ((func & 0x3) != 0));
    + ((func & 0x3) != 0) ? 1 : 0);
    }
    goto update_regs;

    @@ -322,7 +323,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    break;

    pack_s:
    - pr_debug("SR: %ld %08lx %ld (%ld)\n", SR_s, SR_f, SR_e, SR_c);
    + pr_debug("SR: %d %08x %d (%d)\n", SR_s, SR_f, SR_e, SR_c);

    FP_PACK_SP(vc.wp + 1, SR);
    goto update_regs;
    @@ -346,6 +347,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    case AB:
    case XCR:
    FP_UNPACK_DP(DA, va.dp);
    + fallthrough;
    case XB:
    FP_UNPACK_DP(DB, vb.dp);
    break;
    @@ -354,9 +356,9 @@ int do_spe_mathemu(struct pt_regs *regs)
    break;
    }

    - pr_debug("DA: %ld %08lx %08lx %ld (%ld)\n",
    + pr_debug("DA: %d %08x %08x %d (%d)\n",
    DA_s, DA_f1, DA_f0, DA_e, DA_c);
    - pr_debug("DB: %ld %08lx %08lx %ld (%ld)\n",
    + pr_debug("DB: %d %08x %08x %d (%d)\n",
    DB_s, DB_f1, DB_f0, DB_e, DB_c);

    switch (func) {
    @@ -408,7 +410,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    } else {
    DB_e += (func == EFDCTSF ? 31 : 32);
    FP_TO_INT_ROUND_D(vc.wp[1], DB, 32,
    - (func == EFDCTSF));
    + (func == EFDCTSF) ? 1 : 0);
    }
    goto update_regs;

    @@ -417,7 +419,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    FP_CLEAR_EXCEPTIONS;
    FP_UNPACK_SP(SB, vb.wp + 1);

    - pr_debug("SB: %ld %08lx %ld (%ld)\n",
    + pr_debug("SB: %d %08x %d (%d)\n",
    SB_s, SB_f, SB_e, SB_c);

    FP_CONV(D, S, 2, 1, DR, SB);
    @@ -431,7 +433,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    FP_SET_EXCEPTION(FP_EX_INVALID);
    } else {
    FP_TO_INT_D(vc.dp[0], DB, 64,
    - ((func & 0x1) == 0));
    + ((func & 0x1) == 0) ? 1 : 0);
    }
    goto update_regs;

    @@ -442,7 +444,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    FP_SET_EXCEPTION(FP_EX_INVALID);
    } else {
    FP_TO_INT_ROUND_D(vc.wp[1], DB, 32,
    - ((func & 0x3) != 0));
    + ((func & 0x3) != 0) ? 1 : 0);
    }
    goto update_regs;

    @@ -453,7 +455,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    FP_SET_EXCEPTION(FP_EX_INVALID);
    } else {
    FP_TO_INT_D(vc.wp[1], DB, 32,
    - ((func & 0x3) != 0));
    + ((func & 0x3) != 0) ? 1 : 0);
    }
    goto update_regs;

    @@ -463,7 +465,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    break;

    pack_d:
    - pr_debug("DR: %ld %08lx %08lx %ld (%ld)\n",
    + pr_debug("DR: %d %08x %08x %d (%d)\n",
    DR_s, DR_f1, DR_f0, DR_e, DR_c);

    FP_PACK_DP(vc.dp, DR);
    @@ -492,6 +494,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    case XCR:
    FP_UNPACK_SP(SA0, va.wp);
    FP_UNPACK_SP(SA1, va.wp + 1);
    + fallthrough;
    case XB:
    FP_UNPACK_SP(SB0, vb.wp);
    FP_UNPACK_SP(SB1, vb.wp + 1);
    @@ -502,13 +505,13 @@ int do_spe_mathemu(struct pt_regs *regs)
    break;
    }

    - pr_debug("SA0: %ld %08lx %ld (%ld)\n",
    + pr_debug("SA0: %d %08x %d (%d)\n",
    SA0_s, SA0_f, SA0_e, SA0_c);
    - pr_debug("SA1: %ld %08lx %ld (%ld)\n",
    + pr_debug("SA1: %d %08x %d (%d)\n",
    SA1_s, SA1_f, SA1_e, SA1_c);
    - pr_debug("SB0: %ld %08lx %ld (%ld)\n",
    + pr_debug("SB0: %d %08x %d (%d)\n",
    SB0_s, SB0_f, SB0_e, SB0_c);
    - pr_debug("SB1: %ld %08lx %ld (%ld)\n",
    + pr_debug("SB1: %d %08x %d (%d)\n",
    SB1_s, SB1_f, SB1_e, SB1_c);

    switch (func) {
    @@ -567,7 +570,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    } else {
    SB0_e += (func == EVFSCTSF ? 31 : 32);
    FP_TO_INT_ROUND_S(vc.wp[0], SB0, 32,
    - (func == EVFSCTSF));
    + (func == EVFSCTSF) ? 1 : 0);
    }
    if (SB1_c == FP_CLS_NAN) {
    vc.wp[1] = 0;
    @@ -575,7 +578,7 @@ int do_spe_mathemu(struct pt_regs *regs)
    } else {
    SB1_e += (func == EVFSCTSF ? 31 : 32);
    FP_TO_INT_ROUND_S(vc.wp[1], SB1, 32,
    - (func == EVFSCTSF));
    + (func == EVFSCTSF) ? 1 : 0);
    }
    goto update_regs;

    @@ -586,14 +589,14 @@ int do_spe_mathemu(struct pt_regs *regs)
    FP_SET_EXCEPTION(FP_EX_INVALID);
    } else {
    FP_TO_INT_ROUND_S(vc.wp[0], SB0, 32,
    - ((func & 0x3) != 0));
    + ((func & 0x3) != 0) ? 1 : 0);
    }
    if (SB1_c == FP_CLS_NAN) {
    vc.wp[1] = 0;
    FP_SET_EXCEPTION(FP_EX_INVALID);
    } else {
    FP_TO_INT_ROUND_S(vc.wp[1], SB1, 32,
    - ((func & 0x3) != 0));
    + ((func & 0x3) != 0) ? 1 : 0);
    }
    goto update_regs;

    @@ -604,14 +607,14 @@ int do_spe_mathemu(struct pt_regs *regs)
    FP_SET_EXCEPTION(FP_EX_INVALID);
    } else {
    FP_TO_INT_S(vc.wp[0], SB0, 32,
    - ((func & 0x3) != 0));
    + ((func & 0x3) != 0) ? 1 : 0);
    }
    if (SB1_c == FP_CLS_NAN) {
    vc.wp[1] = 0;
    FP_SET_EXCEPTION(FP_EX_INVALID);
    } else {
    FP_TO_INT_S(vc.wp[1], SB1, 32,
    - ((func & 0x3) != 0));
    + ((func & 0x3) != 0) ? 1 : 0);
    }
    goto update_regs;

    @@ -621,9 +624,9 @@ int do_spe_mathemu(struct pt_regs *regs)
    break;

    pack_vs:
    - pr_debug("SR0: %ld %08lx %ld (%ld)\n",
    + pr_debug("SR0: %d %08x %d (%d)\n",
    SR0_s, SR0_f, SR0_e, SR0_c);
    - pr_debug("SR1: %ld %08lx %ld (%ld)\n",
    + pr_debug("SR1: %d %08x %d (%d)\n",
    SR1_s, SR1_f, SR1_e, SR1_c);

    FP_PACK_SP(vc.wp, SR0);
    diff --git a/include/math-emu/op-common.h b/include/math-emu/op-common.h
    index 4b57bbba588a..8ce066c035cf 100644
    --- a/include/math-emu/op-common.h
    +++ b/include/math-emu/op-common.h
    @@ -662,12 +662,14 @@ do { \
    if (X##_e < 0) \
    { \
    FP_SET_EXCEPTION(FP_EX_INEXACT); \
    + fallthrough; \
    case FP_CLS_ZERO: \
    r = 0; \
    } \
    else if (X##_e >= rsize - (rsigned > 0 || X##_s) \
    || (!rsigned && X##_s)) \
    { /* overflow */ \
    + fallthrough; \
    case FP_CLS_NAN: \
    case FP_CLS_INF: \
    if (rsigned == 2) \
    @@ -767,6 +769,7 @@ do { \
    if (X##_e >= rsize - (rsigned > 0 || X##_s) \
    || (!rsigned && X##_s)) \
    { /* overflow */ \
    + fallthrough; \
    case FP_CLS_NAN: \
    case FP_CLS_INF: \
    if (!rsigned) \
    --
    2.35.1
    \
     
     \ /
      Last update: 2022-10-14 15:55    [W:2.524 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site