[libbsd 13/22] cryptodev: Do not use VFS

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Jun 24 06:33:41 UTC 2022


Revert commit 6514d561587fd1527fe6a26cb43e6b5742c8c779 in
"freebsd/sys/opencrypto/cryptodev.c".  The goal is to use USB, network, PCI,
and NVMe support without the VFS to reduce the memory and runtime overhead
introduced by VFS.

Update #4475.
---
 freebsd/sys/opencrypto/cryptodev.c | 70 ++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/freebsd/sys/opencrypto/cryptodev.c b/freebsd/sys/opencrypto/cryptodev.c
index 97459559..babff6b3 100644
--- a/freebsd/sys/opencrypto/cryptodev.c
+++ b/freebsd/sys/opencrypto/cryptodev.c
@@ -40,6 +40,9 @@
  * Materiel Command, USAF, under agreement number F30602-01-2-0537.
  */
 
+#ifdef __rtems__
+#include <rtems/bsd/sys/file.h>
+#endif /* __rtems__ */
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
@@ -303,6 +306,7 @@ SYSCTL_TIMEVAL_SEC(_kern, OID_AUTO, cryptodev_warn_interval, CTLFLAG_RW,
     &warninterval,
     "Delay in seconds between warnings of deprecated /dev/crypto algorithms");
 
+#ifndef __rtems__
 static	int cryptof_ioctl(struct file *, u_long, void *,
 		    struct ucred *, struct thread *);
 static	int cryptof_stat(struct file *, struct stat *,
@@ -325,6 +329,9 @@ static struct fileops cryptofops = {
     .fo_sendfile = invfo_sendfile,
     .fo_fill_kinfo = cryptof_fill_kinfo,
 };
+#else /* __rtems__ */
+static const rtems_filesystem_file_handlers_r cryptofops;
+#endif /* __rtems__ */
 
 static struct csession *csefind(struct fcrypt *, u_int);
 static bool csedelete(struct fcrypt *, u_int);
@@ -768,6 +775,24 @@ bail:
 	return (error);
 #undef SES2
 }
+#ifdef __rtems__
+static int
+rtems_bsd_cryptof_ioctl(rtems_libio_t *iop, ioctl_command_t request,
+    void *buffer)
+{
+	struct thread *td;
+	int error;
+
+	td = rtems_bsd_get_curthread_or_null();
+	if (td != NULL) {
+		error = cryptof_ioctl(iop, request, buffer, NULL, td);
+	} else {
+		error = ENOMEM;
+	}
+
+	return (rtems_bsd_error_to_status_and_errno(error));
+}
+#endif /* __rtems__ */
 
 static int cryptodev_cb(struct cryptop *);
 
@@ -1358,11 +1383,17 @@ cryptodev_find(struct crypt_find_op *find)
 
 /* ARGSUSED */
 static int
+#ifndef __rtems__
 cryptof_stat(
 	struct file *fp,
 	struct stat *sb,
 	struct ucred *active_cred,
 	struct thread *td)
+#else /* __rtems__ */
+rtems_bsd_cryptof_stat(const rtems_filesystem_location_info_t *loc,
+    struct stat *buf
+#endif /* __rtems__ */
+)
 {
 
 	return (EOPNOTSUPP);
@@ -1386,7 +1417,25 @@ cryptof_close(struct file *fp, struct thread *td)
 	fp->f_data = NULL;
 	return 0;
 }
+#ifdef __rtems__
+static int
+rtems_bsd_cryptof_close(rtems_libio_t *iop)
+{
+	struct thread *td;
+	int error;
+
+	td = rtems_bsd_get_curthread_or_null();
+	if (td != NULL) {
+		error = cryptof_close(iop, td);
+	} else {
+		error = ENOMEM;
+	}
 
+	return (rtems_bsd_error_to_status_and_errno(error));
+}
+#endif /* __rtems__ */
+
+#ifndef __rtems__
 static int
 cryptof_fill_kinfo(struct file *fp, struct kinfo_file *kif, struct filedesc *fdp)
 {
@@ -1394,6 +1443,7 @@ cryptof_fill_kinfo(struct file *fp, struct kinfo_file *kif, struct filedesc *fdp
 	kif->kf_type = KF_TYPE_CRYPTO;
 	return (0);
 }
+#endif /* __rtems__ */
 
 static struct csession *
 csefind(struct fcrypt *fcr, u_int ses)
@@ -1573,3 +1623,23 @@ MODULE_VERSION(cryptodev, 1);
 DECLARE_MODULE(cryptodev, cryptodev_mod, SI_SUB_PSEUDO, SI_ORDER_ANY);
 MODULE_DEPEND(cryptodev, crypto, 1, 1, 1);
 MODULE_DEPEND(cryptodev, zlib, 1, 1, 1);
+#ifdef __rtems__
+static const rtems_filesystem_file_handlers_r cryptofops = {
+	.open_h = rtems_filesystem_default_open,
+	.close_h = rtems_bsd_cryptof_close,
+	.read_h = rtems_filesystem_default_read,
+	.write_h = rtems_filesystem_default_write,
+	.ioctl_h = rtems_bsd_cryptof_ioctl,
+	.lseek_h = rtems_filesystem_default_lseek,
+	.fstat_h = rtems_bsd_cryptof_stat,
+	.ftruncate_h = rtems_filesystem_default_ftruncate,
+	.fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
+	.fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
+	.fcntl_h = rtems_filesystem_default_fcntl,
+	.poll_h = rtems_filesystem_default_poll,
+	.kqfilter_h = rtems_filesystem_default_kqfilter,
+	.readv_h = rtems_filesystem_default_readv,
+	.writev_h = rtems_filesystem_default_writev,
+	.mmap_h = rtems_filesystem_default_mmap
+};
+#endif /* __rtems__ */
-- 
2.35.3



More information about the devel mailing list