All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: Santosh Shukla <sshukla@mvista.com>, dev@dpdk.org
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [PATCH v4 08/14] virtio: pci: extend virtio pci rw api for vfio interface
Date: Mon, 18 Jan 2016 14:59:31 +0800	[thread overview]
Message-ID: <569C8D53.8080704@redhat.com> (raw)
In-Reply-To: <1452778117-30178-9-git-send-email-sshukla@mvista.com>



On 01/14/2016 09:28 PM, Santosh Shukla wrote:
> So far virtio handle rw access for uio / ioport interface, This patch to extend
> the support for vfio interface. For that introducing private struct
> virtio_vfio_dev{
> 	- is_vfio
> 	- pci_dev
> 	};
> Signed-off-by: Santosh Shukla <sshukla@mvista.com>
> ---
> v3->v4:
> - Removed #indef RTE_EAL_VFIO and made it arch agnostic such now virtio_pci
>   rd/wr api to handle both vfio and ig_uio/ioport interfaces, depending upon
>   is_vfio flags set or unset.
> - Tested for x86 for igb_uio and vfio interface, also  tested for arm64 for vfio
>   interface.
>
> drivers/net/virtio/virtio_pci.h |   84 ++++++++++++++++++++++++++++++++-------
>  1 file changed, 70 insertions(+), 14 deletions(-)

Interesting. I'm working on IOMMU cooperation with virtio[1]. For pmd,
it looks like the only thing missed is RTE_PCI_DRV_NEED_MAPPING for
virito-net pmd.

So I'm curious whether this is still necessary if IOMMU can work with
virito in the future.

[1] https://www.mail-archive.com/qemu-devel@nongnu.org/msg337079.html

Thanks

