vDPA/ifcvf: implement doorbell mapping for ifcvf
This commit implements doorbell mapping feature for ifcvf. This feature maps the notify page to userspace, to eliminate vmexit when kick a vq. Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com> Link: https://lore.kernel.org/r/20210602084550.289599-3-lingshan.zhu@intel.com Acked-by: Jason Wang <jasowang@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Родитель
04c6ad8f22
Коммит
5f1b73a275
|
@ -413,6 +413,21 @@ static int ifcvf_vdpa_get_vq_irq(struct vdpa_device *vdpa_dev,
|
|||
return vf->vring[qid].irq;
|
||||
}
|
||||
|
||||
static struct vdpa_notification_area ifcvf_get_vq_notification(struct vdpa_device *vdpa_dev,
|
||||
u16 idx)
|
||||
{
|
||||
struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
|
||||
struct vdpa_notification_area area;
|
||||
|
||||
area.addr = vf->vring[idx].notify_pa;
|
||||
if (!vf->notify_off_multiplier)
|
||||
area.size = PAGE_SIZE;
|
||||
else
|
||||
area.size = vf->notify_off_multiplier;
|
||||
|
||||
return area;
|
||||
}
|
||||
|
||||
/*
|
||||
* IFCVF currently does't have on-chip IOMMU, so not
|
||||
* implemented set_map()/dma_map()/dma_unmap()
|
||||
|
@ -440,6 +455,7 @@ static const struct vdpa_config_ops ifc_vdpa_ops = {
|
|||
.get_config = ifcvf_vdpa_get_config,
|
||||
.set_config = ifcvf_vdpa_set_config,
|
||||
.set_config_cb = ifcvf_vdpa_set_config_cb,
|
||||
.get_vq_notification = ifcvf_get_vq_notification,
|
||||
};
|
||||
|
||||
static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
|
|
Загрузка…
Ссылка в новой задаче