Module Name: src
Committed By: msaitoh
Date: Thu Oct 12 08:06:13 UTC 2023
Modified Files:
src/sys/dev/pci/ixgbe: ixgbe.c ixgbe.h ixv.c
Log Message:
ixgbe: Don't override the {ixgbe,ixv}_max_interrupt_rate global variable.
Fix a bug that changing hw.ix[gv]X.qY.interrupt_rate would change all
devices all queues default interrupt rate.
To generate a diff of this commit:
cvs rdiff -u -r1.342 -r1.343 src/sys/dev/pci/ixgbe/ixgbe.c
cvs rdiff -u -r1.92 -r1.93 src/sys/dev/pci/ixgbe/ixgbe.h
cvs rdiff -u -r1.190 -r1.191 src/sys/dev/pci/ixgbe/ixv.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/ixgbe/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.342 src/sys/dev/pci/ixgbe/ixgbe.c:1.343
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.342 Thu Oct 12 05:50:55 2023
+++ src/sys/dev/pci/ixgbe/ixgbe.c Thu Oct 12 08:06:13 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.342 2023/10/12 05:50:55 msaitoh Exp $ */
+/* $NetBSD: ixgbe.c,v 1.343 2023/10/12 08:06:13 msaitoh Exp $ */
/******************************************************************************
@@ -64,7 +64,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ixgbe.c,v 1.342 2023/10/12 05:50:55 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixgbe.c,v 1.343 2023/10/12 08:06:13 msaitoh Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -3379,9 +3379,9 @@ ixgbe_sysctl_interrupt_rate_handler(SYSC
&& (reg < IXGBE_MIN_RSC_EITR_10G1G))
return EINVAL;
}
- ixgbe_max_interrupt_rate = rate;
+ sc->max_interrupt_rate = rate;
} else
- ixgbe_max_interrupt_rate = 0;
+ sc->max_interrupt_rate = 0;
ixgbe_eitr_write(sc, que->msix, reg);
return (0);
@@ -3486,6 +3486,7 @@ ixgbe_add_device_sysctls(struct ixgbe_so
aprint_error_dev(dev, "could not create sysctl\n");
sc->enable_aim = ixgbe_enable_aim;
+ sc->max_interrupt_rate = ixgbe_max_interrupt_rate;
if (sysctl_createv(log, 0, &rnode, &cnode, CTLFLAG_READWRITE,
CTLTYPE_BOOL, "enable_aim", SYSCTL_DESCR("Interrupt Moderation"),
NULL, 0, &sc->enable_aim, 0, CTL_CREATE, CTL_EOL) != 0)
@@ -4394,8 +4395,8 @@ ixgbe_configure_ivars(struct ixgbe_softc
struct ix_queue *que = sc->queues;
u32 newitr;
- if (ixgbe_max_interrupt_rate > 0)
- newitr = (4000000 / ixgbe_max_interrupt_rate) & 0x0FF8;
+ if (sc->max_interrupt_rate > 0)
+ newitr = (4000000 / sc->max_interrupt_rate) & 0x0FF8;
else {
/*
* Disable DMA coalescing if interrupt moderation is
Index: src/sys/dev/pci/ixgbe/ixgbe.h
diff -u src/sys/dev/pci/ixgbe/ixgbe.h:1.92 src/sys/dev/pci/ixgbe/ixgbe.h:1.93
--- src/sys/dev/pci/ixgbe/ixgbe.h:1.92 Fri Oct 6 14:48:08 2023
+++ src/sys/dev/pci/ixgbe/ixgbe.h Thu Oct 12 08:06:13 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.h,v 1.92 2023/10/06 14:48:08 msaitoh Exp $ */
+/* $NetBSD: ixgbe.h,v 1.93 2023/10/12 08:06:13 msaitoh Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -499,6 +499,7 @@ struct ixgbe_softc {
/* Info about the interface */
int advertise; /* link speeds */
bool enable_aim; /* adaptive interrupt moderation */
+ int max_interrupt_rate;
int link_active; /* Use LINK_STATE_* value */
u16 max_frame_size;
u16 num_segs;
Index: src/sys/dev/pci/ixgbe/ixv.c
diff -u src/sys/dev/pci/ixgbe/ixv.c:1.190 src/sys/dev/pci/ixgbe/ixv.c:1.191
--- src/sys/dev/pci/ixgbe/ixv.c:1.190 Thu Oct 12 03:43:55 2023
+++ src/sys/dev/pci/ixgbe/ixv.c Thu Oct 12 08:06:13 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ixv.c,v 1.190 2023/10/12 03:43:55 msaitoh Exp $ */
+/* $NetBSD: ixv.c,v 1.191 2023/10/12 08:06:13 msaitoh Exp $ */
/******************************************************************************
@@ -35,7 +35,7 @@
/*$FreeBSD: head/sys/dev/ixgbe/if_ixv.c 331224 2018-03-19 20:55:05Z erj $*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ixv.c,v 1.190 2023/10/12 03:43:55 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ixv.c,v 1.191 2023/10/12 08:06:13 msaitoh Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -550,6 +550,7 @@ ixv_attach(device_t parent, device_t dev
/* hw.ix defaults init */
sc->enable_aim = ixv_enable_aim;
+ sc->max_interrupt_rate = ixv_max_interrupt_rate;
sc->txrx_use_workqueue = ixv_txrx_workqueue;
@@ -2529,9 +2530,9 @@ ixv_sysctl_interrupt_rate_handler(SYSCTL
&& (reg < IXGBE_MIN_RSC_EITR_10G1G))
return EINVAL;
}
- ixv_max_interrupt_rate = rate;
+ sc->max_interrupt_rate = rate;
} else
- ixv_max_interrupt_rate = 0;
+ sc->max_interrupt_rate = 0;
ixv_eitr_write(sc, que->msix, reg);
return (0);