DPDK patches and discussions
 help / color / mirror / Atom feed
From: Maxime Coquelin <maxime.coquelin@redhat.com>
To: "Xia, Chenbo" <chenbo.xia@intel.com>,
	"dev@dpdk.org" <dev@dpdk.org>,
	"olivier.matz@6wind.com" <olivier.matz@6wind.com>,
	"amorenoz@redhat.com" <amorenoz@redhat.com>,
	"david.marchand@redhat.com" <david.marchand@redhat.com>
Subject: Re: [dpdk-dev] [PATCH v3 02/44] bus/vdev: add driver IOVA VA mode requirement
Date: Tue, 26 Jan 2021 10:24:31 +0100	[thread overview]
Message-ID: <ccdc9a83-28b8-b0fd-ed19-d19acc3b2de9@redhat.com> (raw)
In-Reply-To: <MN2PR11MB4063BD1335B64ED2283DD6959CBC9@MN2PR11MB4063.namprd11.prod.outlook.com>



On 1/26/21 10:23 AM, Xia, Chenbo wrote:
> Hi Maxime,
> 
>> -----Original Message-----
>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>> Sent: Tuesday, January 26, 2021 1:14 AM
>> To: dev@dpdk.org; Xia, Chenbo <chenbo.xia@intel.com>; olivier.matz@6wind.com;
>> amorenoz@redhat.com; david.marchand@redhat.com
>> Cc: Maxime Coquelin <maxime.coquelin@redhat.com>
>> Subject: [PATCH v3 02/44] bus/vdev: add driver IOVA VA mode requirement
>>
>> This patch adds driver flag in vdev bus driver so that
>> vdev drivers can require VA IOVA mode to be used, which
>> for example the case of Virtio-user PMD.
>>
>> The patch implements the .get_iommu_class() callback, that
>> is called before devices probing to determine the IOVA mode
>> to be used.
>>
>> It also adds a check right before the device is probed to
>> ensure compatible IOVa mode has been selected.
> 
> s/IOVa/IOVA

Just spotted it while reworking the commit message :)

