lkml.org 
[lkml]   [2018]   [Nov]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.18 004/171] powerpc/mm: fix always true/false warning in slice.c
    Date
    4.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Christophe Leroy <christophe.leroy@c-s.fr>

    [ Upstream commit 37e9c674e7e6f445e12cb1151017bd4bacdd1e2d ]

    This patch fixes the following warnings (obtained with make W=1).

    arch/powerpc/mm/slice.c: In function 'slice_range_to_mask':
    arch/powerpc/mm/slice.c:73:12: error: comparison is always true due to limited range of data type [-Werror=type-limits]
    if (start < SLICE_LOW_TOP) {
    ^
    arch/powerpc/mm/slice.c:81:20: error: comparison is always false due to limited range of data type [-Werror=type-limits]
    if ((start + len) > SLICE_LOW_TOP) {
    ^
    arch/powerpc/mm/slice.c: In function 'slice_mask_for_free':
    arch/powerpc/mm/slice.c:136:17: error: comparison is always true due to limited range of data type [-Werror=type-limits]
    if (high_limit <= SLICE_LOW_TOP)
    ^
    arch/powerpc/mm/slice.c: In function 'slice_check_range_fits':
    arch/powerpc/mm/slice.c:185:12: error: comparison is always true due to limited range of data type [-Werror=type-limits]
    if (start < SLICE_LOW_TOP) {
    ^
    arch/powerpc/mm/slice.c:195:39: error: comparison is always false due to limited range of data type [-Werror=type-limits]
    if (SLICE_NUM_HIGH && ((start + len) > SLICE_LOW_TOP)) {
    ^
    arch/powerpc/mm/slice.c: In function 'slice_scan_available':
    arch/powerpc/mm/slice.c:306:11: error: comparison is always true due to limited range of data type [-Werror=type-limits]
    if (addr < SLICE_LOW_TOP) {
    ^
    arch/powerpc/mm/slice.c: In function 'get_slice_psize':
    arch/powerpc/mm/slice.c:709:11: error: comparison is always true due to limited range of data type [-Werror=type-limits]
    if (addr < SLICE_LOW_TOP) {
    ^

    Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/powerpc/mm/slice.c | 21 ++++++++++++++-------
    1 file changed, 14 insertions(+), 7 deletions(-)

    --- a/arch/powerpc/mm/slice.c
    +++ b/arch/powerpc/mm/slice.c
    @@ -61,6 +61,13 @@ static void slice_print_mask(const char

    #endif

    +static inline bool slice_addr_is_low(unsigned long addr)
    +{
    + u64 tmp = (u64)addr;
    +
    + return tmp < SLICE_LOW_TOP;
    +}
    +
    static void slice_range_to_mask(unsigned long start, unsigned long len,
    struct slice_mask *ret)
    {
    @@ -70,7 +77,7 @@ static void slice_range_to_mask(unsigned
    if (SLICE_NUM_HIGH)
    bitmap_zero(ret->high_slices, SLICE_NUM_HIGH);

    - if (start < SLICE_LOW_TOP) {
    + if (slice_addr_is_low(start)) {
    unsigned long mend = min(end,
    (unsigned long)(SLICE_LOW_TOP - 1));

    @@ -78,7 +85,7 @@ static void slice_range_to_mask(unsigned
    - (1u << GET_LOW_SLICE_INDEX(start));
    }

    - if ((start + len) > SLICE_LOW_TOP) {
    + if (SLICE_NUM_HIGH && !slice_addr_is_low(end)) {
    unsigned long start_index = GET_HIGH_SLICE_INDEX(start);
    unsigned long align_end = ALIGN(end, (1UL << SLICE_HIGH_SHIFT));
    unsigned long count = GET_HIGH_SLICE_INDEX(align_end) - start_index;
    @@ -133,7 +140,7 @@ static void slice_mask_for_free(struct m
    if (!slice_low_has_vma(mm, i))
    ret->low_slices |= 1u << i;

    - if (high_limit <= SLICE_LOW_TOP)
    + if (slice_addr_is_low(high_limit - 1))
    return;

    for (i = 0; i < GET_HIGH_SLICE_INDEX(high_limit); i++)
    @@ -182,7 +189,7 @@ static bool slice_check_range_fits(struc
    unsigned long end = start + len - 1;
    u64 low_slices = 0;

    - if (start < SLICE_LOW_TOP) {
    + if (slice_addr_is_low(start)) {
    unsigned long mend = min(end,
    (unsigned long)(SLICE_LOW_TOP - 1));

    @@ -192,7 +199,7 @@ static bool slice_check_range_fits(struc
    if ((low_slices & available->low_slices) != low_slices)
    return false;

    - if (SLICE_NUM_HIGH && ((start + len) > SLICE_LOW_TOP)) {
    + if (SLICE_NUM_HIGH && !slice_addr_is_low(end)) {
    unsigned long start_index = GET_HIGH_SLICE_INDEX(start);
    unsigned long align_end = ALIGN(end, (1UL << SLICE_HIGH_SHIFT));
    unsigned long count = GET_HIGH_SLICE_INDEX(align_end) - start_index;
    @@ -303,7 +310,7 @@ static bool slice_scan_available(unsigne
    int end, unsigned long *boundary_addr)
    {
    unsigned long slice;
    - if (addr < SLICE_LOW_TOP) {
    + if (slice_addr_is_low(addr)) {
    slice = GET_LOW_SLICE_INDEX(addr);
    *boundary_addr = (slice + end) << SLICE_LOW_SHIFT;
    return !!(available->low_slices & (1u << slice));
    @@ -706,7 +713,7 @@ unsigned int get_slice_psize(struct mm_s

    VM_BUG_ON(radix_enabled());

    - if (addr < SLICE_LOW_TOP) {
    + if (slice_addr_is_low(addr)) {
    psizes = mm->context.low_slices_psize;
    index = GET_LOW_SLICE_INDEX(addr);
    } else {

    \
     
     \ /
      Last update: 2018-11-19 18:54    [W:4.036 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site