>
> diff --git a/drivers/net/virtio/virtio_pci.h b/drivers/net/virtio/virtio_pci.h
> index 8b5b031..8526c07 100644
> --- a/drivers/net/virtio/virtio_pci.h
> +++ b/drivers/net/virtio/virtio_pci.h
> @@ -46,6 +46,8 @@
>  #endif
>  
>  #include <rte_ethdev.h>
> +#include <stdbool.h>
> +#include "virtio_vfio_rw.h"
>  
>  struct virtqueue;
>  
> @@ -165,6 +167,14 @@ struct virtqueue;
>   */
>  #define VIRTIO_MAX_VIRTQUEUES 8
>  
> +/* For vfio only */
> +struct virtio_vfio_dev {
> +	bool		is_vfio;	/* True: vfio i/f,
> +					 * False: not a vfio i/f
> +					 */
> +	struct rte_pci_device *pci_dev; /* vfio dev */
> +};
> +
>  struct virtio_hw {
>  	struct virtqueue *cvq;
>  	uint32_t    io_base;
> @@ -176,6 +186,7 @@ struct virtio_hw {
>  	uint8_t	    use_msix;
>  	uint8_t     started;
>  	uint8_t     mac_addr[ETHER_ADDR_LEN];
> +	struct virtio_vfio_dev dev;
>  };
>  
>  /*
> @@ -231,20 +242,65 @@ outl_p(unsigned int data, unsigned int port)
>  #define VIRTIO_PCI_REG_ADDR(hw, reg) \
>  	(unsigned short)((hw)->io_base + (reg))
>  
> -#define VIRTIO_READ_REG_1(hw, reg) \
> -	inb((VIRTIO_PCI_REG_ADDR((hw), (reg))))
> -#define VIRTIO_WRITE_REG_1(hw, reg, value) \
> -	outb_p((unsigned char)(value), (VIRTIO_PCI_REG_ADDR((hw), (reg))))
> -
> -#define VIRTIO_READ_REG_2(hw, reg) \
> -	inw((VIRTIO_PCI_REG_ADDR((hw), (reg))))
> -#define VIRTIO_WRITE_REG_2(hw, reg, value) \
> -	outw_p((unsigned short)(value), (VIRTIO_PCI_REG_ADDR((hw), (reg))))
> -
> -#define VIRTIO_READ_REG_4(hw, reg) \
> -	inl((VIRTIO_PCI_REG_ADDR((hw), (reg))))
> -#define VIRTIO_WRITE_REG_4(hw, reg, value) \
> -	outl_p((unsigned int)(value), (VIRTIO_PCI_REG_ADDR((hw), (reg))))
> +#define VIRTIO_READ_REG_1(hw, reg)					\
> +({									\
> +	uint8_t ret;							\
> +	struct virtio_vfio_dev *vdev;					\
> +	(vdev) = (&(hw)->dev);						\
> +	(((vdev)->is_vfio) ?						\
> +	(ioport_inb(((vdev)->pci_dev), reg, &ret)) :			\
> +	((ret) = (inb((VIRTIO_PCI_REG_ADDR((hw), (reg)))))));		\
> +	ret;								\
> +})
> +
> +#define VIRTIO_WRITE_REG_1(hw, reg, value)				\
> +({									\
> +	struct virtio_vfio_dev *vdev;					\
> +	(vdev) = (&(hw)->dev);						\
> +	(((vdev)->is_vfio) ?						\
> +	(ioport_outb_p(((vdev)->pci_dev), reg, (uint8_t)(value))) :	\
> +	(outb_p((unsigned char)(value), (VIRTIO_PCI_REG_ADDR((hw), (reg)))))); \
> +})
> +
> +#define VIRTIO_READ_REG_2(hw, reg)					\
> +({									\
> +	uint16_t ret;							\
> +	struct virtio_vfio_dev *vdev;					\
> +	(vdev) = (&(hw)->dev);						\
> +	(((vdev)->is_vfio) ?						\
> +	(ioport_inw(((vdev)->pci_dev), reg, &ret)) :			\
> +	((ret) = (inw((VIRTIO_PCI_REG_ADDR((hw), (reg)))))));		\
> +	ret;								\
> +})
> +
> +#define VIRTIO_WRITE_REG_2(hw, reg, value)				\
> +({									\
> +	struct virtio_vfio_dev *vdev;					\
> +	(vdev) = (&(hw)->dev);						\
> +	(((vdev)->is_vfio) ?						\
> +	(ioport_outw_p(((vdev)->pci_dev), reg, (uint16_t)(value))) :	\
> +	(outw_p((unsigned short)(value), (VIRTIO_PCI_REG_ADDR((hw), (reg)))))); \
> +})
> +
> +#define VIRTIO_READ_REG_4(hw, reg)					\
> +({									\
> +	uint32_t ret;							\
> +	struct virtio_vfio_dev *vdev;					\
> +	(vdev) = (&(hw)->dev);						\
> +	(((vdev)->is_vfio) ?						\
> +	(ioport_inl(((vdev)->pci_dev), reg, &ret)) :			\
> +	((ret) = (inl((VIRTIO_PCI_REG_ADDR((hw), (reg)))))));		\
> +	ret;								\
> +})
> +
> +#define VIRTIO_WRITE_REG_4(hw, reg, value)				\
> +({									\
> +	struct virtio_vfio_dev *vdev;					\
> +	(vdev) = (&(hw)->dev);						\
> +	(((vdev)->is_vfio) ?						\
> +	(ioport_outl_p(((vdev)->pci_dev), reg, (uint32_t)(value))) :	\
> +	(outl_p((unsigned int)(value), (VIRTIO_PCI_REG_ADDR((hw), (reg)))))); \
> +})
>  
>  static inline int
>  vtpci_with_feature(struct virtio_hw *hw, uint32_t bit)

  parent reply	other threads:[~2016-01-18  6:59 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-14 13:28 [PATCH v4 00/14] Add virtio support for arm/arm64 Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 01/14] virtio: Introduce config RTE_VIRTIO_INC_VECTOR Santosh Shukla
2016-01-15  6:51   ` Yuanhan Liu
2016-01-16  6:18     ` Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 02/14] config: i686: set RTE_VIRTIO_INC_VECTOR=n Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 03/14] linuxapp: eal: arm: Always return 0 for rte_eal_iopl_init() Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 04/14] linuxapp/vfio: ignore mapping for ioport region Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 05/14] virtio_pci.h: build fix for sys/io.h for non-x86 arch Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 06/14] eal: pci: vfio: add rd/wr func for pci bar space Santosh Shukla
2016-01-15  5:48   ` Yuanhan Liu
2016-01-16  8:06     ` Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 07/14] virtio: vfio: add api support to rd/wr ioport bar Santosh Shukla
2016-01-15  6:03   ` Yuanhan Liu
2016-01-16  8:53     ` Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 08/14] virtio: pci: extend virtio pci rw api for vfio interface Santosh Shukla
2016-01-15  6:27   ` Yuanhan Liu
2016-01-15 12:43     ` Santosh Shukla
2016-01-15 13:42       ` Santosh Shukla
2016-01-18  6:11         ` Yuanhan Liu
2016-01-18  6:45           ` Santosh Shukla
2016-01-18  7:17             ` Yuanhan Liu
2016-01-18 13:09               ` Santosh Shukla
2016-01-18  6:59   ` Jason Wang [this message]
2016-01-18  7:39     ` Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 09/14] virtio: ethdev: check " Santosh Shukla
2016-01-15  6:35   ` Yuanhan Liu
2016-01-15 12:37     ` Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 10/14] virtio: pci: add dummy func definition for in/outb for non-x86 arch Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 11/14] config: armv7/v8: Enable RTE_LIBRTE_VIRTIO_PMD Santosh Shukla
2016-01-15  6:37   ` Yuanhan Liu
2016-01-15 12:45     ` Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 12/14] eal: pci: export pci_[un]map_device Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 13/14] virtio: enable vfio in pmd driver Santosh Shukla
2016-01-14 13:28 ` [PATCH v4 14/14] vfio: Support for no-IOMMU mode Santosh Shukla
2016-01-29  7:27 ` [PATCH v4 00/14] Add virtio support for arm/arm64 Xie, Huawei
2016-01-29  9:19   ` Santosh Shukla

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=569C8D53.8080704@redhat.com \
    --to=jasowang@redhat.com \
    --cc=dev@dpdk.org \
    --cc=mst@redhat.com \
    --cc=sshukla@mvista.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.