>>
>> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>> ---
>>  drivers/bus/vdev/rte_bus_vdev.h |  4 ++++
>>  drivers/bus/vdev/vdev.c         | 29 +++++++++++++++++++++++++++++
>>  2 files changed, 33 insertions(+)
>>
>> diff --git a/drivers/bus/vdev/rte_bus_vdev.h b/drivers/bus/vdev/rte_bus_vdev.h
>> index f99a41f825..c8b41e649c 100644
>> --- a/drivers/bus/vdev/rte_bus_vdev.h
>> +++ b/drivers/bus/vdev/rte_bus_vdev.h
>> @@ -113,8 +113,12 @@ struct rte_vdev_driver {
>>  	rte_vdev_remove_t *remove;       /**< Virtual device remove function. */
>>  	rte_vdev_dma_map_t *dma_map;     /**< Virtual device DMA map function.
>> */
>>  	rte_vdev_dma_unmap_t *dma_unmap; /**< Virtual device DMA unmap function.
>> */
>> +	uint32_t drv_flags;                /**< Flags RTE_VDEV_DRV_*. */
> 
> I remember David mentioned that the comment above should be consistent with others, which
> also makes sense to me
> 
> Thanks,
> Chenbo
> 
>>  };
>>
>> +/** Device driver needs IOVA as VA and cannot work with IOVA as PA */
>> +#define RTE_VDEV_DRV_NEED_IOVA_AS_VA 0x0001
>> +
>>  /**
>>   * Register a virtual device driver.
>>   *
>> diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c
>> index acfd78828f..9a673347ae 100644
>> --- a/drivers/bus/vdev/vdev.c
>> +++ b/drivers/bus/vdev/vdev.c
>> @@ -189,6 +189,7 @@ vdev_probe_all_drivers(struct rte_vdev_device *dev)
>>  {
>>  	const char *name;
>>  	struct rte_vdev_driver *driver;
>> +	enum rte_iova_mode iova_mode;
>>  	int ret;
>>
>>  	if (rte_dev_is_probed(&dev->device))
>> @@ -199,6 +200,14 @@ vdev_probe_all_drivers(struct rte_vdev_device *dev)
>>
>>  	if (vdev_parse(name, &driver))
>>  		return -1;
>> +
>> +	iova_mode = rte_eal_iova_mode();
>> +	if ((driver->drv_flags & RTE_VDEV_DRV_NEED_IOVA_AS_VA) && (iova_mode ==
>> RTE_IOVA_PA)) {
>> +		VDEV_LOG(ERR, "%s requires VA IOVA mode but current mode is PA,
>> not initializing",
>> +				name);
>> +		return -1;
>> +	}
>> +
>>  	ret = driver->probe(dev);
>>  	if (ret == 0)
>>  		dev->device.driver = &driver->driver;
>> @@ -594,6 +603,25 @@ vdev_unplug(struct rte_device *dev)
>>  	return rte_vdev_uninit(dev->name);
>>  }
>>
>> +static enum rte_iova_mode
>> +vdev_get_iommu_class(void)
>> +{
>> +	const char *name;
>> +	struct rte_vdev_device *dev;
>> +	struct rte_vdev_driver *driver;
>> +
>> +	TAILQ_FOREACH(dev, &vdev_device_list, next) {
>> +		name = rte_vdev_device_name(dev);
>> +		if (vdev_parse(name, &driver))
>> +			continue;
>> +
>> +		if (driver->drv_flags & RTE_VDEV_DRV_NEED_IOVA_AS_VA)
>> +			return RTE_IOVA_VA;
>> +	}
>> +
>> +	return RTE_IOVA_DC;
>> +}
>> +
>>  static struct rte_bus rte_vdev_bus = {
>>  	.scan = vdev_scan,
>>  	.probe = vdev_probe,
>> @@ -603,6 +631,7 @@ static struct rte_bus rte_vdev_bus = {
>>  	.parse = vdev_parse,
>>  	.dma_map = vdev_dma_map,
>>  	.dma_unmap = vdev_dma_unmap,
>> +	.get_iommu_class = vdev_get_iommu_class,
>>  	.dev_iterate = rte_vdev_dev_iterate,
>>  };
>>
>> --
>> 2.29.2
> 


  reply	other threads:[~2021-01-26  9:24 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-25 17:14 [dpdk-dev] [PATCH v3 00/44] net/virtio: Virtio PMD rework Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 01/44] bus/vdev: add helper to get vdev from ethdev Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 02/44] bus/vdev: add driver IOVA VA mode requirement Maxime Coquelin
2021-01-26  9:23   ` Xia, Chenbo
2021-01-26  9:24     ` Maxime Coquelin [this message]
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 03/44] net/virtio: fix getting old status on reconnect Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 04/44] net/virtio: introduce Virtio bus type Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 05/44] net/virtio: refactor virtio-user device Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 06/44] net/virtio: introduce PCI device metadata Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 07/44] net/virtio: move PCI device init in dedicated file Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 08/44] net/virtio: move PCI specific dev init to PCI ethdev init Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 09/44] net/virtio: move MSIX detection to PCI ethdev Maxime Coquelin
2021-01-26  5:53   ` Xia, Chenbo
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 10/44] net/virtio: force IOVA as VA mode for Virtio-user Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 11/44] net/virtio: store PCI type in Virtio device metadata Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 12/44] net/virtio: add callback for device closing Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 13/44] net/virtio: validate features at bus level Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 14/44] net/virtio: remove bus type enum Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 15/44] net/virtio: move PCI-specific fields to PCI device Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 16/44] net/virtio: pack virtio HW struct Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 17/44] net/virtio: move legacy IO to Virtio PCI Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 18/44] net/virtio: introduce generic virtio header Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 19/44] net/virtio: move features definition to generic header Maxime Coquelin
2021-01-26  5:55   ` Xia, Chenbo
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 20/44] net/virtio: move virtqueue defines in " Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 21/44] net/virtio: move config definitions to " Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 22/44] net/virtio: make interrupt handling more generic Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 23/44] net/virtio: move vring alignment to generic header Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 24/44] net/virtio: remove last PCI refs in non-PCI code Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 25/44] net/virtio: make Vhost-user request sender consistent Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 26/44] net/virtio: add Virtio-user ops to set owner Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 27/44] net/virtio: add Virtio-user features ops Maxime Coquelin
2021-01-26  5:58   ` Xia, Chenbo
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 28/44] net/virtio: add Virtio-user protocol " Maxime Coquelin
2021-01-26  6:09   ` Xia, Chenbo
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 29/44] net/virtio: add Virtio-user memory tables ops Maxime Coquelin
2021-01-26  6:09   ` Xia, Chenbo
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 30/44] net/virtio: add Virtio-user vring setting ops Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 31/44] net/virtio: add Virtio-user vring file ops Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 32/44] net/virtio: add Virtio-user vring address ops Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 33/44] net/virtio: add Virtio-user status ops Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 34/44] net/virtio: remove useless request ops Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 35/44] net/virtio: improve Virtio-user errors handling Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 36/44] net/virtio: move Vhost-user requests to Vhost-user backend Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 37/44] net/virtio: make server mode blocking Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 38/44] net/virtio: move protocol features to Vhost-user Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 39/44] net/virtio: introduce backend data Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 40/44] net/virtio: move Vhost-user specifics to its backend Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 41/44] net/virtio: move Vhost-kernel data " Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 42/44] net/virtio: move Vhost-vDPA " Maxime Coquelin
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 43/44] net/virtio: improve Vhost-user error logging Maxime Coquelin
2021-01-26  6:25   ` Xia, Chenbo
2021-01-25 17:14 ` [dpdk-dev] [PATCH v3 44/44] net/virtio: handle Virtio-user setup failure properly Maxime Coquelin
2021-01-26  6:36   ` Xia, Chenbo
2021-01-26  9:15     ` Maxime Coquelin

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=ccdc9a83-28b8-b0fd-ed19-d19acc3b2de9@redhat.com \
    --to=maxime.coquelin@redhat.com \
    --cc=amorenoz@redhat.com \
    --cc=chenbo.xia@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=olivier.matz@6wind.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).