On 4/26/2024 4:48 PM, Stephen Hemminger wrote:
> The TAP device can use same file descriptopr for both rx and tx queues.
>

s/descriptopr/descriptor/

> This allows up to 8 queues (versus 4) to be used with secondary process.
> 
> Signed-off-by: Stephen Hemminger <step...@networkplumber.org>

<...>

> @@ -1141,19 +1132,18 @@ tap_dev_close(struct rte_eth_dev *dev)
>       }
>  
>       for (i = 0; i < RTE_PMD_TAP_MAX_QUEUES; i++) {
> -             if (process_private->rxq_fds[i] != -1) {
> -                     rxq = &internals->rxq[i];
> -                     close(process_private->rxq_fds[i]);
> -                     process_private->rxq_fds[i] = -1;
> -                     tap_rxq_pool_free(rxq->pool);
> -                     rte_free(rxq->iovecs);
> -                     rxq->pool = NULL;
> -                     rxq->iovecs = NULL;
> -             }
> -             if (process_private->txq_fds[i] != -1) {
> -                     close(process_private->txq_fds[i]);
> -                     process_private->txq_fds[i] = -1;
> -             }
> +             struct rx_queue *rxq = &internals->rxq[i];
> +
> +             if (process_private->fds[i] == -1)
> +                     continue;
> +
> +             close(process_private->fds[i]);
> +             process_private->fds[i] = -1;
>

can 'tap_queue_close()' be used here? (probably with slight change)

<...>

> @@ -1482,52 +1480,34 @@ tap_setup_queue(struct rte_eth_dev *dev,
>               uint16_t qid,
>               int is_rx)
>  {
> -     int ret;
> -     int *fd;
> -     int *other_fd;
> -     const char *dir;
> +     int fd, ret;
>       struct pmd_internals *pmd = dev->data->dev_private;
>       struct pmd_process_private *process_private = dev->process_private;
>       struct rx_queue *rx = &internals->rxq[qid];
>       struct tx_queue *tx = &internals->txq[qid];
> -     struct rte_gso_ctx *gso_ctx;
> +     struct rte_gso_ctx *gso_ctx = NULL;
> +     const char *dir = is_rx ? "rx" : "tx";
>  
> -     if (is_rx) {
> -             fd = &process_private->rxq_fds[qid];
> -             other_fd = &process_private->txq_fds[qid];
> -             dir = "rx";
> -             gso_ctx = NULL;
> -     } else {
> -             fd = &process_private->txq_fds[qid];
> -             other_fd = &process_private->rxq_fds[qid];
> -             dir = "tx";
> +     if (is_rx)
>               gso_ctx = &tx->gso_ctx;
>

As commented on other version of this patch, shouldn't this be:
`if (!is_rx)`

<...>

> diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c
> index fa50fe45d7..a78fd50cd4 100644
> --- a/drivers/net/tap/tap_flow.c
> +++ b/drivers/net/tap/tap_flow.c
> @@ -1595,8 +1595,9 @@ tap_flow_isolate(struct rte_eth_dev *dev,
>        * If netdevice is there, setup appropriate flow rules immediately.
>        * Otherwise it will be set when bringing up the netdevice (tun_alloc).
>        */
> -     if (!process_private->rxq_fds[0])
> +     if (process_private->fds[0] == -1)
>

change in the condition looks reasonable but not directly related with
the change, does it require its own patch?

Reply via email to