All of lore.kernel.org
 help / color / mirror / Atom feed
From: Neo Jia <cjia@nvidia.com>
To: "Tian, Kevin" <kevin.tian@intel.com>
Cc: Alex Williamson <alex.williamson@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	"pbonzini@redhat.com" <pbonzini@redhat.com>,
	"kraxel@redhat.com" <kraxel@redhat.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"Ruan, Shuai" <shuai.ruan@intel.com>,
	"Song, Jike" <jike.song@intel.com>,
	"Lv, Zhiyuan" <zhiyuan.lv@intel.com>
Subject: Re: [RFC PATCH v3 2/3] VFIO driver for vGPU device
Date: Thu, 5 May 2016 13:27:39 -0700	[thread overview]
Message-ID: <20160505202739.GB28046@nvidia.com> (raw)
In-Reply-To: <AADFC41AFE54684AB9EE6CBC0274A5D15F8470AD@SHSMSX101.ccr.corp.intel.com>

On Thu, May 05, 2016 at 09:24:26AM +0000, Tian, Kevin wrote:
> > From: Alex Williamson
> > Sent: Thursday, May 05, 2016 1:06 AM
> > > > > +
> > > > > +static int vgpu_dev_mmio_fault(struct vm_area_struct *vma, struct vm_fault
> > *vmf)
> > > > > +{
> > > > > +	int ret = 0;
> > > > > +	struct vfio_vgpu_device *vdev = vma->vm_private_data;
> > > > > +	struct vgpu_device *vgpu_dev;
> > > > > +	struct gpu_device *gpu_dev;
> > > > > +	u64 virtaddr = (u64)vmf->virtual_address;
> > > > > +	u64 offset, phyaddr;
> > > > > +	unsigned long req_size, pgoff;
> > > > > +	pgprot_t pg_prot;
> > > > > +
> > > > > +	if (!vdev && !vdev->vgpu_dev)
> > > > > +		return -EINVAL;
> > > > > +
> > > > > +	vgpu_dev = vdev->vgpu_dev;
> > > > > +	gpu_dev  = vgpu_dev->gpu_dev;
> > > > > +
> > > > > +	offset   = vma->vm_pgoff << PAGE_SHIFT;
> > > > > +	phyaddr  = virtaddr - vma->vm_start + offset;
> > > > > +	pgoff    = phyaddr >> PAGE_SHIFT;
> > > > > +	req_size = vma->vm_end - virtaddr;
> > > > > +	pg_prot  = vma->vm_page_prot;
> > > > > +
> > > > > +	if (gpu_dev->ops->validate_map_request) {
> > > > > +		ret = gpu_dev->ops->validate_map_request(vgpu_dev, virtaddr,
> > &pgoff,
> > > > > +							 &req_size, &pg_prot);
> > > > > +		if (ret)
> > > > > +			return ret;
> > > > > +
> > > > > +		if (!req_size)
> > > > > +			return -EINVAL;
> > > > > +	}
> > > > > +
> > > > > +	ret = remap_pfn_range(vma, virtaddr, pgoff, req_size, pg_prot);
> > > >
> > > > So not supporting validate_map_request() means that the user can
> > > > directly mmap BARs of the host GPU and as shown below, we assume a 1:1
> > > > mapping of vGPU BAR to host GPU BAR.  Is that ever valid in a vGPU
> > > > scenario or should this callback be required?  It's not clear to me how
> > > > the vendor driver determines what this maps to, do they compare it to
> > > > the physical device's own BAR addresses?
> > >
> > > I didn't quite understand too. Based on earlier discussion, do we need
> > > something like this, or could achieve the purpose just by leveraging
> > > recent sparse mmap support?
> > 
> > The reason for faulting in the mmio space, if I recall correctly, is to
> > enable an ordering where the user driver (QEMU) can mmap regions of the
> > device prior to resources being allocated on the host GPU to handle
> > them.  Sparse mmap only partially handles that, it's not dynamic.  With
> > this faulting mechanism, the host GPU doesn't need to commit resources
> > until the mmap is actually accessed.  Thanks,
> > 
> > Alex
> 
> Neo/Kirti, any specific example how above exactly works? I can see
> difference from sparse mmap based on Alex's explanation, but still
> cannot map the 1st sentence to a real scenario clearly. Now our side
> doesn't use such faulting-based method. So I'd like to understand it
> clearly and then see any value to do same thing for Intel GPU.

Hi Kevin,

The short answer is CPU access to GPU resources via MMIO region.

Thanks,
Neo

> 
> Thanks
> Kevin

WARNING: multiple messages have this Message-ID (diff)
From: Neo Jia <cjia@nvidia.com>
To: "Tian, Kevin" <kevin.tian@intel.com>
Cc: Alex Williamson <alex.williamson@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	"pbonzini@redhat.com" <pbonzini@redhat.com>,
	"kraxel@redhat.com" <kraxel@redhat.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"Ruan, Shuai" <shuai.ruan@intel.com>,
	"Song, Jike" <jike.song@intel.com>,
	"Lv, Zhiyuan" <zhiyuan.lv@intel.com>
Subject: Re: [Qemu-devel] [RFC PATCH v3 2/3] VFIO driver for vGPU device
Date: Thu, 5 May 2016 13:27:39 -0700	[thread overview]
Message-ID: <20160505202739.GB28046@nvidia.com> (raw)
In-Reply-To: <AADFC41AFE54684AB9EE6CBC0274A5D15F8470AD@SHSMSX101.ccr.corp.intel.com>

On Thu, May 05, 2016 at 09:24:26AM +0000, Tian, Kevin wrote:
> > From: Alex Williamson
> > Sent: Thursday, May 05, 2016 1:06 AM
> > > > > +
> > > > > +static int vgpu_dev_mmio_fault(struct vm_area_struct *vma, struct vm_fault
> > *vmf)
> > > > > +{
> > > > > +	int ret = 0;
> > > > > +	struct vfio_vgpu_device *vdev = vma->vm_private_data;
> > > > > +	struct vgpu_device *vgpu_dev;
> > > > > +	struct gpu_device *gpu_dev;
> > > > > +	u64 virtaddr = (u64)vmf->virtual_address;
> > > > > +	u64 offset, phyaddr;
> > > > > +	unsigned long req_size, pgoff;
> > > > > +	pgprot_t pg_prot;
> > > > > +
> > > > > +	if (!vdev && !vdev->vgpu_dev)
> > > > > +		return -EINVAL;
> > > > > +
> > > > > +	vgpu_dev = vdev->vgpu_dev;
> > > > > +	gpu_dev  = vgpu_dev->gpu_dev;
> > > > > +
> > > > > +	offset   = vma->vm_pgoff << PAGE_SHIFT;
> > > > > +	phyaddr  = virtaddr - vma->vm_start + offset;
> > > > > +	pgoff    = phyaddr >> PAGE_SHIFT;
> > > > > +	req_size = vma->vm_end - virtaddr;
> > > > > +	pg_prot  = vma->vm_page_prot;
> > > > > +
> > > > > +	if (gpu_dev->ops->validate_map_request) {
> > > > > +		ret = gpu_dev->ops->validate_map_request(vgpu_dev, virtaddr,
> > &pgoff,
> > > > > +							 &req_size, &pg_prot);
> > > > > +		if (ret)
> > > > > +			return ret;
> > > > > +
> > > > > +		if (!req_size)
> > > > > +			return -EINVAL;
> > > > > +	}
> > > > > +
> > > > > +	ret = remap_pfn_range(vma, virtaddr, pgoff, req_size, pg_prot);
> > > >
> > > > So not supporting validate_map_request() means that the user can
> > > > directly mmap BARs of the host GPU and as shown below, we assume a 1:1
> > > > mapping of vGPU BAR to host GPU BAR.  Is that ever valid in a vGPU
> > > > scenario or should this callback be required?  It's not clear to me how
> > > > the vendor driver determines what this maps to, do they compare it to
> > > > the physical device's own BAR addresses?
> > >
> > > I didn't quite understand too. Based on earlier discussion, do we need
> > > something like this, or could achieve the purpose just by leveraging
> > > recent sparse mmap support?
> > 
> > The reason for faulting in the mmio space, if I recall correctly, is to
> > enable an ordering where the user driver (QEMU) can mmap regions of the
> > device prior to resources being allocated on the host GPU to handle
> > them.  Sparse mmap only partially handles that, it's not dynamic.  With
> > this faulting mechanism, the host GPU doesn't need to commit resources
> > until the mmap is actually accessed.  Thanks,
> > 
> > Alex
> 
> Neo/Kirti, any specific example how above exactly works? I can see
> difference from sparse mmap based on Alex's explanation, but still
> cannot map the 1st sentence to a real scenario clearly. Now our side
> doesn't use such faulting-based method. So I'd like to understand it
> clearly and then see any value to do same thing for Intel GPU.

Hi Kevin,

The short answer is CPU access to GPU resources via MMIO region.

Thanks,
Neo

> 
> Thanks
> Kevin

  reply	other threads:[~2016-05-05 20:27 UTC|newest]

Thread overview: 150+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-02 18:40 [RFC PATCH v3 0/3] Add vGPU support Kirti Wankhede
2016-05-02 18:40 ` [Qemu-devel] " Kirti Wankhede
2016-05-02 18:40 ` [RFC PATCH v3 1/3] vGPU Core driver Kirti Wankhede
2016-05-02 18:40   ` [Qemu-devel] " Kirti Wankhede
2016-05-03 22:43   ` Alex Williamson
2016-05-03 22:43     ` [Qemu-devel] " Alex Williamson
2016-05-04  2:45     ` Tian, Kevin
2016-05-04  2:45       ` [Qemu-devel] " Tian, Kevin
2016-05-04 16:57       ` Alex Williamson
2016-05-04 16:57         ` [Qemu-devel] " Alex Williamson
2016-05-05  8:58         ` Tian, Kevin
2016-05-05  8:58           ` [Qemu-devel] " Tian, Kevin
2016-05-04  2:58     ` Tian, Kevin
2016-05-04  2:58       ` [Qemu-devel] " Tian, Kevin
2016-05-12  8:22       ` Tian, Kevin
2016-05-12  8:22         ` [Qemu-devel] " Tian, Kevin
2016-05-04 13:31     ` Kirti Wankhede
2016-05-04 13:31       ` [Qemu-devel] " Kirti Wankhede
2016-05-05  9:06       ` Tian, Kevin
2016-05-05  9:06         ` [Qemu-devel] " Tian, Kevin
2016-05-05 10:44         ` Kirti Wankhede
2016-05-05 10:44           ` [Qemu-devel] " Kirti Wankhede
2016-05-05 12:07           ` Tian, Kevin
2016-05-05 12:07             ` [Qemu-devel] " Tian, Kevin
2016-05-05 12:57             ` Kirti Wankhede
2016-05-05 12:57               ` [Qemu-devel] " Kirti Wankhede
2016-05-11  6:37               ` Tian, Kevin
2016-05-11  6:37                 ` [Qemu-devel] " Tian, Kevin
2016-05-06 12:14         ` Jike Song
2016-05-06 12:14           ` [Qemu-devel] " Jike Song
2016-05-06 16:16           ` Kirti Wankhede
2016-05-06 16:16             ` [Qemu-devel] " Kirti Wankhede
2016-05-09 12:12             ` Jike Song
2016-05-09 12:12               ` [Qemu-devel] " Jike Song
2016-05-02 18:40 ` [RFC PATCH v3 2/3] VFIO driver for vGPU device Kirti Wankhede
2016-05-02 18:40   ` [Qemu-devel] " Kirti Wankhede
2016-05-03 22:43   ` Alex Williamson
2016-05-03 22:43     ` [Qemu-devel] " Alex Williamson
2016-05-04  3:23     ` Tian, Kevin
2016-05-04  3:23       ` [Qemu-devel] " Tian, Kevin
2016-05-04 17:06       ` Alex Williamson
2016-05-04 17:06         ` [Qemu-devel] " Alex Williamson
2016-05-04 21:14         ` Neo Jia
2016-05-04 21:14           ` [Qemu-devel] " Neo Jia
2016-05-05  4:42           ` Kirti Wankhede
2016-05-05  4:42             ` [Qemu-devel] " Kirti Wankhede
2016-05-05  9:24         ` Tian, Kevin
2016-05-05  9:24           ` [Qemu-devel] " Tian, Kevin
2016-05-05 20:27           ` Neo Jia [this message]
2016-05-05 20:27             ` Neo Jia
2016-05-11  6:45         ` Tian, Kevin
2016-05-11  6:45           ` [Qemu-devel] " Tian, Kevin
2016-05-11 20:10           ` Alex Williamson
2016-05-11 20:10             ` [Qemu-devel] " Alex Williamson
2016-05-12  0:59             ` Tian, Kevin
2016-05-12  0:59               ` [Qemu-devel] " Tian, Kevin
2016-05-04 16:25     ` Kirti Wankhede
2016-05-04 16:25       ` Kirti Wankhede
2016-05-02 18:40 ` [RFC PATCH v3 3/3] VFIO Type1 IOMMU change: to support with iommu and without iommu Kirti Wankhede
2016-05-02 18:40   ` [Qemu-devel] " Kirti Wankhede
2016-05-03 10:40   ` Jike Song
2016-05-03 10:40     ` [Qemu-devel] " Jike Song
2016-05-03 22:43   ` Alex Williamson
2016-05-03 22:43     ` [Qemu-devel] " Alex Williamson
2016-05-04  3:39     ` Tian, Kevin
2016-05-04  3:39       ` [Qemu-devel] " Tian, Kevin
2016-05-05  6:55     ` Jike Song
2016-05-05  6:55       ` [Qemu-devel] " Jike Song
2016-05-05  9:27       ` Tian, Kevin
2016-05-05  9:27         ` [Qemu-devel] " Tian, Kevin
2016-05-10  7:52         ` Jike Song
2016-05-10  7:52           ` [Qemu-devel] " Jike Song
2016-05-10 16:02           ` Neo Jia
2016-05-10 16:02             ` [Qemu-devel] " Neo Jia
2016-05-11  9:15             ` Jike Song
2016-05-11  9:15               ` [Qemu-devel] " Jike Song
2016-05-11 22:06               ` Alex Williamson
2016-05-11 22:06                 ` [Qemu-devel] " Alex Williamson
2016-05-12  4:11                 ` Jike Song
2016-05-12  4:11                   ` [Qemu-devel] " Jike Song
2016-05-12 19:49                   ` Neo Jia
2016-05-12 19:49                     ` [Qemu-devel] " Neo Jia
2016-05-13  2:41                     ` Tian, Kevin
2016-05-13  2:41                       ` [Qemu-devel] " Tian, Kevin
2016-05-13  6:22                       ` Jike Song
2016-05-13  6:22                         ` [Qemu-devel] " Jike Song
2016-05-13  6:43                         ` Neo Jia
2016-05-13  6:43                           ` [Qemu-devel] " Neo Jia
2016-05-13  7:30                           ` Jike Song
2016-05-13  7:30                             ` [Qemu-devel] " Jike Song
2016-05-13  7:42                             ` Neo Jia
2016-05-13  7:42                               ` [Qemu-devel] " Neo Jia
2016-05-13  7:45                               ` Tian, Kevin
2016-05-13  7:45                                 ` [Qemu-devel] " Tian, Kevin
2016-05-13  8:31                                 ` Neo Jia
2016-05-13  8:31                                   ` [Qemu-devel] " Neo Jia
2016-05-13  9:23                                   ` Jike Song
2016-05-13  9:23                                     ` [Qemu-devel] " Jike Song
2016-05-13 15:50                                     ` Neo Jia
2016-05-13 15:50                                       ` [Qemu-devel] " Neo Jia
2016-05-16  6:57                                       ` Jike Song
2016-05-16  6:57                                         ` [Qemu-devel] " Jike Song
2016-05-13  6:08                     ` Jike Song
2016-05-13  6:08                       ` [Qemu-devel] " Jike Song
2016-05-13  6:41                       ` Neo Jia
2016-05-13  6:41                         ` [Qemu-devel] " Neo Jia
2016-05-13  7:13                         ` Tian, Kevin
2016-05-13  7:13                           ` [Qemu-devel] " Tian, Kevin
2016-05-13  7:38                           ` Neo Jia
2016-05-13  7:38                             ` [Qemu-devel] " Neo Jia
2016-05-13  8:02                             ` Tian, Kevin
2016-05-13  8:02                               ` [Qemu-devel] " Tian, Kevin
2016-05-13  8:41                               ` Neo Jia
2016-05-13  8:41                                 ` [Qemu-devel] " Neo Jia
2016-05-12  8:00                 ` Tian, Kevin
2016-05-12  8:00                   ` [Qemu-devel] " Tian, Kevin
2016-05-12 19:05                   ` Alex Williamson
2016-05-12 19:05                     ` [Qemu-devel] " Alex Williamson
2016-05-12 20:12                     ` Neo Jia
2016-05-12 20:12                       ` [Qemu-devel] " Neo Jia
2016-05-13  9:46                       ` Jike Song
2016-05-13  9:46                         ` [Qemu-devel] " Jike Song
2016-05-13 15:48                         ` Neo Jia
2016-05-13 15:48                           ` [Qemu-devel] " Neo Jia
2016-05-16  2:27                           ` Jike Song
2016-05-16  2:27                             ` [Qemu-devel] " Jike Song
2016-05-13  3:55                     ` Tian, Kevin
2016-05-13  3:55                       ` [Qemu-devel] " Tian, Kevin
2016-05-13 16:16                       ` Alex Williamson
2016-05-13 16:16                         ` [Qemu-devel] " Alex Williamson
2016-05-13  7:10                     ` Dong Jia
2016-05-13  7:24                       ` Neo Jia
2016-05-13  8:39                         ` Dong Jia
2016-05-13  8:39                           ` [Qemu-devel] " Dong Jia
2016-05-13  9:05                           ` Neo Jia
2016-05-19  7:28                             ` Dong Jia
2016-05-20  3:21                               ` Tian, Kevin
2016-05-20  3:21                                 ` Tian, Kevin
2016-06-06  6:59                                 ` Dong Jia
2016-06-07  2:47                                   ` Tian, Kevin
2016-06-07  2:47                                     ` Tian, Kevin
2016-06-07  7:04                                     ` Dong Jia
2016-05-05  7:51     ` Kirti Wankhede
2016-05-05  7:51       ` [Qemu-devel] " Kirti Wankhede
2016-05-04  1:05 ` [RFC PATCH v3 0/3] Add vGPU support Tian, Kevin
2016-05-04  1:05   ` [Qemu-devel] " Tian, Kevin
2016-05-04  6:17   ` Neo Jia
2016-05-04  6:17     ` [Qemu-devel] " Neo Jia
2016-05-04 17:07     ` Alex Williamson
2016-05-04 17:07       ` [Qemu-devel] " Alex Williamson

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=20160505202739.GB28046@nvidia.com \
    --to=cjia@nvidia.com \
    --cc=alex.williamson@redhat.com \
    --cc=jike.song@intel.com \
    --cc=kevin.tian@intel.com \
    --cc=kraxel@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=kwankhede@nvidia.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=shuai.ruan@intel.com \
    --cc=zhiyuan.lv@intel.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.