From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 94043A00C4; Fri, 28 Oct 2022 17:50:47 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2FD8840151; Fri, 28 Oct 2022 17:50:47 +0200 (CEST) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id C3BB240146 for ; Fri, 28 Oct 2022 17:50:45 +0200 (CEST) Received: from [192.168.1.39] (unknown [188.170.73.42]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by shelob.oktetlabs.ru (Postfix) with ESMTPSA id E37885E; Fri, 28 Oct 2022 18:50:44 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru E37885E DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=oktetlabs.ru; s=default; t=1666972245; bh=n2BOoerAb6hYguVkzztb2z25tqNojsiOoI7K+vO7nww=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=rB0oo1uOeeZwwXIOjt4U3IqGpS/XDg7aH0RRkSeCue1KpmupERWWvDRdnGl/TCySU jN1BoCaIm8ydFWzj1JJS15QY+PPSGfAc+uMZovuMbcPuLD2KwIHcPvW51BjOhe31gG mV32nymcBP4QRKTOs7IfGD6ak7TtY4ZPcBtPDDNg= Message-ID: <02e3210f-2e66-7bb8-b3e2-90d06cf9c7d8@oktetlabs.ru> Date: Fri, 28 Oct 2022 18:50:44 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.0 Subject: Re: [PATCH v14 06/18] net/idpf: add support for queue start Content-Language: en-US To: Junfeng Guo , qi.z.zhang@intel.com, jingjing.wu@intel.com, beilei.xing@intel.com Cc: dev@dpdk.org, Xiaoyun Li References: <20221027054505.1369248-2-junfeng.guo@intel.com> <20221027074729.1494529-1-junfeng.guo@intel.com> <20221027074729.1494529-7-junfeng.guo@intel.com> From: Andrew Rybchenko In-Reply-To: <20221027074729.1494529-7-junfeng.guo@intel.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On 10/27/22 10:47, Junfeng Guo wrote: > Add support for these device ops: > - rx_queue_start > - tx_queue_start > > Signed-off-by: Beilei Xing > Signed-off-by: Xiaoyun Li > Signed-off-by: Junfeng Guo [snip] > +#define IDPF_RX_BUF_STRIDE 64 > +int > +idpf_vc_config_rxqs(struct idpf_vport *vport) > +{ > + struct idpf_adapter *adapter = vport->adapter; > + struct idpf_rx_queue **rxq = > + (struct idpf_rx_queue **)vport->dev_data->rx_queues; > + struct virtchnl2_config_rx_queues *vc_rxqs = NULL; > + struct virtchnl2_rxq_info *rxq_info; > + struct idpf_cmd_info args; > + uint16_t total_qs, num_qs; > + int size, i, j; > + int err = 0; > + int k = 0; > + > + total_qs = vport->num_rx_q + vport->num_rx_bufq; > + while (total_qs) { > + if (total_qs > adapter->max_rxq_per_msg) { > + num_qs = adapter->max_rxq_per_msg; > + total_qs -= adapter->max_rxq_per_msg; > + } else { > + num_qs = total_qs; > + total_qs = 0; > + } > + > + size = sizeof(*vc_rxqs) + (num_qs - 1) * > + sizeof(struct virtchnl2_rxq_info); > + vc_rxqs = rte_zmalloc("cfg_rxqs", size, 0); > + if (vc_rxqs == NULL) { > + PMD_DRV_LOG(ERR, "Failed to allocate virtchnl2_config_rx_queues"); > + err = -ENOMEM; > + break; > + } > + vc_rxqs->vport_id = vport->vport_id; > + vc_rxqs->num_qinfo = num_qs; > + if (vport->rxq_model == VIRTCHNL2_QUEUE_MODEL_SINGLE) { > + for (i = 0; i < num_qs; i++, k++) { > + rxq_info = &vc_rxqs->qinfo[i]; > + rxq_info->dma_ring_addr = rxq[k]->rx_ring_phys_addr; > + rxq_info->type = VIRTCHNL2_QUEUE_TYPE_RX; > + rxq_info->queue_id = rxq[k]->queue_id; > + rxq_info->model = VIRTCHNL2_QUEUE_MODEL_SINGLE; > + rxq_info->data_buffer_size = rxq[k]->rx_buf_len; > + rxq_info->max_pkt_size = vport->max_pkt_len; > + > + rxq_info->desc_ids = VIRTCHNL2_RXDID_2_FLEX_SQ_NIC_M; > + rxq_info->qflags |= VIRTCHNL2_RX_DESC_SIZE_32BYTE; > + > + rxq_info->ring_len = rxq[k]->nb_rx_desc; > + } > + } else { > + for (i = 0; i < num_qs / 3; i++, k++) { > + /* Rx queue */ > + rxq_info = &vc_rxqs->qinfo[i * 3]; > + rxq_info->dma_ring_addr = > + rxq[k]->rx_ring_phys_addr; > + rxq_info->type = VIRTCHNL2_QUEUE_TYPE_RX; > + rxq_info->queue_id = rxq[k]->queue_id; > + rxq_info->model = VIRTCHNL2_QUEUE_MODEL_SPLIT; > + rxq_info->data_buffer_size = rxq[k]->rx_buf_len; > + rxq_info->max_pkt_size = vport->max_pkt_len; > + > + rxq_info->desc_ids = VIRTCHNL2_RXDID_2_FLEX_SPLITQ_M; > + rxq_info->qflags |= VIRTCHNL2_RX_DESC_SIZE_32BYTE; > + > + rxq_info->ring_len = rxq[k]->nb_rx_desc; > + rxq_info->rx_bufq1_id = rxq[k]->bufq1->queue_id; > + rxq_info->rx_bufq2_id = rxq[k]->bufq2->queue_id; > + rxq_info->rx_buffer_low_watermark = 64; > + > + /* Buffer queue */ > + for (j = 1; j <= IDPF_RX_BUFQ_PER_GRP; j++) { > + struct idpf_rx_queue *bufq = j == 1 ? > + rxq[k]->bufq1 : rxq[k]->bufq2; > + rxq_info = &vc_rxqs->qinfo[i * 3 + j]; > + rxq_info->dma_ring_addr = > + bufq->rx_ring_phys_addr; > + rxq_info->type = > + VIRTCHNL2_QUEUE_TYPE_RX_BUFFER; > + rxq_info->queue_id = bufq->queue_id; > + rxq_info->model = VIRTCHNL2_QUEUE_MODEL_SPLIT; > + rxq_info->data_buffer_size = bufq->rx_buf_len; > + rxq_info->desc_ids = > + VIRTCHNL2_RXDID_2_FLEX_SPLITQ_M; > + rxq_info->ring_len = bufq->nb_rx_desc; > + > + rxq_info->buffer_notif_stride = > + IDPF_RX_BUF_STRIDE; > + rxq_info->rx_buffer_low_watermark = 64; > + } > + } > + } > + memset(&args, 0, sizeof(args)); > + args.ops = VIRTCHNL2_OP_CONFIG_RX_QUEUES; > + args.in_args = (uint8_t *)vc_rxqs; > + args.in_args_size = size; > + args.out_buffer = adapter->mbx_resp; > + args.out_size = IDPF_DFLT_MBX_BUF_SIZE; > + > + err = idpf_execute_vc_cmd(adapter, &args); The function must return negative errno since its return value is used as a return value of functions returning negative errno. > + rte_free(vc_rxqs); > + if (err != 0) { > + PMD_DRV_LOG(ERR, "Failed to execute command of VIRTCHNL2_OP_CONFIG_RX_QUEUES"); > + break; > + } > + } > + > + return err; > +} [snip]