diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c index 66d17bae53f6..9cb17a0a1496 100644 --- a/drivers/usb/dwc3/debugfs.c +++ b/drivers/usb/dwc3/debugfs.c @@ -57,7 +57,7 @@ #define ep_event_rate(ev, c, p, dt) \ - ((dt) ? ((c.ev - p.ev) * (MSEC_PER_SEC)) / (dt) : 0) + ((dt) ? (calc_evt_rate(c.ev, p.ev, dt)) : 0) static const struct debugfs_reg32 dwc3_regs[] = { dump_register(GSBUSCFG0), @@ -1049,6 +1049,15 @@ static ssize_t dwc3_gadget_int_events_store(struct file *file, return count; } +static inline u64 calc_evt_rate(unsigned int c, unsigned int p, s64 dt) +{ + u64 ev_val; + + ev_val = (u64)((c-p)*(MSEC_PER_SEC)); + do_div(ev_val, (u64)dt); + return ev_val; +} + static int dwc3_gadget_int_events_show(struct seq_file *s, void *unused) { unsigned long flags;