History

Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost

Pull virtio updates from Michael Tsirkin: - vdpa generic device type support - more virtio hardening for broken devices (but on the same theme, revert some virtio hotplug hardening patches - they were misusing some interrupt flags and had to be reverted) - RSS support in virtio-net - max device MTU support in mlx5 vdpa - akcipher support in virtio-crypto - shared IRQ support in ifcvf vdpa - a minor performance improvement in vhost - enable virtio mem for ARM64 - beginnings of advance dma support - cleanups, fixes all over the place * tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost: (33 commits) vdpa/mlx5: Avoid processing works if workqueue was destroyed vhost: handle error while adding split ranges to iotlb vdpa: support exposing the count of vqs to userspace vdpa: change the type of nvqs to u32 vdpa: support exposing the config size to userspace vdpa/mlx5: re-create forwarding rules after mac modified virtio: pci: check bar values read from virtio config space Revert "virtio_pci: harden MSI-X interrupts" Revert "virtio-pci: harden INTX interrupts" drivers/net/virtio_net: Added RSS hash report control. drivers/net/virtio_net: Added RSS hash report. drivers/net/virtio_net: Added basic RSS support. drivers/net/virtio_net: Fixed padded vheader to use v1 with hash. virtio: use virtio_device_ready() in virtio_device_restore() tools/virtio: compile with -pthread tools/virtio: fix after premapped buf support virtio_ring: remove flags check for unmap packed indirect desc virtio_ring: remove flags check for unmap split indirect desc virtio_ring: rename vring_unmap_state_packed() to vring_unmap_extra_packed() net/mlx5: Add support for configuring max device MTU ...

Linus Torvalds committed 4 years ago

Commit f4f5d7c2 parents e729dbe ad6dc1d32 files · +1628 −286Browse files

Showing the changes to include/uapi (3 of 32 files). Show all

Unified · Split

3 files
  1. include/uapi/linux/vhost.h +7 −0
  2. include/uapi/linux/virtio_config.h +6 −0
  3. include/uapi/linux/virtio_crypto.h +81 −1
