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 ...
Rick Macklem
rmacklem at FreeBSD.org
Tue Apr 28 00:44:10 UTC 2020
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 <sys/param.h>
#include <sys/systm.h>
#include <sys/conf.h>
@@ -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 <sys/cons.h>
#include <sys/proc.h>
#include <sys/reboot.h>
+#include <sys/sbuf.h>
#include <geom/geom.h>
#include <geom/geom_disk.h>
#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 ***
More information about the svn-src-projects
mailing list