From owner-svn-src-projects@freebsd.org Tue Apr 28 00:44:10 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4754F2CCCC6 for ; Tue, 28 Apr 2020 00:44:10 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49B2vt1HMhz3yrl; Tue, 28 Apr 2020 00:44:10 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 26F9B1B934; Tue, 28 Apr 2020 00:44:10 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03S0iAK4014013; Tue, 28 Apr 2020 00:44:10 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03S0i5PR013992; Tue, 28 Apr 2020 00:44:05 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202004280044.03S0i5PR013992@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 28 Apr 2020 00:44:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r360419 - in projects/nfs-over-tls/sys: amd64/amd64 arm64/arm64 arm64/rockchip bsm cam/ata cam/nvme cam/scsi cddl/contrib/opensolaris/uts/common/fs/zfs compat/freebsd32 conf crypto/ccp ... X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: in projects/nfs-over-tls/sys: amd64/amd64 arm64/arm64 arm64/rockchip bsm cam/ata cam/nvme cam/scsi cddl/contrib/opensolaris/uts/common/fs/zfs compat/freebsd32 conf crypto/ccp dev/acpica dev/atkbdc dev... X-SVN-Commit-Revision: 360419 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Apr 2020 00:44:10 -0000 Author: rmacklem Date: Tue Apr 28 00:44:05 2020 New Revision: 360419 URL: https://svnweb.freebsd.org/changeset/base/360419 Log: Merge in an up to date kernel from head. Deleted: projects/nfs-over-tls/sys/riscv/conf/GENERICSF Modified: projects/nfs-over-tls/sys/amd64/amd64/minidump_machdep.c projects/nfs-over-tls/sys/arm64/arm64/minidump_machdep.c projects/nfs-over-tls/sys/arm64/rockchip/rk805.c projects/nfs-over-tls/sys/arm64/rockchip/rk_pinctrl.c projects/nfs-over-tls/sys/arm64/rockchip/rk_tsadc.c projects/nfs-over-tls/sys/bsm/audit_kevents.h projects/nfs-over-tls/sys/cam/ata/ata_da.c projects/nfs-over-tls/sys/cam/nvme/nvme_da.c projects/nfs-over-tls/sys/cam/scsi/scsi_da.c projects/nfs-over-tls/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c projects/nfs-over-tls/sys/compat/freebsd32/freebsd32_sysent.c projects/nfs-over-tls/sys/compat/freebsd32/syscalls.master projects/nfs-over-tls/sys/conf/Makefile.riscv projects/nfs-over-tls/sys/conf/kern.mk projects/nfs-over-tls/sys/crypto/ccp/ccp.c projects/nfs-over-tls/sys/dev/acpica/acpi_ec.c projects/nfs-over-tls/sys/dev/acpica/acpi_video.c projects/nfs-over-tls/sys/dev/atkbdc/psm.c projects/nfs-over-tls/sys/dev/cxgbe/crypto/t4_kern_tls.c projects/nfs-over-tls/sys/dev/cxgbe/tom/t4_tls.c projects/nfs-over-tls/sys/dev/cxgbe/tom/t4_tom.c projects/nfs-over-tls/sys/dev/cxgbe/tom/t4_tom.h projects/nfs-over-tls/sys/dev/hwpmc/hwpmc_intel.c projects/nfs-over-tls/sys/dev/ichiic/ig4_acpi.c projects/nfs-over-tls/sys/dev/ichiic/ig4_pci.c projects/nfs-over-tls/sys/dev/iicbus/acpi_iicbus.c projects/nfs-over-tls/sys/dev/iscsi_initiator/isc_subr.c projects/nfs-over-tls/sys/dev/iwm/if_iwm.c projects/nfs-over-tls/sys/dev/mlx5/mlx5_en/en.h projects/nfs-over-tls/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c projects/nfs-over-tls/sys/dev/mlx5/mlx5_en/mlx5_en_main.c projects/nfs-over-tls/sys/dev/mlx5/mlx5_ifc.h projects/nfs-over-tls/sys/dev/pci/pci_host_generic_fdt.c projects/nfs-over-tls/sys/dev/sound/pci/hda/hdac.c projects/nfs-over-tls/sys/fs/fifofs/fifo_vnops.c projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c projects/nfs-over-tls/sys/fs/nfs/nfskpiport.h projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c projects/nfs-over-tls/sys/geom/geom.h projects/nfs-over-tls/sys/i386/i386/minidump_machdep_base.c projects/nfs-over-tls/sys/kern/init_sysent.c projects/nfs-over-tls/sys/kern/kern_descrip.c projects/nfs-over-tls/sys/kern/kern_mib.c projects/nfs-over-tls/sys/kern/kern_shutdown.c projects/nfs-over-tls/sys/kern/kern_thread.c projects/nfs-over-tls/sys/kern/sys_pipe.c projects/nfs-over-tls/sys/kern/syscalls.master projects/nfs-over-tls/sys/kern/uipc_ktls.c projects/nfs-over-tls/sys/kern/uipc_socket.c projects/nfs-over-tls/sys/kern/vfs_mountroot.c projects/nfs-over-tls/sys/mips/mips/pmap.c projects/nfs-over-tls/sys/net/debugnet.c projects/nfs-over-tls/sys/net/if_bridge.c projects/nfs-over-tls/sys/net/ifdi_if.m projects/nfs-over-tls/sys/net/iflib.c projects/nfs-over-tls/sys/net/iflib.h projects/nfs-over-tls/sys/net/radix_mpath.c projects/nfs-over-tls/sys/net/route.c projects/nfs-over-tls/sys/net/route.h projects/nfs-over-tls/sys/net/route_var.h projects/nfs-over-tls/sys/net/rtsock.c projects/nfs-over-tls/sys/net80211/ieee80211_mesh.c projects/nfs-over-tls/sys/netgraph/ng_eiface.c projects/nfs-over-tls/sys/netinet/in_fib.c projects/nfs-over-tls/sys/netinet/in_fib.h projects/nfs-over-tls/sys/netinet/ip_input.c projects/nfs-over-tls/sys/netinet/ip_output.c projects/nfs-over-tls/sys/netinet/sctp_asconf.c projects/nfs-over-tls/sys/netinet/sctp_os_bsd.h projects/nfs-over-tls/sys/netinet/sctp_output.c projects/nfs-over-tls/sys/netinet/sctp_pcb.c projects/nfs-over-tls/sys/netinet/sctp_structs.h projects/nfs-over-tls/sys/netinet/sctp_timer.c projects/nfs-over-tls/sys/netinet/sctp_var.h projects/nfs-over-tls/sys/netinet/tcp.h projects/nfs-over-tls/sys/netinet/tcp_log_buf.h projects/nfs-over-tls/sys/netinet/tcp_offload.c projects/nfs-over-tls/sys/netinet/tcp_offload.h projects/nfs-over-tls/sys/netinet/tcp_output.c projects/nfs-over-tls/sys/netinet/tcp_stacks/bbr.c projects/nfs-over-tls/sys/netinet/tcp_stacks/rack.c projects/nfs-over-tls/sys/netinet/tcp_subr.c projects/nfs-over-tls/sys/netinet/tcp_usrreq.c projects/nfs-over-tls/sys/netinet/tcp_var.h projects/nfs-over-tls/sys/netinet/toecore.c projects/nfs-over-tls/sys/netinet/toecore.h projects/nfs-over-tls/sys/netinet/udp_usrreq.c projects/nfs-over-tls/sys/netinet6/in6.h projects/nfs-over-tls/sys/netinet6/in6_fib.c projects/nfs-over-tls/sys/netinet6/in6_fib.h projects/nfs-over-tls/sys/netinet6/in6_pcb.c projects/nfs-over-tls/sys/netinet6/in6_src.c projects/nfs-over-tls/sys/netinet6/ip6_output.c projects/nfs-over-tls/sys/netinet6/ip6_var.h projects/nfs-over-tls/sys/netinet6/nd6.c projects/nfs-over-tls/sys/netinet6/nd6.h projects/nfs-over-tls/sys/netinet6/nd6_rtr.c projects/nfs-over-tls/sys/netpfil/pf/pf_ioctl.c projects/nfs-over-tls/sys/netpfil/pf/pf_norm.c projects/nfs-over-tls/sys/nlm/nlm_prot_impl.c projects/nfs-over-tls/sys/powerpc/powerpc/minidump_machdep.c projects/nfs-over-tls/sys/riscv/include/param.h projects/nfs-over-tls/sys/riscv/riscv/elf_machdep.c projects/nfs-over-tls/sys/sys/filedesc.h projects/nfs-over-tls/sys/sys/kdb.h projects/nfs-over-tls/sys/sys/ktls.h projects/nfs-over-tls/sys/sys/param.h projects/nfs-over-tls/sys/sys/proc.h projects/nfs-over-tls/sys/sys/sysent.h projects/nfs-over-tls/sys/sys/sysproto.h projects/nfs-over-tls/sys/vm/vm_extern.h projects/nfs-over-tls/sys/vm/vm_glue.c projects/nfs-over-tls/sys/vm/vm_kern.h projects/nfs-over-tls/sys/vm/vm_swapout.c projects/nfs-over-tls/sys/x86/x86/cpu_machdep.c Directory Properties: projects/nfs-over-tls/sys/ (props changed) projects/nfs-over-tls/sys/cddl/contrib/opensolaris/ (props changed) Modified: projects/nfs-over-tls/sys/amd64/amd64/minidump_machdep.c ============================================================================== --- projects/nfs-over-tls/sys/amd64/amd64/minidump_machdep.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/amd64/amd64/minidump_machdep.c Tue Apr 28 00:44:05 2020 (r360419) @@ -409,7 +409,6 @@ minidumpsys(struct dumperinfo *di) } /* Dump memory chunks */ - /* XXX cluster it up and use blk_dump() */ for (i = 0; i < vm_page_dump_size / sizeof(*vm_page_dump); i++) { bits = vm_page_dump[i]; while (bits) { Modified: projects/nfs-over-tls/sys/arm64/arm64/minidump_machdep.c ============================================================================== --- projects/nfs-over-tls/sys/arm64/arm64/minidump_machdep.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/arm64/arm64/minidump_machdep.c Tue Apr 28 00:44:05 2020 (r360419) @@ -34,8 +34,6 @@ __FBSDID("$FreeBSD$"); #include "opt_watchdog.h" -#include "opt_watchdog.h" - #include #include #include @@ -68,7 +66,7 @@ static size_t fragsz; static void *dump_va; static size_t counter, progress, dumpsize; -static uint64_t tmpbuffer[PAGE_SIZE / sizeof(uint64_t)]; +static uint64_t tmpbuffer[Ln_ENTRIES]; CTASSERT(sizeof(*vm_page_dump) == 8); @@ -210,16 +208,14 @@ blk_write(struct dumperinfo *di, char *ptr, vm_paddr_t int minidumpsys(struct dumperinfo *di) { + struct minidumphdr mdhdr; pd_entry_t *l0, *l1, *l2; pt_entry_t *l3; - uint32_t pmapsize; vm_offset_t va; vm_paddr_t pa; - int error; uint64_t bits; - int i, bit; - int retry_count; - struct minidumphdr mdhdr; + uint32_t pmapsize; + int bit, error, i, j, retry_count; retry_count = 0; retry: @@ -231,11 +227,15 @@ minidumpsys(struct dumperinfo *di) if (!pmap_get_tables(pmap_kernel(), va, &l0, &l1, &l2, &l3)) continue; - /* We should always be using the l2 table for kvm */ - if (l2 == NULL) - continue; - - if ((*l2 & ATTR_DESCR_MASK) == L2_BLOCK) { + if ((*l1 & ATTR_DESCR_MASK) == L1_BLOCK) { + pa = *l1 & ~ATTR_MASK; + for (i = 0; i < Ln_ENTRIES * Ln_ENTRIES; + i++, pa += PAGE_SIZE) + if (is_dumpable(pa)) + dump_add_page(pa); + pmapsize += (Ln_ENTRIES - 1) * PAGE_SIZE; + va += L1_SIZE - L2_SIZE; + } else if ((*l2 & ATTR_DESCR_MASK) == L2_BLOCK) { pa = *l2 & ~ATTR_MASK; for (i = 0; i < Ln_ENTRIES; i++, pa += PAGE_SIZE) { if (is_dumpable(pa)) @@ -327,25 +327,31 @@ minidumpsys(struct dumperinfo *di) error = blk_flush(di); if (error) goto fail; - } else if (l2 == NULL) { + } else if ((*l1 & ATTR_DESCR_MASK) == L1_BLOCK) { + /* + * Handle a 1GB block mapping: write out 512 fake L2 + * pages. + */ pa = (*l1 & ~ATTR_MASK) | (va & L1_OFFSET); - /* Generate fake l3 entries based upon the l1 entry */ for (i = 0; i < Ln_ENTRIES; i++) { - tmpbuffer[i] = pa + (i * PAGE_SIZE) | - ATTR_DEFAULT | L3_PAGE; + for (j = 0; j < Ln_ENTRIES; j++) { + tmpbuffer[j] = pa + i * L2_SIZE + + j * PAGE_SIZE | ATTR_DEFAULT | + L3_PAGE; + } + error = blk_write(di, (char *)&tmpbuffer, 0, + PAGE_SIZE); + if (error) + goto fail; } - /* We always write a page, even if it is zero */ - error = blk_write(di, (char *)&tmpbuffer, 0, PAGE_SIZE); - if (error) - goto fail; /* flush, in case we reuse tmpbuffer in the same block*/ error = blk_flush(di); if (error) goto fail; bzero(&tmpbuffer, sizeof(tmpbuffer)); + va += L1_SIZE - L2_SIZE; } else if ((*l2 & ATTR_DESCR_MASK) == L2_BLOCK) { - /* TODO: Handle an invalid L2 entry */ pa = (*l2 & ~ATTR_MASK) | (va & L2_OFFSET); /* Generate fake l3 entries based upon the l1 entry */ @@ -353,7 +359,6 @@ minidumpsys(struct dumperinfo *di) tmpbuffer[i] = pa + (i * PAGE_SIZE) | ATTR_DEFAULT | L3_PAGE; } - /* We always write a page, even if it is zero */ error = blk_write(di, (char *)&tmpbuffer, 0, PAGE_SIZE); if (error) goto fail; @@ -366,7 +371,6 @@ minidumpsys(struct dumperinfo *di) } else { pa = *l2 & ~ATTR_MASK; - /* We always write a page, even if it is zero */ error = blk_write(di, NULL, pa, PAGE_SIZE); if (error) goto fail; @@ -374,7 +378,6 @@ minidumpsys(struct dumperinfo *di) } /* Dump memory chunks */ - /* XXX cluster it up and use blk_dump() */ for (i = 0; i < vm_page_dump_size / sizeof(*vm_page_dump); i++) { bits = vm_page_dump[i]; while (bits) { Modified: projects/nfs-over-tls/sys/arm64/rockchip/rk805.c ============================================================================== --- projects/nfs-over-tls/sys/arm64/rockchip/rk805.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/arm64/rockchip/rk805.c Tue Apr 28 00:44:05 2020 (r360419) @@ -85,6 +85,11 @@ struct rk805_reg_sc { struct regnode_std_param *param; }; +struct reg_list { + TAILQ_ENTRY(reg_list) next; + struct rk805_reg_sc *reg; +}; + struct rk805_softc { device_t dev; struct mtx mtx; @@ -93,7 +98,7 @@ struct rk805_softc { struct intr_config_hook intr_hook; enum rk_pmic_type type; - struct rk805_reg_sc **regs; + TAILQ_HEAD(, reg_list) regs; int nregs; }; @@ -619,6 +624,7 @@ rk805_attach(device_t dev) struct rk805_softc *sc; struct rk805_reg_sc *reg; struct rk805_regdef *regdefs; + struct reg_list *regp; phandle_t rnode, child; int i; @@ -645,8 +651,7 @@ rk805_attach(device_t dev) return (ENXIO); } - sc->regs = malloc(sizeof(struct rk805_reg_sc *) * sc->nregs, - M_RK805_REG, M_WAITOK | M_ZERO); + TAILQ_INIT(&sc->regs); rnode = ofw_bus_find_child(ofw_bus_get_node(dev), "regulators"); if (rnode > 0) { @@ -655,6 +660,8 @@ rk805_attach(device_t dev) regdefs[i].name); if (child == 0) continue; + if (OF_hasprop(child, "regulator-name") != 1) + continue; reg = rk805_reg_attach(dev, child, ®defs[i]); if (reg == NULL) { device_printf(dev, @@ -662,7 +669,9 @@ rk805_attach(device_t dev) regdefs[i].name); continue; } - sc->regs[i] = reg; + regp = malloc(sizeof(*regp), M_DEVBUF, M_WAITOK | M_ZERO); + regp->reg = reg; + TAILQ_INSERT_TAIL(&sc->regs, regp, next); if (bootverbose) device_printf(dev, "Regulator %s attached\n", regdefs[i].name); @@ -685,13 +694,13 @@ rk805_map(device_t dev, phandle_t xref, int ncells, pcell_t *cells, intptr_t *id) { struct rk805_softc *sc; - int i; + struct reg_list *regp; sc = device_get_softc(dev); - for (i = 0; i < sc->nregs; i++) { - if (sc->regs[i]->xref == xref) { - *id = sc->regs[i]->def->id; + TAILQ_FOREACH(regp, &sc->regs, next) { + if (regp->reg->xref == xref) { + *id = regp->reg->def->id; return (0); } } Modified: projects/nfs-over-tls/sys/arm64/rockchip/rk_pinctrl.c ============================================================================== --- projects/nfs-over-tls/sys/arm64/rockchip/rk_pinctrl.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/arm64/rockchip/rk_pinctrl.c Tue Apr 28 00:44:05 2020 (r360419) @@ -932,7 +932,28 @@ rk_pinctrl_configure_pin(struct rk_pinctrl_softc *sc, /* Find syscon */ syscon = sc->conf->get_syscon(sc, bank); - /* Parse pin function */ + /* Setup GPIO properties first */ + rv = rk_pinctrl_handle_io(sc, pin_conf, bank, pin); + + /* Then pin pull-up/down */ + bias = sc->conf->parse_bias(pin_conf, bank); + if (bias >= 0) { + reg = sc->conf->get_pd_offset(sc, bank); + reg += bank * 0x10 + ((pin / 8) * 0x4); + bit = (pin % 8) * 2; + mask = (0x3 << bit); + SYSCON_MODIFY_4(syscon, reg, mask, bias << bit | (mask << 16)); + } + + /* Then drive strength */ + rv = rk_pinctrl_parse_drive(sc, pin_conf, bank, subbank, &drive, ®); + if (rv == 0) { + bit = (pin % 8) * 2; + mask = (0x3 << bit); + SYSCON_MODIFY_4(syscon, reg, mask, drive << bit | (mask << 16)); + } + + /* Finally set the pin function */ reg = sc->conf->iomux_conf[i].offset; switch (sc->conf->iomux_conf[i].nbits) { case 4: @@ -966,28 +987,6 @@ rk_pinctrl_configure_pin(struct rk_pinctrl_softc *sc, * without hi-word write mask. */ SYSCON_MODIFY_4(syscon, reg, mask, function << bit | (mask << 16)); - - /* Pull-Up/Down */ - bias = sc->conf->parse_bias(pin_conf, bank); - if (bias >= 0) { - reg = sc->conf->get_pd_offset(sc, bank); - - reg += bank * 0x10 + ((pin / 8) * 0x4); - bit = (pin % 8) * 2; - mask = (0x3 << bit); - SYSCON_MODIFY_4(syscon, reg, mask, bias << bit | (mask << 16)); - } - - /* Drive Strength */ - rv = rk_pinctrl_parse_drive(sc, pin_conf, bank, subbank, &drive, ®); - if (rv == 0) { - bit = (pin % 8) * 2; - mask = (0x3 << bit); - SYSCON_MODIFY_4(syscon, reg, mask, drive << bit | (mask << 16)); - } - - /* Input/Outpot + default level */ - rv = rk_pinctrl_handle_io(sc, pin_conf, bank, pin); } static int Modified: projects/nfs-over-tls/sys/arm64/rockchip/rk_tsadc.c ============================================================================== --- projects/nfs-over-tls/sys/arm64/rockchip/rk_tsadc.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/arm64/rockchip/rk_tsadc.c Tue Apr 28 00:44:05 2020 (r360419) @@ -98,24 +98,19 @@ struct tsensor { int channel; }; -enum tsadc_type { - RK_TSADC_V2, - RK_TSADC_V3 -}; - struct rk_calib_entry { uint32_t raw; int temp; }; struct tsadc_calib_info { - bool decrement_mode; struct rk_calib_entry *table; int nentries; }; struct tsadc_conf { - enum tsadc_type type; + int use_syscon; + int q_sel_ntc; int shutdown_temp; int shutdown_mode; int shutdown_pol; @@ -188,7 +183,8 @@ struct tsensor rk3288_tsensors[] = { }; struct tsadc_conf rk3288_tsadc_conf = { - .type = RK_TSADC_V2, + .use_syscon = 0, + .q_sel_ntc = 0, .shutdown_temp = 95000, .shutdown_mode = 1, /* GPIO */ .shutdown_pol = 0, /* Low */ @@ -241,7 +237,8 @@ static struct tsensor rk3328_tsensors[] = { }; static struct tsadc_conf rk3328_tsadc_conf = { - .type = RK_TSADC_V3, + .use_syscon = 0, + .q_sel_ntc = 1, .shutdown_temp = 95000, .shutdown_mode = 0, /* CRU */ .shutdown_pol = 0, /* Low */ @@ -296,7 +293,8 @@ static struct tsensor rk3399_tsensors[] = { }; static struct tsadc_conf rk3399_tsadc_conf = { - .type = RK_TSADC_V3, + .use_syscon = 1, + .q_sel_ntc = 1, .shutdown_temp = 95000, .shutdown_mode = 1, /* GPIO */ .shutdown_pol = 0, /* Low */ @@ -444,11 +442,11 @@ tsadc_init(struct tsadc_softc *sc) val |= TSADC_AUTO_CON_POL_HI; else val &= ~TSADC_AUTO_CON_POL_HI; - if (sc->conf->type == RK_TSADC_V3) + if (sc->conf->q_sel_ntc) val |= TSADC_AUTO_Q_SEL; WR4(sc, TSADC_AUTO_CON, val); - if (sc->conf->type == RK_TSADC_V2) { + if (!sc->conf->use_syscon) { /* V2 init */ WR4(sc, TSADC_AUTO_PERIOD, 250); /* 250 ms */ WR4(sc, TSADC_AUTO_PERIOD_HT, 50); /* 50 ms */ Modified: projects/nfs-over-tls/sys/bsm/audit_kevents.h ============================================================================== --- projects/nfs-over-tls/sys/bsm/audit_kevents.h Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/bsm/audit_kevents.h Tue Apr 28 00:44:05 2020 (r360419) @@ -658,6 +658,7 @@ #define AUE_EXECVEAT 43262 /* FreeBSD/Linux. */ #define AUE_SHMRENAME 43263 /* FreeBSD-specific. */ #define AUE_REALPATHAT 43264 /* FreeBSD-specific. */ +#define AUE_CLOSERANGE 43265 /* FreeBSD-specific. */ /* * Darwin BSM uses a number of AUE_O_* definitions, which are aliased to the Modified: projects/nfs-over-tls/sys/cam/ata/ata_da.c ============================================================================== --- projects/nfs-over-tls/sys/cam/ata/ata_da.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/cam/ata/ata_da.c Tue Apr 28 00:44:05 2020 (r360419) @@ -109,8 +109,37 @@ typedef enum { ADA_FLAG_ANNOUNCED = 0x00100000, ADA_FLAG_DIRTY = 0x00200000, ADA_FLAG_CAN_NCQ_TRIM = 0x00400000, /* CAN_TRIM also set */ - ADA_FLAG_PIM_ATA_EXT = 0x00800000 + ADA_FLAG_PIM_ATA_EXT = 0x00800000, + ADA_FLAG_UNMAPPEDIO = 0x01000000, + ADA_FLAG_ROTATING = 0x02000000 } ada_flags; +#define ADA_FLAG_STRING \ + "\020" \ + "\002CAN_48BIT" \ + "\003CAN_FLUSHCACHE" \ + "\004CAN_NCQ" \ + "\005CAN_DMA" \ + "\006NEED_OTAG" \ + "\007WAS_OTAG" \ + "\010CAN_TRIM" \ + "\011OPEN" \ + "\012SCTX_INIT" \ + "\013CAN_CFA" \ + "\014CAN_POWERMGT" \ + "\015CAN_DMA48" \ + "\016CAN_LOG" \ + "\017CAN_IDLOG" \ + "\020CAN_SUPCAP" \ + "\021CAN_ZONE" \ + "\022CAN_WCACHE" \ + "\023CAN_RAHEAD" \ + "\024PROBED" \ + "\025ANNOUNCED" \ + "\026DIRTY" \ + "\027CAN_NCQ_TRIM" \ + "\030PIM_ATA_EXT" \ + "\031UNMAPPEDIO" \ + "\032ROTATING" typedef enum { ADA_Q_NONE = 0x00, @@ -239,8 +268,6 @@ struct ada_softc { int trim_max_ranges; int read_ahead; int write_cache; - int unmappedio; - int rotating; #ifdef CAM_TEST_FAILURE int force_read_error; int force_write_error; @@ -806,8 +833,10 @@ static periph_oninv_t adaoninvalidate; static periph_dtor_t adacleanup; static void adaasync(void *callback_arg, u_int32_t code, struct cam_path *path, void *arg); -static int adazonemodesysctl(SYSCTL_HANDLER_ARGS); +static int adabitsysctl(SYSCTL_HANDLER_ARGS); +static int adaflagssysctl(SYSCTL_HANDLER_ARGS); static int adazonesupsysctl(SYSCTL_HANDLER_ARGS); +static int adazonesupsysctl(SYSCTL_HANDLER_ARGS); static void adasysctlinit(void *context, int pending); static int adagetattr(struct bio *bp); static void adasetflags(struct ada_softc *softc, @@ -1488,12 +1517,6 @@ adasysctlinit(void *context, int pending) SYSCTL_ADD_INT(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), OID_AUTO, "write_cache", CTLFLAG_RW | CTLFLAG_MPSAFE, &softc->write_cache, 0, "Enable disk write cache."); - SYSCTL_ADD_INT(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), - OID_AUTO, "unmapped_io", CTLFLAG_RD | CTLFLAG_MPSAFE, - &softc->unmappedio, 0, "Unmapped I/O leaf"); - SYSCTL_ADD_INT(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), - OID_AUTO, "rotating", CTLFLAG_RD | CTLFLAG_MPSAFE, - &softc->rotating, 0, "Rotating media"); SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), OID_AUTO, "zone_mode", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, @@ -1518,6 +1541,18 @@ adasysctlinit(void *context, int pending) SYSCTL_CHILDREN(softc->sysctl_tree), OID_AUTO, "max_seq_zones", CTLFLAG_RD, &softc->max_seq_zones, "Maximum Number of Open Sequential Write Required Zones"); + SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), + OID_AUTO, "flags", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, + softc, 0, adaflagssysctl, "A", + "Flags for drive"); + SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), + OID_AUTO, "unmapped_io", CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, + &softc->flags, (u_int)ADA_FLAG_UNMAPPEDIO, adabitsysctl, "I", + "Unmapped I/O support *DEPRECATED* gone in FreeBSD 14"); + SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), + OID_AUTO, "rotating", CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, + &softc->flags, (u_int)ADA_FLAG_ROTATING, adabitsysctl, "I", + "Rotating media *DEPRECATED* gone in FreeBSD 14"); #ifdef CAM_TEST_FAILURE /* @@ -1626,6 +1661,39 @@ adadeletemethodsysctl(SYSCTL_HANDLER_ARGS) return (EINVAL); } +static int +adabitsysctl(SYSCTL_HANDLER_ARGS) +{ + u_int *flags = arg1; + u_int test = arg2; + int tmpout, error; + + tmpout = !!(*flags & test); + error = SYSCTL_OUT(req, &tmpout, sizeof(tmpout)); + if (error || !req->newptr) + return (error); + + return (EPERM); +} + +static int +adaflagssysctl(SYSCTL_HANDLER_ARGS) +{ + struct sbuf sbuf; + struct ada_softc *softc = arg1; + int error; + + sbuf_new_for_sysctl(&sbuf, NULL, 0, req); + if (softc->flags != 0) + sbuf_printf(&sbuf, "0x%b", (unsigned)softc->flags, ADA_FLAG_STRING); + else + sbuf_printf(&sbuf, "0"); + error = sbuf_finish(&sbuf); + sbuf_delete(&sbuf); + + return (error); +} + static void adasetflags(struct ada_softc *softc, struct ccb_getdev *cgd) { @@ -1807,11 +1875,12 @@ adaregister(struct cam_periph *periph, void *arg) /* Disable queue sorting for non-rotational media by default. */ if (cgd->ident_data.media_rotation_rate == ATA_RATE_NON_ROTATING) { - softc->rotating = 0; + softc->flags &= ~ADA_FLAG_ROTATING; } else { - softc->rotating = 1; + softc->flags |= ADA_FLAG_ROTATING; } - cam_iosched_set_sort_queue(softc->cam_iosched, softc->rotating ? -1 : 0); + cam_iosched_set_sort_queue(softc->cam_iosched, + (softc->flags & ADA_FLAG_ROTATING) ? -1 : 0); softc->disk = disk_alloc(); adasetgeom(softc, cgd); softc->disk->d_devstat = devstat_new_entry(periph->periph_name, @@ -3411,7 +3480,7 @@ adasetgeom(struct ada_softc *softc, struct ccb_getdev softc->disk->d_delmaxsize = maxio; if ((softc->cpi.hba_misc & PIM_UNMAPPED) != 0) { d_flags |= DISKFLAG_UNMAPPED_BIO; - softc->unmappedio = 1; + softc->flags |= ADA_FLAG_UNMAPPEDIO; } softc->disk->d_flags = d_flags; strlcpy(softc->disk->d_descr, cgd->ident_data.model, Modified: projects/nfs-over-tls/sys/cam/nvme/nvme_da.c ============================================================================== --- projects/nfs-over-tls/sys/cam/nvme/nvme_da.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/cam/nvme/nvme_da.c Tue Apr 28 00:44:05 2020 (r360419) @@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #endif /* _KERNEL */ @@ -75,6 +76,11 @@ typedef enum { NDA_FLAG_DIRTY = 0x0002, NDA_FLAG_SCTX_INIT = 0x0004, } nda_flags; +#define NDA_FLAG_STRING \ + "\020" \ + "\001OPEN" \ + "\002DIRTY" \ + "\003SCTX_INIT" typedef enum { NDA_Q_4K = 0x01, @@ -144,6 +150,7 @@ static periph_init_t ndainit; static void ndaasync(void *callback_arg, u_int32_t code, struct cam_path *path, void *arg); static void ndasysctlinit(void *context, int pending); +static int ndaflagssysctl(SYSCTL_HANDLER_ARGS); static periph_ctor_t ndaregister; static periph_dtor_t ndacleanup; static periph_start_t ndastart; @@ -659,6 +666,11 @@ ndasysctlinit(void *context, int pending) OID_AUTO, "rotating", CTLFLAG_RD, &nda_rotating_media, 1, "Rotating media"); + SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), + OID_AUTO, "flags", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, + softc, 0, ndaflagssysctl, "A", + "Flags for drive"); + #ifdef CAM_IO_STATS softc->sysctl_stats_tree = SYSCTL_ADD_NODE(&softc->sysctl_stats_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), OID_AUTO, "stats", @@ -696,6 +708,24 @@ ndasysctlinit(void *context, int pending) softc->sysctl_tree); cam_periph_release(periph); +} + +static int +ndaflagssysctl(SYSCTL_HANDLER_ARGS) +{ + struct sbuf sbuf; + struct nda_softc *softc = arg1; + int error; + + sbuf_new_for_sysctl(&sbuf, NULL, 0, req); + if (softc->flags != 0) + sbuf_printf(&sbuf, "0x%b", (unsigned)softc->flags, NDA_FLAG_STRING); + else + sbuf_printf(&sbuf, "0"); + error = sbuf_finish(&sbuf); + sbuf_delete(&sbuf); + + return (error); } static int Modified: projects/nfs-over-tls/sys/cam/scsi/scsi_da.c ============================================================================== --- projects/nfs-over-tls/sys/cam/scsi/scsi_da.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/cam/scsi/scsi_da.c Tue Apr 28 00:44:05 2020 (r360419) @@ -342,7 +342,7 @@ struct da_softc { LIST_HEAD(, ccb_hdr) pending_ccbs; int refcount; /* Active xpt_action() calls */ da_state state; - u_int flags; + da_flags flags; da_quirks quirks; int minimum_cmd_size; int error_inject; @@ -2646,7 +2646,7 @@ daflagssysctl(SYSCTL_HANDLER_ARGS) sbuf_new_for_sysctl(&sbuf, NULL, 0, req); if (softc->flags != 0) - sbuf_printf(&sbuf, "0x%b", softc->flags, DA_FLAG_STRING); + sbuf_printf(&sbuf, "0x%b", (unsigned)softc->flags, DA_FLAG_STRING); else sbuf_printf(&sbuf, "0"); error = sbuf_finish(&sbuf); Modified: projects/nfs-over-tls/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c ============================================================================== --- projects/nfs-over-tls/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c Tue Apr 28 00:44:05 2020 (r360419) @@ -973,18 +973,22 @@ static void vdev_geom_close(vdev_t *vd) { struct g_consumer *cp; + int locked; cp = vd->vdev_tsd; DROP_GIANT(); - g_topology_lock(); + locked = g_topology_locked(); + if (!locked) + g_topology_lock(); if (!vd->vdev_reopening || (cp != NULL && ((cp->flags & G_CF_ORPHAN) != 0 || (cp->provider != NULL && cp->provider->error != 0)))) vdev_geom_close_locked(vd); - g_topology_unlock(); + if (!locked) + g_topology_unlock(); PICKUP_GIANT(); } Modified: projects/nfs-over-tls/sys/compat/freebsd32/freebsd32_sysent.c ============================================================================== --- projects/nfs-over-tls/sys/compat/freebsd32/freebsd32_sysent.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/compat/freebsd32/freebsd32_sysent.c Tue Apr 28 00:44:05 2020 (r360419) @@ -664,5 +664,5 @@ struct sysent freebsd32_sysent[] = { { AS(shm_rename_args), (sy_call_t *)sys_shm_rename, AUE_SHMRENAME, NULL, 0, 0, 0, SY_THR_STATIC }, /* 572 = shm_rename */ { AS(sigfastblock_args), (sy_call_t *)sys_sigfastblock, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 573 = sigfastblock */ { AS(__realpathat_args), (sy_call_t *)sys___realpathat, AUE_REALPATHAT, NULL, 0, 0, 0, SY_THR_STATIC }, /* 574 = __realpathat */ - { AS(close_range_args), (sy_call_t *)sys_close_range, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 575 = close_range */ + { AS(close_range_args), (sy_call_t *)sys_close_range, AUE_CLOSERANGE, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 575 = close_range */ }; Modified: projects/nfs-over-tls/sys/compat/freebsd32/syscalls.master ============================================================================== --- projects/nfs-over-tls/sys/compat/freebsd32/syscalls.master Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/compat/freebsd32/syscalls.master Tue Apr 28 00:44:05 2020 (r360419) @@ -1162,7 +1162,7 @@ 573 AUE_NULL NOPROTO { int sigfastblock(int cmd, uint32_t *ptr); } 574 AUE_REALPATHAT NOPROTO { int __realpathat(int fd, const char *path, \ char *buf, size_t size, int flags); } -575 AUE_NULL NOPROTO { int close_range(u_int lowfd, u_int highfd, \ +575 AUE_CLOSERANGE NOPROTO { int close_range(u_int lowfd, u_int highfd, \ int flags); } ; vim: syntax=off Modified: projects/nfs-over-tls/sys/conf/Makefile.riscv ============================================================================== --- projects/nfs-over-tls/sys/conf/Makefile.riscv Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/conf/Makefile.riscv Tue Apr 28 00:44:05 2020 (r360419) @@ -19,7 +19,7 @@ # # Which version of config(8) is required. -%VERSREQ= 600017 +%VERSREQ= 600012 .if !defined(S) S= ../../.. Modified: projects/nfs-over-tls/sys/conf/kern.mk ============================================================================== --- projects/nfs-over-tls/sys/conf/kern.mk Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/conf/kern.mk Tue Apr 28 00:44:05 2020 (r360419) @@ -150,11 +150,7 @@ INLINE_LIMIT?= 8000 # code model as "medium" and "medany" respectively. # .if ${MACHINE_CPUARCH} == "riscv" -.if ${MACHINE_ARCH:Mriscv*sf} -CFLAGS+= -march=rv64imac -.else CFLAGS+= -march=rv64imafdc -.endif CFLAGS+= -mabi=lp64 CFLAGS.clang+= -mcmodel=medium CFLAGS.gcc+= -mcmodel=medany Modified: projects/nfs-over-tls/sys/crypto/ccp/ccp.c ============================================================================== --- projects/nfs-over-tls/sys/crypto/ccp/ccp.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/crypto/ccp/ccp.c Tue Apr 28 00:44:05 2020 (r360419) @@ -78,6 +78,7 @@ static struct pciid { } ccp_ids[] = { { 0x14561022, "AMD CCP-5a" }, { 0x14681022, "AMD CCP-5b" }, + { 0x15df1022, "AMD CCP-5a" }, }; static struct random_source random_ccp = { Modified: projects/nfs-over-tls/sys/dev/acpica/acpi_ec.c ============================================================================== --- projects/nfs-over-tls/sys/dev/acpica/acpi_ec.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/dev/acpica/acpi_ec.c Tue Apr 28 00:44:05 2020 (r360419) @@ -443,6 +443,8 @@ acpi_ec_probe(device_t dev) if (buf.Pointer) AcpiOsFree(buf.Pointer); + + ret = rc; out: if (ret <= 0) { snprintf(desc, sizeof(desc), "Embedded Controller: GPE %#x%s%s", Modified: projects/nfs-over-tls/sys/dev/acpica/acpi_video.c ============================================================================== --- projects/nfs-over-tls/sys/dev/acpica/acpi_video.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/dev/acpica/acpi_video.c Tue Apr 28 00:44:05 2020 (r360419) @@ -642,7 +642,10 @@ acpi_video_vo_destroy(struct acpi_video_output *vo) switch (vo->adr & DOD_DEVID_MASK) { case DOD_DEVID_MONITOR: - voqh = &crt_units; + if ((vo->adr & DOD_DEVID_MASK_FULL) == DOD_DEVID_LCD) + voqh = &lcd_units; + else + voqh = &crt_units; break; case DOD_DEVID_TV: voqh = &tv_units; Modified: projects/nfs-over-tls/sys/dev/atkbdc/psm.c ============================================================================== --- projects/nfs-over-tls/sys/dev/atkbdc/psm.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/dev/atkbdc/psm.c Tue Apr 28 00:44:05 2020 (r360419) @@ -3371,7 +3371,7 @@ proc_synaptics(struct psm_softc *sc, packetbuf_t *pb, evdev_push_rel(sc->evdev_r, REL_X, *x); evdev_push_rel(sc->evdev_r, REL_Y, -*y); evdev_push_mouse_btn(sc->evdev_r, - guest_buttons); + guest_buttons | sc->extended_buttons); evdev_sync(sc->evdev_r); } #endif Modified: projects/nfs-over-tls/sys/dev/cxgbe/crypto/t4_kern_tls.c ============================================================================== --- projects/nfs-over-tls/sys/dev/cxgbe/crypto/t4_kern_tls.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/dev/cxgbe/crypto/t4_kern_tls.c Tue Apr 28 00:44:05 2020 (r360419) @@ -812,11 +812,11 @@ ktls_setup_keys(struct tlspcb *tlsp, const struct ktls if (tlsp->enc_mode == SCMD_CIPH_MODE_AES_GCM) { memcpy(khdr->txsalt, tls->params.iv, SALT_SIZE); t4_init_gmac_hash(tls->params.cipher_key, - tls->params.cipher_key_len * 8, + tls->params.cipher_key_len, (char *)key + tls->params.cipher_key_len); } else { t4_init_hmac_digest(axf, partial_digest_len, - tls->params.auth_key, tls->params.auth_key_len * 8, + tls->params.auth_key, tls->params.auth_key_len, (char *)key + tls->params.cipher_key_len); } Modified: projects/nfs-over-tls/sys/dev/cxgbe/tom/t4_tls.c ============================================================================== --- projects/nfs-over-tls/sys/dev/cxgbe/tom/t4_tls.c Tue Apr 28 00:06:49 2020 (r360418) +++ projects/nfs-over-tls/sys/dev/cxgbe/tom/t4_tls.c Tue Apr 28 00:44:05 2020 (r360419) @@ -379,7 +379,7 @@ prepare_rxkey_wr(struct tls_keyctx *kwr, struct tls_ke int proto_ver = kctx->proto_ver; kwr->u.rxhdr.flitcnt_hmacctrl = - ((kctx->tx_key_info_size >> 4) << 3) | kctx->hmac_ctrl; + ((kctx->rx_key_info_size >> 4) << 3) | kctx->hmac_ctrl; kwr->u.rxhdr.protover_ciphmode = V_TLS_KEYCTX_TX_WR_PROTOVER(get_proto_ver(proto_ver)) | @@ -408,7 +408,7 @@ prepare_rxkey_wr(struct tls_keyctx *kwr, struct tls_ke (IPAD_SIZE + OPAD_SIZE)); } else { memcpy(kwr->keys.edkey, kctx->rx.key, - (kctx->tx_key_info_size - SALT_SIZE)); + (kctx->rx_key_info_size - SALT_SIZE)); memcpy(kwr->u.rxhdr.rxsalt, kctx->rx.salt, SALT_SIZE); } } @@ -674,6 +674,13 @@ program_key_context(struct tcpcb *tp, struct toepcb *t if ((G_KEY_GET_LOC(k_ctx->l_p_key) == KEY_WRITE_RX) || (tls_ofld->key_location == TLS_SFO_WR_CONTEXTLOC_DDR)) { + + /* + * XXX: The userland library sets tx_key_info_size, not + * rx_key_info_size. + */ + k_ctx->rx_key_info_size = k_ctx->tx_key_info_size; + error = tls_program_key_id(toep, k_ctx); if (error) { /* XXX: Only clear quiesce for KEY_WRITE_RX? */ @@ -866,31 +873,37 @@ t4_ctloutput_tls(struct socket *so, struct sockopt *so #ifdef KERN_TLS static void -init_ktls_key_context(struct ktls_session *tls, struct tls_key_context *k_ctx) +init_ktls_key_context(struct ktls_session *tls, struct tls_key_context *k_ctx, + int direction) { struct auth_hash *axf; - u_int mac_key_size; - char *hash; + u_int key_info_size, mac_key_size; + char *hash, *key; - k_ctx->l_p_key = V_KEY_GET_LOC(KEY_WRITE_TX); - if (tls->params.tls_vminor == TLS_MINOR_VER_ONE) - k_ctx->proto_ver = SCMD_PROTO_VERSION_TLS_1_1; - else - k_ctx->proto_ver = SCMD_PROTO_VERSION_TLS_1_2; + k_ctx->l_p_key = V_KEY_GET_LOC(direction == KTLS_TX ? KEY_WRITE_TX : + KEY_WRITE_RX); + k_ctx->proto_ver = tls->params.tls_vmajor << 8 | tls->params.tls_vminor; k_ctx->cipher_secret_size = tls->params.cipher_key_len; - k_ctx->tx_key_info_size = sizeof(struct tx_keyctx_hdr) + + key_info_size = sizeof(struct tx_keyctx_hdr) + k_ctx->cipher_secret_size; - memcpy(k_ctx->tx.key, tls->params.cipher_key, - tls->params.cipher_key_len); - hash = k_ctx->tx.key + tls->params.cipher_key_len; + if (direction == KTLS_TX) + key = k_ctx->tx.key; + else + key = k_ctx->rx.key; + memcpy(key, tls->params.cipher_key, tls->params.cipher_key_len); + hash = key + tls->params.cipher_key_len; if (tls->params.cipher_algorithm == CRYPTO_AES_NIST_GCM_16) { k_ctx->state.auth_mode = SCMD_AUTH_MODE_GHASH; k_ctx->state.enc_mode = SCMD_CIPH_MODE_AES_GCM; k_ctx->iv_size = 4; k_ctx->mac_first = 0; k_ctx->hmac_ctrl = SCMD_HMAC_CTRL_NOP; - k_ctx->tx_key_info_size += GMAC_BLOCK_LEN; - memcpy(k_ctx->tx.salt, tls->params.iv, SALT_SIZE); + key_info_size += GMAC_BLOCK_LEN; + k_ctx->mac_secret_size = 0; + if (direction == KTLS_TX) + memcpy(k_ctx->tx.salt, tls->params.iv, SALT_SIZE); + else + memcpy(k_ctx->rx.salt, tls->params.iv, SALT_SIZE); t4_init_gmac_hash(tls->params.cipher_key, tls->params.cipher_key_len, hash); } else { @@ -917,29 +930,38 @@ init_ktls_key_context(struct ktls_session *tls, struct k_ctx->iv_size = 8; /* for CBC, iv is 16B, unit of 2B */ k_ctx->mac_first = 1; k_ctx->hmac_ctrl = SCMD_HMAC_CTRL_NO_TRUNC; - k_ctx->tx_key_info_size += roundup2(mac_key_size, 16) * 2; + key_info_size += roundup2(mac_key_size, 16) * 2; k_ctx->mac_secret_size = mac_key_size; t4_init_hmac_digest(axf, mac_key_size, tls->params.auth_key, tls->params.auth_key_len, hash); } + if (direction == KTLS_TX) + k_ctx->tx_key_info_size = key_info_size; + else + k_ctx->rx_key_info_size = key_info_size; k_ctx->frag_size = tls->params.max_frame_len; k_ctx->iv_ctrl = 1; } int -tls_alloc_ktls(struct toepcb *toep, struct ktls_session *tls) +tls_alloc_ktls(struct toepcb *toep, struct ktls_session *tls, int direction) { + struct adapter *sc = td_adapter(toep->td); struct tls_key_context *k_ctx; - int error; + int error, key_offset; if (toep->tls.mode == TLS_MODE_TLSOM) return (EINVAL); if (!can_tls_offload(td_adapter(toep->td))) return (EINVAL); switch (ulp_mode(toep)) { + case ULP_MODE_TLS: + break; case ULP_MODE_NONE: case ULP_MODE_TCPDDP: + if (direction != KTLS_TX) + return (EINVAL); break; default: return (EINVAL); @@ -987,48 +1009,81 @@ tls_alloc_ktls(struct toepcb *toep, struct ktls_sessio tls->params.tls_vminor > TLS_MINOR_VER_TWO) return (EPROTONOSUPPORT); + /* Bail if we already have a key. */ + if (direction == KTLS_TX) { + if (toep->tls.tx_key_addr != -1) + return (EOPNOTSUPP); + } else { + if (toep->tls.rx_key_addr != -1) + return (EOPNOTSUPP); + } + /* * XXX: This assumes no key renegotation. If KTLS ever supports * that we will want to allocate TLS sessions dynamically rather * than as a static member of toep. */ k_ctx = &toep->tls.k_ctx; - init_ktls_key_context(tls, k_ctx); + init_ktls_key_context(tls, k_ctx, direction); - toep->tls.scmd0.seqno_numivs = - (V_SCMD_SEQ_NO_CTRL(3) | - V_SCMD_PROTO_VERSION(k_ctx->proto_ver) | - V_SCMD_ENC_DEC_CTRL(SCMD_ENCDECCTRL_ENCRYPT) | - V_SCMD_CIPH_AUTH_SEQ_CTRL((k_ctx->mac_first == 0)) | - V_SCMD_CIPH_MODE(k_ctx->state.enc_mode) | - V_SCMD_AUTH_MODE(k_ctx->state.auth_mode) | - V_SCMD_HMAC_CTRL(k_ctx->hmac_ctrl) | - V_SCMD_IV_SIZE(k_ctx->iv_size)); + error = tls_program_key_id(toep, k_ctx); + if (error) + return (error); - toep->tls.scmd0.ivgen_hdrlen = - (V_SCMD_IV_GEN_CTRL(k_ctx->iv_ctrl) | - V_SCMD_KEY_CTX_INLINE(0) | - V_SCMD_TLS_FRAG_ENABLE(1)); + if (direction == KTLS_TX) { + toep->tls.scmd0.seqno_numivs = + (V_SCMD_SEQ_NO_CTRL(3) | + V_SCMD_PROTO_VERSION(get_proto_ver(k_ctx->proto_ver)) | + V_SCMD_ENC_DEC_CTRL(SCMD_ENCDECCTRL_ENCRYPT) | + V_SCMD_CIPH_AUTH_SEQ_CTRL((k_ctx->mac_first == 0)) | + V_SCMD_CIPH_MODE(k_ctx->state.enc_mode) | + V_SCMD_AUTH_MODE(k_ctx->state.auth_mode) | + V_SCMD_HMAC_CTRL(k_ctx->hmac_ctrl) | + V_SCMD_IV_SIZE(k_ctx->iv_size)); - if (tls->params.cipher_algorithm == CRYPTO_AES_NIST_GCM_16) - toep->tls.iv_len = 8; - else - toep->tls.iv_len = AES_BLOCK_LEN; + toep->tls.scmd0.ivgen_hdrlen = + (V_SCMD_IV_GEN_CTRL(k_ctx->iv_ctrl) | + V_SCMD_KEY_CTX_INLINE(0) | + V_SCMD_TLS_FRAG_ENABLE(1)); - toep->tls.mac_length = k_ctx->mac_secret_size; + if (tls->params.cipher_algorithm == CRYPTO_AES_NIST_GCM_16) + toep->tls.iv_len = 8; + else + toep->tls.iv_len = AES_BLOCK_LEN; - toep->tls.tx_key_addr = -1; + toep->tls.mac_length = k_ctx->mac_secret_size; - error = tls_program_key_id(toep, k_ctx); - if (error) - return (error); + toep->tls.fcplenmax = get_tp_plen_max(&toep->tls); + toep->tls.expn_per_ulp = tls->params.tls_hlen + + tls->params.tls_tlen; + toep->tls.pdus_per_ulp = 1; + toep->tls.adjusted_plen = toep->tls.expn_per_ulp + + toep->tls.k_ctx.frag_size; + } else { + /* Stop timer on handshake completion */ + tls_stop_handshake_timer(toep); - toep->tls.fcplenmax = get_tp_plen_max(&toep->tls); - toep->tls.expn_per_ulp = tls->params.tls_hlen + tls->params.tls_tlen; - toep->tls.pdus_per_ulp = 1; - toep->tls.adjusted_plen = toep->tls.expn_per_ulp + - toep->tls.k_ctx.frag_size; + toep->flags &= ~TPF_FORCE_CREDITS; + /* + * RX key tags are an index into the key portion of MA + * memory stored as an offset from the base address in + * units of 64 bytes. + */ + key_offset = toep->tls.rx_key_addr - sc->vres.key.start; + t4_set_tls_keyid(toep, key_offset / 64); + t4_set_tls_tcb_field(toep, W_TCB_ULP_RAW, + V_TCB_ULP_RAW(M_TCB_ULP_RAW), + V_TCB_ULP_RAW((V_TF_TLS_KEY_SIZE(3) | + V_TF_TLS_CONTROL(1) | + V_TF_TLS_ACTIVE(1) | + V_TF_TLS_ENABLE(1)))); + t4_set_tls_tcb_field(toep, W_TCB_TLS_SEQ, + V_TCB_TLS_SEQ(M_TCB_TLS_SEQ), + V_TCB_TLS_SEQ(0)); + t4_clear_rx_quiesce(toep); + } + toep->tls.mode = TLS_MODE_KTLS; return (0); @@ -1671,7 +1726,7 @@ t4_push_ktls(struct adapter *sc, struct toepcb *toep, ("%s: flowc_wr not sent for tid %u.", __func__, toep->tid)); KASSERT(ulp_mode(toep) == ULP_MODE_NONE || - ulp_mode(toep) == ULP_MODE_TCPDDP, + ulp_mode(toep) == ULP_MODE_TCPDDP || ulp_mode(toep) == ULP_MODE_TLS, ("%s: ulp_mode %u for toep %p", __func__, ulp_mode(toep), toep)); KASSERT(tls_tx_key(toep), ("%s: TX key not set for toep %p", __func__, toep)); @@ -1956,6 +2011,10 @@ do_rx_tls_cmp(struct sge_iq *iq, const struct rss_head struct socket *so; struct sockbuf *sb; struct mbuf *tls_data; +#ifdef KERN_TLS + struct tls_get_record *tgr; + struct mbuf *control; +#endif int len, pdu_length, rx_credits; KASSERT(toep->tid == tid, ("%s: toep tid/atid mismatch", __func__)); @@ -1982,6 +2041,7 @@ do_rx_tls_cmp(struct sge_iq *iq, const struct rss_head pdu_length = G_CPL_RX_TLS_CMP_PDULENGTH(be32toh(cpl->pdulength_length)); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Tue Apr 28 02:14:00 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 534062CFF76 for ; Tue, 28 Apr 2020 02:14:00 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49B4vX1y3gz45ks; Tue, 28 Apr 2020 02:14:00 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3D8691CC3B; Tue, 28 Apr 2020 02:14:00 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03S2E01m070197; Tue, 28 Apr 2020 02:14:00 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03S2DxVa070191; Tue, 28 Apr 2020 02:13:59 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202004280213.03S2DxVa070191@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 28 Apr 2020 02:13:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r360426 - in projects/nfs-over-tls/sys/fs: nfs nfsclient X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: in projects/nfs-over-tls/sys/fs: nfs nfsclient X-SVN-Commit-Revision: 360426 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Apr 2020 02:14:00 -0000 Author: rmacklem Date: Tue Apr 28 02:13:59 2020 New Revision: 360426 URL: https://svnweb.freebsd.org/changeset/base/360426 Log: Merge in the recent change to replace the Mac OS/X uio_XX macros from head. Modified: projects/nfs-over-tls/sys/fs/nfs/nfskpiport.h projects/nfs-over-tls/sys/fs/nfsclient/nfs_clrpcops.c Directory Properties: projects/nfs-over-tls/sys/ (props changed) Modified: projects/nfs-over-tls/sys/fs/nfs/nfskpiport.h ============================================================================== --- projects/nfs-over-tls/sys/fs/nfs/nfskpiport.h Tue Apr 28 02:13:17 2020 (r360425) +++ projects/nfs-over-tls/sys/fs/nfs/nfskpiport.h Tue Apr 28 02:13:59 2020 (r360426) @@ -43,20 +43,4 @@ typedef struct vnode * vnode_t; #define vnode_mount(v) ((v)->v_mount) #define vnode_vtype(v) ((v)->v_type) -/* - * This stuff is needed by Darwin for handling the uio structure. - */ -#define uio_uio_resid(p) ((p)->uio_resid) -#define uio_uio_resid_add(p, v) ((p)->uio_resid += (v)) -#define uio_uio_resid_set(p, v) ((p)->uio_resid = (v)) -#define uio_iov_base(p) ((p)->uio_iov->iov_base) -#define uio_iov_base_add(p, v) do { \ - char *pp; \ - pp = (char *)(p)->uio_iov->iov_base; \ - pp += (v); \ - (p)->uio_iov->iov_base = (void *)pp; \ - } while (0) -#define uio_iov_len(p) ((p)->uio_iov->iov_len) -#define uio_iov_len_add(p, v) ((p)->uio_iov->iov_len += (v)) - #endif /* _NFS_NFSKPIPORT_H */ Modified: projects/nfs-over-tls/sys/fs/nfsclient/nfs_clrpcops.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfsclient/nfs_clrpcops.c Tue Apr 28 02:13:17 2020 (r360425) +++ projects/nfs-over-tls/sys/fs/nfsclient/nfs_clrpcops.c Tue Apr 28 02:13:59 2020 (r360426) @@ -1624,7 +1624,7 @@ nfsrpc_readrpc(vnode_t vp, struct uio *uiop, struct uc off_t tmp_off; *attrflagp = 0; - tsiz = uio_uio_resid(uiop); + tsiz = uiop->uio_resid; tmp_off = uiop->uio_offset + tsiz; NFSLOCKMNT(nmp); if (tmp_off > nmp->nm_maxfilesize || tmp_off < uiop->uio_offset) { @@ -1805,7 +1805,7 @@ nfsrpc_writerpc(vnode_t vp, struct uio *uiop, int *iom PMAP_HAS_DMAP != 0) use_ext = true; *attrflagp = 0; - tsiz = uio_uio_resid(uiop); + tsiz = uiop->uio_resid; tmp_off = uiop->uio_offset + tsiz; NFSLOCKMNT(nmp); if (tmp_off > nmp->nm_maxfilesize || tmp_off < uiop->uio_offset) { @@ -1891,9 +1891,10 @@ nfsrpc_writerpc(vnode_t vp, struct uio *uiop, int *iom * back. */ uiop->uio_offset -= len; - uio_uio_resid_add(uiop, len); - uio_iov_base_add(uiop, -len); - uio_iov_len_add(uiop, len); + uiop->uio_resid += len; + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base - len; + uiop->uio_iov->iov_len += len; } if (nd->nd_flag & (ND_NFSV3 | ND_NFSV4)) { error = nfscl_wcc_data(nd, vp, nap, attrflagp, @@ -1911,10 +1912,12 @@ nfsrpc_writerpc(vnode_t vp, struct uio *uiop, int *iom goto nfsmout; } else if (rlen < len) { backup = len - rlen; - uio_iov_base_add(uiop, -(backup)); - uio_iov_len_add(uiop, backup); + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base - + backup; + uiop->uio_iov->iov_len += backup; uiop->uio_offset -= backup; - uio_uio_resid_add(uiop, backup); + uiop->uio_resid += backup; len = rlen; } commit = fxdr_unsigned(int, *tl++); @@ -2938,7 +2941,7 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 size_t tresid; KASSERT(uiop->uio_iovcnt == 1 && - (uio_uio_resid(uiop) & (DIRBLKSIZ - 1)) == 0, + (uiop->uio_resid & (DIRBLKSIZ - 1)) == 0, ("nfs readdirrpc bad uio")); ncookie.lval[0] = ncookie.lval[1] = 0; /* @@ -2948,13 +2951,13 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 * will never make readsize > nm_readdirsize. */ readsize = nmp->nm_readdirsize; - if (readsize > uio_uio_resid(uiop)) - readsize = uio_uio_resid(uiop) + DIRBLKSIZ; + if (readsize > uiop->uio_resid) + readsize = uiop->uio_resid + DIRBLKSIZ; *attrflagp = 0; if (eofp) *eofp = 0; - tresid = uio_uio_resid(uiop); + tresid = uiop->uio_resid; cookie.lval[0] = cookiep->nfsuquad[0]; cookie.lval[1] = cookiep->nfsuquad[1]; nd->nd_mrep = NULL; @@ -3049,7 +3052,7 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 if (error) return (error); nd->nd_mrep = NULL; - dp = (struct dirent *)uio_iov_base(uiop); + dp = (struct dirent *)uiop->uio_iov->iov_base; dp->d_pad0 = dp->d_pad1 = 0; dp->d_off = 0; dp->d_type = DT_DIR; @@ -3065,11 +3068,12 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 *tl++ = 0; *tl = 0; blksiz += dp->d_reclen; - uio_uio_resid_add(uiop, -(dp->d_reclen)); + uiop->uio_resid -= dp->d_reclen; uiop->uio_offset += dp->d_reclen; - uio_iov_base_add(uiop, dp->d_reclen); - uio_iov_len_add(uiop, -(dp->d_reclen)); - dp = (struct dirent *)uio_iov_base(uiop); + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base + dp->d_reclen; + uiop->uio_iov->iov_len -= dp->d_reclen; + dp = (struct dirent *)uiop->uio_iov->iov_base; dp->d_pad0 = dp->d_pad1 = 0; dp->d_off = 0; dp->d_type = DT_DIR; @@ -3086,10 +3090,11 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 *tl++ = 0; *tl = 0; blksiz += dp->d_reclen; - uio_uio_resid_add(uiop, -(dp->d_reclen)); + uiop->uio_resid -= dp->d_reclen; uiop->uio_offset += dp->d_reclen; - uio_iov_base_add(uiop, dp->d_reclen); - uio_iov_len_add(uiop, -(dp->d_reclen)); + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base + dp->d_reclen; + uiop->uio_iov->iov_len -= dp->d_reclen; } NFSSETBIT_ATTRBIT(&attrbits, NFSATTRBIT_RDATTRERROR); } else { @@ -3184,19 +3189,20 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 tlen += 8; /* To ensure null termination. */ left = DIRBLKSIZ - blksiz; if (_GENERIC_DIRLEN(len) + NFSX_HYPER > left) { - NFSBZERO(uio_iov_base(uiop), left); + NFSBZERO(uiop->uio_iov->iov_base, left); dp->d_reclen += left; - uio_iov_base_add(uiop, left); - uio_iov_len_add(uiop, -(left)); - uio_uio_resid_add(uiop, -(left)); + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base + left; + uiop->uio_iov->iov_len -= left; + uiop->uio_resid -= left; uiop->uio_offset += left; blksiz = 0; } if (_GENERIC_DIRLEN(len) + NFSX_HYPER > - uio_uio_resid(uiop)) + uiop->uio_resid) bigenough = 0; if (bigenough) { - dp = (struct dirent *)uio_iov_base(uiop); + dp = (struct dirent *)uiop->uio_iov->iov_base; dp->d_pad0 = dp->d_pad1 = 0; dp->d_off = 0; dp->d_namlen = len; @@ -3206,21 +3212,24 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 blksiz += dp->d_reclen; if (blksiz == DIRBLKSIZ) blksiz = 0; - uio_uio_resid_add(uiop, -(DIRHDSIZ)); + uiop->uio_resid -= DIRHDSIZ; uiop->uio_offset += DIRHDSIZ; - uio_iov_base_add(uiop, DIRHDSIZ); - uio_iov_len_add(uiop, -(DIRHDSIZ)); + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base + DIRHDSIZ; + uiop->uio_iov->iov_len -= DIRHDSIZ; error = nfsm_mbufuio(nd, uiop, len); if (error) goto nfsmout; - cp = uio_iov_base(uiop); + cp = uiop->uio_iov->iov_base; tlen -= len; NFSBZERO(cp, tlen); cp += tlen; /* points to cookie storage */ tl2 = (u_int32_t *)cp; - uio_iov_base_add(uiop, (tlen + NFSX_HYPER)); - uio_iov_len_add(uiop, -(tlen + NFSX_HYPER)); - uio_uio_resid_add(uiop, -(tlen + NFSX_HYPER)); + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base + tlen + + NFSX_HYPER; + uiop->uio_iov->iov_len -= tlen + NFSX_HYPER; + uiop->uio_resid -= tlen + NFSX_HYPER; uiop->uio_offset += (tlen + NFSX_HYPER); } else { error = nfsm_advance(nd, NFSM_RNDUP(len), -1); @@ -3303,11 +3312,12 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 */ if (blksiz > 0) { left = DIRBLKSIZ - blksiz; - NFSBZERO(uio_iov_base(uiop), left); + NFSBZERO(uiop->uio_iov->iov_base, left); dp->d_reclen += left; - uio_iov_base_add(uiop, left); - uio_iov_len_add(uiop, -(left)); - uio_uio_resid_add(uiop, -(left)); + uiop->uio_iov->iov_base = (char *)uiop->uio_iov->iov_base + + left; + uiop->uio_iov->iov_len -= left; + uiop->uio_resid -= left; uiop->uio_offset += left; } @@ -3318,7 +3328,7 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 * Otherwise, return the eof flag from the server. */ if (eofp) { - if (tresid == ((size_t)(uio_uio_resid(uiop)))) + if (tresid == ((size_t)(uiop->uio_resid))) *eofp = 1; else if (!bigenough) *eofp = 0; @@ -3329,17 +3339,18 @@ nfsrpc_readdir(vnode_t vp, struct uio *uiop, nfsuint64 /* * Add extra empty records to any remaining DIRBLKSIZ chunks. */ - while (uio_uio_resid(uiop) > 0 && uio_uio_resid(uiop) != tresid) { - dp = (struct dirent *)uio_iov_base(uiop); + while (uiop->uio_resid > 0 && uiop->uio_resid != tresid) { + dp = (struct dirent *)uiop->uio_iov->iov_base; NFSBZERO(dp, DIRBLKSIZ); dp->d_type = DT_UNKNOWN; tl = (u_int32_t *)&dp->d_name[4]; *tl++ = cookie.lval[0]; *tl = cookie.lval[1]; dp->d_reclen = DIRBLKSIZ; - uio_iov_base_add(uiop, DIRBLKSIZ); - uio_iov_len_add(uiop, -(DIRBLKSIZ)); - uio_uio_resid_add(uiop, -(DIRBLKSIZ)); + uiop->uio_iov->iov_base = (char *)uiop->uio_iov->iov_base + + DIRBLKSIZ; + uiop->uio_iov->iov_len -= DIRBLKSIZ; + uiop->uio_resid -= DIRBLKSIZ; uiop->uio_offset += DIRBLKSIZ; } @@ -3384,7 +3395,7 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsui struct timespec dctime; KASSERT(uiop->uio_iovcnt == 1 && - (uio_uio_resid(uiop) & (DIRBLKSIZ - 1)) == 0, + (uiop->uio_resid & (DIRBLKSIZ - 1)) == 0, ("nfs readdirplusrpc bad uio")); ncookie.lval[0] = ncookie.lval[1] = 0; timespecclear(&dctime); @@ -3395,7 +3406,7 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsui nd->nd_mrep = NULL; cookie.lval[0] = cookiep->nfsuquad[0]; cookie.lval[1] = cookiep->nfsuquad[1]; - tresid = uio_uio_resid(uiop); + tresid = uiop->uio_resid; /* * For NFSv4, first create the "." and ".." entries. @@ -3486,7 +3497,7 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsui if (error) return (error); nd->nd_mrep = NULL; - dp = (struct dirent *)uio_iov_base(uiop); + dp = (struct dirent *)uiop->uio_iov->iov_base; dp->d_pad0 = dp->d_pad1 = 0; dp->d_off = 0; dp->d_type = DT_DIR; @@ -3502,11 +3513,12 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsui *tl++ = 0; *tl = 0; blksiz += dp->d_reclen; - uio_uio_resid_add(uiop, -(dp->d_reclen)); + uiop->uio_resid -= dp->d_reclen; uiop->uio_offset += dp->d_reclen; - uio_iov_base_add(uiop, dp->d_reclen); - uio_iov_len_add(uiop, -(dp->d_reclen)); - dp = (struct dirent *)uio_iov_base(uiop); + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base + dp->d_reclen; + uiop->uio_iov->iov_len -= dp->d_reclen; + dp = (struct dirent *)uiop->uio_iov->iov_base; dp->d_pad0 = dp->d_pad1 = 0; dp->d_off = 0; dp->d_type = DT_DIR; @@ -3523,10 +3535,11 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsui *tl++ = 0; *tl = 0; blksiz += dp->d_reclen; - uio_uio_resid_add(uiop, -(dp->d_reclen)); + uiop->uio_resid -= dp->d_reclen; uiop->uio_offset += dp->d_reclen; - uio_iov_base_add(uiop, dp->d_reclen); - uio_iov_len_add(uiop, -(dp->d_reclen)); + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base + dp->d_reclen; + uiop->uio_iov->iov_len -= dp->d_reclen; } NFSREADDIRPLUS_ATTRBIT(&attrbits); if (gotmnton) @@ -3602,19 +3615,20 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsui tlen += 8; /* To ensure null termination. */ left = DIRBLKSIZ - blksiz; if (_GENERIC_DIRLEN(len) + NFSX_HYPER > left) { - NFSBZERO(uio_iov_base(uiop), left); + NFSBZERO(uiop->uio_iov->iov_base, left); dp->d_reclen += left; - uio_iov_base_add(uiop, left); - uio_iov_len_add(uiop, -(left)); - uio_uio_resid_add(uiop, -(left)); + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base + left; + uiop->uio_iov->iov_len -= left; + uiop->uio_resid -= left; uiop->uio_offset += left; blksiz = 0; } if (_GENERIC_DIRLEN(len) + NFSX_HYPER > - uio_uio_resid(uiop)) + uiop->uio_resid) bigenough = 0; if (bigenough) { - dp = (struct dirent *)uio_iov_base(uiop); + dp = (struct dirent *)uiop->uio_iov->iov_base; dp->d_pad0 = dp->d_pad1 = 0; dp->d_off = 0; dp->d_namlen = len; @@ -3624,17 +3638,18 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsui blksiz += dp->d_reclen; if (blksiz == DIRBLKSIZ) blksiz = 0; - uio_uio_resid_add(uiop, -(DIRHDSIZ)); + uiop->uio_resid -= DIRHDSIZ; uiop->uio_offset += DIRHDSIZ; - uio_iov_base_add(uiop, DIRHDSIZ); - uio_iov_len_add(uiop, -(DIRHDSIZ)); - cnp->cn_nameptr = uio_iov_base(uiop); + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base + DIRHDSIZ; + uiop->uio_iov->iov_len -= DIRHDSIZ; + cnp->cn_nameptr = uiop->uio_iov->iov_base; cnp->cn_namelen = len; NFSCNHASHZERO(cnp); error = nfsm_mbufuio(nd, uiop, len); if (error) goto nfsmout; - cp = uio_iov_base(uiop); + cp = uiop->uio_iov->iov_base; tlen -= len; NFSBZERO(cp, tlen); cp += tlen; /* points to cookie storage */ @@ -3644,9 +3659,11 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsui isdotdot = 1; else isdotdot = 0; - uio_iov_base_add(uiop, (tlen + NFSX_HYPER)); - uio_iov_len_add(uiop, -(tlen + NFSX_HYPER)); - uio_uio_resid_add(uiop, -(tlen + NFSX_HYPER)); + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base + tlen + + NFSX_HYPER; + uiop->uio_iov->iov_len -= tlen + NFSX_HYPER; + uiop->uio_resid -= tlen + NFSX_HYPER; uiop->uio_offset += (tlen + NFSX_HYPER); } else { error = nfsm_advance(nd, NFSM_RNDUP(len), -1); @@ -3806,11 +3823,12 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsui */ if (blksiz > 0) { left = DIRBLKSIZ - blksiz; - NFSBZERO(uio_iov_base(uiop), left); + NFSBZERO(uiop->uio_iov->iov_base, left); dp->d_reclen += left; - uio_iov_base_add(uiop, left); - uio_iov_len_add(uiop, -(left)); - uio_uio_resid_add(uiop, -(left)); + uiop->uio_iov->iov_base = (char *)uiop->uio_iov->iov_base + + left; + uiop->uio_iov->iov_len -= left; + uiop->uio_resid -= left; uiop->uio_offset += left; } @@ -3821,7 +3839,7 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsui * Otherwise, return the eof flag from the server. */ if (eofp != NULL) { - if (tresid == uio_uio_resid(uiop)) + if (tresid == uiop->uio_resid) *eofp = 1; else if (!bigenough) *eofp = 0; @@ -3832,17 +3850,18 @@ nfsrpc_readdirplus(vnode_t vp, struct uio *uiop, nfsui /* * Add extra empty records to any remaining DIRBLKSIZ chunks. */ - while (uio_uio_resid(uiop) > 0 && uio_uio_resid(uiop) != tresid) { - dp = (struct dirent *)uio_iov_base(uiop); + while (uiop->uio_resid > 0 && uiop->uio_resid != tresid) { + dp = (struct dirent *)uiop->uio_iov->iov_base; NFSBZERO(dp, DIRBLKSIZ); dp->d_type = DT_UNKNOWN; tl = (u_int32_t *)&dp->d_name[4]; *tl++ = cookie.lval[0]; *tl = cookie.lval[1]; dp->d_reclen = DIRBLKSIZ; - uio_iov_base_add(uiop, DIRBLKSIZ); - uio_iov_len_add(uiop, -(DIRBLKSIZ)); - uio_uio_resid_add(uiop, -(DIRBLKSIZ)); + uiop->uio_iov->iov_base = (char *)uiop->uio_iov->iov_base + + DIRBLKSIZ; + uiop->uio_iov->iov_len -= DIRBLKSIZ; + uiop->uio_resid -= DIRBLKSIZ; uiop->uio_offset += DIRBLKSIZ; } @@ -6419,9 +6438,9 @@ nfsrpc_writeds(vnode_t vp, struct uio *uiop, int *iomo * back. */ uiop->uio_offset -= len; - uio_uio_resid_add(uiop, len); - uio_iov_base_add(uiop, -len); - uio_iov_len_add(uiop, len); + uiop->uio_resid += len; + uiop->uio_iov->iov_base = (char *)uiop->uio_iov->iov_base - len; + uiop->uio_iov->iov_len += len; error = nd->nd_repstat; } else { if (vers == NFS_VER3) { @@ -6439,10 +6458,11 @@ nfsrpc_writeds(vnode_t vp, struct uio *uiop, int *iomo goto nfsmout; } else if (rlen < len) { backup = len - rlen; - uio_iov_base_add(uiop, -(backup)); - uio_iov_len_add(uiop, backup); + uiop->uio_iov->iov_base = + (char *)uiop->uio_iov->iov_base - backup; + uiop->uio_iov->iov_len += backup; uiop->uio_offset -= backup; - uio_uio_resid_add(uiop, backup); + uiop->uio_resid += backup; len = rlen; } commit = fxdr_unsigned(int, *tl++); From owner-svn-src-projects@freebsd.org Thu Apr 30 03:58:35 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EB12E2CE592 for ; Thu, 30 Apr 2020 03:58:35 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49CM7H69Nwz4Dwl; Thu, 30 Apr 2020 03:58:35 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B494518D07; Thu, 30 Apr 2020 03:58:35 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03U3wZpA052361; Thu, 30 Apr 2020 03:58:35 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03U3wUSu052336; Thu, 30 Apr 2020 03:58:30 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202004300358.03U3wUSu052336@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Thu, 30 Apr 2020 03:58:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r360487 - in projects/nfs-over-tls/sys: arm64/arm64 arm64/rockchip cam cam/nvme conf dev/dwc dev/nvme kern modules/cxgb/cxgb modules/cxgbe/iw_cxgbe modules/rdma/krping modules/sfxge net... X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: in projects/nfs-over-tls/sys: arm64/arm64 arm64/rockchip cam cam/nvme conf dev/dwc dev/nvme kern modules/cxgb/cxgb modules/cxgbe/iw_cxgbe modules/rdma/krping modules/sfxge net net/route netgraph/bluet... X-SVN-Commit-Revision: 360487 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Apr 2020 03:58:36 -0000 Author: rmacklem Date: Thu Apr 30 03:58:30 2020 New Revision: 360487 URL: https://svnweb.freebsd.org/changeset/base/360487 Log: Merge in an up to date kernel from head. Added: projects/nfs-over-tls/sys/net/route/route_ddb.c - copied unchanged from r360486, head/sys/net/route/route_ddb.c projects/nfs-over-tls/sys/net/route/route_temporal.c - copied unchanged from r360486, head/sys/net/route/route_temporal.c projects/nfs-over-tls/sys/net/route/route_var.h - copied unchanged from r360486, head/sys/net/route/route_var.h Deleted: projects/nfs-over-tls/sys/net/route_temporal.c projects/nfs-over-tls/sys/net/route_var.h Modified: projects/nfs-over-tls/sys/arm64/arm64/gic_v3_reg.h projects/nfs-over-tls/sys/arm64/arm64/gicv3_its.c projects/nfs-over-tls/sys/arm64/rockchip/rk805.c projects/nfs-over-tls/sys/arm64/rockchip/rk_iodomain.c projects/nfs-over-tls/sys/cam/cam_ccb.h projects/nfs-over-tls/sys/cam/nvme/nvme_da.c projects/nfs-over-tls/sys/conf/Makefile.amd64 projects/nfs-over-tls/sys/conf/files projects/nfs-over-tls/sys/conf/files.amd64 projects/nfs-over-tls/sys/dev/dwc/if_dwc.c projects/nfs-over-tls/sys/dev/dwc/if_dwcvar.h projects/nfs-over-tls/sys/dev/nvme/nvme_ctrlr.c projects/nfs-over-tls/sys/dev/nvme/nvme_sim.c projects/nfs-over-tls/sys/kern/kern_cpu.c projects/nfs-over-tls/sys/kern/kern_sendfile.c projects/nfs-over-tls/sys/modules/cxgb/cxgb/Makefile projects/nfs-over-tls/sys/modules/cxgbe/iw_cxgbe/Makefile projects/nfs-over-tls/sys/modules/rdma/krping/Makefile projects/nfs-over-tls/sys/modules/sfxge/Makefile projects/nfs-over-tls/sys/net/if_var.h projects/nfs-over-tls/sys/net/radix_mpath.c projects/nfs-over-tls/sys/net/radix_mpath.h projects/nfs-over-tls/sys/net/route.c projects/nfs-over-tls/sys/net/route.h projects/nfs-over-tls/sys/net/route/nhop.c projects/nfs-over-tls/sys/net/route/nhop_ctl.c projects/nfs-over-tls/sys/net/route/route_ctl.c projects/nfs-over-tls/sys/net/route/route_helpers.c projects/nfs-over-tls/sys/net/rtsock.c projects/nfs-over-tls/sys/netgraph/bluetooth/include/ng_hci.h projects/nfs-over-tls/sys/netinet/in_fib.c projects/nfs-over-tls/sys/netinet/in_rmx.c projects/nfs-over-tls/sys/netinet/in_var.h projects/nfs-over-tls/sys/netinet/ip_input.c projects/nfs-over-tls/sys/netinet/ip_output.c projects/nfs-over-tls/sys/netinet/tcp_input.c projects/nfs-over-tls/sys/netinet/tcp_output.c projects/nfs-over-tls/sys/netinet/tcp_stacks/bbr.c projects/nfs-over-tls/sys/netinet/tcp_stacks/rack.c projects/nfs-over-tls/sys/netinet6/in6_fib.c projects/nfs-over-tls/sys/netinet6/in6_rmx.c projects/nfs-over-tls/sys/netinet6/in6_var.h projects/nfs-over-tls/sys/netinet6/nd6.c projects/nfs-over-tls/sys/netinet6/nd6_rtr.c projects/nfs-over-tls/sys/netpfil/ipfw/ip_fw_table_algo.c projects/nfs-over-tls/sys/nfs/bootp_subr.c projects/nfs-over-tls/sys/vm/vm_page.c projects/nfs-over-tls/sys/vm/vm_page.h Directory Properties: projects/nfs-over-tls/sys/ (props changed) Modified: projects/nfs-over-tls/sys/arm64/arm64/gic_v3_reg.h ============================================================================== --- projects/nfs-over-tls/sys/arm64/arm64/gic_v3_reg.h Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/arm64/arm64/gic_v3_reg.h Thu Apr 30 03:58:30 2020 (r360487) @@ -220,6 +220,8 @@ (rev) << GITS_IIDR_REVISION_SHIFT | \ (impl) << GITS_IIDR_IMPLEMENTOR_SHIFT) +#define GITS_IIDR_IMPL_ARM (0x43B) +#define GITS_IIDR_PROD_GIC500 (0x0) #define GITS_IIDR_IMPL_CAVIUM (0x34c) #define GITS_IIDR_PROD_THUNDER (0xa1) #define GITS_IIDR_VAR_THUNDER_1 (0x0) @@ -359,6 +361,18 @@ #define LPI_CONF_PRIO_MASK (0xFC) #define LPI_CONF_GROUP1 (1 << 1) #define LPI_CONF_ENABLE (1 << 0) + +/* + * GIC 500 ITS tracking facility + */ +#define GITS_TRKCTLR 0xC000 +#define GITS_TRKR 0xC004 +#define GITS_TRKDIDR 0xC008 +#define GITS_TRKPIDR 0xC00C +#define GITS_TRKVIDR 0xC010 +#define GITS_TRKTGTR 0xC014 +#define GITS_TRKICR 0xC018 +#define GITS_TRKLCR 0xC018 /* * CPU interface Modified: projects/nfs-over-tls/sys/arm64/arm64/gicv3_its.c ============================================================================== --- projects/nfs-over-tls/sys/arm64/arm64/gicv3_its.c Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/arm64/arm64/gicv3_its.c Thu Apr 30 03:58:30 2020 (r360487) @@ -49,7 +49,9 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include +#include #include #include @@ -229,6 +231,7 @@ struct gicv3_its_irqsrc { }; struct gicv3_its_softc { + device_t dev; struct intr_pic *sc_pic; struct resource *sc_its_res; @@ -262,6 +265,7 @@ struct gicv3_its_softc { #define ITS_FLAGS_LPI_CONF_FLUSH 0x00000002 #define ITS_FLAGS_ERRATA_CAVIUM_22375 0x00000004 u_int sc_its_flags; + bool trace_enable; }; static void *conf_base; @@ -713,6 +717,86 @@ its_init_cpu(device_t dev, struct gicv3_its_softc *sc) } static int +gicv3_its_sysctl_trace_enable(SYSCTL_HANDLER_ARGS) +{ + struct gicv3_its_softc *sc; + int rv; + + sc = arg1; + + rv = sysctl_handle_bool(oidp, &sc->trace_enable, 0, req); + if (rv != 0 || req->newptr == NULL) + return (rv); + if (sc->trace_enable) + gic_its_write_8(sc, GITS_TRKCTLR, 3); + else + gic_its_write_8(sc, GITS_TRKCTLR, 0); + + return (0); +} + +static int +gicv3_its_sysctl_trace_regs(SYSCTL_HANDLER_ARGS) +{ + struct gicv3_its_softc *sc; + struct sbuf *sb; + int err; + + sc = arg1; + sb = sbuf_new_for_sysctl(NULL, NULL, 128, req); + if (sb == NULL) { + device_printf(sc->dev, "Could not allocate sbuf for output.\n"); + return (ENOMEM); + } + sbuf_cat(sb, "\n"); + sbuf_printf(sb, "GITS_TRKCTLR: 0x%08X\n", + gic_its_read_4(sc, GITS_TRKCTLR)); + sbuf_printf(sb, "GITS_TRKR: 0x%08X\n", + gic_its_read_4(sc, GITS_TRKR)); + sbuf_printf(sb, "GITS_TRKDIDR: 0x%08X\n", + gic_its_read_4(sc, GITS_TRKDIDR)); + sbuf_printf(sb, "GITS_TRKPIDR: 0x%08X\n", + gic_its_read_4(sc, GITS_TRKPIDR)); + sbuf_printf(sb, "GITS_TRKVIDR: 0x%08X\n", + gic_its_read_4(sc, GITS_TRKVIDR)); + sbuf_printf(sb, "GITS_TRKTGTR: 0x%08X\n", + gic_its_read_4(sc, GITS_TRKTGTR)); + + err = sbuf_finish(sb); + if (err) + device_printf(sc->dev, "Error finishing sbuf: %d\n", err); + sbuf_delete(sb); + return(err); +} + +static int +gicv3_its_init_sysctl(struct gicv3_its_softc *sc) +{ + struct sysctl_oid *oid, *child; + struct sysctl_ctx_list *ctx_list; + + ctx_list = device_get_sysctl_ctx(sc->dev); + child = device_get_sysctl_tree(sc->dev); + oid = SYSCTL_ADD_NODE(ctx_list, + SYSCTL_CHILDREN(child), OID_AUTO, "tracing", + CTLFLAG_RD| CTLFLAG_MPSAFE, NULL, "Messages tracing"); + if (oid == NULL) + return (ENXIO); + + /* Add registers */ + SYSCTL_ADD_PROC(ctx_list, + SYSCTL_CHILDREN(oid), OID_AUTO, "enable", + CTLTYPE_U8 | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0, + gicv3_its_sysctl_trace_enable, "CU", "Enable tracing"); + SYSCTL_ADD_PROC(ctx_list, + SYSCTL_CHILDREN(oid), OID_AUTO, "capture", + CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0, + gicv3_its_sysctl_trace_regs, "", "Captured tracing registers."); + + return (0); +} + +static int gicv3_its_attach(device_t dev) { struct gicv3_its_softc *sc; @@ -811,6 +895,11 @@ gicv3_its_attach(device_t dev) "%s,%u", name, i); } + /* For GIC-500 install tracking sysctls. */ + if ((iidr & (GITS_IIDR_PRODUCT_MASK | GITS_IIDR_IMPLEMENTOR_MASK)) == + GITS_IIDR_RAW(GITS_IIDR_IMPL_ARM, GITS_IIDR_PROD_GIC500, 0, 0)) + gicv3_its_init_sysctl(sc); + return (0); } @@ -1717,6 +1806,7 @@ gicv3_its_fdt_attach(device_t dev) int err; sc = device_get_softc(dev); + sc->dev = dev; err = gicv3_its_attach(dev); if (err != 0) return (err); @@ -1778,6 +1868,7 @@ gicv3_its_acpi_attach(device_t dev) int err; sc = device_get_softc(dev); + sc->dev = dev; err = gicv3_its_attach(dev); if (err != 0) return (err); Modified: projects/nfs-over-tls/sys/arm64/rockchip/rk805.c ============================================================================== --- projects/nfs-over-tls/sys/arm64/rockchip/rk805.c Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/arm64/rockchip/rk805.c Thu Apr 30 03:58:30 2020 (r360487) @@ -105,6 +105,7 @@ struct rk805_softc { static int rk805_regnode_status(struct regnode *regnode, int *status); static int rk805_regnode_set_voltage(struct regnode *regnode, int min_uvolt, int max_uvolt, int *udelay); +static int rk805_regnode_get_voltage(struct regnode *regnode, int *uvolt); static struct rk805_regdef rk805_regdefs[] = { { @@ -366,13 +367,21 @@ rk805_regnode_init(struct regnode *regnode) { struct rk805_reg_sc *sc; struct regnode_std_param *param; - int rv, udelay, status; + int rv, udelay, uvolt, status; sc = regnode_get_softc(regnode); + dprintf(sc, "Regulator %s init called\n", sc->def->name); param = regnode_get_stdparam(regnode); if (param->min_uvolt == 0) return (0); + /* Check that the regulator is preset to the correct voltage */ + rv = rk805_regnode_get_voltage(regnode, &uvolt); + if (rv != 0) + return(rv); + + if (uvolt >= param->min_uvolt && uvolt <= param->max_uvolt) + return(0); /* * Set the regulator at the correct voltage if it is not enabled. * Do not enable it, this is will be done either by a Modified: projects/nfs-over-tls/sys/arm64/rockchip/rk_iodomain.c ============================================================================== --- projects/nfs-over-tls/sys/arm64/rockchip/rk_iodomain.c Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/arm64/rockchip/rk_iodomain.c Thu Apr 30 03:58:30 2020 (r360487) @@ -45,17 +45,20 @@ __FBSDID("$FreeBSD$"); #define RK3288_GRF_IO_VSEL 0x380 #define RK3399_GRF_IO_VSEL 0xe640 -#define RK3399_PMUGRF_IO_VSEL 0x180 +#define RK3399_PMUGRF_SOC_CON0 0x180 struct rk_iodomain_supply { char *name; uint32_t bit; }; +struct rk_iodomain_softc; + struct rk_iodomain_conf { struct rk_iodomain_supply *supply; int nsupply; uint32_t grf_reg; + void (*init)(struct rk_iodomain_softc *sc); }; struct rk_iodomain_softc { @@ -101,10 +104,12 @@ static struct rk_iodomain_supply rk3399_pmu_supply[] = {"pmu1830-supply", 9}, }; +static void rk3399_pmu_init(struct rk_iodomain_softc *sc); static struct rk_iodomain_conf rk3399_pmu_conf = { .supply = rk3399_pmu_supply, .nsupply = nitems(rk3399_pmu_supply), - .grf_reg = RK3399_PMUGRF_IO_VSEL, + .grf_reg = RK3399_PMUGRF_SOC_CON0, + .init = rk3399_pmu_init, }; static struct ofw_compat_data compat_data[] = { @@ -115,6 +120,14 @@ static struct ofw_compat_data compat_data[] = { }; static void +rk3399_pmu_init(struct rk_iodomain_softc *sc) +{ + + SYSCON_WRITE_4(sc->grf, RK3399_PMUGRF_SOC_CON0, + (1 << 8) | (1 << (8 + 16))); /* set pmu1830_volsel */ +} + +static void rk_iodomain_set(struct rk_iodomain_softc *sc) { regulator_t supply; @@ -141,6 +154,8 @@ rk_iodomain_set(struct rk_iodomain_softc *sc) } SYSCON_WRITE_4(sc->grf, sc->conf->grf_reg, reg | mask); + if (sc->conf->init != NULL) + sc->conf->init(sc); } static int @@ -204,4 +219,4 @@ static driver_t rk_iodomain_driver = { static devclass_t rk_iodomain_devclass; EARLY_DRIVER_MODULE(rk_iodomain, simplebus, rk_iodomain_driver, - rk_iodomain_devclass, 0, 0, BUS_PASS_SUPPORTDEV + BUS_PASS_ORDER_MIDDLE); + rk_iodomain_devclass, 0, 0, BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE); Modified: projects/nfs-over-tls/sys/cam/cam_ccb.h ============================================================================== --- projects/nfs-over-tls/sys/cam/cam_ccb.h Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/cam/cam_ccb.h Thu Apr 30 03:58:30 2020 (r360487) @@ -630,6 +630,7 @@ struct ccb_pathinq_settings_sas { u_int32_t bitrate; /* Mbps */ }; +#define NVME_DEV_NAME_LEN 52 struct ccb_pathinq_settings_nvme { uint32_t nsid; /* Namespace ID for this path */ uint32_t domain; @@ -637,7 +638,10 @@ struct ccb_pathinq_settings_nvme { uint8_t slot; uint8_t function; uint8_t extra; + char dev_name[NVME_DEV_NAME_LEN]; /* nvme controller dev name for this device */ }; +_Static_assert(sizeof(struct ccb_pathinq_settings_nvme) == 64, + "ccb_pathinq_settings_nvme too big"); #define PATHINQ_SETTINGS_SIZE 128 @@ -1030,6 +1034,7 @@ struct ccb_trans_settings_nvme uint8_t speed; /* PCIe generation for each lane */ uint8_t max_lanes; /* Number of PCIe lanes */ uint8_t max_speed; /* PCIe generation for each lane */ + }; #include Modified: projects/nfs-over-tls/sys/cam/nvme/nvme_da.c ============================================================================== --- projects/nfs-over-tls/sys/cam/nvme/nvme_da.c Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/cam/nvme/nvme_da.c Thu Apr 30 03:58:30 2020 (r360487) @@ -95,6 +95,7 @@ typedef enum { NDA_CCB_BUFFER_IO = 0x01, NDA_CCB_DUMP = 0x02, NDA_CCB_TRIM = 0x03, + NDA_CCB_PASS = 0x04, NDA_CCB_TYPE_MASK = 0x0F, } nda_ccb_state; @@ -144,6 +145,7 @@ _Static_assert(NVME_MAX_DSM_TRIM % sizeof(struct nvme_ /* Need quirk table */ +static disk_ioctl_t ndaioctl; static disk_strategy_t ndastrategy; static dumper_t ndadump; static periph_init_t ndainit; @@ -366,6 +368,91 @@ ndaschedule(struct cam_periph *periph) cam_iosched_schedule(softc->cam_iosched, periph); } +static int +ndaioctl(struct disk *dp, u_long cmd, void *data, int fflag, + struct thread *td) +{ + struct cam_periph *periph; + struct nda_softc *softc; + + periph = (struct cam_periph *)dp->d_drv1; + softc = (struct nda_softc *)periph->softc; + + switch (cmd) { + case NVME_IO_TEST: + case NVME_BIO_TEST: + /* + * These don't map well to the underlying CCBs, so + * they are usupported via CAM. + */ + return (ENOTTY); + case NVME_GET_NSID: + { + struct nvme_get_nsid *gnsid = (struct nvme_get_nsid *)data; + struct ccb_pathinq cpi; + + xpt_path_inq(&cpi, periph->path); + strncpy(gnsid->cdev, cpi.xport_specific.nvme.dev_name, + sizeof(gnsid->cdev)); + gnsid->nsid = cpi.xport_specific.nvme.nsid; + return (0); + } + case NVME_PASSTHROUGH_CMD: + { + struct nvme_pt_command *pt; + union ccb *ccb; + struct cam_periph_map_info mapinfo; + u_int maxmap = MAXPHYS; /* XXX is this right */ + int error; + + /* + * Create a NVME_IO CCB to do the passthrough command. + */ + pt = (struct nvme_pt_command *)data; + ccb = xpt_alloc_ccb(); + xpt_setup_ccb(&ccb->ccb_h, periph->path, CAM_PRIORITY_NORMAL); + ccb->ccb_state = NDA_CCB_PASS; + cam_fill_nvmeio(&ccb->nvmeio, + 0, /* Retries */ + ndadone, + (pt->is_read ? CAM_DIR_IN : CAM_DIR_OUT) | CAM_DATA_VADDR, + pt->buf, + pt->len, + nda_default_timeout * 1000); + memcpy(&ccb->nvmeio.cmd, &pt->cmd, sizeof(pt->cmd)); + + /* + * Wire the user memory in this request for the I/O + */ + memset(&mapinfo, 0, sizeof(mapinfo)); + error = cam_periph_mapmem(ccb, &mapinfo, maxmap); + if (error) + return (error); + + /* + * Lock the periph and run the command. XXX do we need + * to lock the periph? + */ + cam_periph_lock(periph); + cam_periph_runccb(ccb, NULL, CAM_RETRY_SELTO, SF_RETRY_UA | SF_NO_PRINT, + NULL); + cam_periph_unlock(periph); + + /* + * Tear down mapping and return status. + */ + cam_periph_unmapmem(ccb, &mapinfo); + cam_periph_lock(periph); + error = (ccb->ccb_h.status == CAM_REQ_CMP) ? 0 : EIO; + xpt_release_ccb(ccb); + return (error); + } + default: + break; + } + return (ENOTTY); +} + /* * Actually translate the requested transfer into one the physical driver * can understand. The transfer is described by a buf and will include @@ -782,11 +869,8 @@ ndaregister(struct cam_periph *periph, void *arg) /* ident_data parsing */ periph->softc = softc; - softc->quirks = NDA_Q_NONE; - xpt_path_inq(&cpi, periph->path); - TASK_INIT(&softc->sysctl_task, 0, ndasysctlinit, periph); /* @@ -810,6 +894,7 @@ ndaregister(struct cam_periph *periph, void *arg) disk->d_open = ndaopen; disk->d_close = ndaclose; disk->d_strategy = ndastrategy; + disk->d_ioctl = ndaioctl; disk->d_getattr = ndagetattr; disk->d_dump = ndadump; disk->d_gone = ndadiskgonecb; @@ -1162,6 +1247,8 @@ ndadone(struct cam_periph *periph, union ccb *done_ccb } case NDA_CCB_DUMP: /* No-op. We're polling */ + return; + case NDA_CCB_PASS: return; default: break; Modified: projects/nfs-over-tls/sys/conf/Makefile.amd64 ============================================================================== --- projects/nfs-over-tls/sys/conf/Makefile.amd64 Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/conf/Makefile.amd64 Thu Apr 30 03:58:30 2020 (r360487) @@ -18,7 +18,7 @@ # # Which version of config(8) is required. -%VERSREQ= 600012 +%VERSREQ= 600018 STD8X16FONT?= iso Modified: projects/nfs-over-tls/sys/conf/files ============================================================================== --- projects/nfs-over-tls/sys/conf/files Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/conf/files Thu Apr 30 03:58:30 2020 (r360487) @@ -4091,12 +4091,13 @@ net/radix_mpath.c standard net/raw_cb.c standard net/raw_usrreq.c standard net/route.c standard -net/route_temporal.c standard net/route/nhop.c standard net/route/nhop_ctl.c standard net/route/nhop_utils.c standard net/route/route_ctl.c standard +net/route/route_ddb.c optional ddb net/route/route_helpers.c standard +net/route/route_temporal.c standard net/rss_config.c optional inet rss | inet6 rss net/rtsock.c standard net/slcompress.c optional netgraph_vjc | sppp | \ Modified: projects/nfs-over-tls/sys/conf/files.amd64 ============================================================================== --- projects/nfs-over-tls/sys/conf/files.amd64 Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/conf/files.amd64 Thu Apr 30 03:58:30 2020 (r360487) @@ -113,7 +113,8 @@ amd64/amd64/initcpu.c standard amd64/amd64/io.c optional io amd64/amd64/locore.S standard no-obj amd64/amd64/xen-locore.S optional xenhvm \ - compile-with "${NORMAL_S} -g0" + compile-with "${NORMAL_S} -g0" \ + no-ctfconvert amd64/amd64/machdep.c standard amd64/amd64/mem.c optional mem amd64/amd64/minidump_machdep.c standard Modified: projects/nfs-over-tls/sys/dev/dwc/if_dwc.c ============================================================================== --- projects/nfs-over-tls/sys/dev/dwc/if_dwc.c Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/dev/dwc/if_dwc.c Thu Apr 30 03:58:30 2020 (r360487) @@ -252,14 +252,13 @@ dwc_txstart_locked(struct dwc_softc *sc) ifp = sc->ifp; - if (ifp->if_drv_flags & IFF_DRV_OACTIVE) { + if (ifp->if_drv_flags & IFF_DRV_OACTIVE) return; - } enqueued = 0; for (;;) { - if (sc->txcount == (TX_DESC_COUNT-1)) { + if (sc->txcount == (TX_DESC_COUNT - 1)) { ifp->if_drv_flags |= IFF_DRV_OACTIVE; break; } @@ -268,7 +267,7 @@ dwc_txstart_locked(struct dwc_softc *sc) if (m == NULL) break; if (dwc_setup_txbuf(sc, sc->tx_idx_head, &m) != 0) { - IFQ_DRV_PREPEND(&ifp->if_snd, m); + IFQ_DRV_PREPEND(&ifp->if_snd, m); break; } BPF_MTAP(ifp, m); @@ -469,7 +468,7 @@ dwc_setup_rxdesc(struct dwc_softc *sc, int idx, bus_ad sc->rxdesc_ring[idx].addr = (uint32_t)paddr; nidx = next_rxidx(sc, idx); - sc->rxdesc_ring[idx].addr_next = sc->rxdesc_ring_paddr + \ + sc->rxdesc_ring[idx].addr_next = sc->rxdesc_ring_paddr + (nidx * sizeof(struct dwc_hwdesc)); if (sc->mactype == DWC_GMAC_ALT_DESC) sc->rxdesc_ring[idx].tdes1 = DDESC_CNTL_CHAINED | RX_MAX_PACKET; @@ -493,9 +492,8 @@ dwc_setup_rxbuf(struct dwc_softc *sc, int idx, struct error = bus_dmamap_load_mbuf_sg(sc->rxbuf_tag, sc->rxbuf_map[idx].map, m, &seg, &nsegs, 0); - if (error != 0) { + if (error != 0) return (error); - } KASSERT(nsegs == 1, ("%s: %d segments returned!", __func__, nsegs)); @@ -1167,10 +1165,6 @@ dwc_attach(device_t dev) device_printf(dev, "could not allocate resources\n"); return (ENXIO); } - - /* Memory interface */ - sc->bst = rman_get_bustag(sc->res[0]); - sc->bsh = rman_get_bushandle(sc->res[0]); /* Read MAC before reset */ if (dwc_get_hwaddr(sc, macaddr)) { Modified: projects/nfs-over-tls/sys/dev/dwc/if_dwcvar.h ============================================================================== --- projects/nfs-over-tls/sys/dev/dwc/if_dwcvar.h Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/dev/dwc/if_dwcvar.h Thu Apr 30 03:58:30 2020 (r360487) @@ -57,8 +57,6 @@ struct dwc_bufmap { struct dwc_softc { struct resource *res[2]; - bus_space_tag_t bst; - bus_space_handle_t bsh; device_t dev; int mactype; int mii_clk; Modified: projects/nfs-over-tls/sys/dev/nvme/nvme_ctrlr.c ============================================================================== --- projects/nfs-over-tls/sys/dev/nvme/nvme_ctrlr.c Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/dev/nvme/nvme_ctrlr.c Thu Apr 30 03:58:30 2020 (r360487) @@ -40,7 +40,9 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include +#include #include #include "nvme_private.h" @@ -50,6 +52,35 @@ __FBSDID("$FreeBSD$"); static void nvme_ctrlr_construct_and_submit_aer(struct nvme_controller *ctrlr, struct nvme_async_event_request *aer); +static void +nvme_ctrlr_devctl_log(struct nvme_controller *ctrlr, const char *type, const char *msg, ...) +{ + struct sbuf sb; + va_list ap; + int error; + + if (sbuf_new(&sb, NULL, 0, SBUF_AUTOEXTEND | SBUF_NOWAIT) == NULL) + return; + sbuf_printf(&sb, "%s: ", device_get_nameunit(ctrlr->dev)); + va_start(ap, msg); + sbuf_vprintf(&sb, msg, ap); + va_end(ap); + error = sbuf_finish(&sb); + if (error == 0) + printf("%s\n", sbuf_data(&sb)); + + sbuf_clear(&sb); + sbuf_printf(&sb, "name=\"%s\" reason=\"", device_get_nameunit(ctrlr->dev)); + va_start(ap, msg); + sbuf_vprintf(&sb, msg, ap); + va_end(ap); + sbuf_printf(&sb, "\""); + error = sbuf_finish(&sb); + if (error == 0) + devctl_notify("nvme", "controller", type, sbuf_data(&sb)); + sbuf_delete(&sb); +} + static int nvme_ctrlr_construct_admin_qpair(struct nvme_controller *ctrlr) { @@ -607,23 +638,28 @@ nvme_ctrlr_log_critical_warnings(struct nvme_controlle { if (state & NVME_CRIT_WARN_ST_AVAILABLE_SPARE) - nvme_printf(ctrlr, "available spare space below threshold\n"); + nvme_ctrlr_devctl_log(ctrlr, "critical", + "available spare space below threshold"); if (state & NVME_CRIT_WARN_ST_TEMPERATURE) - nvme_printf(ctrlr, "temperature above threshold\n"); + nvme_ctrlr_devctl_log(ctrlr, "critical", + "temperature above threshold"); if (state & NVME_CRIT_WARN_ST_DEVICE_RELIABILITY) - nvme_printf(ctrlr, "device reliability degraded\n"); + nvme_ctrlr_devctl_log(ctrlr, "critical", + "device reliability degraded"); if (state & NVME_CRIT_WARN_ST_READ_ONLY) - nvme_printf(ctrlr, "media placed in read only mode\n"); + nvme_ctrlr_devctl_log(ctrlr, "critical", + "media placed in read only mode"); if (state & NVME_CRIT_WARN_ST_VOLATILE_MEMORY_BACKUP) - nvme_printf(ctrlr, "volatile memory backup device failed\n"); + nvme_ctrlr_devctl_log(ctrlr, "critical", + "volatile memory backup device failed"); if (state & NVME_CRIT_WARN_ST_RESERVED_MASK) - nvme_printf(ctrlr, - "unknown critical warning(s): state = 0x%02x\n", state); + nvme_ctrlr_devctl_log(ctrlr, "critical", + "unknown critical warning(s): state = 0x%02x", state); } static void @@ -1121,7 +1157,7 @@ nvme_ctrlr_reset_task(void *arg, int pending) struct nvme_controller *ctrlr = arg; int status; - nvme_printf(ctrlr, "resetting controller\n"); + nvme_ctrlr_devctl_log(ctrlr, "RESET", "resetting controller"); status = nvme_ctrlr_hw_reset(ctrlr); /* * Use pause instead of DELAY, so that we yield to any nvme interrupt Modified: projects/nfs-over-tls/sys/dev/nvme/nvme_sim.c ============================================================================== --- projects/nfs-over-tls/sys/dev/nvme/nvme_sim.c Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/dev/nvme/nvme_sim.c Thu Apr 30 03:58:30 2020 (r360487) @@ -203,6 +203,8 @@ nvme_sim_action(struct cam_sim *sim, union ccb *ccb) cpi->xport_specific.nvme.slot = pci_get_slot(dev); cpi->xport_specific.nvme.function = pci_get_function(dev); cpi->xport_specific.nvme.extra = 0; + strncpy(cpi->xport_specific.nvme.dev_name, device_get_nameunit(ctrlr->dev), + sizeof(cpi->xport_specific.nvme.dev_name)); cpi->ccb_h.status = CAM_REQ_CMP; break; } Modified: projects/nfs-over-tls/sys/kern/kern_cpu.c ============================================================================== --- projects/nfs-over-tls/sys/kern/kern_cpu.c Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/kern/kern_cpu.c Thu Apr 30 03:58:30 2020 (r360487) @@ -325,6 +325,12 @@ cf_set_method(device_t dev, const struct cf_level *lev /* Bind to the target CPU before switching. */ pc = cpu_get_pcpu(set->dev); + + /* Skip settings if CPU is not started. */ + if (pc == NULL) { + error = 0; + goto out; + } thread_lock(curthread); pri = curthread->td_priority; sched_prio(curthread, PRI_MIN); Modified: projects/nfs-over-tls/sys/kern/kern_sendfile.c ============================================================================== --- projects/nfs-over-tls/sys/kern/kern_sendfile.c Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/kern/kern_sendfile.c Thu Apr 30 03:58:30 2020 (r360487) @@ -106,8 +106,36 @@ struct sendfile_sync { struct mtx mtx; struct cv cv; unsigned count; + bool waiting; }; +static void +sendfile_sync_destroy(struct sendfile_sync *sfs) +{ + KASSERT(sfs->count == 0, ("sendfile sync %p still busy", sfs)); + + cv_destroy(&sfs->cv); + mtx_destroy(&sfs->mtx); + free(sfs, M_SENDFILE); +} + +static void +sendfile_sync_signal(struct sendfile_sync *sfs) +{ + mtx_lock(&sfs->mtx); + KASSERT(sfs->count > 0, ("sendfile sync %p not busy", sfs)); + if (--sfs->count == 0) { + if (!sfs->waiting) { + /* The sendfile() waiter was interrupted by a signal. */ + sendfile_sync_destroy(sfs); + return; + } else { + cv_signal(&sfs->cv); + } + } + mtx_unlock(&sfs->mtx); +} + counter_u64_t sfstat[sizeof(struct sfstat) / sizeof(uint64_t)]; static void @@ -153,12 +181,7 @@ sendfile_free_mext(struct mbuf *m) if (m->m_ext.ext_flags & EXT_FLAG_SYNC) { struct sendfile_sync *sfs = m->m_ext.ext_arg2; - - mtx_lock(&sfs->mtx); - KASSERT(sfs->count > 0, ("Sendfile sync botchup count == 0")); - if (--sfs->count == 0) - cv_signal(&sfs->cv); - mtx_unlock(&sfs->mtx); + sendfile_sync_signal(sfs); } } @@ -186,12 +209,7 @@ sendfile_free_mext_pg(struct mbuf *m) if (m->m_ext.ext_flags & EXT_FLAG_SYNC) { struct sendfile_sync *sfs = m->m_ext.ext_arg1; - - mtx_lock(&sfs->mtx); - KASSERT(sfs->count > 0, ("Sendfile sync botchup count == 0")); - if (--sfs->count == 0) - cv_signal(&sfs->cv); - mtx_unlock(&sfs->mtx); + sendfile_sync_signal(sfs); } } @@ -719,6 +737,7 @@ vn_sendfile(struct file *fp, int sockfd, struct uio *h sfs = malloc(sizeof(*sfs), M_SENDFILE, M_WAITOK | M_ZERO); mtx_init(&sfs->mtx, "sendfile", NULL, MTX_DEF); cv_init(&sfs->cv, "sendfile"); + sfs->waiting = true; } rem = nbytes ? omin(nbytes, obj_size - offset) : obj_size - offset; @@ -1221,11 +1240,13 @@ out: if (sfs != NULL) { mtx_lock(&sfs->mtx); if (sfs->count != 0) - cv_wait(&sfs->cv, &sfs->mtx); - KASSERT(sfs->count == 0, ("sendfile sync still busy")); - cv_destroy(&sfs->cv); - mtx_destroy(&sfs->mtx); - free(sfs, M_SENDFILE); + error = cv_wait_sig(&sfs->cv, &sfs->mtx); + if (sfs->count == 0) { + sendfile_sync_destroy(sfs); + } else { + sfs->waiting = false; + mtx_unlock(&sfs->mtx); + } } #ifdef KERN_TLS if (tls != NULL) Modified: projects/nfs-over-tls/sys/modules/cxgb/cxgb/Makefile ============================================================================== --- projects/nfs-over-tls/sys/modules/cxgb/cxgb/Makefile Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/modules/cxgb/cxgb/Makefile Thu Apr 30 03:58:30 2020 (r360487) @@ -8,7 +8,7 @@ SRCS= cxgb_mc5.c cxgb_vsc8211.c cxgb_ael1002.c cxgb_mv SRCS+= cxgb_xgmac.c cxgb_vsc7323.c cxgb_t3_hw.c cxgb_main.c cxgb_aq100x.c SRCS+= cxgb_sge.c cxgb_tn1010.c SRCS+= device_if.h bus_if.h pci_if.h -SRCS+= opt_inet.h opt_inet6.h opt_sched.h +SRCS+= opt_inet.h opt_inet6.h SRCS+= uipc_mvec.c CFLAGS+= -g -DDEFAULT_JUMBO -I${CXGB} Modified: projects/nfs-over-tls/sys/modules/cxgbe/iw_cxgbe/Makefile ============================================================================== --- projects/nfs-over-tls/sys/modules/cxgbe/iw_cxgbe/Makefile Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/modules/cxgbe/iw_cxgbe/Makefile Thu Apr 30 03:58:30 2020 (r360487) @@ -14,7 +14,7 @@ SRCS+= provider.c SRCS+= qp.c SRCS+= resource.c SRCS+= ${LINUXKPI_GENSRCS} -SRCS+= opt_inet.h opt_inet6.h opt_ktr.h opt_ofed.h opt_sched.h +SRCS+= opt_inet.h opt_inet6.h opt_ktr.h opt_ofed.h CFLAGS+= -I${CXGBE} -I${SRCTOP}/sys/ofed/include -DLINUX_TYPES_DEFINED CFLAGS+= -I${SRCTOP}/sys/ofed/include/uapi Modified: projects/nfs-over-tls/sys/modules/rdma/krping/Makefile ============================================================================== --- projects/nfs-over-tls/sys/modules/rdma/krping/Makefile Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/modules/rdma/krping/Makefile Thu Apr 30 03:58:30 2020 (r360487) @@ -4,7 +4,7 @@ KMOD= krping SRCS= krping.c krping_dev.c getopt.c SRCS+= ${LINUXKPI_GENSRCS} -SRCS+= opt_sched.h opt_inet.h opt_inet6.h +SRCS+= opt_inet.h opt_inet6.h CFLAGS+= -I${SRCTOP}/sys/ofed/include CFLAGS+= -I${SRCTOP}/sys/ofed/include/uapi CFLAGS+= -I${SRCTOP}/sys/compat/linuxkpi/common/include Modified: projects/nfs-over-tls/sys/modules/sfxge/Makefile ============================================================================== --- projects/nfs-over-tls/sys/modules/sfxge/Makefile Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/modules/sfxge/Makefile Thu Apr 30 03:58:30 2020 (r360487) @@ -5,7 +5,7 @@ KMOD= sfxge SFXGE= ${SRCTOP}/sys/dev/sfxge SRCS= device_if.h bus_if.h pci_if.h -SRCS+= opt_inet.h opt_inet6.h opt_sched.h opt_rss.h +SRCS+= opt_inet.h opt_inet6.h opt_rss.h .PATH: ${SRCTOP}/sys/dev/sfxge SRCS+= sfxge.c sfxge_dma.c sfxge_ev.c Modified: projects/nfs-over-tls/sys/net/if_var.h ============================================================================== --- projects/nfs-over-tls/sys/net/if_var.h Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/net/if_var.h Thu Apr 30 03:58:30 2020 (r360487) @@ -61,6 +61,7 @@ */ struct rtentry; /* ifa_rtrequest */ +struct nhop_object; /* ifa_rtrequest */ struct rt_addrinfo; /* ifa_rtrequest */ struct socket; struct carp_if; @@ -551,7 +552,8 @@ struct ifaddr { struct carp_softc *ifa_carp; /* pointer to CARP data */ CK_STAILQ_ENTRY(ifaddr) ifa_link; /* queue macro glue */ void (*ifa_rtrequest) /* check or clean routes (+ or -)'d */ - (int, struct rtentry *, struct rt_addrinfo *); + (int, struct rtentry *, struct nhop_object *, + struct rt_addrinfo *); u_short ifa_flags; /* mostly rt_flags for cloning */ #define IFA_ROUTE RTF_UP /* route installed */ #define IFA_RTSELF RTF_HOST /* loopback route to self installed */ Modified: projects/nfs-over-tls/sys/net/radix_mpath.c ============================================================================== --- projects/nfs-over-tls/sys/net/radix_mpath.c Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/net/radix_mpath.c Thu Apr 30 03:58:30 2020 (r360487) @@ -57,7 +57,7 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include +#include #include #include #include @@ -183,6 +183,7 @@ rt_mpath_conflict(struct rib_head *rnh, struct rtentry struct sockaddr *netmask) { struct radix_node *rn, *rn1; + struct nhop_object *nh, *nh1; struct rtentry *rt1; rn = (struct radix_node *)rt; @@ -198,15 +199,17 @@ rt_mpath_conflict(struct rib_head *rnh, struct rtentry if (rn1 == rn) continue; - if (rt1->rt_gateway->sa_family == AF_LINK) { - if (rt1->rt_ifa->ifa_addr->sa_len != rt->rt_ifa->ifa_addr->sa_len || - bcmp(rt1->rt_ifa->ifa_addr, rt->rt_ifa->ifa_addr, - rt1->rt_ifa->ifa_addr->sa_len)) + nh = rt->rt_nhop; + nh1 = rt1->rt_nhop; + + if (nh1->gw_sa.sa_family == AF_LINK) { + if (nh1->nh_ifa->ifa_addr->sa_len != nh->nh_ifa->ifa_addr->sa_len || + bcmp(nh1->nh_ifa->ifa_addr, nh->nh_ifa->ifa_addr, + nh1->nh_ifa->ifa_addr->sa_len)) continue; } else { - if (rt1->rt_gateway->sa_len != rt->rt_gateway->sa_len || - bcmp(rt1->rt_gateway, rt->rt_gateway, - rt1->rt_gateway->sa_len)) + if (nh1->gw_sa.sa_len != nh->gw_sa.sa_len || + bcmp(&nh1->gw_sa, &nh->gw_sa, nh1->gw_sa.sa_len)) continue; } @@ -254,46 +257,6 @@ rt_mpath_select(struct rtentry *rte, uint32_t hash) return (rte); return (rt_mpath_selectrte(rte, hash)); -} - -void -rtalloc_mpath_fib(struct route *ro, uint32_t hash, u_int fibnum) -{ - struct rtentry *rt, *rt_tmp; - - /* - * XXX we don't attempt to lookup cached route again; what should - * be done for sendto(3) case? - */ - if (ro->ro_nh && RT_LINK_IS_UP(ro->ro_nh->nh_ifp)) - return; - ro->ro_nh = NULL; - rt_tmp = rtalloc1_fib(&ro->ro_dst, 1, 0, fibnum); - - /* if the route does not exist or it is not multipath, don't care */ - if (rt_tmp == NULL) - return; - if (rn_mpath_next((struct radix_node *)rt_tmp) == NULL) { - ro->ro_nh = rt_tmp->rt_nhop; - nhop_ref_object(ro->ro_nh); - RT_UNLOCK(rt_tmp); - return; - } - - rt = rt_mpath_selectrte(rt_tmp, hash); - /* XXX try filling rt_gwroute and avoid unreachable gw */ - - /* gw selection has failed - there must be only zero weight routes */ - if (!rt) { - RT_UNLOCK(rt_tmp); - return; - } - if (rt_tmp != rt) { - RTFREE_LOCKED(rt_tmp); - ro->ro_nh = rt->rt_nhop; - nhop_ref_object(ro->ro_nh); - } else - RT_UNLOCK(rt_tmp); } void Modified: projects/nfs-over-tls/sys/net/radix_mpath.h ============================================================================== --- projects/nfs-over-tls/sys/net/radix_mpath.h Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/net/radix_mpath.h Thu Apr 30 03:58:30 2020 (r360487) @@ -54,7 +54,6 @@ u_int32_t rn_mpath_count(struct radix_node *); struct rtentry *rt_mpath_matchgate(struct rtentry *, struct sockaddr *); int rt_mpath_conflict(struct rib_head *, struct rtentry *, struct sockaddr *); -void rtalloc_mpath_fib(struct route *, u_int32_t, u_int); struct rtentry *rt_mpath_select(struct rtentry *, uint32_t); struct rtentry *rt_mpath_selectrte(struct rtentry *, uint32_t); int rt_mpath_deldup(struct rtentry *, struct rtentry *); Modified: projects/nfs-over-tls/sys/net/route.c ============================================================================== --- projects/nfs-over-tls/sys/net/route.c Thu Apr 30 02:50:58 2020 (r360486) +++ projects/nfs-over-tls/sys/net/route.c Thu Apr 30 03:58:30 2020 (r360487) @@ -61,7 +61,7 @@ #include #include #include -#include +#include #include #include #include @@ -434,28 +434,6 @@ sys_setfib(struct thread *td, struct setfib_args *uap) } /* - * Packet routing routines. - */ -void -rtalloc_ign_fib(struct route *ro, u_long ignore, u_int fibnum) -{ - struct rtentry *rt; - - if (ro->ro_nh != NULL) { - if (NH_IS_VALID(ro->ro_nh)) - return; - NH_FREE(ro->ro_nh); - ro->ro_nh = NULL; - } - rt = rtalloc1_fib(&ro->ro_dst, 1, ignore, fibnum); - if (rt != NULL) { - ro->ro_nh = rt->rt_nhop; - nhop_ref_object(rt->rt_nhop); - RT_UNLOCK(rt); - } -} - -/* * Look up the route that matches the address given * Or, at least try.. Create a cloned route if needed. * @@ -767,8 +745,8 @@ ifa_ifwithroute(int flags, const struct sockaddr *dst, default: break; } - if (!not_found && rt->rt_ifa != NULL) { - ifa = rt->rt_ifa; + if (!not_found && rt->rt_nhop->nh_ifa != NULL) { + ifa = rt->rt_nhop->nh_ifa; } RT_REMREF(rt); RT_UNLOCK(rt); @@ -931,7 +909,7 @@ rib_lookup_info(uint32_t fibnum, const struct sockaddr if (rn != NULL && ((rn->rn_flags & RNF_ROOT) == 0)) { rt = RNTORT(rn); /* Ensure route & ifp is UP */ - if (RT_LINK_IS_UP(rt->rt_ifp)) { + if (RT_LINK_IS_UP(rt->rt_nhop->nh_ifp)) { flags = (flags & NHR_REF) | NHR_COPY; error = rt_exportinfo(rt, info, flags); RIB_RUNLOCK(rh); @@ -1086,7 +1064,8 @@ rib_walk_del(u_int fibnum, int family, rt_filter_f_t * rt_notifydelete(rt, &di.info); if (report) - rt_routemsg(RTM_DELETE, rt, rt->rt_ifp, 0, fibnum); + rt_routemsg(RTM_DELETE, rt, rt->rt_nhop->nh_ifp, 0, + fibnum); RTFREE_LOCKED(rt); } } *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Fri May 1 01:30:11 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DEE3C2CDF74 for ; Fri, 1 May 2020 01:30:11 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49Cvnb5QJ9z4JQG; Fri, 1 May 2020 01:30:11 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B0B3022A; Fri, 1 May 2020 01:30:11 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0411UBJs047583; Fri, 1 May 2020 01:30:11 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0411UBVp047582; Fri, 1 May 2020 01:30:11 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202005010130.0411UBVp047582@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Fri, 1 May 2020 01:30:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r360518 - projects/nfs-over-tls/sys/fs/nfs X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/nfs-over-tls/sys/fs/nfs X-SVN-Commit-Revision: 360518 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 May 2020 01:30:11 -0000 Author: rmacklem Date: Fri May 1 01:30:11 2020 New Revision: 360518 URL: https://svnweb.freebsd.org/changeset/base/360518 Log: Modify nfsm_copyfrommbuf() so that it calls nfsm_copfrommbuf_extpgs() for the ext_pgs mbuf case. This small change simplifies the callers and minimizes the changes required to integrate ext_pgs mbuf handling into the code in head. Modified: projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c Modified: projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c ============================================================================== --- projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c Fri May 1 01:26:36 2020 (r360517) +++ projects/nfs-over-tls/sys/fs/nfs/nfs_commonsubs.c Fri May 1 01:30:11 2020 (r360518) @@ -656,12 +656,8 @@ nfsm_mbufuio(struct nfsrv_descript *nd, struct uio *ui left = siz; uiosiz = left; while (left > 0) { - if ((nd->nd_md->m_flags & M_NOMAP) != 0) - xfer = nfsm_copyfrommbuf_extpgs(nd, uiocp, - uiop->uio_segflg, left); - else - xfer = nfsm_copyfrommbuf(nd, uiocp, - uiop->uio_segflg, left); + xfer = nfsm_copyfrommbuf(nd, uiocp, uiop->uio_segflg, + left); left -= xfer; uiocp += xfer; uiop->uio_offset += xfer; @@ -771,12 +767,7 @@ nfsm_dissct(struct nfsrv_descript *nd, int siz, int ho if (nd->nd_md == NULL) return (NULL); nfsm_set(nd, 0, false); - if ((nd->nd_md->m_flags & M_NOMAP) != 0) - xfer = nfsm_copyfrommbuf_extpgs(nd, p, - UIO_SYSSPACE, siz2); - else - xfer = nfsm_copyfrommbuf(nd, p, - UIO_SYSSPACE, siz2); + xfer = nfsm_copyfrommbuf(nd, p, UIO_SYSSPACE, siz2); p += xfer; siz2 -= xfer; if (siz2 > 0) @@ -2479,12 +2470,7 @@ nfsrv_mtostr(struct nfsrv_descript *nd, char *str, int rem = NFSM_RNDUP(siz) - siz; while (siz > 0) { - if ((nd->nd_md->m_flags & M_NOMAP) != 0) - xfer = nfsm_copyfrommbuf_extpgs(nd, str, - UIO_SYSSPACE, siz); - else - xfer = nfsm_copyfrommbuf(nd, str, - UIO_SYSSPACE, siz); + xfer = nfsm_copyfrommbuf(nd, str, UIO_SYSSPACE, siz); str += xfer; siz -= xfer; if (siz > 0 && !nfsm_shiftnext(nd, &xfer)) { @@ -4972,6 +4958,10 @@ nfsm_copyfrommbuf(struct nfsrv_descript *nd, char *cp, int xfer; m = nd->nd_md; + if ((m->m_flags & M_NOMAP) != 0) { + xfer = nfsm_copyfrommbuf_extpgs(nd, cp, segflg, len); + return (xfer); + } xfer = mtod(m, char *) + m->m_len - nd->nd_dpos; xfer = min(xfer, len); if (xfer > 0) {