Skip to content
  • Andrew Morton's avatar
    asm-generic: delay.h fix udelay and ndelay for 8 bit args · a87e553f
    Andrew Morton authored
    
    
    With a non-constant 8-bit argument, a call to udelay() generates a warning:
    
    drivers/gpu/drm/radeon/atom.c: In function 'atom_op_delay':
    drivers/gpu/drm/radeon/atom.c:654: warning: comparison is always false due to limited range of data type
    
    The code looks like it works OK with an 8-bit arg, and the calling code is
    doing nothing wrong, so udelay() needs fixing.
    
    Fixing it was rather tricky.  Simply typecasting `n' in the comparison with
    20000 didn't change anything.  Hence the divide-by-20000 trick.
    
    Using a do{}while loop didn't work because udelay() is used in ?: statements,
    hence the ({...}) construct.
    
    While I was there I replaced the brain-bending ?:?:?: mess with nice if/else
    code.
    
    Probably other architectures are generating the same warning and can use a
    similar change.
    
    [Taken from the x86 tree and moved to asm-generic by Jonas Bonn]
    
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: <linux-arch@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarJonas Bonn <jonas@southpole.se>
    a87e553f