sync with OpenBSD -current

This commit is contained in:
purplerain 2024-08-20 16:39:32 +00:00
parent eb9d621948
commit f36b410006
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
37 changed files with 350 additions and 317 deletions

View file

@ -1,4 +1,4 @@
/* $OpenBSD: bus_dma.c,v 1.53 2024/08/18 21:04:29 bluhm Exp $ */
/* $OpenBSD: bus_dma.c,v 1.55 2024/08/20 12:36:09 sf Exp $ */
/* $NetBSD: bus_dma.c,v 1.3 2003/05/07 21:33:58 fvdl Exp $ */
/*-
@ -102,7 +102,7 @@
#endif
int _bus_dmamap_load_buffer(bus_dma_tag_t, bus_dmamap_t, void *, bus_size_t,
struct proc *, int, paddr_t *, int *, int);
struct proc *, int, paddr_t *, int *, int *, int);
/*
* Common function for DMA map creation. May be called by bus-specific
@ -223,12 +223,18 @@ _bus_dmamap_destroy(bus_dma_tag_t t, bus_dmamap_t map)
size_t mapsize;
struct vm_page **pg;
struct pglist mlist;
int use_bounce_buffer = cpu_sev_guestmode || FORCE_BOUNCE_BUFFER;
if (map->_dm_pgva) {
km_free((void *)map->_dm_pgva, map->_dm_npages << PGSHIFT,
&kv_any, &kp_none);
}
mapsize = sizeof(struct bus_dmamap) +
(sizeof(bus_dma_segment_t) * (map->_dm_segcnt - 1));
if (use_bounce_buffer)
mapsize += sizeof(struct vm_page *) * map->_dm_npages;
if (map->_dm_pages) {
TAILQ_INIT(&mlist);
for (pg = map->_dm_pages; map->_dm_npages--; pg++) {
@ -237,8 +243,6 @@ _bus_dmamap_destroy(bus_dma_tag_t t, bus_dmamap_t map)
uvm_pglistfree(&mlist);
}
mapsize = sizeof(struct bus_dmamap) +
(sizeof(bus_dma_segment_t) * (map->_dm_segcnt - 1));
free(map, M_DEVBUF, mapsize);
}
@ -251,7 +255,7 @@ _bus_dmamap_load(bus_dma_tag_t t, bus_dmamap_t map, void *buf,
bus_size_t buflen, struct proc *p, int flags)
{
bus_addr_t lastaddr = 0;
int seg, error;
int seg, used, error;
/*
* Make sure that on error condition we return "no valid mappings".
@ -263,11 +267,13 @@ _bus_dmamap_load(bus_dma_tag_t t, bus_dmamap_t map, void *buf,
return (EINVAL);
seg = 0;
used = 0;
error = _bus_dmamap_load_buffer(t, map, buf, buflen, p, flags,
&lastaddr, &seg, 1);
&lastaddr, &seg, &used, 1);
if (error == 0) {
map->dm_mapsize = buflen;
map->dm_nsegs = seg + 1;
map->_dm_nused = used;
}
return (error);
}
@ -280,7 +286,7 @@ _bus_dmamap_load_mbuf(bus_dma_tag_t t, bus_dmamap_t map, struct mbuf *m0,
int flags)
{
paddr_t lastaddr = 0;
int seg, error, first;
int seg, used, error, first;
struct mbuf *m;
/*
@ -299,17 +305,19 @@ _bus_dmamap_load_mbuf(bus_dma_tag_t t, bus_dmamap_t map, struct mbuf *m0,
first = 1;
seg = 0;
used = 0;
error = 0;
for (m = m0; m != NULL && error == 0; m = m->m_next) {
if (m->m_len == 0)
continue;
error = _bus_dmamap_load_buffer(t, map, m->m_data, m->m_len,
NULL, flags, &lastaddr, &seg, first);
NULL, flags, &lastaddr, &seg, &used, first);
first = 0;
}
if (error == 0) {
map->dm_mapsize = m0->m_pkthdr.len;
map->dm_nsegs = seg + 1;
map->_dm_nused = used;
}
return (error);
}
@ -322,7 +330,7 @@ _bus_dmamap_load_uio(bus_dma_tag_t t, bus_dmamap_t map, struct uio *uio,
int flags)
{
paddr_t lastaddr = 0;
int seg, i, error, first;
int seg, used, i, error, first;
bus_size_t minlen, resid;
struct proc *p = NULL;
struct iovec *iov;
@ -347,6 +355,7 @@ _bus_dmamap_load_uio(bus_dma_tag_t t, bus_dmamap_t map, struct uio *uio,
first = 1;
seg = 0;
used = 0;
error = 0;
for (i = 0; i < uio->uio_iovcnt && resid != 0 && error == 0; i++) {
/*
@ -357,7 +366,7 @@ _bus_dmamap_load_uio(bus_dma_tag_t t, bus_dmamap_t map, struct uio *uio,
addr = (caddr_t)iov[i].iov_base;
error = _bus_dmamap_load_buffer(t, map, addr, minlen,
p, flags, &lastaddr, &seg, first);
p, flags, &lastaddr, &seg, &used, first);
first = 0;
resid -= minlen;
@ -365,6 +374,7 @@ _bus_dmamap_load_uio(bus_dma_tag_t t, bus_dmamap_t map, struct uio *uio,
if (error == 0) {
map->dm_mapsize = uio->uio_resid;
map->dm_nsegs = seg + 1;
map->_dm_nused = used;
}
return (error);
}
@ -683,8 +693,8 @@ _bus_dmamem_mmap(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs, off_t off,
*/
int
_bus_dmamap_load_buffer(bus_dma_tag_t t, bus_dmamap_t map, void *buf,
bus_size_t buflen, struct proc *p, int flags, paddr_t *lastaddrp, int *segp,
int first)
bus_size_t buflen, struct proc *p, int flags, paddr_t *lastaddrp,
int *segp, int *usedp, int first)
{
bus_size_t sgsize;
bus_addr_t curaddr, lastaddr, baddr, bmask;
@ -699,6 +709,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t t, bus_dmamap_t map, void *buf,
else
pmap = pmap_kernel();
page = *usedp;
lastaddr = *lastaddrp;
bmask = ~(map->_dm_boundary - 1);
@ -714,14 +725,14 @@ _bus_dmamap_load_buffer(bus_dma_tag_t t, bus_dmamap_t map, void *buf,
curaddr);
if (use_bounce_buffer) {
if (map->_dm_nused + 1 >= map->_dm_npages)
if (page >= map->_dm_npages)
return (ENOMEM);
off = vaddr & PAGE_MASK;
pg = map->_dm_pages[page = map->_dm_nused++];
pg = map->_dm_pages[page];
curaddr = VM_PAGE_TO_PHYS(pg) + off;
pgva = map->_dm_pgva + (page << PGSHIFT) + off;
page++;
}
/*
@ -774,6 +785,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t t, bus_dmamap_t map, void *buf,
}
*segp = seg;
*usedp = page;
*lastaddrp = lastaddr;
/*

View file

@ -1,4 +1,4 @@
/* $OpenBSD: param.c,v 1.50 2024/05/05 06:14:37 jsg Exp $ */
/* $OpenBSD: param.c,v 1.52 2024/08/20 13:29:25 mvs Exp $ */
/* $NetBSD: param.c,v 1.16 1996/03/12 03:08:40 mrg Exp $ */
/*
@ -49,6 +49,11 @@
#include <sys/sem.h>
#endif
/*
* Locks used to protect data:
* a atomic
*/
/*
* System parameter formulae.
*
@ -67,9 +72,9 @@ int utc_offset = 0;
#define NTEXT (80 + NPROCESS / 8) /* actually the object cache */
#define NVNODE (NPROCESS * 2 + NTEXT + 100)
int initialvnodes = NVNODE;
int maxprocess = NPROCESS;
int maxthread = 2 * NPROCESS;
int maxfiles = 5 * (NPROCESS + MAXUSERS) + 80;
int maxprocess = NPROCESS; /* [a] */
int maxthread = 2 * NPROCESS; /* [a] */
int maxfiles = 5 * (NPROCESS + MAXUSERS) + 80; /* [a] */
long nmbclust = NMBCLUSTERS;
#ifndef BUFCACHEPERCENT

View file

@ -1,4 +1,4 @@
/* $OpenBSD: audio.c,v 1.207 2024/06/07 08:48:10 jsg Exp $ */
/* $OpenBSD: audio.c,v 1.208 2024/08/20 07:44:36 mvs Exp $ */
/*
* Copyright (c) 2015 Alexandre Ratchov <alex@caoua.org>
*
@ -27,11 +27,17 @@
#include <sys/malloc.h>
#include <sys/device.h>
#include <sys/audioio.h>
#include <sys/atomic.h>
#include <dev/audio_if.h>
#include <dev/mulaw.h>
#include "audio.h"
#include "wskbd.h"
/*
* Locks used to protect data:
* a atomic
*/
#ifdef AUDIO_DEBUG
#define DPRINTF(...) \
do { \
@ -225,7 +231,7 @@ struct mutex audio_lock = MUTEX_INITIALIZER(IPL_AUDIO);
* Global flag to control if audio recording is enabled when the
* mixerctl setting is record.enable=sysctl
*/
int audio_record_enable = 0;
int audio_record_enable = 0; /* [a] */
#ifdef AUDIO_DEBUG
/*
@ -590,7 +596,7 @@ audio_rintr(void *addr)
sc->rec.pos += sc->rec.blksz;
if ((sc->record_enable == MIXER_RECORD_ENABLE_SYSCTL &&
!audio_record_enable) ||
atomic_load_int(&audio_record_enable) == 0) ||
sc->record_enable == MIXER_RECORD_ENABLE_OFF) {
ptr = audio_buf_wgetblk(&sc->rec, &count);
audio_fill_sil(sc, ptr, sc->rec.blksz);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: virtio_mmio.c,v 1.13 2024/05/17 16:37:10 sf Exp $ */
/* $OpenBSD: virtio_mmio.c,v 1.14 2024/08/20 07:04:29 sf Exp $ */
/* $NetBSD: virtio.c,v 1.3 2011/11/02 23:05:52 njoly Exp $ */
/*
@ -271,16 +271,16 @@ virtio_mmio_attach(struct device *parent, struct device *self, void *aux)
id = bus_space_read_4(sc->sc_iot, sc->sc_ioh, VIRTIO_MMIO_DEVICE_ID);
printf(": Virtio %s Device", virtio_device_string(id));
if (sc->sc_version == 1)
bus_space_write_4(sc->sc_iot, sc->sc_ioh,
VIRTIO_MMIO_GUEST_PAGE_SIZE, PAGE_SIZE);
printf("\n");
/* No device connected. */
if (id == 0)
return;
if (sc->sc_version == 1)
bus_space_write_4(sc->sc_iot, sc->sc_ioh,
VIRTIO_MMIO_GUEST_PAGE_SIZE, PAGE_SIZE);
vsc->sc_ops = &virtio_mmio_ops;
vsc->sc_dmat = sc->sc_dmat;
sc->sc_config_offset = VIRTIO_MMIO_CONFIG;

View file

@ -1,4 +1,4 @@
/* $OpenBSD: ufshci.c,v 1.39 2024/06/27 21:35:34 mglocker Exp $ */
/* $OpenBSD: ufshci.c,v 1.40 2024/08/20 05:36:38 jsg Exp $ */
/*
* Copyright (c) 2022 Marcus Glocker <mglocker@openbsd.org>
@ -347,7 +347,7 @@ ufshci_dmamem_alloc(struct ufshci_softc *sc, size_t size)
if (bus_dmamap_create(sc->sc_dmat, size, 1, size, 0,
BUS_DMA_WAITOK | BUS_DMA_ALLOCNOW |
(sc->sc_cap & UFSHCI_REG_CAP_64AS) ? BUS_DMA_64BIT : 0,
((sc->sc_cap & UFSHCI_REG_CAP_64AS) ? BUS_DMA_64BIT : 0),
&udm->udm_map) != 0)
goto udmfree;
@ -1428,7 +1428,7 @@ ufshci_ccb_alloc(struct ufshci_softc *sc, int nccbs)
if (bus_dmamap_create(sc->sc_dmat, UFSHCI_UCD_PRDT_MAX_XFER,
UFSHCI_UCD_PRDT_MAX_SEGS, UFSHCI_UCD_PRDT_MAX_XFER, 0,
BUS_DMA_WAITOK | BUS_DMA_ALLOCNOW |
(sc->sc_cap & UFSHCI_REG_CAP_64AS) ? BUS_DMA_64BIT : 0,
((sc->sc_cap & UFSHCI_REG_CAP_64AS) ? BUS_DMA_64BIT : 0),
&ccb->ccb_dmamap) != 0)
goto free_maps;

View file

@ -1,4 +1,4 @@
/* $OpenBSD: if_rge.c,v 1.29 2024/08/12 06:47:11 dlg Exp $ */
/* $OpenBSD: if_rge.c,v 1.30 2024/08/20 00:09:12 dlg Exp $ */
/*
* Copyright (c) 2019, 2020, 2023, 2024
@ -65,7 +65,6 @@ int rge_match(struct device *, void *, void *);
void rge_attach(struct device *, struct device *, void *);
int rge_activate(struct device *, int);
int rge_intr(void *);
int rge_encap(struct rge_queues *, struct mbuf *, int);
int rge_ioctl(struct ifnet *, u_long, caddr_t);
void rge_start(struct ifqueue *);
void rge_watchdog(struct ifnet *);
@ -413,29 +412,27 @@ rge_intr(void *arg)
return (claimed);
}
int
rge_encap(struct rge_queues *q, struct mbuf *m, int idx)
static inline void
rge_tx_list_sync(struct rge_softc *sc, struct rge_queues *q,
unsigned int idx, unsigned int len, int ops)
{
bus_dmamap_sync(sc->sc_dmat, q->q_tx.rge_tx_list_map,
idx * sizeof(struct rge_tx_desc), len * sizeof(struct rge_tx_desc),
ops);
}
static int
rge_encap(struct ifnet *ifp, struct rge_queues *q, struct mbuf *m, int idx)
{
struct rge_softc *sc = q->q_sc;
struct rge_tx_desc *d = NULL;
struct rge_txq *txq;
bus_dmamap_t txmap;
uint32_t cmdsts, cflags = 0;
int cur, error, i, last, nsegs;
/*
* Set RGE_TDEXTSTS_IPCSUM if any checksum offloading is requested.
* Otherwise, RGE_TDEXTSTS_TCPCSUM / RGE_TDEXTSTS_UDPCSUM does not
* take affect.
*/
if ((m->m_pkthdr.csum_flags &
(M_IPV4_CSUM_OUT | M_TCP_CSUM_OUT | M_UDP_CSUM_OUT)) != 0) {
cflags |= RGE_TDEXTSTS_IPCSUM;
if (m->m_pkthdr.csum_flags & M_TCP_CSUM_OUT)
cflags |= RGE_TDEXTSTS_TCPCSUM;
if (m->m_pkthdr.csum_flags & M_UDP_CSUM_OUT)
cflags |= RGE_TDEXTSTS_UDPCSUM;
}
int cur, error, i;
#if NBPFILTER > 0
caddr_t if_bpf;
#endif
txq = &q->q_tx.rge_txq[idx];
txmap = txq->txq_dmamap;
@ -455,10 +452,28 @@ rge_encap(struct rge_queues *q, struct mbuf *m, int idx)
return (0);
}
#if NBPFILTER > 0
if_bpf = READ_ONCE(ifp->if_bpf);
if (if_bpf)
bpf_mtap_ether(if_bpf, m, BPF_DIRECTION_OUT);
#endif
bus_dmamap_sync(sc->sc_dmat, txmap, 0, txmap->dm_mapsize,
BUS_DMASYNC_PREWRITE);
nsegs = txmap->dm_nsegs;
/*
* Set RGE_TDEXTSTS_IPCSUM if any checksum offloading is requested.
* Otherwise, RGE_TDEXTSTS_TCPCSUM / RGE_TDEXTSTS_UDPCSUM does not
* take affect.
*/
if ((m->m_pkthdr.csum_flags &
(M_IPV4_CSUM_OUT | M_TCP_CSUM_OUT | M_UDP_CSUM_OUT)) != 0) {
cflags |= RGE_TDEXTSTS_IPCSUM;
if (m->m_pkthdr.csum_flags & M_TCP_CSUM_OUT)
cflags |= RGE_TDEXTSTS_TCPCSUM;
if (m->m_pkthdr.csum_flags & M_UDP_CSUM_OUT)
cflags |= RGE_TDEXTSTS_UDPCSUM;
}
/* Set up hardware VLAN tagging. */
#if NVLAN > 0
@ -467,47 +482,57 @@ rge_encap(struct rge_queues *q, struct mbuf *m, int idx)
#endif
cur = idx;
cmdsts = RGE_TDCMDSTS_SOF;
for (i = 0; i < txmap->dm_nsegs; i++) {
d = &q->q_tx.rge_tx_list[cur];
d->rge_extsts = htole32(cflags);
d->rge_addrlo = htole32(RGE_ADDR_LO(txmap->dm_segs[i].ds_addr));
d->rge_addrhi = htole32(RGE_ADDR_HI(txmap->dm_segs[i].ds_addr));
for (i = 1; i < txmap->dm_nsegs; i++) {
cur = RGE_NEXT_TX_DESC(cur);
cmdsts = RGE_TDCMDSTS_OWN;
cmdsts |= txmap->dm_segs[i].ds_len;
if (cur == RGE_TX_LIST_CNT - 1)
cmdsts |= RGE_TDCMDSTS_EOR;
if (i == (txmap->dm_nsegs - 1))
if (i == txmap->dm_nsegs - 1)
cmdsts |= RGE_TDCMDSTS_EOF;
d = &q->q_tx.rge_tx_list[cur];
d->rge_cmdsts = htole32(cmdsts);
bus_dmamap_sync(sc->sc_dmat, q->q_tx.rge_tx_list_map,
cur * sizeof(struct rge_tx_desc), sizeof(struct rge_tx_desc),
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
last = cur;
cmdsts = RGE_TDCMDSTS_OWN;
cur = RGE_NEXT_TX_DESC(cur);
d->rge_extsts = htole32(cflags);
d->rge_addr = htole64(txmap->dm_segs[i].ds_addr);
}
/* Transfer ownership of packet to the chip. */
d = &q->q_tx.rge_tx_list[idx];
d->rge_cmdsts |= htole32(RGE_TDCMDSTS_OWN);
bus_dmamap_sync(sc->sc_dmat, q->q_tx.rge_tx_list_map,
idx * sizeof(struct rge_tx_desc), sizeof(struct rge_tx_desc),
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
/* Update info of TX queue and descriptors. */
txq->txq_mbuf = m;
txq->txq_descidx = last;
txq->txq_descidx = cur;
return (nsegs);
cmdsts = RGE_TDCMDSTS_SOF;
cmdsts |= txmap->dm_segs[0].ds_len;
if (idx == RGE_TX_LIST_CNT - 1)
cmdsts |= RGE_TDCMDSTS_EOR;
if (txmap->dm_nsegs == 1)
cmdsts |= RGE_TDCMDSTS_EOF;
d = &q->q_tx.rge_tx_list[idx];
d->rge_cmdsts = htole32(cmdsts);
d->rge_extsts = htole32(cflags);
d->rge_addr = htole64(txmap->dm_segs[0].ds_addr);
if (cur >= idx) {
rge_tx_list_sync(sc, q, idx, txmap->dm_nsegs,
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
} else {
rge_tx_list_sync(sc, q, idx, RGE_TX_LIST_CNT - idx,
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
rge_tx_list_sync(sc, q, 0, cur + 1,
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
}
/* Transfer ownership of packet to the chip. */
cmdsts |= RGE_TDCMDSTS_OWN;
rge_tx_list_sync(sc, q, idx, 1, BUS_DMASYNC_POSTWRITE);
d->rge_cmdsts = htole32(cmdsts);
rge_tx_list_sync(sc, q, idx, 1, BUS_DMASYNC_PREWRITE);
return (txmap->dm_nsegs);
}
int
@ -590,20 +615,15 @@ rge_start(struct ifqueue *ifq)
if (m == NULL)
break;
used = rge_encap(q, m, idx);
used = rge_encap(ifp, q, m, idx);
if (used == 0) {
m_freem(m);
continue;
}
KASSERT(used <= free);
KASSERT(used < free);
free -= used;
#if NBPFILTER > 0
if (ifp->if_bpf)
bpf_mtap_ether(ifp->if_bpf, m, BPF_DIRECTION_OUT);
#endif
idx += used;
if (idx >= RGE_TX_LIST_CNT)
idx -= RGE_TX_LIST_CNT;
@ -1357,24 +1377,21 @@ rge_txeof(struct rge_queues *q)
struct ifnet *ifp = &sc->sc_arpcom.ac_if;
struct rge_txq *txq;
uint32_t txstat;
int cons, idx, prod;
int cons, prod, cur, idx;
int free = 0;
prod = q->q_tx.rge_txq_prodidx;
cons = q->q_tx.rge_txq_considx;
while (prod != cons) {
txq = &q->q_tx.rge_txq[cons];
idx = txq->txq_descidx;
idx = cons;
while (idx != prod) {
txq = &q->q_tx.rge_txq[idx];
cur = txq->txq_descidx;
bus_dmamap_sync(sc->sc_dmat, q->q_tx.rge_tx_list_map,
idx * sizeof(struct rge_tx_desc),
sizeof(struct rge_tx_desc),
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
txstat = letoh32(q->q_tx.rge_tx_list[idx].rge_cmdsts);
if (txstat & RGE_TDCMDSTS_OWN) {
rge_tx_list_sync(sc, q, cur, 1, BUS_DMASYNC_POSTREAD);
txstat = q->q_tx.rge_tx_list[cur].rge_cmdsts;
rge_tx_list_sync(sc, q, cur, 1, BUS_DMASYNC_PREREAD);
if (ISSET(txstat, htole32(RGE_TDCMDSTS_OWN))) {
free = 2;
break;
}
@ -1385,24 +1402,30 @@ rge_txeof(struct rge_queues *q)
m_freem(txq->txq_mbuf);
txq->txq_mbuf = NULL;
if (txstat & (RGE_TDCMDSTS_EXCESSCOLL | RGE_TDCMDSTS_COLL))
if (ISSET(txstat,
htole32(RGE_TDCMDSTS_EXCESSCOLL | RGE_TDCMDSTS_COLL)))
ifp->if_collisions++;
if (txstat & RGE_TDCMDSTS_TXERR)
if (ISSET(txstat, htole32(RGE_TDCMDSTS_TXERR)))
ifp->if_oerrors++;
bus_dmamap_sync(sc->sc_dmat, q->q_tx.rge_tx_list_map,
idx * sizeof(struct rge_tx_desc),
sizeof(struct rge_tx_desc),
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
cons = RGE_NEXT_TX_DESC(idx);
idx = RGE_NEXT_TX_DESC(cur);
free = 1;
}
if (free == 0)
return (0);
q->q_tx.rge_txq_considx = cons;
if (idx >= cons) {
rge_tx_list_sync(sc, q, cons, idx - cons,
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
} else {
rge_tx_list_sync(sc, q, cons, RGE_TX_LIST_CNT - cons,
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
rge_tx_list_sync(sc, q, 0, idx,
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
}
q->q_tx.rge_txq_considx = idx;
if (ifq_is_oactive(&ifp->if_snd))
ifq_restart(&ifp->if_snd);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: if_rgereg.h,v 1.11 2024/06/30 08:13:02 kevlo Exp $ */
/* $OpenBSD: if_rgereg.h,v 1.12 2024/08/20 00:09:12 dlg Exp $ */
/*
* Copyright (c) 2019, 2020 Kevin Lo <kevlo@openbsd.org>
@ -206,10 +206,9 @@
struct rge_tx_desc {
uint32_t rge_cmdsts;
uint32_t rge_extsts;
uint32_t rge_addrlo;
uint32_t rge_addrhi;
uint64_t rge_addr;
uint32_t reserved[4];
};
} __packed __aligned(16);
#define RGE_TDCMDSTS_COLL 0x000f0000
#define RGE_TDCMDSTS_EXCESSCOLL 0x00100000

View file

@ -1,4 +1,4 @@
$OpenBSD: pcidevs,v 1.2084 2024/08/15 11:25:37 patrick Exp $
$OpenBSD: pcidevs,v 1.2085 2024/08/20 12:17:48 jsg Exp $
/* $NetBSD: pcidevs,v 1.30 1997/06/24 06:20:24 thorpej Exp $ */
/*
@ -8956,6 +8956,8 @@ product SAMSUNG2 SM981_NVME 0xa808 SM981/PM981 NVMe
product SAMSUNG2 PM991_NVME 0xa809 PM991 NVMe
product SAMSUNG2 PM9A1_NVME 0xa80a PM9A1 NVMe
product SAMSUNG2 PM9B1_NVME 0xa80b PM9B1 NVMe
product SAMSUNG2 PM9C1_NVME 0xa80c PM9C1 NVMe
product SAMSUNG2 PM9C1A_NVME 0xa80d PM9C1a NVMe
product SAMSUNG2 NVME_171X 0xa820 NVMe
product SAMSUNG2 NVME_172X 0xa821 NVMe
product SAMSUNG2 NVME_172X_A_B 0xa822 NVMe

View file

@ -2,7 +2,7 @@
* THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.
*
* generated from:
* OpenBSD: pcidevs,v 1.2084 2024/08/15 11:25:37 patrick Exp
* OpenBSD: pcidevs,v 1.2085 2024/08/20 12:17:48 jsg Exp
*/
/* $NetBSD: pcidevs,v 1.30 1997/06/24 06:20:24 thorpej Exp $ */
@ -8961,6 +8961,8 @@
#define PCI_PRODUCT_SAMSUNG2_PM991_NVME 0xa809 /* PM991 NVMe */
#define PCI_PRODUCT_SAMSUNG2_PM9A1_NVME 0xa80a /* PM9A1 NVMe */
#define PCI_PRODUCT_SAMSUNG2_PM9B1_NVME 0xa80b /* PM9B1 NVMe */
#define PCI_PRODUCT_SAMSUNG2_PM9C1_NVME 0xa80c /* PM9C1 NVMe */
#define PCI_PRODUCT_SAMSUNG2_PM9C1A_NVME 0xa80d /* PM9C1a NVMe */
#define PCI_PRODUCT_SAMSUNG2_NVME_171X 0xa820 /* NVMe */
#define PCI_PRODUCT_SAMSUNG2_NVME_172X 0xa821 /* NVMe */
#define PCI_PRODUCT_SAMSUNG2_NVME_172X_A_B 0xa822 /* NVMe */

View file

@ -2,7 +2,7 @@
* THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.
*
* generated from:
* OpenBSD: pcidevs,v 1.2084 2024/08/15 11:25:37 patrick Exp
* OpenBSD: pcidevs,v 1.2085 2024/08/20 12:17:48 jsg Exp
*/
/* $NetBSD: pcidevs,v 1.30 1997/06/24 06:20:24 thorpej Exp $ */
@ -32307,6 +32307,14 @@ static const struct pci_known_product pci_known_products[] = {
PCI_VENDOR_SAMSUNG2, PCI_PRODUCT_SAMSUNG2_PM9B1_NVME,
"PM9B1 NVMe",
},
{
PCI_VENDOR_SAMSUNG2, PCI_PRODUCT_SAMSUNG2_PM9C1_NVME,
"PM9C1 NVMe",
},
{
PCI_VENDOR_SAMSUNG2, PCI_PRODUCT_SAMSUNG2_PM9C1A_NVME,
"PM9C1a NVMe",
},
{
PCI_VENDOR_SAMSUNG2, PCI_PRODUCT_SAMSUNG2_NVME_171X,
"NVMe",

View file

@ -1,4 +1,4 @@
/* $OpenBSD: kern_descrip.c,v 1.208 2024/06/22 10:22:29 jsg Exp $ */
/* $OpenBSD: kern_descrip.c,v 1.209 2024/08/20 13:29:25 mvs Exp $ */
/* $NetBSD: kern_descrip.c,v 1.42 1996/03/30 22:24:38 christos Exp $ */
/*
@ -362,7 +362,7 @@ restart:
return (0);
}
if ((u_int)new >= lim_cur(RLIMIT_NOFILE) ||
(u_int)new >= maxfiles) {
(u_int)new >= atomic_load_int(&maxfiles)) {
FRELE(fp, p);
return (EBADF);
}
@ -424,7 +424,7 @@ restart:
case F_DUPFD_CLOEXEC:
newmin = (long)SCARG(uap, arg);
if ((u_int)newmin >= lim_cur(RLIMIT_NOFILE) ||
(u_int)newmin >= maxfiles) {
(u_int)newmin >= atomic_load_int(&maxfiles)) {
error = EINVAL;
break;
}
@ -877,7 +877,7 @@ fdalloc(struct proc *p, int want, int *result)
* expanding the ofile array.
*/
restart:
lim = min((int)lim_cur(RLIMIT_NOFILE), maxfiles);
lim = min((int)lim_cur(RLIMIT_NOFILE), atomic_load_int(&maxfiles));
last = min(fdp->fd_nfiles, lim);
if ((i = want) < fdp->fd_freefile)
i = fdp->fd_freefile;
@ -1037,7 +1037,7 @@ fnew(struct proc *p)
int nfiles;
nfiles = atomic_inc_int_nv(&numfiles);
if (nfiles > maxfiles) {
if (nfiles > atomic_load_int(&maxfiles)) {
atomic_dec_int(&numfiles);
tablefull("file");
return (NULL);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: kern_fork.c,v 1.263 2024/08/16 16:19:03 mpi Exp $ */
/* $OpenBSD: kern_fork.c,v 1.264 2024/08/20 07:48:23 mvs Exp $ */
/* $NetBSD: kern_fork.c,v 1.29 1996/02/09 18:59:34 christos Exp $ */
/*
@ -307,7 +307,7 @@ struct timeval fork_tfmrate = { 10, 0 };
int
fork_check_maxthread(uid_t uid)
{
int val;
int maxthread_local, val;
/*
* Although process entries are dynamically created, we still keep
@ -318,8 +318,10 @@ fork_check_maxthread(uid_t uid)
* the variable nthreads is the current number of procs, maxthread is
* the limit.
*/
maxthread_local = atomic_load_int(&maxthread);
val = atomic_inc_int_nv(&nthreads);
if ((val > maxthread - 5 && uid != 0) || val > maxthread) {
if ((val > maxthread_local - 5 && uid != 0) ||
val > maxthread_local) {
static struct timeval lasttfm;
if (ratecheck(&lasttfm, &fork_tfmrate))
@ -353,7 +355,7 @@ fork1(struct proc *curp, int flags, void (*func)(void *), void *arg,
struct proc *p;
uid_t uid = curp->p_ucred->cr_ruid;
struct vmspace *vm;
int count;
int count, maxprocess_local;
vaddr_t uaddr;
int error;
struct ptrace_state *newptstat = NULL;
@ -366,8 +368,9 @@ fork1(struct proc *curp, int flags, void (*func)(void *), void *arg,
if ((error = fork_check_maxthread(uid)))
return error;
if ((nprocesses >= maxprocess - 5 && uid != 0) ||
nprocesses >= maxprocess) {
maxprocess_local = atomic_load_int(&maxprocess);
if ((nprocesses >= maxprocess_local - 5 && uid != 0) ||
nprocesses >= maxprocess_local) {
static struct timeval lasttfm;
if (ratecheck(&lasttfm, &fork_tfmrate))

View file

@ -1,4 +1,4 @@
/* $OpenBSD: kern_resource.c,v 1.86 2024/07/09 15:20:15 claudio Exp $ */
/* $OpenBSD: kern_resource.c,v 1.88 2024/08/20 13:29:25 mvs Exp $ */
/* $NetBSD: kern_resource.c,v 1.38 1996/10/23 07:19:38 matthias Exp $ */
/*-
@ -275,10 +275,10 @@ dosetrlimit(struct proc *p, u_int which, struct rlimit *limp)
maxlim = maxsmap;
break;
case RLIMIT_NOFILE:
maxlim = maxfiles;
maxlim = atomic_load_int(&maxfiles);
break;
case RLIMIT_NPROC:
maxlim = maxprocess;
maxlim = atomic_load_int(&maxprocess);
break;
default:
maxlim = RLIM_INFINITY;

View file

@ -1,4 +1,4 @@
/* $OpenBSD: kern_sysctl.c,v 1.439 2024/08/14 17:52:47 mvs Exp $ */
/* $OpenBSD: kern_sysctl.c,v 1.442 2024/08/20 13:29:25 mvs Exp $ */
/* $NetBSD: kern_sysctl.c,v 1.17 1996/05/20 17:49:05 mrg Exp $ */
/*-
@ -455,11 +455,6 @@ kern_sysctl_dirs(int top_name, int *name, u_int namelen,
return witness_sysctl(name, namelen, oldp, oldlenp,
newp, newlen);
#endif
#if NAUDIO > 0
case KERN_AUDIO:
return (sysctl_audio(name, namelen, oldp, oldlenp,
newp, newlen));
#endif
#if NVIDEO > 0
case KERN_VIDEO:
return (sysctl_video(name, namelen, oldp, oldlenp,
@ -488,6 +483,16 @@ kern_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp,
/* dispatch the non-terminal nodes first */
if (namelen != 1) {
switch (name[0]) {
#if NAUDIO > 0
case KERN_AUDIO:
return (sysctl_audio(name, namelen, oldp, oldlenp,
newp, newlen));
#endif
default:
break;
}
savelen = *oldlenp;
if ((error = sysctl_vslock(oldp, savelen)))
return (error);
@ -549,6 +554,8 @@ kern_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp,
return (sysctl_rdint(oldp, oldlenp, newp, mp->msg_bufs));
}
case KERN_OSREV:
case KERN_MAXPROC:
case KERN_MAXFILES:
case KERN_NFILES:
case KERN_TTYCOUNT:
case KERN_ARGMAX:
@ -558,6 +565,7 @@ kern_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp,
case KERN_SAVED_IDS:
case KERN_MAXPARTITIONS:
case KERN_RAWPARTITION:
case KERN_MAXTHREAD:
case KERN_NTHREADS:
case KERN_SOMAXCONN:
case KERN_SOMINCONN:

View file

@ -1,4 +1,4 @@
/* $OpenBSD: if_etherip.c,v 1.55 2024/02/13 12:22:09 bluhm Exp $ */
/* $OpenBSD: if_etherip.c,v 1.56 2024/08/20 07:47:25 mvs Exp $ */
/*
* Copyright (c) 2015 Kazuya GODA <goda@openbsd.org>
*
@ -55,6 +55,11 @@
#include <net/if_etherip.h>
/*
* Locks used to protect data:
* a atomic
*/
union etherip_addr {
struct in_addr in4;
struct in6_addr in6;
@ -97,7 +102,7 @@ struct etherip_softc {
* We can control the acceptance of EtherIP packets by altering the sysctl
* net.inet.etherip.allow value. Zero means drop them, all else is acceptance.
*/
int etherip_allow = 0;
int etherip_allow = 0; /* [a] */
struct cpumem *etheripcounters;
@ -628,7 +633,8 @@ etherip_input(struct etherip_tunnel *key, struct mbuf *m, uint8_t tos,
struct etherip_header *eip;
int rxprio;
if (!etherip_allow && (m->m_flags & (M_AUTH|M_CONF)) == 0) {
if (atomic_load_int(&etherip_allow) == 0 &&
(m->m_flags & (M_AUTH|M_CONF)) == 0) {
etheripstat_inc(etherips_pdrops);
goto drop;
}
@ -799,19 +805,14 @@ int
etherip_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp,
void *newp, size_t newlen)
{
int error;
/* All sysctl names at this level are terminal. */
if (namelen != 1)
return ENOTDIR;
switch (name[0]) {
case ETHERIPCTL_ALLOW:
NET_LOCK();
error = sysctl_int_bounded(oldp, oldlenp, newp, newlen,
&etherip_allow, 0, 1);
NET_UNLOCK();
return (error);
return (sysctl_int_bounded(oldp, oldlenp, newp, newlen,
&etherip_allow, 0, 1));
case ETHERIPCTL_STATS:
return (etherip_sysctl_etheripstat(oldp, oldlenp, newp));
default:

View file

@ -1,4 +1,4 @@
/* $OpenBSD: igmp.c,v 1.84 2024/08/12 11:25:27 bluhm Exp $ */
/* $OpenBSD: igmp.c,v 1.85 2024/08/20 07:46:27 mvs Exp $ */
/* $NetBSD: igmp.c,v 1.15 1996/02/13 23:41:25 christos Exp $ */
/*
@ -687,8 +687,6 @@ igmp_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp,
switch (name[0]) {
case IGMPCTL_STATS:
if (newp != NULL)
return (EPERM);
return (igmp_sysctl_igmpstat(oldp, oldlenp, newp));
default:
return (EOPNOTSUPP);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: in_proto.c,v 1.108 2024/08/16 09:20:35 mvs Exp $ */
/* $OpenBSD: in_proto.c,v 1.110 2024/08/20 07:47:25 mvs Exp $ */
/* $NetBSD: in_proto.c,v 1.14 1996/02/18 18:58:32 christos Exp $ */
/*
@ -270,7 +270,7 @@ const struct protosw inetsw[] = {
.pr_type = SOCK_RAW,
.pr_domain = &inetdomain,
.pr_protocol = IPPROTO_IGMP,
.pr_flags = PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
.pr_flags = PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
.pr_input = igmp_input,
.pr_ctloutput = rip_ctloutput,
.pr_usrreqs = &rip_usrreqs,
@ -342,7 +342,7 @@ const struct protosw inetsw[] = {
.pr_type = SOCK_RAW,
.pr_domain = &inetdomain,
.pr_protocol = IPPROTO_PFSYNC,
.pr_flags = PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
.pr_flags = PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
.pr_input = pfsync_input4,
.pr_ctloutput = rip_ctloutput,
.pr_usrreqs = &rip_usrreqs,
@ -366,7 +366,7 @@ const struct protosw inetsw[] = {
.pr_type = SOCK_RAW,
.pr_domain = &inetdomain,
.pr_protocol = IPPROTO_ETHERIP,
.pr_flags = PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
.pr_flags = PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
.pr_input = ip_etherip_input,
.pr_ctloutput = rip_ctloutput,
.pr_usrreqs = &rip_usrreqs,

View file

@ -1,4 +1,4 @@
/* $OpenBSD: in6_proto.c,v 1.118 2024/08/16 09:20:35 mvs Exp $ */
/* $OpenBSD: in6_proto.c,v 1.119 2024/08/20 07:46:27 mvs Exp $ */
/* $KAME: in6_proto.c,v 1.66 2000/10/10 15:35:47 itojun Exp $ */
/*
@ -158,7 +158,7 @@ const struct protosw inet6sw[] = {
.pr_type = SOCK_RAW,
.pr_domain = &inet6domain,
.pr_protocol = IPPROTO_RAW,
.pr_flags = PR_ATOMIC|PR_ADDR|PR_MPINPUT|PR_MPSOCKET,
.pr_flags = PR_ATOMIC|PR_ADDR|PR_MPINPUT|PR_MPSOCKET|PR_MPSYSCTL,
.pr_input = rip6_input,
.pr_ctlinput = rip6_ctlinput,
.pr_ctloutput = rip6_ctloutput,