xen/virtio: enable grant based virtio on x86
Use an x86-specific virtio_check_mem_acc_cb() for Xen in order to setup the correct DMA ops. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> # common code Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Signed-off-by: Juergen Gross <jgross@suse.com>
This commit is contained in:
parent
7228113d1f
commit
61367688f1
|
@ -212,7 +212,7 @@ static void __init xen_hvm_guest_init(void)
|
|||
return;
|
||||
|
||||
if (IS_ENABLED(CONFIG_XEN_VIRTIO_FORCE_GRANT))
|
||||
virtio_set_mem_acc_cb(virtio_require_restricted_mem_acc);
|
||||
virtio_set_mem_acc_cb(xen_virtio_restricted_mem_acc);
|
||||
|
||||
init_hvm_pv_info();
|
||||
|
||||
|
|
|
@ -112,7 +112,7 @@ static void __init xen_pv_init_platform(void)
|
|||
{
|
||||
/* PV guests can't operate virtio devices without grants. */
|
||||
if (IS_ENABLED(CONFIG_XEN_VIRTIO))
|
||||
virtio_set_mem_acc_cb(virtio_require_restricted_mem_acc);
|
||||
virtio_set_mem_acc_cb(xen_virtio_restricted_mem_acc);
|
||||
|
||||
populate_extra_pte(fix_to_virt(FIX_PARAVIRT_BOOTMAP));
|
||||
|
||||
|
|
|
@ -313,7 +313,7 @@ bool xen_is_grant_dma_device(struct device *dev)
|
|||
|
||||
bool xen_virtio_mem_acc(struct virtio_device *dev)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_XEN_VIRTIO_FORCE_GRANT))
|
||||
if (IS_ENABLED(CONFIG_XEN_VIRTIO_FORCE_GRANT) || xen_pv_domain())
|
||||
return true;
|
||||
|
||||
return xen_is_grant_dma_device(dev->dev.parent);
|
||||
|
@ -387,6 +387,16 @@ void xen_grant_setup_dma_ops(struct device *dev)
|
|||
dev_err(dev, "Cannot set up Xen grant DMA ops, retain platform DMA ops\n");
|
||||
}
|
||||
|
||||
bool xen_virtio_restricted_mem_acc(struct virtio_device *dev)
|
||||
{
|
||||
bool ret = xen_virtio_mem_acc(dev);
|
||||
|
||||
if (ret)
|
||||
xen_grant_setup_dma_ops(dev->dev.parent);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
MODULE_DESCRIPTION("Xen grant DMA-mapping layer");
|
||||
MODULE_AUTHOR("Juergen Gross <jgross@suse.com>");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -219,6 +219,7 @@ static inline void xen_preemptible_hcall_end(void) { }
|
|||
void xen_grant_setup_dma_ops(struct device *dev);
|
||||
bool xen_is_grant_dma_device(struct device *dev);
|
||||
bool xen_virtio_mem_acc(struct virtio_device *dev);
|
||||
bool xen_virtio_restricted_mem_acc(struct virtio_device *dev);
|
||||
#else
|
||||
static inline void xen_grant_setup_dma_ops(struct device *dev)
|
||||
{
|
||||
|
@ -234,6 +235,11 @@ static inline bool xen_virtio_mem_acc(struct virtio_device *dev)
|
|||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool xen_virtio_restricted_mem_acc(struct virtio_device *dev)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif /* CONFIG_XEN_GRANT_DMA_OPS */
|
||||
|
||||
#endif /* INCLUDE_XEN_OPS_H */
|
||||
|
|
Loading…
Reference in New Issue