Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F110183802
D25126.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D25126.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D25126: Add a crypto capability flag for accelerated software drivers.
Attached
Detach File
Event Timeline
Log In to Comment