OpenBSD cvs log

created 2021-03-09T20:00:27Z
begin 2021-03-05T00:00:00Z
end 2021-03-06T00:00:00Z
path src/sys
commits 14

date 2021-03-05T00:18:26Z
author patrick
files src/sys/arch/arm64/dev/smmu.c log diff annotate
message Extend the commented code that shows which additional mappings are needed,
or which regions need to be reserved. As it turns out, a region we should
not map is the PCIe address space. Making a PCIe device try to do DMA to
an address in PCIe address space will obviously not make its way to SMMU
and host memory. We'll probably have to add an API for that.

date 2021-03-05T00:55:45Z
author patrick
files src/sys/arch/arm64/dev/smmu.c log diff annotate
src/sys/arch/arm64/dev/smmuvar.h log diff annotate
message Introduce an IOVA allocator instead of mapping pages 1:1. Mapping pages 1:1
obviously reduces the overhead of IOVA allocation, but instead you have the
problem of doubly mapped pages, and making sure a page is only unmapped once
the last user is gone. My initial attempt, modeled after apldart(4), calls
the allocator for each segment. Unfortunately this introduces a performance
penalty which reduces performance from around 700 Mbit/s to about 20 Mbit/s,
or even less, in a simple single stream tcpbench scenario. Most mbufs from
userland seem to have at least 3 segments. Calculating the needed IOVA space
upfront reduces this penalty. IOVA allocation overhead could be reduced once
and for all if it is possible to reserve IOVA during bus_dmamap_create(9), as
it is only called upon creation and basically never for each DMA cycle. This
needs some more thought.

With this we now put the pressure on the PTED pools instead. Additionally, but
not part of this diff, percpu pools for the PTEDs seem to reduce the overhead
for that single stream tcpbench scenario to 0.3%. Right now this means we're
hitting a different bottleneck, not related to the IOMMU. The next bottleneck
will be discovered once forwarding is unlocked. Though it should be possible
to benchmark the current implementation, and different designs, using a cycles
counter.

With IOVA allocation it's not easily possible to correlate memory passed to
bus_dmamem_map(9) with memory passed to bus_dmamap_load(9). So far my code
try to use the same cachability attributes as the kenrel uses for its userland
mappings. For the devices we support, there seems to be no need so far. If
this ever gives us any trouble in the feature, I'll have a look and fix it.

While drivers should call bus_dmamap_unload(9) before bus_dmamap_destroy(9),
the API explicitly states that bus_dmamap_destroy(9) should unload the map
if it is still loaded. Hence we need to do exactly that. I actually have
found one network driver which behaves that way, and the developer intends
to change the network driver's behaviour.

date 2021-03-05T01:16:55Z
author patrick
files src/sys/arch/arm64/dev/smmu.c log diff annotate
message Improve readability of softc accesses.

date 2021-03-05T03:51:41Z
author dlg
files src/sys/net/if_ethersubr.c log diff annotate
message work with 64bit ethernet addresses in ether_input().

this applies the tricks with addresses from veb and etherbridge
code to the normal ethernet input processing. it basically loads
the destination address from the packet and the interface ethernet
address into uint64_ts for comparison.

tested by hrvoje popovski and chris cappuccio
tested here on amd64, arm64, and sparc64
ok claudio@ jmatthew@

date 2021-03-05T05:30:44Z
author jsg
files src/sys/uvm/uvm_map.c log diff annotate
message ansi

date 2021-03-05T06:01:13Z
author jsg
files src/sys/ufs/ext2fs/ext2fs.h log diff annotate
message ansi

date 2021-03-05T06:44:09Z
author dlg
files src/sys/net/if_bridge.c log diff annotate
src/sys/net/if_ethersubr.c log diff annotate
src/sys/net/if_switch.c log diff annotate
src/sys/net/if_tpmr.c log diff annotate
src/sys/net/if_veb.c log diff annotate
src/sys/netinet/if_ether.h log diff annotate
message pass the uint64_t dst ethernet address from ether_input to bridges.

tested on amd64 and sparc64.

date 2021-03-05T07:01:36Z
author jsg
files src/sys/isofs/cd9660/cd9660_bmap.c log diff annotate
src/sys/isofs/cd9660/cd9660_lookup.c log diff annotate
src/sys/isofs/cd9660/cd9660_node.c log diff annotate
src/sys/isofs/cd9660/cd9660_rrip.c log diff annotate
src/sys/isofs/cd9660/cd9660_util.c log diff annotate
src/sys/isofs/cd9660/cd9660_vfsops.c log diff annotate
src/sys/isofs/cd9660/cd9660_vnops.c log diff annotate
src/sys/isofs/cd9660/iso.h log diff annotate
message ansi

date 2021-03-05T07:10:06Z
author jsg
files src/sys/isofs/cd9660/cd9660_lookup.c log diff annotate
src/sys/isofs/cd9660/cd9660_node.c log diff annotate
src/sys/isofs/cd9660/cd9660_rrip.c log diff annotate
src/sys/isofs/cd9660/cd9660_vfsops.c log diff annotate
src/sys/isofs/cd9660/cd9660_vnops.c log diff annotate
message deregister

date 2021-03-05T09:21:08Z
author jsg
files src/sys/net/bsd-comp.c log diff annotate
src/sys/net/ppp-deflate.c log diff annotate
message ansi

date 2021-03-05T09:37:20Z
author jsg
files src/sys/dev/mii/icsphy.c log diff annotate
src/sys/dev/mii/inphy.c log diff annotate
src/sys/dev/mii/iophy.c log diff annotate
src/sys/dev/mii/lxtphy.c log diff annotate
message ansi

date 2021-03-05T12:40:13Z
author jsg
files src/sys/dev/pci/adv_pci.c log diff annotate
src/sys/dev/pci/adw_pci.c log diff annotate
src/sys/dev/pci/ahc_pci.c log diff annotate
src/sys/dev/pci/cac_pci.c log diff annotate
src/sys/dev/pci/cs4281.c log diff annotate
src/sys/dev/pci/cy_pci.c log diff annotate
src/sys/dev/pci/i82365_pci.c log diff annotate
src/sys/dev/pci/if_ep_pci.c log diff annotate
src/sys/dev/pci/if_hme_pci.c log diff annotate
src/sys/dev/pci/if_wb.c log diff annotate
src/sys/dev/pci/iha_pci.c log diff annotate
src/sys/dev/pci/pccbb.c log diff annotate
src/sys/dev/pci/twe_pci.c log diff annotate
message ansi

date 2021-03-05T12:40:14Z
author jsg
files src/sys/dev/pci/bktr/bktr_os.c log diff annotate
src/sys/dev/pci/drm/i915/gt/agp_intel_gtt.c log diff annotate
message ansi

date 2021-03-05T13:20:19Z
author jsg
files src/sys/dev/puc/com_puc.c log diff annotate
src/sys/dev/puc/lpt_puc.c log diff annotate
message ansi