include/uapi/linux/vhost.h+7−0
@@ -150,4 +150,11 @@ · 149 unmodified lines
150150 /* Get the valid iova range */
151151 #define VHOST_VDPA_GET_IOVA_RANGE _IOR(VHOST_VIRTIO, 0x78, \
152152 struct vhost_vdpa_iova_range)
153+
154+/* Get the config size */
155+#define VHOST_VDPA_GET_CONFIG_SIZE _IOR(VHOST_VIRTIO, 0x79, __u32)
156+
157+/* Get the count of all virtqueues */
158+#define VHOST_VDPA_GET_VQS_COUNT _IOR(VHOST_VIRTIO, 0x80, __u32)
159+
153160 #endif
include/uapi/linux/virtio_config.h+6−0
@@ -82,6 +82,12 @@ · 81 unmodified lines
8282 /* This feature indicates support for the packed virtqueue layout. */
8383 #define VIRTIO_F_RING_PACKED 34
8484
85+/*
86+ * Inorder feature indicates that all buffers are used by the device
87+ * in the same order in which they have been made available.
88+ */
89+#define VIRTIO_F_IN_ORDER 35
90+
8591 /*
8692 * This feature indicates that memory accesses by the driver and the
8793 * device are ordered in a way described by the platform.
include/uapi/linux/virtio_crypto.h+81−1
@@ -37,6 +37,7 @@ · 36 unmodified lines
3737 #define VIRTIO_CRYPTO_SERVICE_HASH 1
3838 #define VIRTIO_CRYPTO_SERVICE_MAC 2
3939 #define VIRTIO_CRYPTO_SERVICE_AEAD 3
40+#define VIRTIO_CRYPTO_SERVICE_AKCIPHER 4
4041
4142 #define VIRTIO_CRYPTO_OPCODE(service, op) (((service) << 8) | (op))
4243
@@ -57,6 +58,10 @@ struct virtio_crypto_ctrl_header { · 14 unmodified lines
5758 VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x02)
5859 #define VIRTIO_CRYPTO_AEAD_DESTROY_SESSION \
5960 VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x03)
61+#define VIRTIO_CRYPTO_AKCIPHER_CREATE_SESSION \
62+ VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x04)
63+#define VIRTIO_CRYPTO_AKCIPHER_DESTROY_SESSION \
64+ VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x05)
6065 __le32 opcode;
6166 __le32 algo;
6267 __le32 flag;
@@ -180,6 +185,58 @@ struct virtio_crypto_aead_create_session_req { · 117 unmodified lines
180185 __u8 padding[32];
181186 };
182187
188+struct virtio_crypto_rsa_session_para {
189+#define VIRTIO_CRYPTO_RSA_RAW_PADDING 0
190+#define VIRTIO_CRYPTO_RSA_PKCS1_PADDING 1
191+ __le32 padding_algo;
192+
193+#define VIRTIO_CRYPTO_RSA_NO_HASH 0
194+#define VIRTIO_CRYPTO_RSA_MD2 1
195+#define VIRTIO_CRYPTO_RSA_MD3 2
196+#define VIRTIO_CRYPTO_RSA_MD4 3
197+#define VIRTIO_CRYPTO_RSA_MD5 4
198+#define VIRTIO_CRYPTO_RSA_SHA1 5
199+#define VIRTIO_CRYPTO_RSA_SHA256 6
200+#define VIRTIO_CRYPTO_RSA_SHA384 7
201+#define VIRTIO_CRYPTO_RSA_SHA512 8
202+#define VIRTIO_CRYPTO_RSA_SHA224 9
203+ __le32 hash_algo;
204+};
205+
206+struct virtio_crypto_ecdsa_session_para {
207+#define VIRTIO_CRYPTO_CURVE_UNKNOWN 0
208+#define VIRTIO_CRYPTO_CURVE_NIST_P192 1
209+#define VIRTIO_CRYPTO_CURVE_NIST_P224 2
210+#define VIRTIO_CRYPTO_CURVE_NIST_P256 3
211+#define VIRTIO_CRYPTO_CURVE_NIST_P384 4
212+#define VIRTIO_CRYPTO_CURVE_NIST_P521 5
213+ __le32 curve_id;
214+ __le32 padding;
215+};
216+
217+struct virtio_crypto_akcipher_session_para {
218+#define VIRTIO_CRYPTO_NO_AKCIPHER 0
219+#define VIRTIO_CRYPTO_AKCIPHER_RSA 1
220+#define VIRTIO_CRYPTO_AKCIPHER_DSA 2
221+#define VIRTIO_CRYPTO_AKCIPHER_ECDSA 3
222+ __le32 algo;
223+
224+#define VIRTIO_CRYPTO_AKCIPHER_KEY_TYPE_PUBLIC 1
225+#define VIRTIO_CRYPTO_AKCIPHER_KEY_TYPE_PRIVATE 2
226+ __le32 keytype;
227+ __le32 keylen;
228+
229+ union {
230+ struct virtio_crypto_rsa_session_para rsa;
231+ struct virtio_crypto_ecdsa_session_para ecdsa;
232+ } u;
233+};
234+
235+struct virtio_crypto_akcipher_create_session_req {
236+ struct virtio_crypto_akcipher_session_para para;
237+ __u8 padding[36];
238+};
239+
183240 struct virtio_crypto_alg_chain_session_para {
184241 #define VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER 1
185242 #define VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH 2
@@ -247,6 +304,8 @@ struct virtio_crypto_op_ctrl_req { · 61 unmodified lines
247304 mac_create_session;
248305 struct virtio_crypto_aead_create_session_req
249306 aead_create_session;
307+ struct virtio_crypto_akcipher_create_session_req
308+ akcipher_create_session;
250309 struct virtio_crypto_destroy_session_req
251310 destroy_session;
252311 __u8 padding[56];
@@ -266,6 +325,14 @@ struct virtio_crypto_op_header { · 13 unmodified lines
266325 VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x00)
267326 #define VIRTIO_CRYPTO_AEAD_DECRYPT \
268327 VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x01)
328+#define VIRTIO_CRYPTO_AKCIPHER_ENCRYPT \
329+ VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x00)
330+#define VIRTIO_CRYPTO_AKCIPHER_DECRYPT \
331+ VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x01)
332+#define VIRTIO_CRYPTO_AKCIPHER_SIGN \
333+ VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x02)
334+#define VIRTIO_CRYPTO_AKCIPHER_VERIFY \
335+ VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AKCIPHER, 0x03)
269336 __le32 opcode;
270337 /* algo should be service-specific algorithms */
271338 __le32 algo;
@@ -390,6 +457,16 @@ struct virtio_crypto_aead_data_req { · 118 unmodified lines
390457 __u8 padding[32];
391458 };
392459
460+struct virtio_crypto_akcipher_para {
461+ __le32 src_data_len;
462+ __le32 dst_data_len;
463+};
464+
465+struct virtio_crypto_akcipher_data_req {
466+ struct virtio_crypto_akcipher_para para;
467+ __u8 padding[40];
468+};
469+
393470 /* The request of the data virtqueue's packet */
394471 struct virtio_crypto_op_data_req {
395472 struct virtio_crypto_op_header header;
@@ -399,6 +476,7 @@ struct virtio_crypto_op_data_req { · 3 unmodified lines
399476 struct virtio_crypto_hash_data_req hash_req;
400477 struct virtio_crypto_mac_data_req mac_req;
401478 struct virtio_crypto_aead_data_req aead_req;
479+ struct virtio_crypto_akcipher_data_req akcipher_req;
402480 __u8 padding[48];
403481 } u;
404482 };
@@ -408,6 +486,8 @@ struct virtio_crypto_op_data_req { · 3 unmodified lines
408486 #define VIRTIO_CRYPTO_BADMSG 2
409487 #define VIRTIO_CRYPTO_NOTSUPP 3
410488 #define VIRTIO_CRYPTO_INVSESS 4 /* Invalid session id */
489+#define VIRTIO_CRYPTO_NOSPC 5 /* no free session ID */
490+#define VIRTIO_CRYPTO_KEY_REJECTED 6 /* Signature verification failed */
411491
412492 /* The accelerator hardware is ready */
413493 #define VIRTIO_CRYPTO_S_HW_READY (1 << 0)
@@ -438,7 +518,7 @@ struct virtio_crypto_config { · 24 unmodified lines
438518 __le32 max_cipher_key_len;
439519 /* Maximum length of authenticated key */
440520 __le32 max_auth_key_len;
441− __le32 reserve;
521+ __le32 akcipher_algo;
442522 /* Maximum size of each crypto request's content */
443523 __le64 max_size;
444524 };