Messages in this thread | | | Date | Fri, 7 Oct 2022 06:31:34 +0200 | Subject | Re: [PATCH 3/3] xen/virtio: enable grant based virtio on x86 | From | Juergen Gross <> |
| |
On 06.10.22 18:04, Oleksandr Tyshchenko wrote: > > On 06.10.22 10:15, Juergen Gross wrote: > > > Hello Juergen > >> 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> >> --- >> arch/x86/xen/enlighten_hvm.c | 2 +- >> arch/x86/xen/enlighten_pv.c | 2 +- >> drivers/xen/grant-dma-ops.c | 10 ++++++++++ >> include/xen/xen-ops.h | 1 + >> 4 files changed, 13 insertions(+), 2 deletions(-) >> >> diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c >> index 1c1ac418484b..c1cd28e915a3 100644 >> --- a/arch/x86/xen/enlighten_hvm.c >> +++ b/arch/x86/xen/enlighten_hvm.c >> @@ -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(); >> >> diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c >> index 9b1a58dda935..45b24c1b646a 100644 >> --- a/arch/x86/xen/enlighten_pv.c >> +++ b/arch/x86/xen/enlighten_pv.c >> @@ -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)); >> >> diff --git a/drivers/xen/grant-dma-ops.c b/drivers/xen/grant-dma-ops.c >> index a00112235877..60a7acc334ed 100644 >> --- a/drivers/xen/grant-dma-ops.c >> +++ b/drivers/xen/grant-dma-ops.c >> @@ -372,6 +372,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); > > > The grant usage is mandatory for PV guests, right? > > Then xen_virtio_mem_acc() should always return true for PV guests (I > mean even if CONFIG_XEN_VIRTIO_FORCE_GRANT is not set).
Yes.
> > > >> + >> + 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"); >> diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h >> index dae0f350c678..3dd5aa936f1d 100644 >> --- a/include/xen/xen-ops.h >> +++ b/include/xen/xen-ops.h >> @@ -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) >> { > > > And probably static inline stub always returning false if > CONFIG_XEN_GRANT_DMA_OPS is not set.
Indeed.
Juergen
[unhandled content-type:application/pgp-keys][unhandled content-type:application/pgp-signature] | |