lkml.org 
[lkml]   [2005]   [Jun]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [resend][PATCH] avoid signed vs unsigned comparison in efi_range_is_wc()

    Well long and int are the same size on ix86. What you really need
    is 'size_t' for counters. That's the largest unsigned integer that
    will fit in a register on the target platform. It is platform-
    specific, therefore defined in stddef.h. No index or return-value
    is supposed to be larger than what can be represented in size_t,
    therefore it is a good type to use.

    Note that on 64-bit platforms, size_t will be larger than an unsigned
    int. This is good.

    On Thu, 16 Jun 2005, Jesper Juhl wrote:

    > I send in the patch below a while back but never recieved any response.
    > Now I'm resending it in the hope that it might be added to -mm.
    > The patch still applies cleanly to 2.6.12-rc6-mm1
    >
    > --
    > Jesper Juhl
    >
    >
    > ---------- Forwarded message ----------
    > Date: Fri, 18 Mar 2005 00:43:33 +0100 (CET)
    > From: Jesper Juhl <juhl-lkml@dif.dk>
    > To: linux-kernel <linux-kernel@vger.kernel.org>
    > Cc: Walt Drummond <drummond@valinux.com>,
    > David Mosberger-Tang <davidm@hpl.hp.com>,
    > Stephane Eranian <eranian@hpl.hp.com>
    > Subject: [PATCH] avoid signed vs unsigned comparison in efi_range_is_wc()
    >
    >
    > This little function in include/linux/efi.h :
    >
    > static inline int efi_range_is_wc(unsigned long start, unsigned long len)
    > {
    > int i;
    >
    > for (i = 0; i < len; i += (1UL << EFI_PAGE_SHIFT)) {
    > unsigned long paddr = __pa(start + i);
    > if (!(efi_mem_attributes(paddr) & EFI_MEMORY_WC))
    > return 0;
    > }
    > /* The range checked out */
    > return 1;
    > }
    >
    > generates this warning when building with gcc -W :
    >
    > include/linux/efi.h: In function `efi_range_is_wc':
    > include/linux/efi.h:320: warning: comparison between signed and unsigned
    >
    > It looks to me like a significantly large 'len' passed in could cause the
    > loop to never end. Isn't it safer to make 'i' an unsigned long as well?
    > Like this little patch below (which of course also kills the warning) :
    >
    >
    > Signed-off-by: Jesper Juhl <juhl-lkml@dif.dk>
    >
    > diff -up linux-2.6.11-mm4-orig/include/linux/efi.h linux-2.6.11-mm4/include/linux/efi.h
    > --- linux-2.6.11-mm4-orig/include/linux/efi.h 2005-03-16 15:45:35.000000000 +0100
    > +++ linux-2.6.11-mm4/include/linux/efi.h 2005-03-18 00:34:36.000000000 +0100
    > @@ -315,7 +315,7 @@ extern struct efi_memory_map memmap;
    > */
    > static inline int efi_range_is_wc(unsigned long start, unsigned long len)
    > {
    > - int i;
    > + unsigned long i;
    >
    > for (i = 0; i < len; i += (1UL << EFI_PAGE_SHIFT)) {
    > unsigned long paddr = __pa(start + i);
    >
    >
    >
    >
    > -
    > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    > the body of a message to majordomo@vger.kernel.org
    > More majordomo info at http://vger.kernel.org/majordomo-info.html
    > Please read the FAQ at http://www.tux.org/lkml/
    >

    Cheers,
    Dick Johnson
    Penguin : Linux version 2.6.11.9 on an i686 machine (5537.79 BogoMips).
    Notice : All mail here is now cached for review by Dictator Bush.
    98.36% of all statistics are fiction.
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-06-16 22:55    [W:0.028 / U:60.744 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site