From: Juergen Gross <jgross@suse.com>
To: Oleksandr <olekstysh@gmail.com>,
xen-devel@lists.xenproject.org, x86@kernel.org,
linux-kernel@vger.kernel.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
Russell King <linux@armlinux.org.uk>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
linux-arm-kernel@lists.infradead.org,
Viresh Kumar <viresh.kumar@linaro.org>
Subject: Re: [PATCH v3 3/3] xen: don't require virtio with grants for non-PV guests
Date: Wed, 22 Jun 2022 16:35:22 +0200 [thread overview]
Message-ID: <0f047970-d9ea-d2fd-3208-db843305e11c@suse.com> (raw)
In-Reply-To: <a8ce8ad3-aa3b-ea87-34cf-6532a272e9d8@gmail.com>
[-- Attachment #1.1.1: Type: text/plain, Size: 6067 bytes --]
On 22.06.22 11:03, Oleksandr wrote:
>
> On 22.06.22 09:38, Juergen Gross wrote:
>
> Hello Juergen
>
>> Commit fa1f57421e0b ("xen/virtio: Enable restricted memory access using
>> Xen grant mappings") introduced a new requirement for using virtio
>> devices: the backend now needs to support the VIRTIO_F_ACCESS_PLATFORM
>> feature.
>>
>> This is an undue requirement for non-PV guests, as those can be operated
>> with existing backends without any problem, as long as those backends
>> are running in dom0.
>>
>> Per default allow virtio devices without grant support for non-PV
>> guests.
>>
>> On Arm require VIRTIO_F_ACCESS_PLATFORM for devices having been listed
>> in the device tree to use grants.
>>
>> Add a new config item to always force use of grants for virtio.
>>
>> Fixes: fa1f57421e0b ("xen/virtio: Enable restricted memory access using Xen
>> grant mappings")
>> Reported-by: Viresh Kumar <viresh.kumar@linaro.org>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>> ---
>> V2:
>> - remove command line parameter (Christoph Hellwig)
>> V3:
>> - rebase to callback method
>
>
> Patch looks good, just one NIT ...
>
>
>> ---
>> arch/arm/xen/enlighten.c | 4 +++-
>> arch/x86/xen/enlighten_hvm.c | 4 +++-
>> arch/x86/xen/enlighten_pv.c | 5 ++++-
>> drivers/xen/Kconfig | 9 +++++++++
>> drivers/xen/grant-dma-ops.c | 10 ++++++++++
>> include/xen/xen-ops.h | 6 ++++++
>> include/xen/xen.h | 8 --------
>> 7 files changed, 35 insertions(+), 11 deletions(-)
>>
>> diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
>> index 1f9c3ba32833..93c8ccbf2982 100644
>> --- a/arch/arm/xen/enlighten.c
>> +++ b/arch/arm/xen/enlighten.c
>> @@ -34,6 +34,7 @@
>> #include <linux/timekeeping.h>
>> #include <linux/timekeeper_internal.h>
>> #include <linux/acpi.h>
>> +#include <linux/virtio_anchor.h>
>> #include <linux/mm.h>
>> @@ -443,7 +444,8 @@ static int __init xen_guest_init(void)
>> if (!xen_domain())
>> return 0;
>> - xen_set_restricted_virtio_memory_access();
>> + if (IS_ENABLED(CONFIG_XEN_VIRTIO))
>> + virtio_set_mem_acc_cb(xen_virtio_mem_acc);
>> if (!acpi_disabled)
>> xen_acpi_guest_init();
>> diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c
>> index 8b71b1dd7639..28762f800596 100644
>> --- a/arch/x86/xen/enlighten_hvm.c
>> +++ b/arch/x86/xen/enlighten_hvm.c
>> @@ -4,6 +4,7 @@
>> #include <linux/cpu.h>
>> #include <linux/kexec.h>
>> #include <linux/memblock.h>
>> +#include <linux/virtio_anchor.h>
>> #include <xen/features.h>
>> #include <xen/events.h>
>> @@ -195,7 +196,8 @@ static void __init xen_hvm_guest_init(void)
>> if (xen_pv_domain())
>> return;
>> - xen_set_restricted_virtio_memory_access();
>> + if (IS_ENABLED(CONFIG_XEN_VIRTIO_FORCE_GRANT))
>> + virtio_set_mem_acc_cb(virtio_require_restricted_mem_acc);
>> init_hvm_pv_info();
>> diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c
>> index e3297b15701c..5aaae8a77f55 100644
>> --- a/arch/x86/xen/enlighten_pv.c
>> +++ b/arch/x86/xen/enlighten_pv.c
>> @@ -31,6 +31,7 @@
>> #include <linux/gfp.h>
>> #include <linux/edd.h>
>> #include <linux/reboot.h>
>> +#include <linux/virtio_anchor.h>
>> #include <xen/xen.h>
>> #include <xen/events.h>
>> @@ -109,7 +110,9 @@ static DEFINE_PER_CPU(struct tls_descs, shadow_tls_desc);
>> static void __init xen_pv_init_platform(void)
>> {
>> - xen_set_restricted_virtio_memory_access();
>> + /* 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);
>> populate_extra_pte(fix_to_virt(FIX_PARAVIRT_BOOTMAP));
>> diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig
>> index bfd5f4f706bc..a65bd92121a5 100644
>> --- a/drivers/xen/Kconfig
>> +++ b/drivers/xen/Kconfig
>> @@ -355,4 +355,13 @@ config XEN_VIRTIO
>> If in doubt, say n.
>> +config XEN_VIRTIO_FORCE_GRANT
>> + bool "Require Xen virtio support to use grants"
>> + depends on XEN_VIRTIO
>> + help
>> + Require virtio for Xen guests to use grant mappings.
>> + This will avoid the need to give the backend the right to map all
>> + of the guest memory. This will need support on the backend side
>> + (e.g. qemu or kernel, depending on the virtio device types used).
>> +
>> endmenu
>> diff --git a/drivers/xen/grant-dma-ops.c b/drivers/xen/grant-dma-ops.c
>> index fc0142484001..8973fc1e9ccc 100644
>> --- a/drivers/xen/grant-dma-ops.c
>> +++ b/drivers/xen/grant-dma-ops.c
>> @@ -12,6 +12,8 @@
>> #include <linux/of.h>
>> #include <linux/pfn.h>
>> #include <linux/xarray.h>
>> +#include <linux/virtio_anchor.h>
>> +#include <linux/virtio.h>
>> #include <xen/xen.h>
>> #include <xen/xen-ops.h>
>> #include <xen/grant_table.h>
>> @@ -287,6 +289,14 @@ bool xen_is_grant_dma_device(struct device *dev)
>> return has_iommu;
>> }
>> +bool xen_virtio_mem_acc(struct virtio_device *dev)
>> +{
>> + if (IS_ENABLED(CONFIG_XEN_VIRTIO_FORCE_GRANT))
>> + return true;
>> +
>> + return xen_is_grant_dma_device(dev->dev.parent);
>> +}
>
>
> ... I am thinking would it be better to move this to xen/xen-ops.h as
> grant-dma-ops.c is generic (not only for virtio, although the virtio is the
> first use-case)
I dislike using a function marked as inline in a function vector.
We could add another module "xen-virtio" for this purpose, but this seems
to be overkill.
I think we should just leave it here and move it later in case more real
virtio dependent stuff is being added.
Juergen
[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3149 bytes --]
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]
next prev parent reply other threads:[~2022-06-22 14:35 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-22 6:38 [PATCH v3 0/3] virtio: support requiring restricted access per device Juergen Gross
2022-06-22 6:38 ` [PATCH v3 1/3] virtio: replace restricted mem access flag with callback Juergen Gross
2022-06-22 6:38 ` [PATCH v3 2/3] kernel: remove platform_has() infrastructure Juergen Gross
2022-06-22 6:38 ` [PATCH v3 3/3] xen: don't require virtio with grants for non-PV guests Juergen Gross
2022-06-22 9:03 ` Oleksandr
2022-06-22 14:35 ` Juergen Gross [this message]
2022-06-22 15:18 ` Oleksandr
2022-06-22 10:20 ` [PATCH v3 0/3] virtio: support requiring restricted access per device Oleksandr
2022-06-29 0:58 ` Stefano Stabellini
2022-07-05 11:16 ` Juergen Gross
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=0f047970-d9ea-d2fd-3208-db843305e11c@suse.com \
--to=jgross@suse.com \
--cc=boris.ostrovsky@oracle.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=mingo@redhat.com \
--cc=oleksandr_tyshchenko@epam.com \
--cc=olekstysh@gmail.com \
--cc=sstabellini@kernel.org \
--cc=tglx@linutronix.de \
--cc=viresh.kumar@linaro.org \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®