Message ID | 20190910163434.2449-12-jeffrey.t.kirsher@intel.com |
---|---|
State | Changes Requested |
Delegated to: | David Miller |
Headers | show |
Series | Intel Wired LAN Driver Updates 2019-09-10 | expand |
On Tue, 2019-09-10 at 09:34 -0700, Jeff Kirsher wrote: > From: Alexander Duyck <alexander.h.duyck@linux.intel.com> > > There were a couple cases where the ITR value generated via the adaptive > ITR scheme could exceed 126. This resulted in the value becoming either 0 > or something less than 10. Switching back and forth between a value less > than 10 and a value greater than 10 can cause issues as certain hardware > features such as RSC to not function well when the ITR value has dropped > that low. One quick thing we can add on here is: Fixes: b4ded8327fea ("ixgbe: Update adaptive ITR algorithm") This is likely something that we may want to backport to stable. > Reported-by: Gregg Leventhal <gleventhal@janestreet.com> > Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com> > Tested-by: Andrew Bowers <andrewx.bowers@intel.com> > Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> > --- > drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > index dc034f4e8cf6..a5398b691aa8 100644 > --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > @@ -2623,7 +2623,7 @@ static void ixgbe_update_itr(struct ixgbe_q_vector *q_vector, > /* 16K ints/sec to 9.2K ints/sec */ > avg_wire_size *= 15; > avg_wire_size += 11452; > - } else if (avg_wire_size <= 1980) { > + } else if (avg_wire_size < 1968) { > /* 9.2K ints/sec to 8K ints/sec */ > avg_wire_size *= 5; > avg_wire_size += 22420; > @@ -2656,6 +2656,8 @@ static void ixgbe_update_itr(struct ixgbe_q_vector *q_vector, > case IXGBE_LINK_SPEED_2_5GB_FULL: > case IXGBE_LINK_SPEED_1GB_FULL: > case IXGBE_LINK_SPEED_10_FULL: > + if (avg_wire_size > 8064) > + avg_wire_size = 8064; > itr += DIV_ROUND_UP(avg_wire_size, > IXGBE_ITR_ADAPTIVE_MIN_INC * 64) * > IXGBE_ITR_ADAPTIVE_MIN_INC;
From: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Date: Tue, 10 Sep 2019 09:34:31 -0700 > From: Alexander Duyck <alexander.h.duyck@linux.intel.com> > > There were a couple cases where the ITR value generated via the adaptive > ITR scheme could exceed 126. This resulted in the value becoming either 0 > or something less than 10. Switching back and forth between a value less > than 10 and a value greater than 10 can cause issues as certain hardware > features such as RSC to not function well when the ITR value has dropped > that low. > > Reported-by: Gregg Leventhal <gleventhal@janestreet.com> > Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com> > Tested-by: Andrew Bowers <andrewx.bowers@intel.com> > Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Please remove this from the series, add the Fixes: tag, and submit for 'net' since Alexander says it is -stable material. Thanks.
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index dc034f4e8cf6..a5398b691aa8 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -2623,7 +2623,7 @@ static void ixgbe_update_itr(struct ixgbe_q_vector *q_vector, /* 16K ints/sec to 9.2K ints/sec */ avg_wire_size *= 15; avg_wire_size += 11452; - } else if (avg_wire_size <= 1980) { + } else if (avg_wire_size < 1968) { /* 9.2K ints/sec to 8K ints/sec */ avg_wire_size *= 5; avg_wire_size += 22420; @@ -2656,6 +2656,8 @@ static void ixgbe_update_itr(struct ixgbe_q_vector *q_vector, case IXGBE_LINK_SPEED_2_5GB_FULL: case IXGBE_LINK_SPEED_1GB_FULL: case IXGBE_LINK_SPEED_10_FULL: + if (avg_wire_size > 8064) + avg_wire_size = 8064; itr += DIV_ROUND_UP(avg_wire_size, IXGBE_ITR_ADAPTIVE_MIN_INC * 64) * IXGBE_ITR_ADAPTIVE_MIN_INC;