Page MenuHomeFreeBSD

D25126.diff
No OneTemporary

D25126.diff

Index: head/share/man/man9/crypto_driver.9
===================================================================
--- head/share/man/man9/crypto_driver.9
+++ head/share/man/man9/crypto_driver.9
@@ -30,7 +30,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd May 25, 2020
+.Dd June 9, 2020
.Dt CRYPTO_DRIVER 9
.Os
.Sh NAME
@@ -113,6 +113,8 @@
.Dv CRYPTOCAP_F_SYNC
should be set for drivers which process requests synchronously in
.Fn CRYPTODEV_PROCESS .
+.Dv CRYPTOCAP_F_ACCEL_SOFTWARE
+should be set for software drivers which use accelerated CPU instructions.
.Fn crypto_get_driverid
returns an opaque driver id.
.Pp
Index: head/sys/crypto/aesni/aesni.c
===================================================================
--- head/sys/crypto/aesni/aesni.c
+++ head/sys/crypto/aesni/aesni.c
@@ -167,7 +167,8 @@
sc = device_get_softc(dev);
sc->cid = crypto_get_driverid(dev, sizeof(struct aesni_session),
- CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC);
+ CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC |
+ CRYPTOCAP_F_ACCEL_SOFTWARE);
if (sc->cid < 0) {
device_printf(dev, "Could not get crypto driver id.\n");
return (ENOMEM);
Index: head/sys/crypto/armv8/armv8_crypto.c
===================================================================
--- head/sys/crypto/armv8/armv8_crypto.c
+++ head/sys/crypto/armv8/armv8_crypto.c
@@ -131,7 +131,7 @@
sc->dieing = 0;
sc->cid = crypto_get_driverid(dev, sizeof(struct armv8_crypto_session),
- CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC);
+ CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC | CRYPTOCAP_F_ACCEL_SOFTWARE);
if (sc->cid < 0) {
device_printf(dev, "Could not get crypto driver id.\n");
return (ENOMEM);
Index: head/sys/crypto/blake2/blake2_cryptodev.c
===================================================================
--- head/sys/crypto/blake2/blake2_cryptodev.c
+++ head/sys/crypto/blake2/blake2_cryptodev.c
@@ -129,7 +129,8 @@
sc->dying = false;
sc->cid = crypto_get_driverid(dev, sizeof(struct blake2_session),
- CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC);
+ CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC |
+ CRYPTOCAP_F_ACCEL_SOFTWARE);
if (sc->cid < 0) {
device_printf(dev, "Could not get crypto driver id.\n");
return (ENOMEM);
Index: head/sys/crypto/via/padlock.c
===================================================================
--- head/sys/crypto/via/padlock.c
+++ head/sys/crypto/via/padlock.c
@@ -119,7 +119,8 @@
struct padlock_softc *sc = device_get_softc(dev);
sc->sc_cid = crypto_get_driverid(dev, sizeof(struct padlock_session),
- CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC);
+ CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC |
+ CRYPTOCAP_F_ACCEL_SOFTWARE);
if (sc->sc_cid < 0) {
device_printf(dev, "Could not get crypto driver id.\n");
return (ENOMEM);
Index: head/sys/geom/eli/g_eli.h
===================================================================
--- head/sys/geom/eli/g_eli.h
+++ head/sys/geom/eli/g_eli.h
@@ -145,6 +145,7 @@
#define G_ELI_CRYPTO_UNKNOWN 0
#define G_ELI_CRYPTO_HW 1
#define G_ELI_CRYPTO_SW 2
+#define G_ELI_CRYPTO_SW_ACCEL 3
#ifdef _KERNEL
#if (MAX_KEY_BYTES < G_ELI_DATAIVKEYLEN)
Index: head/sys/geom/eli/g_eli.c
===================================================================
--- head/sys/geom/eli/g_eli.c
+++ head/sys/geom/eli/g_eli.c
@@ -489,7 +489,8 @@
{
struct g_eli_softc *sc;
struct crypto_session_params csp;
- int error;
+ uint32_t caps;
+ int error, new_crypto;
void *key;
sc = wr->w_softc;
@@ -516,6 +517,7 @@
}
switch (sc->sc_crypto) {
+ case G_ELI_CRYPTO_SW_ACCEL:
case G_ELI_CRYPTO_SW:
error = crypto_newsession(&wr->w_sid, &csp,
CRYPTOCAP_F_SOFTWARE);
@@ -526,19 +528,19 @@
break;
case G_ELI_CRYPTO_UNKNOWN:
error = crypto_newsession(&wr->w_sid, &csp,
- CRYPTOCAP_F_HARDWARE);
+ CRYPTOCAP_F_HARDWARE | CRYPTOCAP_F_SOFTWARE);
if (error == 0) {
+ caps = crypto_ses2caps(wr->w_sid);
+ if (caps & CRYPTOCAP_F_HARDWARE)
+ new_crypto = G_ELI_CRYPTO_HW;
+ else if (caps & CRYPTOCAP_F_ACCEL_SOFTWARE)
+ new_crypto = G_ELI_CRYPTO_SW_ACCEL;
+ else
+ new_crypto = G_ELI_CRYPTO_SW;
mtx_lock(&sc->sc_queue_mtx);
if (sc->sc_crypto == G_ELI_CRYPTO_UNKNOWN)
- sc->sc_crypto = G_ELI_CRYPTO_HW;
+ sc->sc_crypto = new_crypto;
mtx_unlock(&sc->sc_queue_mtx);
- } else {
- error = crypto_newsession(&wr->w_sid, &csp,
- CRYPTOCAP_F_SOFTWARE);
- mtx_lock(&sc->sc_queue_mtx);
- if (sc->sc_crypto == G_ELI_CRYPTO_UNKNOWN)
- sc->sc_crypto = G_ELI_CRYPTO_SW;
- mtx_unlock(&sc->sc_queue_mtx);
}
break;
default:
@@ -983,6 +985,7 @@
if (sc->sc_flags & G_ELI_FLAG_AUTH)
G_ELI_DEBUG(0, " Integrity: %s", g_eli_algo2str(sc->sc_aalgo));
G_ELI_DEBUG(0, " Crypto: %s",
+ sc->sc_crypto == G_ELI_CRYPTO_SW_ACCEL ? "accelerated software" :
sc->sc_crypto == G_ELI_CRYPTO_SW ? "software" : "hardware");
return (gp);
failed:
@@ -1380,6 +1383,9 @@
break;
case G_ELI_CRYPTO_SW:
sbuf_cat(sb, "software");
+ break;
+ case G_ELI_CRYPTO_SW_ACCEL:
+ sbuf_cat(sb, "accelerated software");
break;
default:
sbuf_cat(sb, "UNKNOWN");
Index: head/sys/mips/cavium/cryptocteon/cryptocteon.c
===================================================================
--- head/sys/mips/cavium/cryptocteon/cryptocteon.c
+++ head/sys/mips/cavium/cryptocteon/cryptocteon.c
@@ -86,7 +86,8 @@
sc = device_get_softc(dev);
sc->sc_cid = crypto_get_driverid(dev, sizeof(struct octo_sess),
- CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC);
+ CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC |
+ CRYPTOCAP_F_ACCEL_SOFTWARE);
if (sc->sc_cid < 0) {
device_printf(dev, "crypto_get_driverid ret %d\n", sc->sc_cid);
return (ENXIO);
Index: head/sys/opencrypto/cryptodev.h
===================================================================
--- head/sys/opencrypto/cryptodev.h
+++ head/sys/opencrypto/cryptodev.h
@@ -620,6 +620,7 @@
#define CRYPTOCAP_F_HARDWARE CRYPTO_FLAG_HARDWARE
#define CRYPTOCAP_F_SOFTWARE CRYPTO_FLAG_SOFTWARE
#define CRYPTOCAP_F_SYNC 0x04000000 /* operates synchronously */
+#define CRYPTOCAP_F_ACCEL_SOFTWARE 0x08000000
extern int32_t crypto_get_driverid(device_t dev, size_t session_size,
int flags);
extern int crypto_find_driver(const char *);

File Metadata

Mime Type
text/plain
Expires
Sat, Feb 15, 6:41 PM (12 h, 11 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16663192
Default Alt Text
D25126.diff (6 KB)

Event Timeline