net/sfc/base: avoid division by 0 if no event queue timers
authorAndrew Rybchenko <arybchenko@solarflare.com>
Thu, 7 Feb 2019 16:29:41 +0000 (16:29 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 8 Feb 2019 10:35:41 +0000 (11:35 +0100)
If event queue timers are not supported, enc_evq_timer_quantum_ns and
enc_evq_timer_max_us should be set to 0. Make sure that division by 0
does not happen in libefx, if public function efx_ev_usecs_to_ticks()
is used in this case.

Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
drivers/net/sfc/base/efx_ev.c

index 69224cb..7b51302 100644 (file)
@@ -566,6 +566,12 @@ efx_ev_usecs_to_ticks(
 {
        efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
        unsigned int ticks;
+       efx_rc_t rc;
+
+       if (encp->enc_evq_timer_quantum_ns == 0) {
+               rc = ENOTSUP;
+               goto fail1;
+       }
 
        /* Convert microseconds to a timer tick count */
        if (us == 0)
@@ -577,6 +583,10 @@ efx_ev_usecs_to_ticks(
 
        *ticksp = ticks;
        return (0);
+
+fail1:
+       EFSYS_PROBE1(fail1, efx_rc_t, rc);
+       return (rc);
 }
 
        __checkReturn   efx_rc_t