From patchwork Wed Jul 15 13:51:02 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Iremonger, Bernard" X-Patchwork-Id: 6419 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id A37C15A7A; Wed, 15 Jul 2015 15:51:19 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 03EC85A34 for ; Wed, 15 Jul 2015 15:51:13 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga101.fm.intel.com with ESMTP; 15 Jul 2015 06:51:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,480,1432623600"; d="scan'208";a="764947682" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga002.jf.intel.com with ESMTP; 15 Jul 2015 06:51:11 -0700 Received: from sivswdev01.ir.intel.com (sivswdev01.ir.intel.com [10.237.217.45]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id t6FDpAcH005016; Wed, 15 Jul 2015 14:51:10 +0100 Received: from sivswdev01.ir.intel.com (localhost [127.0.0.1]) by sivswdev01.ir.intel.com with ESMTP id t6FDpAUE014424; Wed, 15 Jul 2015 14:51:10 +0100 Received: (from bairemon@localhost) by sivswdev01.ir.intel.com with id t6FDpAao014419; Wed, 15 Jul 2015 14:51:10 +0100 From: Bernard Iremonger To: dev@dpdk.org Date: Wed, 15 Jul 2015 14:51:02 +0100 Message-Id: <1436968265-14362-4-git-send-email-bernard.iremonger@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1436968265-14362-1-git-send-email-bernard.iremonger@intel.com> References: <1436968265-14362-1-git-send-email-bernard.iremonger@intel.com> Subject: [dpdk-dev] [PATCH v6 3/6] virtio: add proper queue release X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add functions virtio_dev_queue_release(), virtio_dev_rx_queue_release() and virtio_dev_tx_queue_release(). Signed-off-by: Stephen Hemminger Signed-off-by: Bernard Iremonger --- drivers/net/virtio/virtio_ethdev.c | 32 ++++++++++++++------------------ drivers/net/virtio/virtio_ethdev.h | 8 +++++++- drivers/net/virtio/virtio_rxtx.c | 12 ++++++++++++ 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index b88f297..964fcc0 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -80,9 +80,6 @@ static int virtio_dev_link_update(struct rte_eth_dev *dev, static void virtio_set_hwaddr(struct virtio_hw *hw); static void virtio_get_hwaddr(struct virtio_hw *hw); -static void virtio_dev_rx_queue_release(__rte_unused void *rxq); -static void virtio_dev_tx_queue_release(__rte_unused void *txq); - static void virtio_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats); static void virtio_dev_stats_reset(struct rte_eth_dev *dev); static void virtio_dev_free_mbufs(struct rte_eth_dev *dev); @@ -240,6 +237,20 @@ virtio_set_multiple_queues(struct rte_eth_dev *dev, uint16_t nb_queues) return 0; } +void +virtio_dev_queue_release(struct virtqueue *vq) { + struct virtio_hw *hw = vq->hw; + + if (vq) { + /* Select and deactivate the queue */ + VIRTIO_WRITE_REG_2(hw, VIRTIO_PCI_QUEUE_SEL, vq->queue_id); + VIRTIO_WRITE_REG_4(hw, VIRTIO_PCI_QUEUE_PFN, 0); + + rte_free(vq); + vq = NULL; + } +} + int virtio_dev_queue_setup(struct rte_eth_dev *dev, int queue_type, uint16_t queue_idx, @@ -553,10 +564,8 @@ static const struct eth_dev_ops virtio_eth_dev_ops = { .stats_reset = virtio_dev_stats_reset, .link_update = virtio_dev_link_update, .rx_queue_setup = virtio_dev_rx_queue_setup, - /* meaningfull only to multiple queue */ .rx_queue_release = virtio_dev_rx_queue_release, .tx_queue_setup = virtio_dev_tx_queue_setup, - /* meaningfull only to multiple queue */ .tx_queue_release = virtio_dev_tx_queue_release, /* collect stats per queue */ .queue_stats_mapping_set = virtio_dev_queue_stats_mapping_set, @@ -1335,19 +1344,6 @@ rte_virtio_pmd_init(const char *name __rte_unused, } /* - * Only 1 queue is supported, no queue release related operation - */ -static void -virtio_dev_rx_queue_release(__rte_unused void *rxq) -{ -} - -static void -virtio_dev_tx_queue_release(__rte_unused void *txq) -{ -} - -/* * Configure virtio device * It returns 0 on success. */ diff --git a/drivers/net/virtio/virtio_ethdev.h b/drivers/net/virtio/virtio_ethdev.h index df2cb7d..3858b00 100644 --- a/drivers/net/virtio/virtio_ethdev.h +++ b/drivers/net/virtio/virtio_ethdev.h @@ -1,7 +1,7 @@ /*- * BSD LICENSE * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. + * Copyright(c) 2010-2015 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -84,15 +84,21 @@ int virtio_dev_queue_setup(struct rte_eth_dev *dev, unsigned int socket_id, struct virtqueue **pvq); +void virtio_dev_queue_release(struct virtqueue *vq); + int virtio_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id, uint16_t nb_rx_desc, unsigned int socket_id, const struct rte_eth_rxconf *rx_conf, struct rte_mempool *mb_pool); +void virtio_dev_rx_queue_release(void *rxq); + int virtio_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id, uint16_t nb_tx_desc, unsigned int socket_id, const struct rte_eth_txconf *tx_conf); +void virtio_dev_tx_queue_release(void *txq); + uint16_t virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts); diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c index 091c7fb..5388caa 100644 --- a/drivers/net/virtio/virtio_rxtx.c +++ b/drivers/net/virtio/virtio_rxtx.c @@ -401,6 +401,12 @@ virtio_dev_rx_queue_setup(struct rte_eth_dev *dev, return 0; } +void +virtio_dev_rx_queue_release(void *rxq) +{ + virtio_dev_queue_release(rxq); +} + /* * struct rte_eth_dev *dev: Used to update dev * uint16_t nb_desc: Defaults to values read from config space @@ -455,6 +461,12 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev, return 0; } +void +virtio_dev_tx_queue_release(void *txq) +{ + virtio_dev_queue_release(txq); +} + static void virtio_discard_rxbuf(struct virtqueue *vq, struct rte_mbuf *m) {