aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2021-11-24 19:53:50 -0800
committerEric Biggers <ebiggers@google.com>2022-01-24 14:16:01 -0800
commit4a241d560278ece4acb6976c02fdeb48bb398d36 (patch)
tree235c309181153d040f9a3aafd2daad76bc1efff1
parentacd90970f3c4c1ce41f1108d6f74a00c6eacb872 (diff)
downloadlinux-old/blk-crypto-sysfs-testing.tar.gz
virtio-blk: add fake crypto profile for testingold/blk-crypto-sysfs-testing
Signed-off-by: Eric Biggers <ebiggers@google.com>
-rw-r--r--drivers/block/virtio_blk.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index c443cd64fc9b46..3c8e245dda7b7e 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -16,6 +16,7 @@
#include <linux/blk-mq-virtio.h>
#include <linux/numa.h>
#include <uapi/linux/virtio_ring.h>
+#include <linux/blk-crypto-profile.h>
#define PART_BITS 4
#define VQ_NAME_LEN 16
@@ -748,6 +749,27 @@ static const struct blk_mq_ops virtio_mq_ops = {
static unsigned int virtblk_queue_depth;
module_param_named(queue_depth, virtblk_queue_depth, uint, 0444);
+static void virtblk_add_crypto_profile(struct request_queue *q)
+{
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+ struct blk_crypto_profile *profile;
+
+ profile = kzalloc(sizeof(*profile), GFP_KERNEL);
+ if (!profile)
+ return;
+
+ if (blk_crypto_profile_init(profile, 32) != 0) {
+ kfree(profile);
+ return;
+ }
+ profile->modes_supported[BLK_ENCRYPTION_MODE_AES_256_XTS] =
+ 4096 | 8192;
+ profile->max_dun_bytes_supported = 8;
+
+ q->crypto_profile = profile;
+#endif /* CONFIG_BLK_INLINE_ENCRYPTION */
+}
+
static int virtblk_probe(struct virtio_device *vdev)
{
struct virtio_blk *vblk;
@@ -836,6 +858,8 @@ static int virtblk_probe(struct virtio_device *vdev)
}
q = vblk->disk->queue;
+ virtblk_add_crypto_profile(q);
+
virtblk_name_format("vd", index, vblk->disk->disk_name, DISK_NAME_LEN);
vblk->disk->major = major;