From: Soumyadeep Hore <soumyadeep.hore@intel.com>
To: jingjing.wu@intel.com
Cc: dev@dpdk.org
Subject: [PATCH 18/25] common/idpf: removing redundant functionality of virtchnl2
Date: Tue, 28 May 2024 07:35:58 +0000 [thread overview]
Message-ID: <20240528073559.867121-9-soumyadeep.hore@intel.com> (raw)
In-Reply-To: <20240528073559.867121-1-soumyadeep.hore@intel.com>
The function virtchnl2_vc_validate_vf_msg() currently has
implementation based on Linux 6.5 kernel and is redundant
for dpdk.
In future if required new implementation will be added.
Signed-off-by: Soumyadeep Hore <soumyadeep.hore@intel.com>
---
drivers/common/idpf/base/virtchnl2.h | 326 ---------------------------
1 file changed, 326 deletions(-)
diff --git a/drivers/common/idpf/base/virtchnl2.h b/drivers/common/idpf/base/virtchnl2.h
index aadb2aafff..90232e82a8 100644
--- a/drivers/common/idpf/base/virtchnl2.h
+++ b/drivers/common/idpf/base/virtchnl2.h
@@ -2083,331 +2083,5 @@ static inline const char *virtchnl2_op_str(__le32 v_opcode)
*
* Validate msg format against struct for each opcode.
*/
-static inline int
-virtchnl2_vc_validate_vf_msg(struct virtchnl2_version_info *ver, u32 v_opcode,
- u8 *msg, __le16 msglen)
-{
- bool err_msg_format = false;
-#ifdef FLEX_ARRAY_SUPPORT
- bool is_flex_array = true;
-#else
- bool is_flex_array = false;
-#endif /* !FLEX_ARRAY_SUPPORT */
- __le32 valid_len = 0;
- __le32 num_chunks;
- __le32 num_qgrps;
-
- /* It is possible that the FLEX_ARRAY_SUPPORT flag is not defined
- * by all the users of virtchnl2 header file. Let's take an example
- * where the driver doesn't support flex array and CP does. In this
- * case, the size of the VIRTCHNL2_OP_CREATE_VPORT message sent from
- * the driver would be 192 bytes because of the 1-sized array in the
- * virtchnl2_create_vport structure whereas the message size expected
- * by the CP would be 160 bytes (as the driver doesn't send any chunk
- * information on create vport). This means, both 160 and 192 byte
- * message length are valid. The math for the message size check of the
- * opcodes consider the said scenarios for the flex array supported
- * structures.
- */
- /* Validate message length */
- switch (v_opcode) {
- case VIRTCHNL2_OP_VERSION:
- valid_len = sizeof(struct virtchnl2_version_info);
- break;
- case VIRTCHNL2_OP_GET_CAPS:
- valid_len = sizeof(struct virtchnl2_get_capabilities);
- break;
- case VIRTCHNL2_OP_CREATE_VPORT:
- num_chunks = ((struct virtchnl2_create_vport *)msg)->chunks.num_chunks;
- valid_len = struct_size_t(struct virtchnl2_create_vport,
- chunks.chunks, num_chunks);
-
- if (!is_flex_array)
- /* Remove the additional chunk included in the
- * struct_size_t calculation in case of no flex array
- * support, due to the 1-sized array.
- */
- valid_len -= sizeof(struct virtchnl2_queue_reg_chunk);
-
- /* Zero chunks is allowed as input */
- if (!num_chunks && msglen > valid_len)
- valid_len += sizeof(struct virtchnl2_queue_reg_chunk);
-
- break;
- case VIRTCHNL2_OP_NON_FLEX_CREATE_ADI:
- valid_len = sizeof(struct virtchnl2_non_flex_create_adi);
- if (msglen >= valid_len) {
- struct virtchnl2_non_flex_create_adi *cadi =
- (struct virtchnl2_non_flex_create_adi *)msg;
-
- if (cadi->chunks.num_chunks == 0) {
- /* Zero chunks is allowed as input */
- break;
- }
-
- if (cadi->vchunks.num_vchunks == 0) {
- err_msg_format = true;
- break;
- }
- valid_len += (cadi->chunks.num_chunks - 1) *
- sizeof(struct virtchnl2_queue_reg_chunk);
- valid_len += (cadi->vchunks.num_vchunks - 1) *
- sizeof(struct virtchnl2_vector_chunk);
- }
- break;
- case VIRTCHNL2_OP_NON_FLEX_DESTROY_ADI:
- valid_len = sizeof(struct virtchnl2_non_flex_destroy_adi);
- break;
- case VIRTCHNL2_OP_DESTROY_VPORT:
- case VIRTCHNL2_OP_ENABLE_VPORT:
- case VIRTCHNL2_OP_DISABLE_VPORT:
- valid_len = sizeof(struct virtchnl2_vport);
- break;
- case VIRTCHNL2_OP_CONFIG_TX_QUEUES:
- num_chunks = ((struct virtchnl2_config_tx_queues *)msg)->num_qinfo;
- if (!num_chunks) {
- err_msg_format = true;
- break;
- }
-
- valid_len = struct_size_t(struct virtchnl2_config_tx_queues,
- qinfo, num_chunks);
- if (!is_flex_array)
- valid_len -= sizeof(struct virtchnl2_txq_info);
-
- break;
- case VIRTCHNL2_OP_CONFIG_RX_QUEUES:
- num_chunks = ((struct virtchnl2_config_rx_queues *)msg)->num_qinfo;
- if (!num_chunks) {
- err_msg_format = true;
- break;
- }
-
- valid_len = struct_size_t(struct virtchnl2_config_rx_queues,
- qinfo, num_chunks);
- if (!is_flex_array)
- valid_len -= sizeof(struct virtchnl2_rxq_info);
-
- break;
- case VIRTCHNL2_OP_ADD_QUEUES:
- num_chunks = ((struct virtchnl2_add_queues *)msg)->chunks.num_chunks;
- valid_len = struct_size_t(struct virtchnl2_add_queues,
- chunks.chunks, num_chunks);
- if (!is_flex_array)
- valid_len -= sizeof(struct virtchnl2_queue_reg_chunk);
-
- /* Zero chunks is allowed as input */
- if (!num_chunks && msglen > valid_len)
- valid_len += sizeof(struct virtchnl2_queue_reg_chunk);
-
- break;
- case VIRTCHNL2_OP_ENABLE_QUEUES:
- case VIRTCHNL2_OP_DISABLE_QUEUES:
- case VIRTCHNL2_OP_DEL_QUEUES:
- num_chunks = ((struct virtchnl2_del_ena_dis_queues *)msg)->chunks.num_chunks;
- if (!num_chunks ||
- num_chunks > VIRTCHNL2_OP_DEL_ENABLE_DISABLE_QUEUES_MAX) {
- err_msg_format = true;
- break;
- }
-
- valid_len = struct_size_t(struct virtchnl2_del_ena_dis_queues,
- chunks.chunks, num_chunks);
- if (!is_flex_array)
- valid_len -= sizeof(struct virtchnl2_queue_chunk);
-
- break;
- case VIRTCHNL2_OP_ADD_QUEUE_GROUPS:
- num_qgrps = ((struct virtchnl2_add_queue_groups *)msg)->num_queue_groups;
- if (!num_qgrps) {
- err_msg_format = true;
- break;
- }
-
- /* valid_len is also used as an offset to find the array of
- * virtchnl2_queue_group_info structures
- */
- valid_len = sizeof(struct virtchnl2_add_queue_groups);
- if (!is_flex_array)
- valid_len -= sizeof(struct virtchnl2_queue_group_info);
-
- while (num_qgrps--) {
- struct virtchnl2_queue_group_info *qgrp_info;
-
- qgrp_info = (struct virtchnl2_queue_group_info *)
- ((u8 *)msg + valid_len);
- num_chunks = qgrp_info->chunks.num_chunks;
-
- valid_len += struct_size_t(struct virtchnl2_queue_group_info,
- chunks.chunks, num_chunks);
- if (!is_flex_array)
- valid_len -= sizeof(struct virtchnl2_queue_reg_chunk);
- }
-
- break;
- case VIRTCHNL2_OP_DEL_QUEUE_GROUPS:
- num_qgrps = ((struct virtchnl2_delete_queue_groups *)msg)->num_queue_groups;
- if (!num_qgrps) {
- err_msg_format = true;
- break;
- }
-
- valid_len = struct_size_t(struct virtchnl2_delete_queue_groups,
- qg_ids, num_qgrps);
- if (!is_flex_array)
- valid_len -= sizeof(struct virtchnl2_queue_group_id);
-
- break;
- case VIRTCHNL2_OP_MAP_QUEUE_VECTOR:
- case VIRTCHNL2_OP_UNMAP_QUEUE_VECTOR:
- num_chunks = ((struct virtchnl2_queue_vector_maps *)msg)->num_qv_maps;
- if (!num_chunks ||
- num_chunks > VIRTCHNL2_OP_MAP_UNMAP_QUEUE_VECTOR_MAX) {
- err_msg_format = true;
- break;
- }
-
- valid_len = struct_size_t(struct virtchnl2_queue_vector_maps,
- qv_maps, num_chunks);
- if (!is_flex_array)
- valid_len -= sizeof(struct virtchnl2_queue_vector);
-
- break;
- case VIRTCHNL2_OP_ALLOC_VECTORS:
- num_chunks = ((struct virtchnl2_alloc_vectors *)msg)->vchunks.num_vchunks;
- valid_len = struct_size_t(struct virtchnl2_alloc_vectors,
- vchunks.vchunks, num_chunks);
- if (!is_flex_array)
- valid_len -= sizeof(struct virtchnl2_vector_chunk);
-
- /* Zero chunks is allowed as input */
- if (!num_chunks && msglen > valid_len)
- valid_len += sizeof(struct virtchnl2_vector_chunk);
-
- break;
- case VIRTCHNL2_OP_DEALLOC_VECTORS:
- num_chunks = ((struct virtchnl2_vector_chunks *)msg)->num_vchunks;
- if (!num_chunks) {
- err_msg_format = true;
- break;
- }
-
- valid_len = struct_size_t(struct virtchnl2_vector_chunks,
- vchunks, num_chunks);
- if (!is_flex_array)
- valid_len -= sizeof(struct virtchnl2_vector_chunk);
-
- break;
- case VIRTCHNL2_OP_GET_RSS_KEY:
- case VIRTCHNL2_OP_SET_RSS_KEY:
- num_chunks = ((struct virtchnl2_rss_key *)msg)->key_len;
- valid_len = struct_size_t(struct virtchnl2_rss_key,
- key, num_chunks);
- if (!is_flex_array)
- valid_len -= sizeof(u8);
-
- /* Zero entries is allowed as input */
- if (!num_chunks && msglen > valid_len)
- valid_len += sizeof(u8);
-
- break;
- case VIRTCHNL2_OP_GET_RSS_LUT:
- case VIRTCHNL2_OP_SET_RSS_LUT:
- num_chunks = ((struct virtchnl2_rss_lut *)msg)->lut_entries;
- valid_len = struct_size_t(struct virtchnl2_rss_lut,
- lut, num_chunks);
- if (!is_flex_array)
- valid_len -= sizeof(__le32);
-
- /* Zero entries is allowed as input */
- if (!num_chunks && msglen > valid_len)
- valid_len += sizeof(__le32);
-
- break;
- case VIRTCHNL2_OP_GET_RSS_HASH:
- case VIRTCHNL2_OP_SET_RSS_HASH:
- valid_len = sizeof(struct virtchnl2_rss_hash);
- break;
- case VIRTCHNL2_OP_SET_SRIOV_VFS:
- valid_len = sizeof(struct virtchnl2_sriov_vfs_info);
- break;
- case VIRTCHNL2_OP_GET_PTYPE_INFO:
- valid_len = sizeof(struct virtchnl2_get_ptype_info);
- break;
- case VIRTCHNL2_OP_GET_STATS:
- valid_len = sizeof(struct virtchnl2_vport_stats);
- break;
- case VIRTCHNL2_OP_GET_PORT_STATS:
- valid_len = sizeof(struct virtchnl2_port_stats);
- break;
- case VIRTCHNL2_OP_RESET_VF:
- break;
-#ifdef VIRTCHNL2_EDT_SUPPORT
- case VIRTCHNL2_OP_GET_EDT_CAPS:
- valid_len = sizeof(struct virtchnl2_edt_caps);
- break;
-#endif /* VIRTCHNL2_EDT_SUPPORT */
-#ifdef NOT_FOR_UPSTREAM
- case VIRTCHNL2_OP_GET_OEM_CAPS:
- valid_len = sizeof(struct virtchnl2_oem_caps);
- break;
-#endif /* NOT_FOR_UPSTREAM */
-#ifdef VIRTCHNL2_IWARP
- case VIRTCHNL2_OP_RDMA:
- /* These messages are opaque to us and will be validated in
- * the RDMA client code. We just need to check for nonzero
- * length. The firmware will enforce max length restrictions.
- */
- if (msglen)
- valid_len = msglen;
- else
- err_msg_format = true;
- break;
- case VIRTCHNL2_OP_RELEASE_RDMA_IRQ_MAP:
- break;
- case VIRTCHNL2_OP_CONFIG_RDMA_IRQ_MAP:
- num_chunks = ((struct virtchnl2_rdma_qvlist_info *)msg)->num_vectors;
- if (!num_chunks ||
- num_chunks > VIRTCHNL2_OP_CONFIG_RDMA_IRQ_MAP_MAX) {
- err_msg_format = true;
- break;
- }
-
- valid_len = struct_size_t(struct virtchnl2_rdma_qvlist_info,
- qv_info, num_chunks);
- if (!is_flex_array)
- valid_len -= sizeof(struct virtchnl2_rdma_qv_info);
-
- break;
-#endif /* VIRTCHNL2_IWARP */
- case VIRTCHNL2_OP_GET_PTP_CAPS:
- valid_len = sizeof(struct virtchnl2_get_ptp_caps);
- break;
- case VIRTCHNL2_OP_GET_PTP_TX_TSTAMP_LATCHES:
- valid_len = sizeof(struct virtchnl2_ptp_tx_tstamp_latches);
- num_chunks = ((struct virtchnl2_ptp_tx_tstamp_latches *)msg)->num_latches;
- if (!num_chunks) {
- err_msg_format = true;
- break;
- }
-
- valid_len = struct_size_t(struct virtchnl2_ptp_tx_tstamp_latches,
- tstamp_latches, num_chunks);
- if (!is_flex_array)
- valid_len -= sizeof(struct virtchnl2_ptp_tx_tstamp_latch);
-
- break;
- /* These are always errors coming from the VF */
- case VIRTCHNL2_OP_EVENT:
- case VIRTCHNL2_OP_UNKNOWN:
- default:
- return VIRTCHNL2_STATUS_ERR_ESRCH;
- }
- /* Few more checks */
- if (err_msg_format || valid_len != msglen)
- return VIRTCHNL2_STATUS_ERR_EINVAL;
-
- return 0;
-}
#endif /* _VIRTCHNL_2_H_ */
--
2.43.0
next prev parent reply other threads:[~2024-05-28 8:18 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-28 7:35 [PATCH 10/25] common/idpf: avoid variable 0-init Soumyadeep Hore
2024-05-28 7:35 ` [PATCH 11/25] common/idpf: support added for xn transactions Soumyadeep Hore
2024-05-28 7:35 ` [PATCH 12/25] common/idpf: rename of VIRTCHNL2 CAP INLINE FLOW STEER Soumyadeep Hore
2024-05-28 7:35 ` [PATCH 13/25] common/idpf: update compiler padding Soumyadeep Hore
2024-05-28 7:35 ` [PATCH 14/25] common/idpf: avoid " Soumyadeep Hore
2024-05-28 7:35 ` [PATCH 15/25] common/idpf: add wmb before tail Soumyadeep Hore
2024-05-28 7:35 ` [PATCH 16/25] common/idpf: add a new Tx context descriptor structure Soumyadeep Hore
2024-05-28 7:35 ` [PATCH 17/25] common/idpf: removing redundant implementation Soumyadeep Hore
2024-05-28 7:35 ` Soumyadeep Hore [this message]
2024-05-28 7:35 ` [PATCH 19/25] common/idpf: updating common code of latest base driver Soumyadeep Hore
2024-05-29 13:26 ` [PATCH 10/25] common/idpf: avoid variable 0-init Bruce Richardson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240528073559.867121-9-soumyadeep.hore@intel.com \
--to=soumyadeep.hore@intel.com \
--cc=dev@dpdk.org \
--cc=jingjing.wu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).