aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/tools/ec2.conf7
-rw-r--r--share/man/man4/witness.46
-rw-r--r--sys/dev/acpica/acpi_pci.c9
-rw-r--r--sys/dev/acpica/acpivar.h3
-rw-r--r--sys/net/bpf.c4
-rw-r--r--sys/net/bridgestp.c3
-rw-r--r--sys/net/if.c1
-rw-r--r--sys/net/if_bridge.c4
-rw-r--r--sys/net/if_clone.c9
-rw-r--r--sys/net/if_clone.h1
-rw-r--r--sys/net/if_lagg.c4
-rw-r--r--sys/net/vnet.c3
-rw-r--r--sys/net80211/ieee80211_node.c2
-rw-r--r--sys/netinet/ip_carp.c3
-rw-r--r--sys/netinet/tcp_ratelimit.c9
15 files changed, 33 insertions, 35 deletions
diff --git a/release/tools/ec2.conf b/release/tools/ec2.conf
index b5a91d47decf..a8fc3854a0e2 100644
--- a/release/tools/ec2.conf
+++ b/release/tools/ec2.conf
@@ -72,8 +72,11 @@ ec2_common() {
# Graviton 1 through Graviton 4 have a bug in their ACPI where they
# mark the PL061's pins as needing to be configured in PullUp mode
- # (in fact the PL061 has no pullup/pulldown resistors).
- echo 'debug.acpi.quirks="8"' >> ${DESTDIR}/boot/loader.conf
+ # (in fact the PL061 has no pullup/pulldown resistors). Graviton 1
+ # through Graviton 3 have non-functional PCI _EJ0 and need a value
+ # written to the PCI power status register in order to eject a
+ # device.
+ echo 'debug.acpi.quirks="24"' >> ${DESTDIR}/boot/loader.conf
# Load the kernel module for the Amazon "Elastic Network Adapter"
echo 'if_ena_load="YES"' >> ${DESTDIR}/boot/loader.conf
diff --git a/share/man/man4/witness.4 b/share/man/man4/witness.4
index ab23eb49d9fe..f382a9378727 100644
--- a/share/man/man4/witness.4
+++ b/share/man/man4/witness.4
@@ -21,7 +21,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd November 18, 2015
+.Dd March 5, 2025
.Dt WITNESS 4
.Os
.Sh NAME
@@ -62,12 +62,12 @@ kernel option controls the maximum number of
.Nm
entries that are tracked in the kernel.
The maximum number of entries can be queried via the
-.Va debug.witness.count
+.Va debug.witness.witness_count
sysctl.
It can also be set from the
.Xr loader 8
via the
-.Va debug.witness.count
+.Va debug.witness.witness_count
environment variable.
.Pp
The
diff --git a/sys/dev/acpica/acpi_pci.c b/sys/dev/acpica/acpi_pci.c
index 6411af02ee58..97704111839b 100644
--- a/sys/dev/acpica/acpi_pci.c
+++ b/sys/dev/acpica/acpi_pci.c
@@ -391,6 +391,8 @@ acpi_pci_device_notify_handler(ACPI_HANDLE h, UINT32 notify, void *context)
{
device_t child, dev;
ACPI_STATUS status;
+ int pmc;
+ uint16_t pmstat;
int error;
dev = context;
@@ -416,6 +418,13 @@ acpi_pci_device_notify_handler(ACPI_HANDLE h, UINT32 notify, void *context)
device_get_nameunit(child), error);
return;
}
+ if ((acpi_quirks & ACPI_Q_CLEAR_PME_ON_DETACH) &&
+ (pci_find_cap(child, PCIY_PMG, &pmc) == 0)) {
+ pmstat = pci_read_config(child, pmc + PCIR_POWER_STATUS, 2);
+ pmstat &= ~PCIM_PSTAT_PMEENABLE;
+ pmstat |= PCIM_PSTAT_PME;
+ pci_write_config(child, pmc + PCIR_POWER_STATUS, pmstat, 2);
+ }
status = acpi_SetInteger(h, "_EJ0", 1);
if (ACPI_FAILURE(status)) {
bus_topo_unlock();
diff --git a/sys/dev/acpica/acpivar.h b/sys/dev/acpica/acpivar.h
index 668d0b51a1f3..830764434f48 100644
--- a/sys/dev/acpica/acpivar.h
+++ b/sys/dev/acpica/acpivar.h
@@ -230,6 +230,8 @@ extern struct mtx acpi_mutex;
* compatible flag and ignoring overrides that redirect IRQ 0 to pin 2.
* ACPI_Q_AEI_NOPULL: Specifies that _AEI objects incorrectly designate pins
* as "PullUp" and they should be treated as "NoPull" instead.
+ * ACPI_Q_CLEAR_PME_ON_DETACH: Specifies that PCIM_PSTAT_(PME & ~PMEENABLE)
+ * should be written to the power status register as part of ACPI Eject.
*/
extern int acpi_quirks;
#define ACPI_Q_OK 0
@@ -237,6 +239,7 @@ extern int acpi_quirks;
#define ACPI_Q_TIMER (1 << 1)
#define ACPI_Q_MADT_IRQ0 (1 << 2)
#define ACPI_Q_AEI_NOPULL (1 << 3)
+#define ACPI_Q_CLEAR_PME_ON_DETACH (1 << 4)
#if defined(__amd64__) || defined(__i386__)
/*
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
index a7e5bda97e23..263f241bcf5f 100644
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -182,7 +182,7 @@ struct bpf_dltlist32 {
* frames, ethernet frames, etc).
*/
CK_LIST_HEAD(bpf_iflist, bpf_if);
-static struct bpf_iflist bpf_iflist;
+static struct bpf_iflist bpf_iflist = CK_LIST_HEAD_INITIALIZER();
static struct sx bpf_sx; /* bpf global lock */
static int bpf_bpfd_cnt;
@@ -3006,8 +3006,6 @@ bpf_drvinit(void *unused)
struct cdev *dev;
sx_init(&bpf_sx, "bpf global lock");
- CK_LIST_INIT(&bpf_iflist);
-
dev = make_dev(&bpf_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, "bpf");
/* For compatibility */
make_dev_alias(dev, "bpf0");
diff --git a/sys/net/bridgestp.c b/sys/net/bridgestp.c
index cdaf6b415417..c67f1efe3d88 100644
--- a/sys/net/bridgestp.c
+++ b/sys/net/bridgestp.c
@@ -86,7 +86,7 @@
const uint8_t bstp_etheraddr[] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 };
-LIST_HEAD(, bstp_state) bstp_list;
+LIST_HEAD(, bstp_state) bstp_list = LIST_HEAD_INITIALIZER(bstp_list);
static struct mtx bstp_list_mtx;
static void bstp_transmit(struct bstp_state *, struct bstp_port *);
@@ -2137,7 +2137,6 @@ bstp_modevent(module_t mod, int type, void *data)
switch (type) {
case MOD_LOAD:
mtx_init(&bstp_list_mtx, "bridgestp list", NULL, MTX_DEF);
- LIST_INIT(&bstp_list);
break;
case MOD_UNLOAD:
mtx_destroy(&bstp_list_mtx);
diff --git a/sys/net/if.c b/sys/net/if.c
index ce0c3d5c0616..21e3b1a8576a 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -433,7 +433,6 @@ vnet_if_init(const void *unused __unused)
CK_STAILQ_INIT(&V_ifnet);
CK_STAILQ_INIT(&V_ifg_head);
- vnet_if_clone_init();
}
VNET_SYSINIT(vnet_if_init, SI_SUB_INIT_IF, SI_ORDER_SECOND, vnet_if_init,
NULL);
diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c
index 299b6d80dcde..5cb4a033e325 100644
--- a/sys/net/if_bridge.c
+++ b/sys/net/if_bridge.c
@@ -602,7 +602,8 @@ static const struct bridge_control bridge_control_table[] = {
};
static const int bridge_control_table_size = nitems(bridge_control_table);
-VNET_DEFINE_STATIC(LIST_HEAD(, bridge_softc), bridge_list);
+VNET_DEFINE_STATIC(LIST_HEAD(, bridge_softc), bridge_list) =
+ LIST_HEAD_INITIALIZER();
#define V_bridge_list VNET(bridge_list)
#define BRIDGE_LIST_LOCK_INIT(x) sx_init(&V_bridge_list_sx, \
"if_bridge list")
@@ -623,7 +624,6 @@ vnet_bridge_init(const void *unused __unused)
sizeof(struct bridge_rtnode), NULL, NULL, NULL, NULL,
UMA_ALIGN_PTR, 0);
BRIDGE_LIST_LOCK_INIT();
- LIST_INIT(&V_bridge_list);
struct if_clone_addreq req = {
.create_f = bridge_clone_create,
diff --git a/sys/net/if_clone.c b/sys/net/if_clone.c
index 13d89e4e2c59..066547ceeeb3 100644
--- a/sys/net/if_clone.c
+++ b/sys/net/if_clone.c
@@ -128,7 +128,7 @@ static int ifc_advanced_create_wrapper(struct if_clone *ifc, char *name, size_t
static struct mtx if_cloners_mtx;
MTX_SYSINIT(if_cloners_lock, &if_cloners_mtx, "if_cloners lock", MTX_DEF);
VNET_DEFINE_STATIC(int, if_cloners_count);
-VNET_DEFINE(LIST_HEAD(, if_clone), if_cloners);
+VNET_DEFINE(LIST_HEAD(, if_clone), if_cloners) = LIST_HEAD_INITIALIZER();
#define V_if_cloners_count VNET(if_cloners_count)
#define V_if_cloners VNET(if_cloners)
@@ -183,13 +183,6 @@ VNET_DEFINE(LIST_HEAD(, if_clone), if_cloners);
static MALLOC_DEFINE(M_CLONE, "clone", "interface cloning framework");
-void
-vnet_if_clone_init(void)
-{
-
- LIST_INIT(&V_if_cloners);
-}
-
/*
* Lookup and create a clone network interface.
*/
diff --git a/sys/net/if_clone.h b/sys/net/if_clone.h
index e11fc5c8cdd7..5a74ffa1cc2f 100644
--- a/sys/net/if_clone.h
+++ b/sys/net/if_clone.h
@@ -148,7 +148,6 @@ typedef void (*if_clone_event_handler_t)(void *, struct if_clone *);
EVENTHANDLER_DECLARE(if_clone_event, if_clone_event_handler_t);
/* The below interfaces used only by net/if.c. */
-void vnet_if_clone_init(void);
int if_clone_create(char *, size_t, caddr_t);
int if_clone_destroy(const char *);
int if_clone_list(struct if_clonereq *);
diff --git a/sys/net/if_lagg.c b/sys/net/if_lagg.c
index 9bc42cb8cbe6..9867a718e148 100644
--- a/sys/net/if_lagg.c
+++ b/sys/net/if_lagg.c
@@ -102,7 +102,8 @@ struct lagg_snd_tag {
struct m_snd_tag *tag;
};
-VNET_DEFINE_STATIC(SLIST_HEAD(__trhead, lagg_softc), lagg_list); /* list of laggs */
+VNET_DEFINE_STATIC(SLIST_HEAD(__trhead, lagg_softc), lagg_list) =
+ SLIST_HEAD_INITIALIZER(); /* list of laggs */
#define V_lagg_list VNET(lagg_list)
VNET_DEFINE_STATIC(struct mtx, lagg_list_mtx);
#define V_lagg_list_mtx VNET(lagg_list_mtx)
@@ -299,7 +300,6 @@ vnet_lagg_init(const void *unused __unused)
{
LAGG_LIST_LOCK_INIT();
- SLIST_INIT(&V_lagg_list);
struct if_clone_addreq req = {
.create_f = lagg_clone_create,
.destroy_f = lagg_clone_destroy,
diff --git a/sys/net/vnet.c b/sys/net/vnet.c
index 94be49376adf..c64aaf9f61b5 100644
--- a/sys/net/vnet.c
+++ b/sys/net/vnet.c
@@ -101,7 +101,7 @@ struct sx vnet_sxlock;
sx_xunlock(&vnet_sxlock); \
} while (0)
-struct vnet_list_head vnet_head;
+struct vnet_list_head vnet_head = LIST_HEAD_INITIALIZER(vnet_head);
struct vnet *vnet0;
/*
@@ -318,7 +318,6 @@ vnet_init_prelink(void *arg __unused)
rw_init(&vnet_rwlock, "vnet_rwlock");
sx_init(&vnet_sxlock, "vnet_sxlock");
sx_init(&vnet_sysinit_sxlock, "vnet_sysinit_sxlock");
- LIST_INIT(&vnet_head);
}
SYSINIT(vnet_init_prelink, SI_SUB_VNET_PRELINK, SI_ORDER_FIRST,
vnet_init_prelink, NULL);
diff --git a/sys/net80211/ieee80211_node.c b/sys/net80211/ieee80211_node.c
index f4185dfb04d4..a495f2f78113 100644
--- a/sys/net80211/ieee80211_node.c
+++ b/sys/net80211/ieee80211_node.c
@@ -2206,7 +2206,7 @@ ieee80211_node_delucastkey(struct ieee80211_node *ni)
IEEE80211_NODE_LOCK(nt);
nikey = NULL;
status = 1; /* NB: success */
- if (IEEE80211_KEY_UNDEFINED(&ni->ni_ucastkey)) {
+ if (!IEEE80211_KEY_UNDEFINED(&ni->ni_ucastkey)) {
keyix = ni->ni_ucastkey.wk_rxkeyix;
status = ieee80211_crypto_delkey(ni->ni_vap, &ni->ni_ucastkey);
if (nt->nt_keyixmap != NULL && keyix < nt->nt_keyixmax) {
diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c
index c01d1bdd8cff..0ead7149c1e2 100644
--- a/sys/netinet/ip_carp.c
+++ b/sys/netinet/ip_carp.c
@@ -357,7 +357,7 @@ static void carp_ifa_delroute(struct ifaddr *);
static void carp_send_ad_all(void *, int);
static void carp_demote_adj(int, char *);
-static LIST_HEAD(, carp_softc) carp_list;
+static LIST_HEAD(, carp_softc) carp_list = LIST_HEAD_INITIALIZER(carp_list);
static struct mtx carp_mtx;
static struct sx carp_sx;
static struct task carp_sendall_task =
@@ -3036,7 +3036,6 @@ carp_mod_load(void)
mtx_init(&carp_mtx, "carp_mtx", NULL, MTX_DEF);
sx_init(&carp_sx, "carp_sx");
- LIST_INIT(&carp_list);
carp_get_vhid_p = carp_get_vhid;
carp_forus_p = carp_forus;
carp_output_p = carp_output;
diff --git a/sys/netinet/tcp_ratelimit.c b/sys/netinet/tcp_ratelimit.c
index 22bdf707fa89..a0e837cc7d76 100644
--- a/sys/netinet/tcp_ratelimit.c
+++ b/sys/netinet/tcp_ratelimit.c
@@ -246,10 +246,10 @@ const uint64_t desired_rates[] = {
#define RS_ONE_GIGABIT_PERSEC 1000000000
#define RS_TEN_GIGABIT_PERSEC 10000000000
-static struct head_tcp_rate_set int_rs;
+static struct head_tcp_rate_set int_rs = CK_LIST_HEAD_INITIALIZER();
static struct mtx rs_mtx;
-uint32_t rs_number_alive;
-uint32_t rs_number_dead;
+uint32_t rs_number_alive = 0;
+uint32_t rs_number_dead = 0;
static uint32_t rs_floor_mss = 0;
static uint32_t wait_time_floor = 8000; /* 8 ms */
static uint32_t rs_hw_floor_mss = 16;
@@ -1778,9 +1778,6 @@ static eventhandler_tag rl_shutdown_start;
static void
tcp_rs_init(void *st __unused)
{
- CK_LIST_INIT(&int_rs);
- rs_number_alive = 0;
- rs_number_dead = 0;
mtx_init(&rs_mtx, "tcp_rs_mtx", "rsmtx", MTX_DEF);
rl_ifnet_departs = EVENTHANDLER_REGISTER(ifnet_departure_event,
tcp_rl_ifnet_departure,