Dan, Yeah, secs is never be negative. This checking is redundant and have to be removed. Thanks Colin Ian King has done this patch for me on [next]. Thanks, Ching 2017-12-09 20:47 GMT+08:00 Dan Carpenter <dan.carpenter@xxxxxxxxxx>: > Hello Ching Huang, > > The patch b416c099472a: "scsi: arcmsr: Add a function to set date and > time to firmware" from Dec 5, 2017, leads to the following static > checker warning: > > drivers/scsi/arcmsr/arcmsr_hba.c:3682 arcmsr_set_iop_datetime() > warn: unsigned 'secs' is never less than zero. > > drivers/scsi/arcmsr/arcmsr_hba.c > 3658 static void arcmsr_set_iop_datetime(struct timer_list *t) > 3659 { > 3660 struct AdapterControlBlock *pacb = from_timer(pacb, t, refresh_timer); > 3661 unsigned int days, j, i, a, b, c, d, e, m, year, mon, day, hour, min, sec, secs, next_time; > ^^^^^^^^^^^^ ^^^ > > 3662 struct timeval tv; > 3663 union { > 3664 struct { > 3665 uint16_t signature; > 3666 uint8_t year; > 3667 uint8_t month; > 3668 uint8_t date; > 3669 uint8_t hour; > 3670 uint8_t minute; > 3671 uint8_t second; > 3672 } a; > 3673 struct { > 3674 uint32_t msg_time[2]; > 3675 } b; > 3676 } datetime; > 3677 > 3678 do_gettimeofday(&tv); > 3679 secs = (u32)(tv.tv_sec - (sys_tz.tz_minuteswest * 60)); > 3680 days = secs / 86400; > 3681 secs = secs - 86400 * days; > 3682 if (secs < 0) { > ^^^^^^^^ > Not possible. > > 3683 days = days - 1; > 3684 secs = secs + 86400; > 3685 } > 3686 j = days / 146097; > > > regards, > dan carpenter