diff options
author | Paul Burton <paul.burton@imgtec.com> | 2016-08-19 17:43:57 +0100 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2016-08-30 22:18:59 -0400 |
commit | f8630bd7e2185d175f76b38b36609c45144e2d15 (patch) | |
tree | 5f80defef589138de79c27471ee9deeabf21c551 /drivers/scsi/sg.c | |
parent | b9b6e80ad3b11778f1066d698a838bcc86efb6be (diff) | |
download | linux-f8630bd7e2185d175f76b38b36609c45144e2d15.tar.gz linux-f8630bd7e2185d175f76b38b36609c45144e2d15.tar.bz2 linux-f8630bd7e2185d175f76b38b36609c45144e2d15.zip |
scsi: sg: Use mult_frac, drop MULDIV macro
The MULDIV macro is essentially a duplicate of the more standard
mult_frac macro. Replace use of MULDIV with mult_frac & drop the
duplication.
Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/sg.c')
-rw-r--r-- | drivers/scsi/sg.c | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index bb5ec2d6abdf..070332eb41f3 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -79,18 +79,7 @@ static void sg_proc_cleanup(void); */ #define SG_MAX_CDB_SIZE 252 -/* - * Suppose you want to calculate the formula muldiv(x,m,d)=int(x * m / d) - * Then when using 32 bit integers x * m may overflow during the calculation. - * Replacing muldiv(x) by muldiv(x)=((x % d) * m) / d + int(x / d) * m - * calculates the same, but prevents the overflow when both m and d - * are "small" numbers (like HZ and USER_HZ). - * Of course an overflow is inavoidable if the result of muldiv doesn't fit - * in 32 bits. - */ -#define MULDIV(X,MUL,DIV) ((((X % DIV) * MUL) / DIV) + ((X / DIV) * MUL)) - -#define SG_DEFAULT_TIMEOUT MULDIV(SG_DEFAULT_TIMEOUT_USER, HZ, USER_HZ) +#define SG_DEFAULT_TIMEOUT mult_frac(SG_DEFAULT_TIMEOUT_USER, HZ, USER_HZ) int sg_big_buff = SG_DEF_RESERVED_SIZE; /* N.B. This variable is readable and writeable via @@ -884,11 +873,11 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg) return result; if (val < 0) return -EIO; - if (val >= MULDIV((s64)INT_MAX, USER_HZ, HZ)) - val = min_t(s64, MULDIV((s64)INT_MAX, USER_HZ, HZ), + if (val >= mult_frac((s64)INT_MAX, USER_HZ, HZ)) + val = min_t(s64, mult_frac((s64)INT_MAX, USER_HZ, HZ), INT_MAX); sfp->timeout_user = val; - sfp->timeout = MULDIV (val, HZ, USER_HZ); + sfp->timeout = mult_frac(val, HZ, USER_HZ); return 0; case SG_GET_TIMEOUT: /* N.B. User receives timeout as return value */ |