From 174ac280116d14c2c3c277f4612d94cb6efb48e5 Mon Sep 17 00:00:00 2001 From: purplerain Date: Tue, 6 Aug 2024 04:33:39 +0000 Subject: [PATCH] sync with OpenBSD -current --- gnu/llvm/lld/ELF/Relocations.cpp | 4 +- lib/libz/zutil.h | 2 + share/man/man4/bpf.4 | 5 +- share/man/man9/timeout.9 | 6 +- sys/arch/armv7/armv7/intr.c | 31 ++-- sys/dev/acpi/acpibat.c | 10 +- sys/dev/fdt/mvgicp.c | 10 +- sys/dev/fdt/qcpas.c | 275 ++++++++++++++++++++++++------- sys/kern/kern_sysctl.c | 51 ++++-- sys/kern/kern_timeout.c | 11 +- sys/lib/libz/zutil.h | 2 + sys/net/bpf.c | 4 +- sys/net/if_bridge.c | 4 +- sys/net/if_veb.c | 6 +- sys/sys/timeout.h | 4 +- usr.bin/nc/netcat.c | 6 +- 16 files changed, 313 insertions(+), 118 deletions(-) diff --git a/gnu/llvm/lld/ELF/Relocations.cpp b/gnu/llvm/lld/ELF/Relocations.cpp index 9bdbad2d4..255fb28eb 100644 --- a/gnu/llvm/lld/ELF/Relocations.cpp +++ b/gnu/llvm/lld/ELF/Relocations.cpp @@ -798,8 +798,8 @@ static void reportGNUWarning(Symbol &sym, InputSectionBase &sec, // report first occurance only sym.gwarn = false; if (!gnuWarning.empty()) - message(sec.getSrcMsg(sym, offset) + "(" + sec.getObjMsg(offset) + - "): warning: " + gnuWarning); + warn(sec.getSrcMsg(sym, offset) + "(" + sec.getObjMsg(offset) + + "): warning: " + gnuWarning); } } diff --git a/lib/libz/zutil.h b/lib/libz/zutil.h index 3b186ef9e..c8b22a9b3 100644 --- a/lib/libz/zutil.h +++ b/lib/libz/zutil.h @@ -50,6 +50,8 @@ typedef unsigned long ulg; # define Z_U8 unsigned long # elif (ULLONG_MAX == 0xffffffffffffffff) # define Z_U8 unsigned long long +# elif (ULONG_LONG_MAX == 0xffffffffffffffff) +# define Z_U8 unsigned long long # elif (UINT_MAX == 0xffffffffffffffff) # define Z_U8 unsigned # endif diff --git a/share/man/man4/bpf.4 b/share/man/man4/bpf.4 index 46429f1cd..4990dc8a1 100644 --- a/share/man/man4/bpf.4 +++ b/share/man/man4/bpf.4 @@ -1,4 +1,4 @@ -.\" $OpenBSD: bpf.4,v 1.45 2023/03/09 06:01:40 dlg Exp $ +.\" $OpenBSD: bpf.4,v 1.46 2024/08/05 23:56:10 dlg Exp $ .\" $NetBSD: bpf.4,v 1.7 1995/09/27 18:31:50 thorpej Exp $ .\" .\" Copyright (c) 1990 The Regents of the University of California. @@ -23,7 +23,7 @@ .\" This document is derived in part from the enet man page (enet.4) .\" distributed with 4.3BSD Unix. .\" -.Dd $Mdocdate: March 9 2023 $ +.Dd $Mdocdate: August 5 2024 $ .Dt BPF 4 .Os .Sh NAME @@ -315,6 +315,7 @@ the kernel buffer becoming readable. By default, or when reset, the wait timeout is infinite, meaning the age of packets in the kernel buffer does not make the buffer readable. +The maximum wait time that can be set is 5 minutes (300 seconds). .Pp .It Dv BIOCSETF Fa "struct bpf_program *" Sets the filter program used by the kernel to discard uninteresting packets. diff --git a/share/man/man9/timeout.9 b/share/man/man9/timeout.9 index 4b37ebea1..61dff038e 100644 --- a/share/man/man9/timeout.9 +++ b/share/man/man9/timeout.9 @@ -1,4 +1,4 @@ -.\" $OpenBSD: timeout.9,v 1.57 2023/10/12 15:32:38 cheloha Exp $ +.\" $OpenBSD: timeout.9,v 1.58 2024/08/05 23:52:03 dlg Exp $ .\" .\" Copyright (c) 2000 Artur Grabowski .\" Copyright (c) 2021, 2022 Scott Cheloha @@ -24,7 +24,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: October 12 2023 $ +.Dd $Mdocdate: August 5 2024 $ .Dt TIMEOUT_SET 9 .Os .Sh NAME @@ -93,7 +93,7 @@ .Ft int .Fo timeout_add_nsec .Fa "struct timeout *to" -.Fa "int nsecs" +.Fa "uint64_t nsecs" .Fc .Ft int .Fo timeout_add_tv diff --git a/sys/arch/armv7/armv7/intr.c b/sys/arch/armv7/armv7/intr.c index 225178317..2fab0c3d3 100644 --- a/sys/arch/armv7/armv7/intr.c +++ b/sys/arch/armv7/armv7/intr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: intr.c,v 1.22 2024/06/26 01:40:49 jsg Exp $ */ +/* $OpenBSD: intr.c,v 1.23 2024/08/05 13:55:34 kettenis Exp $ */ /* * Copyright (c) 2011 Dale Rahn * @@ -25,7 +25,7 @@ #include -uint32_t arm_intr_get_parent(int); +int arm_intr_get_parent(int); uint32_t arm_intr_map_msi(int, uint64_t *); void *arm_intr_prereg_establish_fdt(void *, int *, int, struct cpu_info *, @@ -94,17 +94,21 @@ arm_intr_string(void *cookie) /* * Find the interrupt parent by walking up the tree. */ -uint32_t +int arm_intr_get_parent(int node) { - uint32_t phandle = 0; + uint32_t phandle; - while (node && !phandle) { + while (node) { phandle = OF_getpropint(node, "interrupt-parent", 0); + if (phandle) + return OF_getnodebyphandle(phandle); node = OF_parent(node); + if (OF_getpropbool(node, "interrupt-controller")) + return node; } - return phandle; + return 0; } uint32_t @@ -280,8 +284,6 @@ arm_intr_register_fdt(struct interrupt_controller *ic) ic->ic_cells = OF_getpropint(ic->ic_node, "#interrupt-cells", 0); ic->ic_phandle = OF_getpropint(ic->ic_node, "phandle", 0); - if (ic->ic_phandle == 0) - return; KASSERT(ic->ic_cells <= MAX_INTERRUPT_CELLS); LIST_INSERT_HEAD(&interrupt_controllers, ic, ic_list); @@ -335,7 +337,8 @@ arm_intr_establish_fdt_idx_cpu(int node, int idx, int level, struct cpu_info *ci int (*func)(void *), void *cookie, char *name) { struct interrupt_controller *ic; - int i, len, ncells, extended = 1; + int i, len, ncells, parent; + int extended = 1; uint32_t *cell, *cells, phandle; struct arm_intr_handle *ih; void *val = NULL; @@ -350,9 +353,9 @@ arm_intr_establish_fdt_idx_cpu(int node, int idx, int level, struct cpu_info *ci /* Old style. */ if (!extended) { - phandle = arm_intr_get_parent(node); + parent = arm_intr_get_parent(node); LIST_FOREACH(ic, &interrupt_controllers, ic_list) { - if (ic->ic_phandle == phandle) + if (ic->ic_node == parent) break; } @@ -563,12 +566,12 @@ arm_intr_parent_establish_fdt(void *cookie, int *cell, int level, { struct interrupt_controller *ic = cookie; struct arm_intr_handle *ih; - uint32_t phandle; + int parent; void *val; - phandle = arm_intr_get_parent(ic->ic_node); + parent = arm_intr_get_parent(ic->ic_node); LIST_FOREACH(ic, &interrupt_controllers, ic_list) { - if (ic->ic_phandle == phandle) + if (ic->ic_node == parent) break; } if (ic == NULL) diff --git a/sys/dev/acpi/acpibat.c b/sys/dev/acpi/acpibat.c index 75b6a1e44..7dc53ea6b 100644 --- a/sys/dev/acpi/acpibat.c +++ b/sys/dev/acpi/acpibat.c @@ -1,4 +1,4 @@ -/* $OpenBSD: acpibat.c,v 1.71 2024/06/24 15:56:07 mglocker Exp $ */ +/* $OpenBSD: acpibat.c,v 1.72 2024/08/05 18:37:29 kettenis Exp $ */ /* * Copyright (c) 2005 Marco Peereboom * @@ -279,13 +279,11 @@ acpibat_refresh(void *arg) else if (sc->sc_bst.bst_state & BST_CHARGE) strlcpy(sc->sc_sens[4].desc, "battery charging", sizeof(sc->sc_sens[4].desc)); - else if (sc->sc_bst.bst_state & BST_CRITICAL) { - strlcpy(sc->sc_sens[4].desc, "battery critical", - sizeof(sc->sc_sens[4].desc)); - sc->sc_sens[4].status = SENSOR_S_CRIT; - } else + else strlcpy(sc->sc_sens[4].desc, "battery idle", sizeof(sc->sc_sens[4].desc)); + if (sc->sc_bst.bst_state & BST_CRITICAL) + sc->sc_sens[4].status = SENSOR_S_CRIT; sc->sc_sens[4].value = sc->sc_bst.bst_state; if (sc->sc_bst.bst_rate == BST_UNKNOWN) { diff --git a/sys/dev/fdt/mvgicp.c b/sys/dev/fdt/mvgicp.c index a836e9fed..8aed455ce 100644 --- a/sys/dev/fdt/mvgicp.c +++ b/sys/dev/fdt/mvgicp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mvgicp.c,v 1.5 2021/10/24 17:52:26 mpi Exp $ */ +/* $OpenBSD: mvgicp.c,v 1.6 2024/08/05 18:39:34 kettenis Exp $ */ /* * Copyright (c) 2019 Patrick Wildt * @@ -74,7 +74,7 @@ mvgicp_attach(struct device *parent, struct device *self, void *aux) struct mvgicp_softc *sc = (struct mvgicp_softc *)self; struct fdt_attach_args *faa = aux; struct interrupt_controller *ic; - uint32_t phandle; + int node; if (faa->fa_nreg < 1) { printf(": no registers\n"); @@ -100,11 +100,11 @@ mvgicp_attach(struct device *parent, struct device *self, void *aux) return; } - extern uint32_t fdt_intr_get_parent(int); - phandle = fdt_intr_get_parent(faa->fa_node); + extern int fdt_intr_get_parent(int); + node = fdt_intr_get_parent(faa->fa_node); extern LIST_HEAD(, interrupt_controller) interrupt_controllers; LIST_FOREACH(ic, &interrupt_controllers, ic_list) { - if (ic->ic_phandle == phandle) + if (ic->ic_node == node) break; } sc->sc_parent_ic = ic; diff --git a/sys/dev/fdt/qcpas.c b/sys/dev/fdt/qcpas.c index 6585f9e69..05a9fdec5 100644 --- a/sys/dev/fdt/qcpas.c +++ b/sys/dev/fdt/qcpas.c @@ -1,4 +1,4 @@ -/* $OpenBSD: qcpas.c,v 1.5 2024/08/04 20:10:38 mglocker Exp $ */ +/* $OpenBSD: qcpas.c,v 1.6 2024/08/05 18:36:28 kettenis Exp $ */ /* * Copyright (c) 2023 Patrick Wildt * @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -102,6 +103,14 @@ struct qcpas_softc { struct task sc_glink_rx; uint32_t sc_glink_max_channel; TAILQ_HEAD(,qcpas_glink_channel) sc_glink_channels; + +#ifndef SMALL_KERNEL + uint32_t sc_last_full_capacity; + uint32_t sc_warning_capacity; + uint32_t sc_low_capacity; + struct ksensor sc_sens[11]; + struct ksensordev sc_sensdev; +#endif }; int qcpas_match(struct device *, void *, void *); @@ -271,6 +280,77 @@ qcpas_mountroot(struct device *self) node = OF_getnodebyname(sc->sc_node, "glink-edge"); if (node) qcpas_glink_attach(sc, node); + +#ifndef SMALL_KERNEL + strlcpy(sc->sc_sensdev.xname, sc->sc_dev.dv_xname, + sizeof(sc->sc_sensdev.xname)); + + strlcpy(sc->sc_sens[0].desc, "last full capacity", + sizeof(sc->sc_sens[0].desc)); + sc->sc_sens[0].type = SENSOR_WATTHOUR; + sc->sc_sens[0].flags = SENSOR_FUNKNOWN; + sensor_attach(&sc->sc_sensdev, &sc->sc_sens[0]); + + strlcpy(sc->sc_sens[1].desc, "warning capacity", + sizeof(sc->sc_sens[1].desc)); + sc->sc_sens[1].type = SENSOR_WATTHOUR; + sc->sc_sens[1].flags = SENSOR_FUNKNOWN; + sensor_attach(&sc->sc_sensdev, &sc->sc_sens[1]); + + strlcpy(sc->sc_sens[2].desc, "low capacity", + sizeof(sc->sc_sens[2].desc)); + sc->sc_sens[2].type = SENSOR_WATTHOUR; + sc->sc_sens[2].flags = SENSOR_FUNKNOWN; + sensor_attach(&sc->sc_sensdev, &sc->sc_sens[2]); + + strlcpy(sc->sc_sens[3].desc, "voltage", sizeof(sc->sc_sens[3].desc)); + sc->sc_sens[3].type = SENSOR_VOLTS_DC; + sc->sc_sens[3].flags = SENSOR_FUNKNOWN; + sensor_attach(&sc->sc_sensdev, &sc->sc_sens[3]); + + strlcpy(sc->sc_sens[4].desc, "battery unknown", + sizeof(sc->sc_sens[4].desc)); + sc->sc_sens[4].type = SENSOR_INTEGER; + sc->sc_sens[4].flags = SENSOR_FUNKNOWN; + sensor_attach(&sc->sc_sensdev, &sc->sc_sens[4]); + + strlcpy(sc->sc_sens[5].desc, "rate", sizeof(sc->sc_sens[5].desc)); + sc->sc_sens[5].type =SENSOR_WATTS; + sc->sc_sens[5].flags = SENSOR_FUNKNOWN; + sensor_attach(&sc->sc_sensdev, &sc->sc_sens[5]); + + strlcpy(sc->sc_sens[6].desc, "remaining capacity", + sizeof(sc->sc_sens[6].desc)); + sc->sc_sens[6].type = SENSOR_WATTHOUR; + sc->sc_sens[6].flags = SENSOR_FUNKNOWN; + sensor_attach(&sc->sc_sensdev, &sc->sc_sens[6]); + + strlcpy(sc->sc_sens[7].desc, "current voltage", + sizeof(sc->sc_sens[7].desc)); + sc->sc_sens[7].type = SENSOR_VOLTS_DC; + sc->sc_sens[7].flags = SENSOR_FUNKNOWN; + sensor_attach(&sc->sc_sensdev, &sc->sc_sens[7]); + + strlcpy(sc->sc_sens[8].desc, "design capacity", + sizeof(sc->sc_sens[8].desc)); + sc->sc_sens[8].type = SENSOR_WATTHOUR; + sc->sc_sens[8].flags = SENSOR_FUNKNOWN; + sensor_attach(&sc->sc_sensdev, &sc->sc_sens[8]); + + strlcpy(sc->sc_sens[9].desc, "discharge cycles", + sizeof(sc->sc_sens[9].desc)); + sc->sc_sens[9].type = SENSOR_INTEGER; + sc->sc_sens[9].flags = SENSOR_FUNKNOWN; + sensor_attach(&sc->sc_sensdev, &sc->sc_sens[9]); + + strlcpy(sc->sc_sens[10].desc, "temperature", + sizeof(sc->sc_sens[10].desc)); + sc->sc_sens[10].type = SENSOR_TEMP; + sc->sc_sens[10].flags = SENSOR_FUNKNOWN; + sensor_attach(&sc->sc_sensdev, &sc->sc_sens[10]); + + sensordev_install(&sc->sc_sensdev); +#endif } int @@ -1178,6 +1258,12 @@ struct battmgr_bat_status { uint32_t temperature; }; +void qcpas_pmic_rtr_refresh(void *); +void qcpas_pmic_rtr_bat_info(struct qcpas_softc *, + struct battmgr_bat_info *); +void qcpas_pmic_rtr_bat_status(struct qcpas_softc *, + struct battmgr_bat_status *); + void qcpas_pmic_rtr_battmgr_req_info(void *cookie) { @@ -1227,6 +1313,9 @@ qcpas_pmic_rtr_init(void *cookie) qcpas_pmic_rtr_apm_cookie = cookie; apm_setinfohook(qcpas_pmic_rtr_apminfo); +#endif +#ifndef SMALL_KERNEL + sensor_task_register(cookie, qcpas_pmic_rtr_refresh, 5); #endif return 0; } @@ -1234,12 +1323,10 @@ qcpas_pmic_rtr_init(void *cookie) int qcpas_pmic_rtr_recv(void *cookie, uint8_t *buf, int len) { -#if NAPM > 0 - static uint32_t last_full_capacity; -#endif + struct qcpas_glink_channel *ch = cookie; + struct qcpas_softc *sc = ch->ch_sc; struct pmic_glink_hdr hdr; uint32_t notification; - extern int hw_power; if (len < sizeof(hdr)) { printf("%s: pmic glink message too small\n", @@ -1282,67 +1369,21 @@ qcpas_pmic_rtr_recv(void *cookie, uint8_t *buf, int len) return 0; } bat = malloc(sizeof(*bat), M_TEMP, M_WAITOK); - memcpy((void *)bat, buf + sizeof(hdr), sizeof(*bat)); -#if NAPM > 0 - last_full_capacity = bat->last_full_capacity; -#endif + memcpy(bat, buf + sizeof(hdr), sizeof(*bat)); + qcpas_pmic_rtr_bat_info(sc, bat); free(bat, M_TEMP, sizeof(*bat)); break; } case BATTMGR_OPCODE_BAT_STATUS: { struct battmgr_bat_status *bat; -#if NAPM > 0 - struct apm_power_info *info; - uint32_t delta; -#endif if (len - sizeof(hdr) != sizeof(*bat)) { printf("%s: invalid battgmr bat status\n", __func__); return 0; } -#if NAPM > 0 - /* Needs BAT_INFO fist */ - if (last_full_capacity == 0) { - wakeup(&qcpas_pmic_rtr_apm_power_info); - return 0; - } -#endif bat = malloc(sizeof(*bat), M_TEMP, M_WAITOK); - memcpy((void *)bat, buf + sizeof(hdr), sizeof(*bat)); -#if NAPM > 0 - info = &qcpas_pmic_rtr_apm_power_info; - info->battery_life = ((bat->capacity * 100) / - last_full_capacity); - if (info->battery_life > 50) - info->battery_state = APM_BATT_HIGH; - else if (info->battery_life > 25) - info->battery_state = APM_BATT_LOW; - else - info->battery_state = APM_BATT_CRITICAL; - if (bat->battery_state & BATTMGR_BAT_STATE_CHARGING) - info->battery_state = APM_BATT_CHARGING; - else if (bat->battery_state & BATTMGR_BAT_STATE_CRITICAL_LOW) - info->battery_state = APM_BATT_CRITICAL; - - if (bat->rate < 0) - delta = bat->capacity; - else - delta = last_full_capacity - bat->capacity; - if (bat->rate == 0) - info->minutes_left = -1; - else - info->minutes_left = - (60 * delta) / abs(bat->rate); - - if (bat->power_state & BATTMGR_PWR_STATE_AC_ON) { - info->ac_state = APM_AC_ON; - hw_power = 1; - } else { - info->ac_state = APM_AC_OFF; - hw_power = 0; - } - wakeup(&qcpas_pmic_rtr_apm_power_info); -#endif + memcpy(bat, buf + sizeof(hdr), sizeof(*bat)); + qcpas_pmic_rtr_bat_status(sc, bat); free(bat, M_TEMP, sizeof(*bat)); break; } @@ -1377,3 +1418,127 @@ qcpas_pmic_rtr_apminfo(struct apm_power_info *info) return 0; } #endif + +void +qcpas_pmic_rtr_refresh(void *arg) +{ + qcpas_pmic_rtr_battmgr_req_status(arg); +} + +void +qcpas_pmic_rtr_bat_info(struct qcpas_softc *sc, struct battmgr_bat_info *bat) +{ +#ifndef SMALL_KERNEL + sc->sc_last_full_capacity = bat->last_full_capacity; + sc->sc_warning_capacity = bat->capacity_warning; + sc->sc_low_capacity = bat->capacity_low; + + sc->sc_sens[0].value = bat->last_full_capacity * 1000; + sc->sc_sens[0].flags &= ~SENSOR_FUNKNOWN; + + sc->sc_sens[1].value = bat->capacity_warning * 1000; + sc->sc_sens[1].flags &= ~SENSOR_FUNKNOWN; + + sc->sc_sens[2].value = bat->capacity_low * 1000; + sc->sc_sens[2].flags &= ~SENSOR_FUNKNOWN; + + sc->sc_sens[3].value = bat->design_voltage * 1000; + sc->sc_sens[3].flags &= ~SENSOR_FUNKNOWN; + + sc->sc_sens[8].value = bat->design_capacity * 1000; + sc->sc_sens[8].flags &= ~SENSOR_FUNKNOWN; + + sc->sc_sens[9].value = bat->cycle_count; + sc->sc_sens[9].flags &= ~SENSOR_FUNKNOWN; +#endif +} + +void +qcpas_pmic_rtr_bat_status(struct qcpas_softc *sc, + struct battmgr_bat_status *bat) +{ +#if NAPM > 0 + extern int hw_power; + struct apm_power_info *info = &qcpas_pmic_rtr_apm_power_info; + uint32_t delta; +#endif + +#ifndef SMALL_KERNEL + if (bat->capacity >= sc->sc_last_full_capacity) + strlcpy(sc->sc_sens[4].desc, "battery full", + sizeof(sc->sc_sens[4].desc)); + else if (bat->battery_state & BATTMGR_BAT_STATE_DISCHARGE) + strlcpy(sc->sc_sens[4].desc, "battery discharging", + sizeof(sc->sc_sens[4].desc)); + else if (bat->battery_state & BATTMGR_BAT_STATE_CHARGING) + strlcpy(sc->sc_sens[4].desc, "battery charging", + sizeof(sc->sc_sens[4].desc)); + else + strlcpy(sc->sc_sens[4].desc, "battery idle", + sizeof(sc->sc_sens[4].desc)); + if (bat->battery_state & BATTMGR_BAT_STATE_CRITICAL_LOW) + sc->sc_sens[4].status = SENSOR_S_CRIT; + else + sc->sc_sens[4].status = SENSOR_S_OK; + sc->sc_sens[4].value = bat->battery_state; + sc->sc_sens[4].flags &= ~SENSOR_FUNKNOWN; + + sc->sc_sens[5].value = abs(bat->rate) * 1000; + sc->sc_sens[5].flags &= ~SENSOR_FUNKNOWN; + + sc->sc_sens[6].value = bat->capacity * 1000; + if (bat->capacity < sc->sc_low_capacity) + sc->sc_sens[6].status = SENSOR_S_CRIT; + else if (bat->capacity < sc->sc_warning_capacity) + sc->sc_sens[6].status = SENSOR_S_WARN; + else + sc->sc_sens[6].status = SENSOR_S_OK; + sc->sc_sens[6].flags &= ~SENSOR_FUNKNOWN; + + sc->sc_sens[7].value = bat->battery_voltage * 1000; + sc->sc_sens[7].flags &= ~SENSOR_FUNKNOWN; + + sc->sc_sens[10].value = (bat->temperature * 10000) + 273150000; + sc->sc_sens[10].flags &= ~SENSOR_FUNKNOWN; +#endif + +#if NAPM > 0 + /* Needs BAT_INFO fist */ + if (sc->sc_last_full_capacity == 0) { + wakeup(&qcpas_pmic_rtr_apm_power_info); + return; + } + + info->battery_life = + ((bat->capacity * 100) / sc->sc_last_full_capacity); + if (info->battery_life > 50) + info->battery_state = APM_BATT_HIGH; + else if (info->battery_life > 25) + info->battery_state = APM_BATT_LOW; + else + info->battery_state = APM_BATT_CRITICAL; + if (bat->battery_state & BATTMGR_BAT_STATE_CHARGING) + info->battery_state = APM_BATT_CHARGING; + else if (bat->battery_state & BATTMGR_BAT_STATE_CRITICAL_LOW) + info->battery_state = APM_BATT_CRITICAL; + + if (bat->rate < 0) + delta = bat->capacity; + else + delta = sc->sc_last_full_capacity - bat->capacity; + if (bat->rate == 0) + info->minutes_left = -1; + else + info->minutes_left = (60 * delta) / abs(bat->rate); + + if (bat->power_state & BATTMGR_PWR_STATE_AC_ON) { + info->ac_state = APM_AC_ON; + hw_power = 1; + } else { + info->ac_state = APM_AC_OFF; + hw_power = 0; + } + + wakeup(&qcpas_pmic_rtr_apm_power_info); +#endif +} diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index f3cc559e8..7e7414562 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sysctl.c,v 1.430 2024/08/02 14:34:45 mvs Exp $ */ +/* $OpenBSD: kern_sysctl.c,v 1.433 2024/08/05 18:47:29 mvs Exp $ */ /* $NetBSD: kern_sysctl.c,v 1.17 1996/05/20 17:49:05 mrg Exp $ */ /*- @@ -172,26 +172,25 @@ sysctl_vslock(void *addr, size_t len) { int error; - KERNEL_LOCK(); error = rw_enter(&sysctl_lock, RW_WRITE|RW_INTR); if (error) - goto out; + return (error); + KERNEL_LOCK(); if (addr) { if (atop(len) > uvmexp.wiredmax - uvmexp.wired) { error = ENOMEM; - goto out2; + goto out; } error = uvm_vslock(curproc, addr, len, PROT_READ | PROT_WRITE); if (error) - goto out2; + goto out; } return (0); -out2: - rw_exit_write(&sysctl_lock); out: KERNEL_UNLOCK(); + rw_exit_write(&sysctl_lock); return (error); } @@ -202,8 +201,8 @@ sysctl_vsunlock(void *addr, size_t len) if (addr) uvm_vsunlock(curproc, addr, len); - rw_exit_write(&sysctl_lock); KERNEL_UNLOCK(); + rw_exit_write(&sysctl_lock); } int @@ -508,6 +507,12 @@ kern_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp, return (sysctl_rdstring(oldp, oldlenp, newp, version)); case KERN_NUMVNODES: /* XXX numvnodes is a long */ return (sysctl_rdint(oldp, oldlenp, newp, numvnodes)); + case KERN_BOOTTIME: { + struct timeval bt; + memset(&bt, 0, sizeof bt); + microboottime(&bt); + return (sysctl_rdstruct(oldp, oldlenp, newp, &bt, sizeof bt)); + } case KERN_MBSTAT: { extern struct cpumem *mbstat; uint64_t counters[MBSTAT_COUNT]; @@ -526,6 +531,30 @@ kern_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp, return (sysctl_rdstruct(oldp, oldlenp, newp, &mbs, sizeof(mbs))); } + case KERN_OSREV: + case KERN_NFILES: + case KERN_TTYCOUNT: + case KERN_ARGMAX: + case KERN_POSIX1: + case KERN_NGROUPS: + case KERN_JOB_CONTROL: + case KERN_SAVED_IDS: + case KERN_MAXPARTITIONS: + case KERN_RAWPARTITION: + case KERN_NTHREADS: + case KERN_SOMAXCONN: + case KERN_SOMINCONN: + case KERN_FSYNC: + case KERN_SYSVMSG: + case KERN_SYSVSEM: + case KERN_SYSVSHM: + case KERN_FSCALE: + case KERN_CCPU: + case KERN_NPROCS: + case KERN_NETLIVELOCKS: + case KERN_AUTOCONF_SERIAL: + return (sysctl_bounded_arr(kern_vars, nitems(kern_vars), name, + namelen, oldp, oldlenp, newp, newlen)); } savelen = *oldlenp; @@ -587,12 +616,6 @@ kern_sysctl_locked(int *name, u_int namelen, void *oldp, size_t *oldlenp, return (error); case KERN_CLOCKRATE: return (sysctl_clockrate(oldp, oldlenp, newp)); - case KERN_BOOTTIME: { - struct timeval bt; - memset(&bt, 0, sizeof bt); - microboottime(&bt); - return (sysctl_rdstruct(oldp, oldlenp, newp, &bt, sizeof bt)); - } case KERN_MSGBUFSIZE: case KERN_CONSBUFSIZE: { struct msgbuf *mp; diff --git a/sys/kern/kern_timeout.c b/sys/kern/kern_timeout.c index d6df62f08..19d0fbae4 100644 --- a/sys/kern/kern_timeout.c +++ b/sys/kern/kern_timeout.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_timeout.c,v 1.97 2024/02/23 16:51:39 cheloha Exp $ */ +/* $OpenBSD: kern_timeout.c,v 1.98 2024/08/05 23:51:11 dlg Exp $ */ /* * Copyright (c) 2001 Thomas Nordin * Copyright (c) 2000-2001 Artur Grabowski @@ -386,14 +386,17 @@ timeout_add_usec(struct timeout *to, int usecs) } int -timeout_add_nsec(struct timeout *to, int nsecs) +timeout_add_nsec(struct timeout *to, uint64_t nsecs) { - int to_ticks = nsecs / (tick * 1000); + uint64_t to_ticks; + to_ticks = nsecs / (tick * 1000); + if (to_ticks > INT_MAX) + to_ticks = INT_MAX; if (to_ticks == 0 && nsecs > 0) to_ticks = 1; - return timeout_add(to, to_ticks); + return timeout_add(to, (int)to_ticks); } int diff --git a/sys/lib/libz/zutil.h b/sys/lib/libz/zutil.h index 884d41785..ded8bebeb 100644 --- a/sys/lib/libz/zutil.h +++ b/sys/lib/libz/zutil.h @@ -63,6 +63,8 @@ typedef unsigned long ulg; # define Z_U8 unsigned long # elif (ULLONG_MAX == 0xffffffffffffffff) # define Z_U8 unsigned long long +# elif (ULONG_LONG_MAX == 0xffffffffffffffff) +# define Z_U8 unsigned long long # elif (UINT_MAX == 0xffffffffffffffff) # define Z_U8 unsigned # endif diff --git a/sys/net/bpf.c b/sys/net/bpf.c index 51a1ed66f..6adc594f1 100644 --- a/sys/net/bpf.c +++ b/sys/net/bpf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: bpf.c,v 1.222 2024/01/26 21:14:08 jan Exp $ */ +/* $OpenBSD: bpf.c,v 1.223 2024/08/05 23:56:10 dlg Exp $ */ /* $NetBSD: bpf.c,v 1.33 1997/02/21 23:59:35 thorpej Exp $ */ /* @@ -731,6 +731,8 @@ bpf_set_wtimeout(struct bpf_d *d, const struct timeval *tv) return (EINVAL); nsec = TIMEVAL_TO_NSEC(tv); + if (nsec > SEC_TO_NSEC(300)) + return (EINVAL); if (nsec > MAXTSLP) return (EOVERFLOW); diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c index 154f7de78..8f72c1c54 100644 --- a/sys/net/if_bridge.c +++ b/sys/net/if_bridge.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_bridge.c,v 1.370 2024/04/14 20:46:27 bluhm Exp $ */ +/* $OpenBSD: if_bridge.c,v 1.371 2024/08/05 17:47:29 bluhm Exp $ */ /* * Copyright (c) 1999, 2000 Jason L. Wright (jason@thought.net) @@ -70,7 +70,7 @@ #if NPF > 0 #include #define BRIDGE_IN PF_IN -#define BRIDGE_OUT PF_OUT +#define BRIDGE_OUT PF_FWD #else #define BRIDGE_IN 0 #define BRIDGE_OUT 1 diff --git a/sys/net/if_veb.c b/sys/net/if_veb.c index ebbca155c..02d02ed0e 100644 --- a/sys/net/if_veb.c +++ b/sys/net/if_veb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_veb.c,v 1.35 2024/02/13 12:22:09 bluhm Exp $ */ +/* $OpenBSD: if_veb.c,v 1.36 2024/08/05 17:47:29 bluhm Exp $ */ /* * Copyright (c) 2021 David Gwynne @@ -944,7 +944,7 @@ veb_broadcast(struct veb_softc *sc, struct veb_port *rp, struct mbuf *m0, * let pf look at it, but use the veb interface as a proxy. */ if (ISSET(ifp->if_flags, IFF_LINK1) && - (m0 = veb_pf(ifp, PF_OUT, m0)) == NULL) + (m0 = veb_pf(ifp, PF_FWD, m0)) == NULL) return; #endif @@ -1039,7 +1039,7 @@ veb_transmit(struct veb_softc *sc, struct veb_port *rp, struct veb_port *tp, #if NPF > 0 if (ISSET(ifp->if_flags, IFF_LINK1) && - (m = veb_pf(ifp0, PF_OUT, m)) == NULL) + (m = veb_pf(ifp0, PF_FWD, m)) == NULL) return (NULL); #endif diff --git a/sys/sys/timeout.h b/sys/sys/timeout.h index ff8250698..903877d4f 100644 --- a/sys/sys/timeout.h +++ b/sys/sys/timeout.h @@ -1,4 +1,4 @@ -/* $OpenBSD: timeout.h,v 1.48 2023/10/12 15:32:38 cheloha Exp $ */ +/* $OpenBSD: timeout.h,v 1.49 2024/08/05 23:51:11 dlg Exp $ */ /* * Copyright (c) 2000-2001 Artur Grabowski * All rights reserved. @@ -110,7 +110,7 @@ int timeout_add_tv(struct timeout *, const struct timeval *); int timeout_add_sec(struct timeout *, int); int timeout_add_msec(struct timeout *, int); int timeout_add_usec(struct timeout *, int); -int timeout_add_nsec(struct timeout *, int); +int timeout_add_nsec(struct timeout *, uint64_t); int timeout_abs_ts(struct timeout *, const struct timespec *); diff --git a/usr.bin/nc/netcat.c b/usr.bin/nc/netcat.c index 856a01c2b..a25c4f175 100644 --- a/usr.bin/nc/netcat.c +++ b/usr.bin/nc/netcat.c @@ -1,4 +1,4 @@ -/* $OpenBSD: netcat.c,v 1.227 2024/08/02 21:08:47 jan Exp $ */ +/* $OpenBSD: netcat.c,v 1.228 2024/08/05 07:16:30 tb Exp $ */ /* * Copyright (c) 2001 Eric Jackson * Copyright (c) 2015 Bob Beck. All rights reserved. @@ -644,10 +644,6 @@ main(int argc, char *argv[]) close(connfd); tls_free(tls_cctx); } - if (family == AF_UNIX && uflag) { - if (connect(s, NULL, 0) == -1) - err(1, "connect"); - } if (!kflag) break;