Collect utility macros to include/linux/kernel.h synced with Linux
Subsystems (32)
cover Collect utility macros to include/linux/kernel.h synced with Linux
We have imported useful macros from Linux scattering them to various places.
In include/common.h are min, max, min3, max3, ARRAY_SIZE, ALIGN, container_of, DIV_ROUND_UP, roundup, etc.
In include/linux/compat.h are min_t, max_t, round_up, round_down, etc.
We also have duplicated defines of min_t in some *.c files.
I'd like to create include/linux/kernel.h and arrange sprinkled Linux-originated macros in order.
I believe this work will be helpful when we import more macros or sync include/linux/kenrel.h in the future.
I confirmed clean output of buildman.
No section: 'make-flags'
boards.cfg is up to date. Nothing to do.
Summary of 7 commits for 1175 boards (8 threads, 1 job per thread) 01: arm: interrupt_init: set sp in IRQ/FIQ modes
nios2: + nios2-generic
sh: + rsk7269 rsk7264 rsk7203
blackfin: + bf609-ezkit
arm: + maxbcm smdkv310 snow smdk5250 smdk5420 origen odroid db-mv784mp-gp s5pc210_universal trats peach-pit arndale trats2
powerpc: + TQM834x02: replace DIV_ROUND with DIV_ROUND_CLOSEST
03: include/common.h: remove DIV_ROUND definition
04: include: move various macros to include/linux/kernel.h 05: linux/kernel.h: import more macros
06: linux/kernel.h: add typechecking to roundup macro 07: linux/kernel.h: sync min, max, min3, max3 macros with Linux
Masahiro Yamada (6):
replace DIV_ROUND with DIV_ROUND_CLOSEST include/common.h: remove DIV_ROUND definition
include: move various macros to include/linux/kernel.h linux/kernel.h: import more macros linux/kernel.h: add typechecking to roundup macro linux/kernel.h: sync min, max, min3, max3 macros with Linux
arch/arm/cpu/arm1176/tnetv107x/clock.c | 5 +- arch/arm/cpu/arm926ejs/mxs/spl_power_init.c | 3 +- arch/arm/cpu/armv7/bcm281xx/clk-core.h | 4 - arch/arm/cpu/armv7/exynos/clock.c | 4 +- arch/arm/cpu/armv7/omap-common/abb.c | 6 +- arch/arm/cpu/armv7/tegra20/display.c | 4 +- arch/avr32/cpu/at32ap700x/clk.c | 2 +- arch/blackfin/cpu/jtag-console.c | 2 +- arch/blackfin/lib/string.c | 2 +- arch/mips/cpu/mips32/au1x00/au1x00_usb_ohci.c | 2 - arch/powerpc/cpu/mpc5xxx/usb_ohci.c | 2 - arch/powerpc/cpu/mpc85xx/tlb.c | 2 +- arch/powerpc/cpu/ppc4xx/44x_spd_ddr2.c | 32 ++-- arch/powerpc/cpu/ppc4xx/usb_ohci.c | 2 - arch/powerpc/lib/bootm.c | 2 +- arch/sandbox/cpu/start.c | 2 +- arch/x86/cpu/coreboot/pci.c | 2 +- arch/x86/cpu/coreboot/sdram.c | 2 +- board/freescale/common/sys_eeprom.c | 6 +- board/gdsys/p1022/controlcenterd-id.c | 5 +- board/imgtec/malta/malta.c | 2 +- common/cmd_elf.c | 12 +- common/cmd_sf.c | 16 +- common/env_nand.c | 4 +- common/fdt_support.c | 3 +- common/lcd.c | 6 +- common/usb_hub.c | 3 +- drivers/block/ahci.c | 2 +- drivers/ddr/fsl/ctrl_regs.c | 22 +-- drivers/ddr/fsl/lc_common_dimm_params.c | 62 ++++--- drivers/ddr/fsl/main.c | 3 +- drivers/dfu/dfu.c | 2 +- drivers/i2c/fsl_i2c.c | 2 +- drivers/misc/cros_ec_spi.c | 2 +- drivers/misc/mxc_ocotp.c | 4 +- drivers/mmc/fsl_esdhc.c | 2 +- drivers/mmc/pxa_mmc_gen.c | 6 +- drivers/mtd/nand/denali_spl.c | 2 +- drivers/mtd/spi/sandbox.c | 2 +- drivers/mtd/spi/sf_ops.c | 5 +- drivers/net/netconsole.c | 2 +- drivers/pci/pci.c | 6 +- drivers/pci/pci_auto.c | 2 +- drivers/serial/usbtty.c | 2 +- drivers/spi/fsl_espi.c | 4 +- drivers/spi/mxc_spi.c | 2 +- drivers/spi/spi-uclass.c | 2 +- drivers/tpm/tpm_tis_lpc.c | 2 +- drivers/usb/gadget/composite.c | 4 +- drivers/usb/gadget/designware_udc.c | 4 +- drivers/usb/gadget/pxa27x_udc.c | 3 +- drivers/usb/gadget/s3c_udc_otg_xfer_dma.c | 4 +- drivers/usb/host/dwc2.c | 14 +- drivers/usb/host/ehci-hcd.c | 2 +- drivers/usb/host/isp116x-hcd.c | 6 - drivers/usb/host/ohci-hcd.c | 3 - drivers/usb/host/ohci-s3c24xx.c | 3 - drivers/usb/host/r8a66597-hcd.c | 3 - drivers/usb/host/xhci-ring.c | 2 +- drivers/usb/host/xhci.c | 2 +- drivers/usb/musb/musb_hcd.h | 3 - drivers/video/ati_radeon_fb.c | 5 - drivers/video/cfb_console.c | 18 +- fs/ext4/dev.c | 13 +- fs/fat/fat.c | 2 +- fs/ubifs/ubifs.h | 4 - include/common.h | 90 +--------- include/linux/compat.h | 42 ----- include/linux/kernel.h | 245 ++++++++++++++++++++++++++ lib/strmhz.c | 4 +- lib/vsprintf.c | 3 - 71 files changed, 431 insertions(+), 323 deletions(-) create mode 100644 include/linux/kernel.h
Signature · 1 line
1.9.1
PATCH 1/6 replace DIV_ROUND with DIV_ROUND_CLOSEST
The Linux-compatible macro DIV_ROUND_CLOSEST is a bit more flexible and safer than DIV_ROUND.
For example,
foo = DIV_ROUND_CLOSEST(x, y++)
works expectedly, but
foo = DIV_ROUND(x, y++)
does not. (y is incremented twice.)
---
arch/arm/cpu/arm926ejs/mxs/spl_power_init.c | 3 ++- arch/arm/cpu/armv7/omap-common/abb.c | 6 +++--- drivers/misc/mxc_ocotp.c | 4 ++-- lib/strmhz.c | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-)
arch/arm/cpu/arm926ejs/mxs/spl_power_init.c +2 -1
@@ -1002,7 +1002,8 @@ static void mxs_power_set_vddx(const struct mxs_vddx_cfg *cfg,uint32_t powered_by_linreg =0 ;int adjust_up, tmp; - new_brownout =DIV_ROUND (new_target - new_brownout, cfg->step_mV); + new_brownout =DIV_ROUND_CLOSEST (new_target - new_brownout, + cfg->step_mV); cur_target =readl (cfg->reg); cur_target &= cfg->trg_mask;
arch/arm/cpu/armv7/omap-common/abb.c +3 -3
@@ -48,9 +48,9 @@ static void abb_setup_timings(u32 setup)*/ /* calculate SR2_WTCNT_VALUE */ - sys_rate =DIV_ROUND (V_OSCK ,1000000 ); - clk_cycles =DIV_ROUND (OMAP_ABB_CLOCK_CYCLES *10 , sys_rate); - sr2_cnt =DIV_ROUND (OMAP_ABB_SETTLING_TIME *10 , clk_cycles); + sys_rate =DIV_ROUND_CLOSEST (V_OSCK ,1000000 ); + clk_cycles =DIV_ROUND_CLOSEST (OMAP_ABB_CLOCK_CYCLES *10 , sys_rate); + sr2_cnt =DIV_ROUND_CLOSEST (OMAP_ABB_SETTLING_TIME *10 , clk_cycles);setbits_le32 (setup, sr2_cnt << (ffs (OMAP_ABB_SETUP_SR2_WTCNT_VALUE_MASK ) -1 ));
drivers/misc/mxc_ocotp.c +2 -2
@@ -122,8 +122,8 @@ static void set_timing(struct ocotp_regs *regs) relax =DIV_ROUND_UP (ipg_clk *BV_TIMING_RELAX_NS ,1000000000 ) -1 ; strobe_read =DIV_ROUND_UP (ipg_clk *BV_TIMING_STROBE_READ_NS ,1000000000 ) +2 * (relax +1 ) -1 ; - strobe_prog =DIV_ROUND (ipg_clk *BV_TIMING_STROBE_PROG_US ,1000000 ) + -2 * (relax +1 ) -1 ; + strobe_prog =DIV_ROUND_CLOSEST (ipg_clk *BV_TIMING_STROBE_PROG_US , +1000000 ) +2 * (relax +1 ) -1 ; timing =BF (strobe_read,TIMING_STROBE_READ ) | BF(relax, TIMING_RELAX) |
lib/strmhz.c +2 -2
@@ -11,11 +11,11 @@ char *strmhz (char *buf, unsigned long hz)long l, n;long m; - n =DIV_ROUND (hz,1000 ) /1000L ; + n =DIV_ROUND_CLOSEST (hz,1000 ) /1000L ; l =sprintf (buf,"%ld" , n); hz -= n *1000000L ; - m =DIV_ROUND (hz,1000L ); + m =DIV_ROUND_CLOSEST (hz,1000L );if (m !=0 )sprintf (buf + l,".%03ld" , m);return (buf);
Signature · 1 line
1.9.1
PATCH 2/6 include/common.h: remove DIV_ROUND definition
In reply to Masahiro YamadaAll the references of DIV_ROUND have been replaced with DIV_ROUND_CLOSEST. Remove DIV_ROUND.
---
include/common.h | 1 - 1 file changed, 1 deletion(-)
include/common.h +0 -1
@@ -950,7 +950,6 @@ static inline phys_addr_t map_to_sysmem(const void *ptr)#define ARRAY_SIZE (x) (sizeof(x) / sizeof((x)[0]))#define ROUND (a,b) (((a) + (b) - 1) & ~((b) - 1)) -#define DIV_ROUND (n,d) (((n) + ((d)/2)) / (d))#define DIV_ROUND_UP (n,d) (((n) + (d) - 1) / (d))#define roundup (x, y) ((((x) + ((y) - 1)) / (y)) * (y))
Signature · 1 line
1.9.1
PATCH 3/6 include: move various macros to include/linux/kernel.h
In reply to Masahiro YamadaU-Boot has imported various utility macros from Linux scattering them to various places without consistency.
In include/common.h are min, max, min3, max3, ARRAY_SIZE, ALIGN, container_of, DIV_ROUND_UP, etc.
In include/linux/compat.h are min_t, max_t, round_up, round_down, etc.
We also have duplicated defines of min_t in some *.c files.
Moreover, we are suffering from too cluttered include/common.h.
This commit moves various macros that originate in include/linux/kernel.h of Linux to their original position.
Note:
This commit simply moves the macros; roundup, min, max, min2, max3, ARRAY_SIZE are different from those of Linux at this point.
---
arch/arm/cpu/armv7/bcm281xx/clk-core.h | 4 - arch/mips/cpu/mips32/au1x00/au1x00_usb_ohci.c | 2 - arch/powerpc/cpu/mpc5xxx/usb_ohci.c | 2 - arch/powerpc/cpu/ppc4xx/usb_ohci.c | 2 - drivers/usb/host/isp116x-hcd.c | 6 -- drivers/usb/host/ohci-hcd.c | 3 - drivers/usb/host/ohci-s3c24xx.c | 3 - drivers/usb/host/r8a66597-hcd.c | 3 - drivers/usb/musb/musb_hcd.h | 3 - drivers/video/ati_radeon_fb.c | 5 - fs/ubifs/ubifs.h | 4 - include/common.h | 87 +--------------- include/linux/compat.h | 42 -------- include/linux/kernel.h | 145 ++++++++++++++++++++++++++ lib/vsprintf.c | 3 - 15 files changed, 146 insertions(+), 168 deletions(-) create mode 100644 include/linux/kernel.h
arch/arm/cpu/armv7/bcm281xx/clk-core.h +0 -4
@@ -73,10 +73,6 @@ struct clk {struct refclk *refclk_str_to_clk (const char *name); -#define U8_MAX ((u8)~0U) -#define U32_MAX ((u32)~0U) -#define U64_MAX ((u64)~0U) -/* The common clock framework uses u8 to represent a parent index */ #define PARENT_COUNT_MAX ((u32)U8_MAX)
arch/mips/cpu/mips32/au1x00/au1x00_usb_ohci.c +0 -2
@@ -54,8 +54,6 @@#define readl (a) au_readl((long)(a))#define writel (v,a) au_writel((v),(int)(a)) -#define min_t (type,x,y) ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; }) -#define DEBUG #ifdef DEBUG #define dbg(format, arg...) printf("DEBUG: " format "\n", ## arg)
arch/powerpc/cpu/mpc5xxx/usb_ohci.c +0 -2
@@ -42,8 +42,6 @@#define readl (a) (*((volatile u32 *)(a)))#define writel (a, b) (*((volatile u32 *)(b)) = ((volatile u32)a)) -#define min_t (type,x,y) ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; }) -#ifdef DEBUG #define dbg(format, arg...) printf("DEBUG: " format "\n", ## arg)#else
arch/powerpc/cpu/ppc4xx/usb_ohci.c +0 -2
@@ -40,8 +40,6 @@#define readl (a) (*((volatile u32 *)(a)))#define writel (a, b) (*((volatile u32 *)(b)) = ((volatile u32)a)) -#define min_t (type,x,y) ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; }) -#ifdef DEBUG #define dbg(format, arg...) printf("DEBUG: " format "\n", ## arg)#else
drivers/usb/host/isp116x-hcd.c +0 -6
@@ -103,12 +103,6 @@ static int rh_devnum; /* address of Root Hub endpoint *//* ------------------------------------------------------------------------- */ -#define ALIGN (x,a) (((x)+(a)-1UL)&~((a)-1UL)) -#define min_t (type,x,y) \ - ({ type __x = (x); type __y = (y); __x < __y ? __x : __y; }) - -/* ------------------------------------------------------------------------- */ -static int isp116x_reset (struct isp116x *isp116x);/* --- Debugging functions ------------------------------------------------- */
drivers/usb/host/ohci-hcd.c +0 -3
@@ -65,9 +65,6 @@#define OHCI_CONTROL_INIT \ (OHCI_CTRL_CBSR & 0x3) | OHCI_CTRL_IE | OHCI_CTRL_PLE -#define min_t (type, x, y) \ - ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; }) -#ifdef CONFIG_PCI_OHCI static struct pci_device_id ohci_pci_ids[] = { {0x10b9, 0x5237}, /* ULI1575 PCI OHCI module ids */
drivers/usb/host/ohci-s3c24xx.c +0 -3
@@ -35,9 +35,6 @@#define OHCI_CONTROL_INIT \ (OHCI_CTRL_CBSR & 0x3) | OHCI_CTRL_IE | OHCI_CTRL_PLE -#define min_t (type, x, y) \ - ({ type __x = (x); type __y = (y); __x < __y ? __x : __y; }) -#undef DEBUG#ifdef DEBUG #define dbg(format, arg...) printf("DEBUG: " format "\n", ## arg)
drivers/usb/host/r8a66597-hcd.c +0 -3
@@ -550,9 +550,6 @@ static int check_usb_device_connecting(struct r8a66597 *r8a66597)return -1 ;/* fail */ } -/* based on usb_ohci.c */ -#define min_t (type, x, y) \ - ({ type __x = (x); type __y = (y); __x < __y ? __x : __y; })/*-------------------------------------------------------------------------* * Virtual Root Hub *-------------------------------------------------------------------------*/
drivers/usb/musb/musb_hcd.h +0 -3
@@ -37,9 +37,6 @@ extern unsigned char new[]; ((readb (&musbr->power) &MUSB_POWER_HSMODE ) \ >>MUSB_POWER_HSMODE_SHIFT ) -#define min_t (type, x, y) \ - ({ type __x = (x); type __y = (y); __x < __y ? __x : __y; }) -/* USB HUB CONSTANTS (not OHCI-specific; see hub.h) */ /* destination of request */
drivers/video/ati_radeon_fb.c +0 -5
@@ -39,11 +39,6 @@ #define DPRINT(x...) do{}while(0)#endif -#ifndef min_t -#define min_t (type,x,y) \ - ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; }) -#endif -#define MAX_MAPPED_VRAM (2048*2048*4)#define MIN_MAPPED_VRAM (1024*768*1)
fs/ubifs/ubifs.h +0 -4
@@ -476,10 +476,6 @@ struct file {#define MAX_LFS_FILESIZE 0x7fffffffffffffffUL#endif -#define INT_MAX ((int)(~0U>>1)) -#define INT_MIN (-INT_MAX - 1) -#define LLONG_MAX ((long long)(~0ULL>>1)) -/* * These are the fs-independent mount-flags: up to 32 flags are supported */
include/common.h +1 -86
112 lines not on this page · raw message
include/linux/compat.h +0 -42
66 lines not on this page · raw message
include/linux/kernel.h new file +145 -0
145 lines not on this page · raw message
lib/vsprintf.c +0 -3
@@ -25,9 +25,6 @@#include <div64.h> #define noinline __attribute__((noinline)) -/* some reluctance to put this into a new limits.h, so it is here */ -#define INT_MAX ((int)(~0U>>1)) -unsigned long simple_strtoul (const char *cp,char **endp,unsigned int base) {
Signature · 1 line
1.9.1
PATCH 4/6 linux/kernel.h: import more macros
In reply to Masahiro YamadaThese macros seem to be useful for U-Boot too (or at least harmless). Imported from Linux 3.18-rc2.
---
include/linux/kernel.h | 104 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+)
include/linux/kernel.h +104 -0
@@ -4,16 +4,41 @@#include <linux/types.h> +#define USHRT_MAX ((u16)(~0U)) +#define SHRT_MAX ((s16)(USHRT_MAX>>1)) +#define SHRT_MIN ((s16)(-SHRT_MAX - 1))#define INT_MAX ((int)(~0U>>1))#define INT_MIN (-INT_MAX - 1) +#define UINT_MAX (~0U) +#define LONG_MAX ((long)(~0UL>>1)) +#define LONG_MIN (-LONG_MAX - 1) +#define ULONG_MAX (~0UL)#define LLONG_MAX ((long long)(~0ULL>>1)) +#define LLONG_MIN (-LLONG_MAX - 1) +#define ULLONG_MAX (~0ULL) +#define SIZE_MAX (~(size_t)0)#define U8_MAX ((u8)~0U) +#define S8_MAX ((s8)(U8_MAX>>1)) +#define S8_MIN ((s8)(-S8_MAX - 1)) +#define U16_MAX ((u16)~0U) +#define S16_MAX ((s16)(U16_MAX>>1)) +#define S16_MIN ((s16)(-S16_MAX - 1))#define U32_MAX ((u32)~0U) +#define S32_MAX ((s32)(U32_MAX>>1)) +#define S32_MIN ((s32)(-S32_MAX - 1))#define U64_MAX ((u64)~0ULL) +#define S64_MAX ((s64)(U64_MAX>>1)) +#define S64_MIN ((s64)(-S64_MAX - 1)) + +#define STACK_MAGIC 0xdeadbeef + +#define REPEAT_BYTE (x) ((~0ul / 0xff) * (x))#define ALIGN (x,a) __ALIGN_MASK((x),(typeof(x))(a)-1)#define __ALIGN_MASK (x,mask) (((x)+(mask))&~(mask)) +#define PTR_ALIGN (p, a) ((typeof(p))ALIGN((unsigned long)(p), (a))) +#define IS_ALIGNED (x, a) (((x) & ((typeof(x))(a) - 1)) == 0)#define ARRAY_SIZE (x) (sizeof(x) / sizeof((x)[0]))
@@ -27,10 +52,24 @@#define round_up (x, y) ((((x)-1) | __round_mask(x, y))+1)#define round_down (x, y) ((x) & ~__round_mask(x, y)) +#define FIELD_SIZEOF (t, f) (sizeof(((t*)0)->f))#define DIV_ROUND_UP (n,d) (((n) + (d) - 1) / (d)) +#if BITS_PER_LONG ==32 +# define DIV_ROUND_UP_SECTOR_T (ll,d) DIV_ROUND_UP_ULL(ll, d) +#else +# define DIV_ROUND_UP_SECTOR_T (ll,d) DIV_ROUND_UP(ll,d) +#endif +#define roundup (x, y) ((((x) + ((y) - 1)) / (y)) * (y)) +#define rounddown (x, y) ( \ +{ \ + typeof(x) __x = (x); \ + __x - (__x % (y)); \ +} \ +) +/* * Divide positive or negative dividend by positive divisor and round * to closest integer. Result is undefined for negative divisors and
@@ -47,6 +86,18 @@ } \ ) +/* +* Multiplies an integer by a fraction, while avoiding unnecessary +* overflow or loss of precision. +*/ +#define mult_frac (x, numer, denom)( \ +{ \ + typeof(x) quot = (x) / (denom); \ + typeof(x) rem = (x) % (denom); \ + (quot * (numer)) + ((rem * (numer)) / (denom)); \ +} \ +) +/** * upper_32_bits - return bits 32-63 of a number * @n: the number we're accessing
@@ -115,6 +166,27 @@ _max1 > _max2 ? (_max1 > _max3 ? _max1 : _max3) : \ (_max2 > _max3 ? _max2 : _max3); }) +/** +* min_not_zero - return the minimum that is _not_ zero, unless both are zero +* @x: value1 +* @y: value2 +*/ +#define min_not_zero (x, y) ({ \ + typeof(x) __x = (x); \ + typeof(y) __y = (y); \ + __x == 0 ? __y : ((__y == 0) ? __x : min(__x, __y)); }) + +/** +* clamp - return a value clamped to a given range with strict typechecking +* @val: current value +* @lo: lowest allowable value +* @hi: highest allowable value +* +* This macro does strict typechecking of lo/hi to make sure they are of the +* same type as val. See the unnecessary pointer comparisons. +*/ +#define clamp (val, lo, hi) min((typeof(val))max(val, lo), hi) +/* * ..and if you can't take the strict * types, you can specify one yourself.
@@ -132,6 +204,38 @@ __max1 > __max2 ? __max1: __max2; })/** +* clamp_t - return a value clamped to a given range using a given type +* @type: the type of variable to use +* @val: current value +* @lo: minimum allowable value +* @hi: maximum allowable value +* +* This macro does no typechecking and uses temporary variables of type +* 'type' to make all the comparisons. +*/ +#define clamp_t (type, val, lo, hi) min_t(type, max_t(type, val, lo), hi) + +/** +* clamp_val - return a value clamped to a given range using val's type +* @val: current value +* @lo: minimum allowable value +* @hi: maximum allowable value +* +* This macro does no typechecking and uses temporary variables of whatever +* type the input argument 'val' is. This is useful when val is an unsigned +* type and min and max are literals that will otherwise be assigned a signed +* integer type. +*/ +#define clamp_val (val, lo, hi) clamp_t(typeof(val), val, lo, hi) + + +/* +* swap - swap value of @a and @b +*/ +#define swap (a, b) \ + do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0) + +/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. * @type: the type of the container struct this is embedded in.
Signature · 1 line
1.9.1
PATCH 5/6 linux/kernel.h: add typechecking to roundup macro
In reply to Masahiro YamadaThis commit replaces roundup macro with the one from Linux Kernel.
DEFINE_ALIGN_BUFFER must be fixed because typechecking can not be used in this context.
---
include/common.h | 2 +- include/linux/kernel.h | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-)
include/common.h +1 -1
@@ -967,7 +967,7 @@ static inline phys_addr_t map_to_sysmem(const void *ptr)* Usage of this macro shall be avoided or used with extreme care! */ #define DEFINE_ALIGN_BUFFER (type, name, size, align) \ - static char __##name[roundup(size * sizeof(type), align)] \ + static char __##name[ALIGN(size * sizeof(type), align)] \ __aligned(align); \ \ static type *name = (type *)__##name
include/linux/kernel.h +7 -2
@@ -61,8 +61,13 @@# define DIV_ROUND_UP_SECTOR_T (ll,d) DIV_ROUND_UP(ll,d)#endif -#define roundup (x, y) ((((x) + ((y) - 1)) / (y)) * (y)) - +/* The `const' in roundup() prevents gcc-3.3 from calling __divdi3 */ +#define roundup (x, y) ( \ +{ \ + const typeof(y) __y = y; \ + (((x) + (__y - 1)) / __y) * __y; \ +} \ +)#define rounddown (x, y) ( \ { \ typeof(x) __x = (x); \
Signature · 1 line
1.9.1
PATCH 6/6 linux/kernel.h: sync min, max, min3, max3 macros with Linux
In reply to Masahiro YamadaU-Boot has never cared about the type when we get max/min of two values, but Linux Kernel does. This commit gets min, max, min3, max3 macros synced with the kernel introduing type checks.
Many of references of those macros must be fixed to suppress warnings. We have two options:
- Use min, max, min3, max3 only when the arguments have the same type (or add casts to the arguments)
- Use min_t/max_t instead with the appropriate type for the first argument
---
arch/arm/cpu/arm1176/tnetv107x/clock.c | 5 ++- arch/arm/cpu/armv7/exynos/clock.c | 4 +- arch/arm/cpu/armv7/tegra20/display.c | 4 +- arch/avr32/cpu/at32ap700x/clk.c | 2 +- arch/blackfin/cpu/jtag-console.c | 2 +- arch/blackfin/lib/string.c | 2 +- arch/powerpc/cpu/mpc85xx/tlb.c | 2 +- arch/powerpc/cpu/ppc4xx/44x_spd_ddr2.c | 32 ++++++++++------ arch/powerpc/lib/bootm.c | 2 +- arch/sandbox/cpu/start.c | 2 +- arch/x86/cpu/coreboot/pci.c | 2 +- arch/x86/cpu/coreboot/sdram.c | 2 +- board/freescale/common/sys_eeprom.c | 6 +-- board/gdsys/p1022/controlcenterd-id.c | 5 ++- board/imgtec/malta/malta.c | 2 +- common/cmd_elf.c | 12 +++--- common/cmd_sf.c | 16 ++++---- common/env_nand.c | 4 +- common/fdt_support.c | 3 +- common/lcd.c | 6 +-- common/usb_hub.c | 3 +- drivers/block/ahci.c | 2 +- drivers/ddr/fsl/ctrl_regs.c | 22 +++++------ drivers/ddr/fsl/lc_common_dimm_params.c | 62 ++++++++++++++++++------------- drivers/ddr/fsl/main.c | 3 +- drivers/dfu/dfu.c | 2 +- drivers/i2c/fsl_i2c.c | 2 +- drivers/misc/cros_ec_spi.c | 2 +- drivers/mmc/fsl_esdhc.c | 2 +- drivers/mmc/pxa_mmc_gen.c | 6 +-- drivers/mtd/nand/denali_spl.c | 2 +- drivers/mtd/spi/sandbox.c | 2 +- drivers/mtd/spi/sf_ops.c | 5 ++- drivers/net/netconsole.c | 2 +- drivers/pci/pci.c | 6 ++- drivers/pci/pci_auto.c | 2 +- drivers/serial/usbtty.c | 2 +- drivers/spi/fsl_espi.c | 4 +- drivers/spi/mxc_spi.c | 2 +- drivers/spi/spi-uclass.c | 2 +- drivers/tpm/tpm_tis_lpc.c | 2 +- drivers/usb/gadget/composite.c | 4 +- drivers/usb/gadget/designware_udc.c | 4 +- drivers/usb/gadget/pxa27x_udc.c | 3 +- drivers/usb/gadget/s3c_udc_otg_xfer_dma.c | 4 +- drivers/usb/host/dwc2.c | 14 +++---- drivers/usb/host/ehci-hcd.c | 2 +- drivers/usb/host/xhci-ring.c | 2 +- drivers/usb/host/xhci.c | 2 +- drivers/video/cfb_console.c | 18 ++++----- fs/ext4/dev.c | 13 +++---- fs/fat/fat.c | 2 +- include/linux/kernel.h | 17 ++------- 53 files changed, 179 insertions(+), 158 deletions(-)
arch/arm/cpu/arm1176/tnetv107x/clock.c +3 -2
@@ -362,12 +362,13 @@ static void init_pll(const struct pll_init_data *data)pllctl_reg_write (data->pll, ctl, tmp); mult = data->pll_freq / fpll; -for (mult =max (mult,1 ); mult <=MAX_MULT ; mult++) { +for (mult =max (mult,1UL ); mult <=MAX_MULT ; mult++) { div = (fpll * mult) / data->pll_freq;if (div <1 || div >MAX_DIV )continue ; -for (postdiv =1 ; postdiv <=min (div,MAX_POSTDIV ); postdiv++) { +for (postdiv =1 ; postdiv <=min (div, (unsigned long )MAX_POSTDIV ); + postdiv++) { prediv = div / postdiv;if (prediv <1 || prediv >MAX_PREDIV )continue ;
arch/arm/cpu/armv7/exynos/clock.c +2 -2
@@ -1422,8 +1422,8 @@ static int clock_calc_best_scalar(unsigned int main_scaler_bits,return 1 ;for (i =1 ; i <= loops; i++) { -const unsigned int effective_div =max (min (input_rate / i / - target_rate, cap),1 ); +const unsigned int effective_div = +max (min (input_rate / i / target_rate, cap),1U );const unsigned int effective_rate = input_rate / i / effective_div;const int error = target_rate - effective_rate;
arch/arm/cpu/armv7/tegra20/display.c +2 -2
@@ -45,8 +45,8 @@ static void update_window(struct dc_ctlr *dc, struct disp_ctl_win *win)writel (0 , &dc->win.h_initial_dda);writel (0 , &dc->win.v_initial_dda); - h_dda = (win->w *0x1000 ) /max (win->out_w -1 ,1 ); - v_dda = (win->h *0x1000 ) /max (win->out_h -1 ,1 ); + h_dda = (win->w *0x1000 ) /max (win->out_w -1 ,1U ); + v_dda = (win->h *0x1000 ) /max (win->out_h -1 ,1U ); val = h_dda <<H_DDA_INC_SHIFT ; val |= v_dda <<V_DDA_INC_SHIFT ;
arch/avr32/cpu/at32ap700x/clk.c +1 -1
@@ -72,7 +72,7 @@ unsigned long __gclk_set_rate(unsigned int id, enum gclk_parent parent,sm_writel (PM_GCCTRL (id), parent |SM_BIT (CEN )); rate = parent_rate; }else { - divider =min (255 , divider /2 -1 ); + divider =min (255UL , divider /2 -1 );sm_writel (PM_GCCTRL (id), parent |SM_BIT (CEN ) |SM_BIT (DIVEN ) |SM_BF (DIV , divider)); rate = parent_rate / (2 * (divider +1 ));
arch/blackfin/cpu/jtag-console.c +1 -1
@@ -168,7 +168,7 @@ static int jtag_getc(struct stdio_dev *dev) inbound_len = emudat; }else {/* store the bytes */ - leftovers_len =min (4 , inbound_len); + leftovers_len =min ((size_t )4 , inbound_len); inbound_len -= leftovers_len; leftovers = emudat; }
arch/blackfin/lib/string.c +1 -1
@@ -121,7 +121,7 @@ static void dma_calc_size(unsigned long ldst, unsigned long lsrc, size_t count, *dshift =WDSIZE_P ;#endif - *bpos =min (limit,ffs (ldst | lsrc | count)) -1 ; + *bpos =min (limit, (unsigned long )ffs (ldst | lsrc | count)) -1 ; }/* This version misbehaves for count values of 0 and 2^16+.
arch/powerpc/cpu/mpc85xx/tlb.c +1 -1
@@ -300,7 +300,7 @@ unsigned int setup_ddr_tlbs_phys(phys_addr_t p_addr,unsigned int ram_tlb_address = (unsigned int )CONFIG_SYS_DDR_SDRAM_BASE ;u64 memsize = (u64 )memsize_in_meg <<20 ; - memsize =min (memsize,CONFIG_MAX_MEM_MAPPED ); + memsize =min (memsize, (u64 )CONFIG_MAX_MEM_MAPPED ); memsize =tlb_map_range (ram_tlb_address, p_addr, memsize,TLB_MAP_RAM );if (memsize)
arch/powerpc/cpu/ppc4xx/44x_spd_ddr2.c +21 -11
@@ -1661,7 +1661,7 @@ static void program_mode(unsigned long *dimm_populated,for (dimm_num =0 ; dimm_num < num_dimm_banks; dimm_num++) {/* If a dimm is installed in a particular slot ... */ if (dimm_populated[dimm_num] !=SDRAM_NONE ) - t_wr_ns =max (t_wr_ns, + t_wr_ns =max (t_wr_ns, (unsigned long )spd_read (iic0_dimm_addr[dimm_num],36 ) >>2 ); }
@@ -1838,12 +1838,18 @@ static void program_tr(unsigned long *dimm_populated,else sdram_ddr1 = false; - t_rcd_ns =max (t_rcd_ns,spd_read (iic0_dimm_addr[dimm_num],29 ) >>2 ); - t_rrd_ns =max (t_rrd_ns,spd_read (iic0_dimm_addr[dimm_num],28 ) >>2 ); - t_rp_ns =max (t_rp_ns,spd_read (iic0_dimm_addr[dimm_num],27 ) >>2 ); - t_ras_ns =max (t_ras_ns,spd_read (iic0_dimm_addr[dimm_num],30 )); - t_rc_ns =max (t_rc_ns,spd_read (iic0_dimm_addr[dimm_num],41 )); - t_rfc_ns =max (t_rfc_ns,spd_read (iic0_dimm_addr[dimm_num],42 )); + t_rcd_ns =max (t_rcd_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],29 ) >>2 ); + t_rrd_ns =max (t_rrd_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],28 ) >>2 ); + t_rp_ns =max (t_rp_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],27 ) >>2 ); + t_ras_ns =max (t_ras_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],30 )); + t_rc_ns =max (t_rc_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],41 )); + t_rfc_ns =max (t_rfc_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],42 )); } }
@@ -1916,9 +1922,12 @@ static void program_tr(unsigned long *dimm_populated,for (dimm_num =0 ; dimm_num < num_dimm_banks; dimm_num++) {/* If a dimm is installed in a particular slot ... */ if (dimm_populated[dimm_num] !=SDRAM_NONE ) { - t_wpc_ns =max (t_wtr_ns,spd_read (iic0_dimm_addr[dimm_num],36 ) >>2 ); - t_wtr_ns =max (t_wtr_ns,spd_read (iic0_dimm_addr[dimm_num],37 ) >>2 ); - t_rpc_ns =max (t_rpc_ns,spd_read (iic0_dimm_addr[dimm_num],38 ) >>2 ); + t_wpc_ns =max (t_wtr_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],36 ) >>2 ); + t_wtr_ns =max (t_wtr_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],37 ) >>2 ); + t_rpc_ns =max (t_rpc_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],38 ) >>2 ); } }
@@ -2314,7 +2323,8 @@ static void program_ecc(unsigned long *dimm_populated,for (dimm_num =0 ; dimm_num <MAXDIMMS ; dimm_num++) {/* If a dimm is installed in a particular slot ... */ if (dimm_populated[dimm_num] !=SDRAM_NONE ) - ecc =max (ecc,spd_read (iic0_dimm_addr[dimm_num],11 )); + ecc =max (ecc, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],11 )); }if (ecc ==0 )return ;
arch/powerpc/lib/bootm.c +1 -1
@@ -126,7 +126,7 @@ void arch_lmb_reserve(struct lmb *lmb)#endif size =min (bootm_size,get_effective_memsize ()); - size =min (size,CONFIG_SYS_LINUX_LOWMEM_MAX_SIZE ); + size =min (size, (ulong )CONFIG_SYS_LINUX_LOWMEM_MAX_SIZE );if (size < bootm_size) {ulong base = bootmap_base + size;
arch/sandbox/cpu/start.c +1 -1
@@ -38,7 +38,7 @@ int sandbox_early_getopt_check(void) max_arg_len =0 ;for (i =0 ; i < num_options; ++i) - max_arg_len =max (strlen (sb_opt[i]->flag), max_arg_len); + max_arg_len =max ((int )strlen (sb_opt[i]->flag), max_arg_len); max_noarg_len = max_arg_len +7 ;for (i =0 ; i < num_options; ++i) {
arch/x86/cpu/coreboot/pci.c +1 -1
@@ -20,7 +20,7 @@ static void config_pci_bridge(struct pci_controller *hose, pci_dev_t dev, {u8 secondary; hose->read_byte (hose, dev,PCI_SECONDARY_BUS , &secondary); - hose->last_busno =max (hose->last_busno, secondary); + hose->last_busno =max (hose->last_busno, (int )secondary);pci_hose_scan_bus (hose, secondary); }
arch/x86/cpu/coreboot/sdram.c +1 -1
@@ -22,7 +22,7 @@ unsigned install_e820_map(unsigned max_entries, struct e820entry *entries) {int i; -unsigned num_entries =min (lib_sysinfo.n_memranges, max_entries); +unsigned num_entries =min ((unsigned )lib_sysinfo.n_memranges, max_entries);if (num_entries < lib_sysinfo.n_memranges) {printf ("Warning: Limiting e820 map to %d entries.\n" , num_entries);
board/freescale/common/sys_eeprom.c +3 -3
@@ -114,7 +114,7 @@ static void show_eeprom(void) e.date[3] & 0x80 ? "PM" : "");/* Show MAC addresses */ -for (i =0 ; i <min (e.mac_count,MAX_NUM_PORTS ); i++) { +for (i =0 ; i <min (e.mac_count, (u8 )MAX_NUM_PORTS ); i++) {u8 *p = e.mac[i];
@@ -223,7 +223,7 @@ static int prog_eeprom(void)*/ for (i =0 , p = &e; i <sizeof (e); i +=8 , p +=8 ) { ret =i2c_write (CONFIG_SYS_I2C_EEPROM_ADDR , i,CONFIG_SYS_I2C_EEPROM_ADDR_LEN , - p,min ((sizeof (e) - i),8 )); + p,min ((int )(sizeof (e) - i),8 ));if (ret)break ;udelay (5000 );/* 5ms write cycle timing */
@@ -461,7 +461,7 @@ int mac_read_from_eeprom(void)memset (e.mac[8 ],0xff ,6 );#endif -for (i =0 ; i <min (e.mac_count,MAX_NUM_PORTS ); i++) { +for (i =0 ; i <min (e.mac_count, (u8 )MAX_NUM_PORTS ); i++) {if (memcmp (&e.mac[i],"\0\0\0\0\0\0" ,6 ) &&memcmp (&e.mac[i],"\xFF\xFF\xFF\xFF\xFF\xFF" ,6 )) {char ethaddr[18 ];
board/gdsys/p1022/controlcenterd-id.c +3 -2
@@ -236,7 +236,7 @@ static int ccdm_mmc_read(struct mmc *mmc, u64 src, u8 *dst, int size) tmp_buf);if (!n) goto failure; - result =min (size, blk_len - ofs); + result =min (size, (int )(blk_len - ofs));memcpy (dst, tmp_buf + ofs, result); dst += result; size -= result;
@@ -736,7 +736,8 @@ do_bin_func: src_buf = buf;for (ptr = (uint8_t *)src_buf, i =20 ; i >0 ; i -= data_size, ptr += data_size) -memcpy (ptr, data,min (i, data_size)); +memcpy (ptr, data, +min_t (size_t, i, data_size)); } }bin_func (dst_reg->digest, src_buf,20 );
board/imgtec/malta/malta.c +1 -1
@@ -37,7 +37,7 @@ static void malta_lcd_puts(const char *str)void *reg = (void *)CKSEG1ADDR (MALTA_ASCIIPOS0 );/* print up to 8 characters of the string */ -for (i =0 ; i <min (strlen (str),8 ); i++) { +for (i =0 ; i <min ((int )strlen (str),8 ); i++) {__raw_writel (str[i], reg); reg +=MALTA_ASCIIPOS1 -MALTA_ASCIIPOS0 ; }
common/cmd_elf.c +6 -6
@@ -210,9 +210,9 @@ int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])*/ bootline =getenv ("bootargs" );if (bootline) { -memcpy ((void *) bootaddr, bootline, -max (strlen (bootline),255 )); -flush_cache (bootaddr,max (strlen (bootline),255 )); +memcpy ((void *)bootaddr, bootline, +max (strlen (bootline), (size_t )255 )); +flush_cache (bootaddr,max (strlen (bootline), (size_t )255 )); }else {sprintf (build_buf,CONFIG_SYS_VXWORKS_BOOT_DEVICE ); tmp =getenv ("bootfile" );
@@ -240,9 +240,9 @@ int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) CONFIG_SYS_VXWORKS_ADD_PARAMS);#endif -memcpy ((void *) bootaddr, build_buf, -max (strlen (build_buf),255 )); -flush_cache (bootaddr,max (strlen (build_buf),255 )); +memcpy ((void *)bootaddr, build_buf, +max (strlen (build_buf), (size_t )255 )); +flush_cache (bootaddr,max (strlen (build_buf), (size_t )255 )); }/*
common/cmd_sf.c +9 -7
@@ -18,7 +18,6 @@static struct spi_flash *flash; -/* * This function computes the length argument for the erase command. * The length on which the command is to operate can be given in two forms:
@@ -71,9 +70,9 @@ static ulong bytes_per_second(unsigned int len, ulong start_ms) {/* less accurate but avoids overflow */ if (len >= ((unsigned int )-1 ) /1024 ) -return len / (max (get_timer (start_ms) /1024 ,1 )); +return len / (max (get_timer (start_ms) /1024 ,1UL ));else -return 1024 * len /max (get_timer (start_ms),1 ); +return 1024 * len /max (get_timer (start_ms),1UL ); }static int do_spi_flash_probe (int argc,char *const argv[])
@@ -223,7 +222,7 @@ static int spi_flash_update(struct spi_flash *flash, u32 offset,ulong last_update =get_timer (0 );for (; buf < end && !err_oper; buf += todo, offset += todo) { - todo =min (end - buf, flash->sector_size); + todo =min_t (size_t, end - buf, flash->sector_size);if (get_timer (last_update) >100 ) { printf(" \rUpdating, %zu%% %lu B/s", 100 - (end - buf) / scale,
@@ -421,7 +420,8 @@ static int spi_flash_test(struct spi_flash *flash, uint8_t *buf, ulong len,for (i =0 ; i < len; i++) {if (vbuf[i] !=0xff ) {printf ("Check failed at %d\n" , i); -print_buffer (i, vbuf + i,1 ,min (len - i,0x40 ),0 ); +print_buffer (i, vbuf + i,1 , +min_t (uint, len - i,0x40 ),0 );return -1 ; } }
@@ -443,9 +443,11 @@ static int spi_flash_test(struct spi_flash *flash, uint8_t *buf, ulong len,for (i =0 ; i < len; i++) {if (buf[i] != vbuf[i]) {printf ("Verify failed@%d, good data:\n" , i); -print_buffer (i, buf + i,1 ,min (len - i,0x40 ),0 ); +print_buffer (i, buf + i,1 , +min_t (uint, len - i,0x40 ),0 );printf ("Bad data:\n" ); -print_buffer (i, vbuf + i,1 ,min (len - i,0x40 ),0 ); +print_buffer (i, vbuf + i,1 , +min_t (uint, len - i,0x40 ),0 );return -1 ; } }
common/env_nand.c +2 -2
@@ -132,7 +132,7 @@ static int writeenv(size_t offset, u_char *buf)u_char *char_ptr; blocksize = nand_info[0 ].erasesize; - len =min (blocksize,CONFIG_ENV_SIZE ); + len =min (blocksize, (size_t )CONFIG_ENV_SIZE );while (amount_saved <CONFIG_ENV_SIZE && offset < end) {if (nand_block_isbad (&nand_info[0 ], offset)) {
@@ -244,7 +244,7 @@ static int readenv(size_t offset, u_char *buf)if (!blocksize)return 1 ; - len =min (blocksize,CONFIG_ENV_SIZE ); + len =min (blocksize, (size_t )CONFIG_ENV_SIZE );while (amount_loaded <CONFIG_ENV_SIZE && offset < end) {if (nand_block_isbad (&nand_info[0 ], offset)) {
common/fdt_support.c +2 -1
@@ -1199,7 +1199,8 @@ int fdt_node_offset_by_compat_reg(void *blob, const char *compat,*/ int fdt_alloc_phandle (void *blob) { -int offset, phandle =0 ; +int offset; +uint32_t phandle =0 ;for (offset =fdt_next_node (blob,-1 ,NULL ); offset >=0 ; offset =fdt_next_node (blob, offset,NULL )) {
common/lcd.c +3 -3
@@ -746,7 +746,7 @@ static void splash_align_axis(int *axis, unsigned long panel_size, else return; - *axis = max(0, axis_alignment); + *axis = max(0, (int)axis_alignment); }#endif
@@ -1167,8 +1167,8 @@ U_BOOT_ENV_CALLBACK(splashimage, on_splashimage);void lcd_position_cursor (unsigned col,unsigned row) { - console_col =min (col,CONSOLE_COLS -1 ); - console_row =min (row,CONSOLE_ROWS -1 ); + console_col =min_t (short, col,CONSOLE_COLS -1 ); + console_row =min_t (short, row,CONSOLE_ROWS -1 ); }int lcd_get_pixel_width (void )
common/usb_hub.c +2 -1
@@ -339,7 +339,8 @@ static int usb_hub_configure(struct usb_device *dev) } descriptor = (struct usb_hub_descriptor *)buffer; - length =min (descriptor->bLength,sizeof (struct usb_hub_descriptor )); + length =min_t (int, descriptor->bLength, +sizeof (struct usb_hub_descriptor ));if (usb_get_hub_descriptor (dev, buffer, length) <0 ) { debug("usb_hub_configure: failed to get hub " \
drivers/block/ahci.c +1 -1
@@ -730,7 +730,7 @@ static int ata_scsiop_read_write(ccb *pccb, u8 is_write)u16 now_blocks;/* number of blocks per iteration */ u32 transfer_size;/* number of bytes per iteration */ - now_blocks =min (MAX_SATA_BLOCKS_READ_WRITE , blocks); + now_blocks =min ((u16 )MAX_SATA_BLOCKS_READ_WRITE , blocks); transfer_size =ATA_SECT_SIZE * now_blocks;if (transfer_size > user_buffer_size) {
drivers/ddr/fsl/ctrl_regs.c +11 -11
@@ -303,7 +303,7 @@ static void set_timing_cfg_0(fsl_ddr_cfg_regs_t *ddr,#ifdef CONFIG_SYS_FSL_DDR4 /* tXP=max(4nCK, 6ns) */ -int txp =max (mclk_ps *4 ,6000 );/* unit=ps */ +int txp =max ((int )mclk_ps *4 ,6000 );/* unit=ps */ trwt_mclk =2 ; twrt_mclk =1 ; act_pd_exit_mclk =picos_to_mclk (txp);
@@ -312,7 +312,7 @@ static void set_timing_cfg_0(fsl_ddr_cfg_regs_t *ddr,* MRS_CYC = max(tMRD, tMOD) * tMRD = 8nCK, tMOD = max(24nCK, 15ns) */ - tmrd_mclk =max (24 ,picos_to_mclk (15000 )); + tmrd_mclk =max (24U ,picos_to_mclk (15000 ));#elif defined(CONFIG_SYS_FSL_DDR3 )unsigned int data_rate =get_ddr_freq (0 );int txp;
@@ -325,7 +325,7 @@ static void set_timing_cfg_0(fsl_ddr_cfg_regs_t *ddr,* spec has not the tAXPD, we use * tAXPD=1, need design to confirm. */ - txp =max (mclk_ps *3 , (mclk_ps >1540 ?7500 :6000 )); + txp =max ((int )mclk_ps *3 , (mclk_ps >1540 ?7500 :6000 )); tmrd_mclk =4 ;/* set the turnaround time */
@@ -511,8 +511,8 @@ static void set_timing_cfg_1(fsl_ddr_cfg_regs_t *ddr,#ifdef CONFIG_SYS_FSL_DDR4 refrec_ctrl =picos_to_mclk (common_dimm->trfc1_ps) -8 ; wrrec_mclk =picos_to_mclk (common_dimm->twr_ps); - acttoact_mclk =max (picos_to_mclk (common_dimm->trrds_ps),4 ); - wrtord_mclk =max (2 ,picos_to_mclk (2500 )); + acttoact_mclk =max (picos_to_mclk (common_dimm->trrds_ps),4U ); + wrtord_mclk =max (2U ,picos_to_mclk (2500 ));if ((wrrec_mclk <1 ) || (wrrec_mclk >24 ))printf ("Error: WRREC doesn't support %d clocks\n" , wrrec_mclk);else
@@ -627,14 +627,14 @@ static void set_timing_cfg_2(fsl_ddr_cfg_regs_t *ddr, wr_data_delay = popts->write_data_delay;#ifdef CONFIG_SYS_FSL_DDR4 cpo =0 ; - cke_pls =max (3 ,picos_to_mclk (5000 )); + cke_pls =max (3U ,picos_to_mclk (5000 ));#elif defined(CONFIG_SYS_FSL_DDR3 )/* * cke pulse = max(3nCK, 7.5ns) for DDR3-800 * max(3nCK, 5.625ns) for DDR3-1066, 1333 * max(3nCK, 5ns) for DDR3-1600, 1866, 2133 */ - cke_pls =max (3 ,picos_to_mclk (mclk_ps >1870 ?7500 : + cke_pls =max (3U ,picos_to_mclk (mclk_ps >1870 ?7500 : (mclk_ps >1245 ?5625 :5000 )));#else cke_pls =FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR ;
@@ -1810,9 +1810,9 @@ static void set_timing_cfg_7(fsl_ddr_cfg_regs_t *ddr,unsigned int txpr, tcksre, tcksrx;unsigned int cke_rst, cksre, cksrx, par_lat, cs_to_cmd; - txpr =max (5 ,picos_to_mclk (common_dimm->trfc1_ps +10000 )); - tcksre =max (5 ,picos_to_mclk (10000 )); - tcksrx =max (5 ,picos_to_mclk (10000 )); + txpr =max (5U ,picos_to_mclk (common_dimm->trfc1_ps +10000 )); + tcksre =max (5U ,picos_to_mclk (10000 )); + tcksrx =max (5U ,picos_to_mclk (10000 )); par_lat =0 ; cs_to_cmd =0 ;
@@ -1877,7 +1877,7 @@ static void set_timing_cfg_8(fsl_ddr_cfg_regs_t *ddr, } acttoact_bg =picos_to_mclk (common_dimm->trrdl_ps); - wrtord_bg =max (4 ,picos_to_mclk (7500 )); + wrtord_bg =max (4U ,picos_to_mclk (7500 ));if (popts->otf_burst_chop_en) wrtord_bg +=2 ;
drivers/ddr/fsl/lc_common_dimm_params.c +36 -26
84 lines not on this page · raw message
drivers/ddr/fsl/main.c +2 -1
@@ -106,7 +106,8 @@ static void __get_spd(generic_spd_eeprom_t *spd, u8 i2c_address)i2c_write (SPD_SPA1_ADDRESS ,0 ,1 , &dummy,1 ); ret =i2c_read (i2c_address,0 ,1 , (uchar *)((ulong )spd +256 ), -min (256 ,sizeof (generic_spd_eeprom_t) -256 )); +min (256 , + (int )sizeof (generic_spd_eeprom_t) -256 )); }#else ret = i2c_read(i2c_address, 0, 1, (uchar *)spd,
drivers/dfu/dfu.c +1 -1
@@ -289,7 +289,7 @@ static int dfu_read_buffer_fill(struct dfu_entity *dfu, void *buf, int size) readn =0 ;while (size >0 ) {/* get chunk that can be read */ - chunk =min (size, dfu->b_left); + chunk =min ((long )size, dfu->b_left);/* consume */ if (chunk >0 ) {memcpy (buf, dfu->i_buf, chunk);
drivers/i2c/fsl_i2c.c +1 -1
@@ -127,7 +127,7 @@ static const struct {static unsigned int set_i2c_bus_speed (const struct fsl_i2c *dev,unsigned int i2c_clk,unsigned int speed) { -unsigned short divider =min (i2c_clk / speed, (unsigned short )-1 ); +unsigned short divider =min (i2c_clk / speed, (unsigned int )USHRT_MAX );/* * We want to choose an FDR/DFSR that generates an I2C bus speed that
drivers/misc/cros_ec_spi.c +1 -1
@@ -143,7 +143,7 @@ int cros_ec_spi_command(struct cros_ec_dev *dev, uint8_t cmd, int cmd_version,return -1 ; } - len =min (p[1 ], din_len); + len =min ((int )p[1 ], din_len);cros_ec_dump_data ("in" ,-1 , p, len +3 );/* Response code is first byte of message */
drivers/mmc/fsl_esdhc.c +1 -1
@@ -610,7 +610,7 @@ int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg)#endif cfg->cfg.f_min =400000 ; - cfg->cfg.f_max =min (gd->arch.sdhc_clk,52000000 ); + cfg->cfg.f_max =min (gd->arch.sdhc_clk, (u32 )52000000 ); cfg->cfg.b_max =CONFIG_SYS_MMC_MAX_BLK_COUNT ;
drivers/mmc/pxa_mmc_gen.c +3 -3
@@ -197,7 +197,7 @@ static int pxa_mmc_do_read_xfer(struct mmc *mmc, struct mmc_data *data)while (len) {/* The controller has data ready */ if (readl (®s->i_reg) &MMC_I_REG_RXFIFO_RD_REQ ) { - size =min (len,PXAMMC_FIFO_SIZE ); + size =min (len, (uint32_t )PXAMMC_FIFO_SIZE ); len -= size; size /=4 ;
@@ -233,14 +233,14 @@ static int pxa_mmc_do_write_xfer(struct mmc *mmc, struct mmc_data *data)while (len) {/* The controller is ready to receive data */ if (readl (®s->i_reg) &MMC_I_REG_TXFIFO_WR_REQ ) { - size =min (len,PXAMMC_FIFO_SIZE ); + size =min (len, (uint32_t )PXAMMC_FIFO_SIZE ); len -= size; size /=4 ;while (size--)writel (*buf++, ®s->txfifo); -if (min (len,PXAMMC_FIFO_SIZE ) <32 ) +if (min (len, (uint32_t )PXAMMC_FIFO_SIZE ) <32 )writel (MMC_PRTBUF_BUF_PART_FULL , ®s->prtbuf); }
drivers/mtd/nand/denali_spl.c +1 -1
@@ -203,7 +203,7 @@ int nand_spl_load_image(uint32_t offs, unsigned int size, void *dst)if (ret <0 )return ret; - readlen =min (page_size - column, size); + readlen =min (page_size - column, (int )size);memcpy (dst, page_buffer, readlen); column =0 ;
drivers/mtd/spi/sandbox.c +1 -1
@@ -315,7 +315,7 @@ int sandbox_erase_part(struct sandbox_spi_flash *sbsf, int size)int ret;while (size >0 ) { - todo =min (size,sizeof (sandbox_sf_0xff)); + todo =min (size, (int )sizeof (sandbox_sf_0xff)); ret =os_write (sbsf->fd, sandbox_sf_0xff, todo);if (ret != todo)return ret;
drivers/mtd/spi/sf_ops.c +3 -2
@@ -313,10 +313,11 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,return ret;#endif byte_addr = offset % page_size; - chunk_len =min (len - actual, page_size - byte_addr); + chunk_len =min (len - actual, (size_t )(page_size - byte_addr));if (flash->spi->max_write_size) - chunk_len =min (chunk_len, flash->spi->max_write_size); + chunk_len =min (chunk_len, + (size_t )flash->spi->max_write_size);spi_flash_addr (write_addr, cmd);
drivers/net/netconsole.c +1 -1
@@ -256,7 +256,7 @@ static void nc_puts(struct stdio_dev *dev, const char *s) len =strlen (s);while (len) { -int send_len =min (len,sizeof (input_buffer)); +int send_len =min (len, (int )sizeof (input_buffer));nc_send_packet (s, send_len); len -= send_len; s += send_len;
drivers/pci/pci.c +4 -2
@@ -662,13 +662,15 @@ int pci_hose_scan_bus(struct pci_controller *hose, int bus)#endif #ifdef CONFIG_PCI_PNP - sub_bus =max (pciauto_config_device (hose, dev), sub_bus); + sub_bus =max ((unsigned int )pciauto_config_device (hose, dev), + sub_bus);#else cfg =pci_find_config (hose, class, vendor, device,PCI_BUS (dev),PCI_DEV (dev),PCI_FUNC (dev));if (cfg) { cfg->config_device (hose, dev, cfg); - sub_bus =max (sub_bus, hose->current_busno); + sub_bus =max (sub_bus, + (unsigned int )hose->current_busno); }#endif
drivers/pci/pci_auto.c +1 -1
@@ -387,7 +387,7 @@ int pciauto_config_device(struct pci_controller *hose, pci_dev_t dev) n =pci_hose_scan_bus (hose, hose->current_busno);/* figure out the deepest we've gone for this leg */ - sub_bus =max (n, sub_bus); + sub_bus =max ((unsigned int )n, sub_bus);pciauto_postscan_setup_bridge (hose, dev, sub_bus); sub_bus = hose->current_busno;
drivers/serial/usbtty.c +1 -1
@@ -882,7 +882,7 @@ static int write_buffer (circbuf_t * buf) space_avail = current_urb->buffer_length - current_urb->actual_length; - popnum =min (space_avail, buf->size); + popnum =min (space_avail, (int )buf->size);if (popnum ==0 )break ;
drivers/spi/fsl_espi.c +2 -2
@@ -273,7 +273,7 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *data_out,spi_cs_deactivate (slave);return 0 ; } - buf_len =2 * cmd_len +min (data_len, max_tran_len); + buf_len =2 * cmd_len +min (data_len, (size_t )max_tran_len); len = cmd_len + data_len; rx_offset = cmd_len; buffer = (unsigned char *)malloc (buf_len);
@@ -306,7 +306,7 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *data_out,if (data_in) din = buffer + rx_offset; dout = buffer; - tran_len =min (data_len , max_tran_len); + tran_len =min (data_len, (size_t )max_tran_len); num_blks =DIV_ROUND_UP (tran_len + cmd_len,4 ); num_bytes = (tran_len + cmd_len) %4 ; fsl->data_len = tran_len + cmd_len;
drivers/spi/mxc_spi.c +1 -1
@@ -315,7 +315,7 @@ int spi_xchg_single(struct spi_slave *slave, unsigned int bitlen, tmp =reg_read (®s->rxdata); data =cpu_to_be32 (tmp);debug ("SPI Rx: 0x%x 0x%x\n" , tmp, data); - cnt =min (nbytes,sizeof (data)); + cnt =min_t (u32, nbytes,sizeof (data));if (din) {memcpy (din, &data, cnt); din += cnt;
drivers/spi/spi-uclass.c +1 -1
@@ -57,7 +57,7 @@ int spi_claim_bus(struct spi_slave *slave) speed = slave->max_hz;if (spi->max_hz) {if (speed) - speed =min (speed, spi->max_hz); + speed =min (speed, (int )spi->max_hz);else speed = spi->max_hz; }
drivers/tpm/tpm_tis_lpc.c +1 -1
@@ -274,7 +274,7 @@ static u32 tis_senddata(const u8 * const data, u32 len)* changes to zero exactly after the last byte is fed into the * FIFO. */ - count =min (burst, len - offset -1 ); + count =min ((u32 )burst, len - offset -1 );while (count--)tpm_write_byte (data[offset++], &lpc_tpm_dev[locality].data);
drivers/usb/gadget/composite.c +2 -2
@@ -743,8 +743,8 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)if (!gadget_is_dualspeed (gadget))break ;device_qual (cdev); - value =min (w_length, -sizeof (struct usb_qualifier_descriptor )); + value =min_t (int, w_length, +sizeof (struct usb_qualifier_descriptor ));break ;case USB_DT_OTHER_SPEED_CONFIG :if (!gadget_is_dualspeed (gadget))
drivers/usb/gadget/designware_udc.c +2 -2
@@ -269,8 +269,8 @@ static void dw_write_noniso_tx_fifo(struct usb_endpoint_instanceUDCDBGA ("urb->buffer %p, buffer_length %d, actual_length %d" , urb->buffer, urb->buffer_length, urb->actual_length); - last =min (urb->actual_length - endpoint->sent, - endpoint->tx_packetSize); + last =min_t (u32, urb->actual_length - endpoint->sent, + endpoint->tx_packetSize);if (last) {u8 *cp = urb->buffer + endpoint->sent;
drivers/usb/gadget/pxa27x_udc.c +2 -1
@@ -65,7 +65,8 @@ static int udc_write_urb(struct usb_endpoint_instance *endpoint)if (!urb || !urb->actual_length)return -1 ; - n =min (urb->actual_length - endpoint->sent, endpoint->tx_packetSize); + n = min_t(unsigned int, urb->actual_length - endpoint->sent, + endpoint->tx_packetSize);if (n <=0 )return -1 ;
drivers/usb/gadget/s3c_udc_otg_xfer_dma.c +2 -2
@@ -97,8 +97,8 @@ static int setdma_rx(struct s3c_ep *ep, struct s3c_request *req)u32 ep_num =ep_index (ep); buf = req->req.buf + req->req.actual; - length =min (req->req.length - req->req.actual, - ep_num ?DMA_BUFFER_SIZE : ep->ep.maxpacket); + length =min_t (u32, req->req.length - req->req.actual, + ep_num ?DMA_BUFFER_SIZE : ep->ep.maxpacket); ep->len = length; ep->dma_buf = buf;
drivers/usb/host/dwc2.c +7 -7
@@ -503,23 +503,23 @@ static int dwc_otg_submit_rh_msg_in_descriptor(struct usb_device *dev,case 0 :switch (wValue &0xff00 ) {case 0x0100 :/* device descriptor */ - len =min3 (txlen,sizeof (root_hub_dev_des), wLength); + len =min3 (txlen, (int )sizeof (root_hub_dev_des), (int )wLength);memcpy (buffer, root_hub_dev_des, len);break ;case 0x0200 :/* configuration descriptor */ - len =min3 (txlen,sizeof (root_hub_config_des), wLength); + len =min3 (txlen, (int )sizeof (root_hub_config_des), (int )wLength);memcpy (buffer, root_hub_config_des, len);break ;case 0x0300 :/* string descriptors */ switch (wValue &0xff ) {case 0x00 : - len =min3 (txlen,sizeof (root_hub_str_index0), - wLength); + len =min3 (txlen, (int )sizeof (root_hub_str_index0), + (int )wLength);memcpy (buffer, root_hub_str_index0, len);break ;case 0x01 : - len =min3 (txlen,sizeof (root_hub_str_index1), - wLength); + len =min3 (txlen, (int )sizeof (root_hub_str_index1), + (int )wLength);memcpy (buffer, root_hub_str_index1, len);break ; }
@@ -556,7 +556,7 @@ static int dwc_otg_submit_rh_msg_in_descriptor(struct usb_device *dev, data[10 ] = data[9 ]; } - len =min3 (txlen, data[0 ], wLength); + len =min3 (txlen, (int )data[0 ], (int )wLength);memcpy (buffer, data, len);break ;default :
drivers/usb/host/ehci-hcd.c +1 -1
@@ -910,7 +910,7 @@ ehci_submit_root(struct usb_device *dev, unsigned long pipe, void *buffer, }mdelay (1 ); - len =min3 (srclen,le16_to_cpu (req->length), length); + len =min3 (srclen, (int )le16_to_cpu (req->length), length);if (srcptr !=NULL && len >0 )memcpy (buffer, srcptr, len);else
drivers/usb/host/xhci-ring.c +1 -1
@@ -511,7 +511,7 @@ static void record_transfer_result(struct usb_device *udev, union xhci_trb *event, int length) { udev->act_len =min (length, length - -EVENT_TRB_LEN (le32_to_cpu (event->trans_event.transfer_len))); + (int )EVENT_TRB_LEN (le32_to_cpu (event->trans_event.transfer_len)));switch (GET_COMP_CODE (le32_to_cpu (event->trans_event.transfer_len))) {case COMP_SUCCESS :
drivers/usb/host/xhci.c +1 -1
@@ -829,7 +829,7 @@ static int xhci_submit_root(struct usb_device *udev, unsigned long pipe,debug ("scrlen = %d\n req->length = %d\n" , srclen,le16_to_cpu (req->length)); - len =min (srclen,le16_to_cpu (req->length)); + len =min (srclen, (int )le16_to_cpu (req->length));if (srcptr !=NULL && len >0 )memcpy (buffer, srcptr, len);
drivers/video/cfb_console.c +9 -9
@@ -1532,14 +1532,14 @@ int video_display_bitmap(ulong bmp_image, int x, int y)#ifdef CONFIG_SPLASH_SCREEN_ALIGN if (x ==BMP_ALIGN_CENTER ) - x =max (0 , (VIDEO_VISIBLE_COLS - width) /2 ); + x =max (0 , (int )(VIDEO_VISIBLE_COLS - width) /2 );else if (x <0 ) - x =max (0 ,VIDEO_VISIBLE_COLS - width + x +1 ); + x =max (0 , (int )(VIDEO_VISIBLE_COLS - width + x +1 ));if (y ==BMP_ALIGN_CENTER ) - y =max (0 , (VIDEO_VISIBLE_ROWS - height) /2 ); + y =max (0 , (int )(VIDEO_VISIBLE_ROWS - height) /2 );else if (y <0 ) - y =max (0 ,VIDEO_VISIBLE_ROWS - height + y +1 ); + y =max (0 , (int )(VIDEO_VISIBLE_ROWS - height + y +1 ));#endif /* CONFIG_SPLASH_SCREEN_ALIGN */ /*
@@ -1865,14 +1865,14 @@ static void plot_logo_or_black(void *screen, int width, int x, int y, int black)#ifdef CONFIG_SPLASH_SCREEN_ALIGN if (x ==BMP_ALIGN_CENTER ) - x =max (0 , (VIDEO_VISIBLE_COLS -VIDEO_LOGO_WIDTH ) /2 ); + x =max (0 , (int )(VIDEO_VISIBLE_COLS -VIDEO_LOGO_WIDTH ) /2 );else if (x <0 ) - x =max (0 ,VIDEO_VISIBLE_COLS -VIDEO_LOGO_WIDTH + x +1 ); + x =max (0 , (int )(VIDEO_VISIBLE_COLS -VIDEO_LOGO_WIDTH + x +1 ));if (y ==BMP_ALIGN_CENTER ) - y =max (0 , (VIDEO_VISIBLE_ROWS -VIDEO_LOGO_HEIGHT ) /2 ); + y =max (0 , (int )(VIDEO_VISIBLE_ROWS -VIDEO_LOGO_HEIGHT ) /2 );else if (y <0 ) - y =max (0 ,VIDEO_VISIBLE_ROWS -VIDEO_LOGO_HEIGHT + y +1 ); + y =max (0 , (int )(VIDEO_VISIBLE_ROWS -VIDEO_LOGO_HEIGHT + y +1 ));#endif /* CONFIG_SPLASH_SCREEN_ALIGN */ dest = (unsigned char *)screen + (y * width + x) *VIDEO_PIXEL_SIZE ;
@@ -2019,7 +2019,7 @@ static void *video_logo(void)* we need to adjust the logo height */ if (video_logo_ypos ==BMP_ALIGN_CENTER ) - video_logo_height +=max (0 , (VIDEO_VISIBLE_ROWS - \ + video_logo_height +=max (0 , (int )(VIDEO_VISIBLE_ROWS -VIDEO_LOGO_HEIGHT ) /2 );else if (video_logo_ypos >0 ) video_logo_height += video_logo_ypos;
fs/ext4/dev.c +6 -7
@@ -73,6 +73,7 @@ int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len, char *buf)debug (" <" LBAFU ", %d, %d>\n" , sector, byte_offset, byte_len);if (byte_offset !=0 ) { +int readlen;/* read first part which isn't aligned with start of sector */ if (ext4fs_block_dev_desc-> block_read(ext4fs_block_dev_desc->dev,
@@ -81,13 +82,11 @@ int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len, char *buf)printf (" ** ext2fs_devread() read error **\n" );return 0 ; } -memcpy (buf, sec_buf + byte_offset, -min (ext4fs_block_dev_desc->blksz - - byte_offset, byte_len)); - buf +=min (ext4fs_block_dev_desc->blksz - - byte_offset, byte_len); - byte_len -=min (ext4fs_block_dev_desc->blksz - - byte_offset, byte_len); + readlen =min ((int )ext4fs_block_dev_desc->blksz - byte_offset, + byte_len); +memcpy (buf, sec_buf + byte_offset, readlen); + buf += readlen; + byte_len -= readlen; sector++; }
fs/fat/fat.c +1 -1
@@ -364,7 +364,7 @@ get_contents(fsdata *mydata, dir_entry *dentptr, unsigned long pos,/* align to beginning of next cluster if any */ if (pos) { - actsize =min (filesize, bytesperclust); + actsize =min (filesize, (unsigned long )bytesperclust);if (get_cluster (mydata, curclust, get_contents_vfatname_block, (int )actsize) !=0 ) {printf ("Error reading cluster\n" );
include/linux/kernel.h +4 -13
@@ -150,26 +150,17 @@#define min (x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ + (void) (&_min1 == &_min2); \ _min1 < _min2 ? _min1 : _min2; })#define max (x, y) ({ \ typeof(x) _max1 = (x); \ typeof(y) _max2 = (y); \ + (void) (&_max1 == &_max2); \ _max1 > _max2 ? _max1 : _max2; }) -#define min3 (x, y, z) ({ \ - typeof(x) _min1 = (x); \ - typeof(y) _min2 = (y); \ - typeof(z) _min3 = (z); \ - _min1 < _min2 ? (_min1 < _min3 ? _min1 : _min3) : \ - (_min2 < _min3 ? _min2 : _min3); }) - -#define max3 (x, y, z) ({ \ - typeof(x) _max1 = (x); \ - typeof(y) _max2 = (y); \ - typeof(z) _max3 = (z); \ - _max1 > _max2 ? (_max1 > _max3 ? _max1 : _max3) : \ - (_max2 > _max3 ? _max2 : _max3); }) +#define min3 (x, y, z) min((typeof(x))min(x, y), z) +#define max3 (x, y, z) max((typeof(x))max(x, y), z)/** * min_not_zero - return the minimum that is _not_ zero, unless both are zero
Signature · 1 line
1.9.1
PATCH 6/6 linux/kernel.h: sync min, max, min3, max3 macros with Linux
Quoted 3 lines · Masahiro Yamada
U-Boot has never cared about the type when we get max/min of two values, but Linux Kernel does. This commit gets min, max, min3, max3 macros synced with the kernel introduing type checks.
"introducing"
Quoted 8 lines
Many of references of those macros must be fixed to suppress warnings. We have two options:
- Use min, max, min3, max3 only when the arguments have the same type (or add casts to the arguments)
- Use min_t/max_t instead with the appropriate type for the first argumentSigned-off-by Masahiro Yamada <[email protected]>
[I guess the conversion is okay, as is, still, there are places where code could be cleaned up afterwards...]
arch/arm/cpu/arm1176/tnetv107x/clock.c static void init_pll(const struct pll_init_data *data) · line 371
Quoted 3 lines
arch/arm/cpu/arm1176/tnetv107x/clock.c +2
-1-for (postdiv =1 ; postdiv <=min (div,MAX_POSTDIV ); postdiv++) { +for (postdiv =1 ; postdiv <=min (div, (unsigned long )MAX_POSTDIV ); + postdiv++) {
It might be cleaner to change MAX_POSTDIV definition to include UL?
Quoted 14 lines
arch/powerpc/cpu/ppc4xx/44x_spd_ddr2.c +4
-6@@ -1838,12 +1838,18 @@ static void program_tr(unsigned long *dimm_populated,else sdram_ddr1 = false; - t_rcd_ns =max (t_rcd_ns,spd_read (iic0_dimm_addr[dimm_num],29 ) >>2 ); - t_rrd_ns =max (t_rrd_ns,spd_read (iic0_dimm_addr[dimm_num],28 ) >>2 ); - t_rp_ns =max (t_rp_ns,spd_read (iic0_dimm_addr[dimm_num],27 ) >>2 ); - t_ras_ns =max (t_ras_ns,spd_read (iic0_dimm_addr[dimm_num],30 )); - t_rc_ns =max (t_rc_ns,spd_read (iic0_dimm_addr[dimm_num],41 )); - t_rfc_ns =max (t_rfc_ns,spd_read (iic0_dimm_addr[dimm_num],42 )); + t_rcd_ns =max (t_rcd_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],29 ) >>2 ); + t_rrd_ns =max (t_rrd_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],28 ) >>2 );
arch/powerpc/cpu/ppc4xx/44x_spd_ddr2.c static void program_tr(unsigned long *dimm_populated, · line 1854
Quoted 10 lines
arch/powerpc/cpu/ppc4xx/44x_spd_ddr2.c +8
-0+ t_rp_ns =max (t_rp_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],27 ) >>2 ); + t_ras_ns =max (t_ras_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],30 )); + t_rc_ns =max (t_rc_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],41 )); + t_rfc_ns =max (t_rfc_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],42 )); } }
Would it be feasible to make spd_read return unsigned long?
arch/sandbox/cpu/start.c int sandbox_early_getopt_check(void) · line 44
Quoted 13 lines
arch/sandbox/cpu/start.c +1
-1@@ -38,7 +38,7 @@ int sandbox_early_getopt_check(void) max_arg_len =0 ;for (i =0 ; i < num_options; ++i) - max_arg_len =max (strlen (sb_opt[i]->flag), max_arg_len); + max_arg_len =max ((int )strlen (sb_opt[i]->flag), max_arg_len); max_noarg_len = max_arg_len +7 ;for (i =0 ; i < num_options; ++i) {
make max_arg_len size_t?
drivers/net/netconsole.c static void nc_puts(struct stdio_dev *dev, const char *s) · line 262
Quoted 13 lines
drivers/net/netconsole.c +1
-1@@ -256,7 +256,7 @@ static void nc_puts(struct stdio_dev *dev, const char *s) len =strlen (s);while (len) { -int send_len =min (len,sizeof (input_buffer)); +int send_len =min (len, (int )sizeof (input_buffer));nc_send_packet (s, send_len); len -= send_len; s += send_len;
Looks like len/send_len wants to be size_t here.
Actually, I'd argue that anytime you need to explicitly cast one argument would be good time to use _t variant... but that would mean redoing rather big patch.
min((int) a, b) -> min_t(int, a, b).
Thanks,
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
PATCH 6/6 linux/kernel.h: sync min, max, min3, max3 macros with Linux
Hi Pavel,
Thanks for your close checking.
Quoted 6 lines · On Tue, 4 Nov 2014 20:50:13 +0100 Pavel Machek <[email protected]> wrote:
Quoted 3 lines · Masahiro Yamada
U-Boot has never cared about the type when we get max/min of two values, but Linux Kernel does. This commit gets min, max, min3, max3 macros synced with the kernel introduing type checks.
"introducing"
I will fix this.
Quoted 7 lines
Quoted 7 lines
Many of references of those macros must be fixed to suppress warnings. We have two options:
- Use min, max, min3, max3 only when the arguments have the same type (or add casts to the arguments)
- Use min_t/max_t instead with the appropriate type for the first argument
Quoted 6 lines
Quoted 1 line
Signed-off-by Masahiro Yamada <[email protected]>Acked-by Pavel Machek <[email protected]>[I guess the conversion is okay, as is, still, there are places where code could be cleaned up afterwards...]
Fully agreed.
In some places, I think we should change the variable types as you suggested but it is beyond the motivation of this series.
Quoted 5 lines
arch/arm/cpu/arm1176/tnetv107x/clock.c static void init_pll(const struct pll_init_data *data) · line 371
Quoted 3 lines
arch/arm/cpu/arm1176/tnetv107x/clock.c +2
-1-for (postdiv =1 ; postdiv <=min (div,MAX_POSTDIV ); postdiv++) { +for (postdiv =1 ; postdiv <=min (div, (unsigned long )MAX_POSTDIV ); + postdiv++) {It might be cleaner to change
MAX_POSTDIVdefinition to include UL?
Sounds good to me.
Quoted 19 lines
Quoted 19 lines
arch/powerpc/cpu/ppc4xx/44x_spd_ddr2.c +8
-6@@ -1838,12 +1838,18 @@ static void program_tr(unsigned long *dimm_populated,else sdram_ddr1 = false; - t_rcd_ns =max (t_rcd_ns,spd_read (iic0_dimm_addr[dimm_num],29 ) >>2 ); - t_rrd_ns =max (t_rrd_ns,spd_read (iic0_dimm_addr[dimm_num],28 ) >>2 ); - t_rp_ns =max (t_rp_ns,spd_read (iic0_dimm_addr[dimm_num],27 ) >>2 ); - t_ras_ns =max (t_ras_ns,spd_read (iic0_dimm_addr[dimm_num],30 )); - t_rc_ns =max (t_rc_ns,spd_read (iic0_dimm_addr[dimm_num],41 )); - t_rfc_ns =max (t_rfc_ns,spd_read (iic0_dimm_addr[dimm_num],42 )); + t_rcd_ns =max (t_rcd_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],29 ) >>2 ); + t_rrd_ns =max (t_rrd_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],28 ) >>2 ); + t_rp_ns =max (t_rp_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],27 ) >>2 ); + t_ras_ns =max (t_ras_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],30 ));
Quoted 8 lines
arch/powerpc/cpu/ppc4xx/44x_spd_ddr2.c static void program_tr(unsigned long *dimm_populated, · line 1854
Quoted 6 lines
arch/powerpc/cpu/ppc4xx/44x_spd_ddr2.c +4
-0+ t_rc_ns =max (t_rc_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],41 )); + t_rfc_ns =max (t_rfc_ns, + (unsigned long )spd_read (iic0_dimm_addr[dimm_num],42 )); } }Would it be feasible to make
spd_readreturn unsigned long?
I am not familiar enough with this code
to judge this.
Quoted 32 lines
arch/sandbox/cpu/start.c int sandbox_early_getopt_check(void) · line 44
Quoted 13 lines
arch/sandbox/cpu/start.c +1
-1@@ -38,7 +38,7 @@ int sandbox_early_getopt_check(void) max_arg_len =0 ;for (i =0 ; i < num_options; ++i) - max_arg_len =max (strlen (sb_opt[i]->flag), max_arg_len); + max_arg_len =max ((int )strlen (sb_opt[i]->flag), max_arg_len); max_noarg_len = max_arg_len +7 ;for (i =0 ; i < num_options; ++i) {make
max_arg_lensize_t?drivers/net/netconsole.c static void nc_puts(struct stdio_dev *dev, const char *s) · line 262
Quoted 13 lines
drivers/net/netconsole.c +1
-1@@ -256,7 +256,7 @@ static void nc_puts(struct stdio_dev *dev, const char *s) len =strlen (s);while (len) { -int send_len =min (len,sizeof (input_buffer)); +int send_len =min (len, (int )sizeof (input_buffer));nc_send_packet (s, send_len); len -= send_len; s += send_len;Looks like len/send_len wants to be
size_there.
Quoted 5 lines
Actually, I'd argue that anytime you need to explicitly cast one argument would be good time to use _t variant... but that would mean redoing rather big patch.
min((int) a, b)->min_t(int, a, b).
Agreed but I think we should do this
after we understand the code well.
Best Regards
Masahiro Yamada
PATCH 6/6 linux/kernel.h: sync min, max, min3, max3 macros with Linux
Quoted 8 lines · Masahiro Yamada
Hi Pavel,
Thanks for your close checking.
On Tue, 4 Nov 2014 20:50:13 +0100
Pavel Machek <[email protected]> wrote:
Quoted 8 lines
Quoted 6 lines · Masahiro Yamada
Quoted 3 lines
U-Boot has never cared about the type when we get max/min of two values, but Linux Kernel does. This commit gets min, max, min3, max3 macros synced with the kernel introduing type checks.
"introducing"
I will fix this.
Are you linting the patches with aspell or something ? [...]
Best regards,
Marek Vasut
PATCH 6/6 linux/kernel.h: sync min, max, min3, max3 macros with Linux
Hi Marek,
(reduced Cc)
Quoted 14 lines · On Wed, 5 Nov 2014 07:02:23 +0100 Marek Vasut <[email protected]> wrote:
Quoted 13 lines · Masahiro Yamada
Hi Pavel,
Thanks for your close checking.
On Tue, 4 Nov 2014 20:50:13 +0100
Quoted 5 lines · Pavel Machek
Quoted 3 lines · Masahiro Yamada
U-Boot has never cared about the type when we get max/min of two values, but Linux Kernel does. This commit gets min, max, min3, max3 macros synced with the kernel introduing type checks.
Quoted 5 lines
Quoted 3 lines
Quoted 1 line
"introducing"
I will fix this.
Are you linting the patches with aspell or something ?
No.
Going forward I will do that. Thaks for your advice!
Best Regards
Masahiro Yamada
PATCH 6/6 linux/kernel.h: sync min, max, min3, max3 macros with Linux
Quoted 1 line · Masahiro Yamada
Hi Marek,
Hi!
Quoted 19 lines
(reduced Cc)
On Wed, 5 Nov 2014 07:02:23 +0100
Quoted 14 lines · Marek Vasut
Quoted 13 lines · Masahiro Yamada
Hi Pavel,
Thanks for your close checking.
On Tue, 4 Nov 2014 20:50:13 +0100
Quoted 5 lines · Pavel Machek
Quoted 3 lines · Masahiro Yamada
U-Boot has never cared about the type when we get max/min of two values, but Linux Kernel does. This commit gets min, max, min3, max3 macros synced with the kernel introduing type checks.
Quoted 8 lines
Quoted 5 lines
Quoted 3 lines
Quoted 1 line
"introducing"
I will fix this.
Are you linting the patches with aspell or something ?
No.
Going forward I will do that. Thaks for your advice!
I was just curious what Pavel does there, since I also got some spelling corrections from him. Please don't take it like I want to add more work on your plate.
Best regards,
Marek Vasut
PATCH 6/6 linux/kernel.h: sync min, max, min3, max3 macros with Linux
Hi Marek,
Quoted 28 lines · On Wed, 5 Nov 2014 08:57:50 +0100 Marek Vasut <[email protected]> wrote:
Quoted 1 line · Masahiro Yamada
Hi Marek,
Hi!
Quoted 23 lines
(reduced Cc)
On Wed, 5 Nov 2014 07:02:23 +0100
Quoted 18 lines · Marek Vasut
Quoted 16 lines · Masahiro Yamada
Hi Pavel,
Thanks for your close checking.
On Tue, 4 Nov 2014 20:50:13 +0100
Quoted 6 lines · Pavel Machek
Quoted 3 lines · Masahiro Yamada
U-Boot has never cared about the type when we get max/min of two values, but Linux Kernel does. This commit gets min, max, min3, max3 macros synced with the kernel introduing type checks.
"introducing"
I will fix this.
Quoted 9 lines
Quoted 4 lines
Quoted 1 line
Are you linting the patches with aspell or something ?
No.
Going forward I will do that. Thaks for your advice!I was just curious what Pavel does there, since I also got some spelling corrections from him. Please don't take it like I want to add more work on your plate.
I was not sure if your question was addressed to me or Pavel, but never mind.
I use nano editor for inputting git-log.
It is just to press Ctrl-T to invoke aspell,
so it will not load me with much work.
Resending a patch just for a typo is a more tedious work. (Pavel, don't get me wrong. All you pointed out are good things.)
Best Regards
Masahiro Yamada
PATCH 6/6 linux/kernel.h: sync min, max, min3, max3 macros with Linux
Quoted 1 line · Masahiro Yamada
Hi Marek,
Hi Masahiro,
Quoted 41 lines
On Wed, 5 Nov 2014 08:57:50 +0100
Quoted 29 lines · Marek Vasut
Quoted 1 line · Masahiro Yamada
Hi Marek,
Hi!
Quoted 24 lines
(reduced Cc)
On Wed, 5 Nov 2014 07:02:23 +0100
Quoted 19 lines · Marek Vasut
Quoted 17 lines · Masahiro Yamada
Hi Pavel,
Thanks for your close checking.
On Tue, 4 Nov 2014 20:50:13 +0100
Quoted 7 lines · Pavel Machek
Quoted 4 lines · Masahiro Yamada
U-Boot has never cared about the type when we get max/min of two values, but Linux Kernel does. This commit gets min, max, min3, max3 macros synced with the kernel introduing type checks.
"introducing"
I will fix this.
Quoted 8 lines
Quoted 4 lines
Quoted 1 line
Are you linting the patches with aspell or something ?
No.
Going forward I will do that. Thaks for your advice!I was just curious what Pavel does there, since I also got some spelling corrections from him. Please don't take it like I want to add more work on your plate.
Quoted 7 lines
I was not sure if your question was addressed to me or Pavel, but never mind.
I use nano editor for inputting git-log.
It is just to press Ctrl-T to invoke aspell,
so it will not load me with much work.
Resending a patch just for a typo is a more tedious work.
Right, I'd be fine if the committer could just fix it without the need for resend ...
Quoted 1 line
(Pavel, don't get me wrong. All you pointed out are good things.)
btw. I have this precommit hook to invoke checkpatch and you can possibly add a postcommit (?) hook to invoke aspell too. Just a hint though ...
-->8--
marex at bfu:u-boot$ cat .git/hooks/pre-commit
#!/bin/sh
#
# pre-commit hook to run check-patch on the output and stop any commits # that do not pass. Note, only for git-commit, and not for any of the # other scenarios # # Copyright 2010 Ben Dooks, <[email protected]>
if git rev-parse --verify HEAD 2>/dev/null >/dev/null then
against=HEAD
else
# Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
git diff --cached $against -- | ./scripts/checkpatch.pl --no-signoff - --8<--
Best regards,
Marek Vasut
PATCH 6/6 linux/kernel.h: sync min, max, min3, max3 macros with Linux
In reply to Marek VasutQuoted 14 lines · Marek Vasut
Quoted 13 lines · Masahiro Yamada
Hi Pavel,
Thanks for your close checking.
On Tue, 4 Nov 2014 20:50:13 +0100
Quoted 5 lines · Pavel Machek
Quoted 3 lines · Masahiro Yamada
U-Boot has never cared about the type when we get max/min of two values, but Linux Kernel does. This commit gets min, max, min3, max3 macros synced with the kernel introduing type checks.
Quoted 5 lines
Quoted 3 lines
Quoted 1 line
"introducing"
I will fix this.
Are you linting the patches with aspell or something ?
My eyes do this automatically. I tried to find a switch to turn it off, but could not, so far.
:-),
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
PATCH 6/6 linux/kernel.h: sync min, max, min3, max3 macros with Linux
In reply to Masahiro YamadaHi Masahiro,
Quoted 52 lines
U-Boot has never cared about the type when we get max/min of two values, but Linux Kernel does. This commit gets min, max, min3, max3 macros synced with the kernel introduing type checks.
Many of references of those macros must be fixed to suppress warnings. We have two options:
- Use min, max, min3, max3 only when the arguments have the same type (or add casts to the arguments)
- Use min_t/max_t instead with the appropriate type for the first argumentSigned-off-by Masahiro Yamada <[email protected]>---
arch/arm/cpu/arm1176/tnetv107x/clock.c | 5 ++- arch/arm/cpu/armv7/exynos/clock.c | 4 +- arch/arm/cpu/armv7/tegra20/display.c | 4 +- arch/avr32/cpu/at32ap700x/clk.c | 2 +- arch/blackfin/cpu/jtag-console.c | 2 +- arch/blackfin/lib/string.c | 2 +- arch/powerpc/cpu/mpc85xx/tlb.c | 2 +- arch/powerpc/cpu/ppc4xx/44x_spd_ddr2.c | 32 ++++++++++------ arch/powerpc/lib/bootm.c | 2 +- arch/sandbox/cpu/start.c | 2 +- arch/x86/cpu/coreboot/pci.c | 2 +- arch/x86/cpu/coreboot/sdram.c | 2 +- board/freescale/common/sys_eeprom.c | 6 +-- board/gdsys/p1022/controlcenterd-id.c | 5 ++- board/imgtec/malta/malta.c | 2 +- common/cmd_elf.c | 12 +++--- common/cmd_sf.c | 16 ++++---- common/env_nand.c | 4 +- common/fdt_support.c | 3 +- common/lcd.c | 6 +-- common/usb_hub.c | 3 +- drivers/block/ahci.c | 2 +- drivers/ddr/fsl/ctrl_regs.c | 22 +++++------ drivers/ddr/fsl/lc_common_dimm_params.c | 62 ++++++++++++++++++------------- drivers/ddr/fsl/main.c | 3 +- drivers/dfu/dfu.c | 2 +- drivers/i2c/fsl_i2c.c | 2 +- drivers/misc/cros_ec_spi.c | 2 +- drivers/mmc/fsl_esdhc.c | 2 +- drivers/mmc/pxa_mmc_gen.c | 6 +-- drivers/mtd/nand/denali_spl.c | 2 +- drivers/mtd/spi/sandbox.c | 2 +- drivers/mtd/spi/sf_ops.c | 5 ++- drivers/net/netconsole.c | 2 +- drivers/pci/pci.c | 6 ++- drivers/pci/pci_auto.c | 2 +- drivers/serial/usbtty.c | 2 +-
Quoted 8 lines
drivers/spi/fsl_espi.c | 4 +- drivers/spi/mxc_spi.c | 2 +- drivers/spi/spi-uclass.c | 2 +- drivers/tpm/tpm_tis_lpc.c | 2 +- drivers/usb/gadget/composite.c | 4 +- drivers/usb/gadget/designware_udc.c | 4 +- drivers/usb/gadget/pxa27x_udc.c | 3 +- drivers/usb/gadget/s3c_udc_otg_xfer_dma.c | 4 +-
From my side:
Test HW: Trats2 (Exynos4412)
Signature · 5 lines
Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group