Message ID | 20220504155703.13336-1-jgross@suse.com (mailing list archive) |
---|---|
Headers | show |
Series | kernel: add new infrastructure for platform_has() support | expand |
On 04.05.22 18:57, Juergen Gross wrote: Hello Juergen > In another patch series [1] the need has come up to have support for > a generic feature flag infrastructure. > > This patch series is introducing that infrastructure and adds the first > use case. > > I have decided to use a similar interface as the already known x86 > cpu_has() function. As the new infrastructure is meant to be usable for > general and arch-specific feature flags, the flags are being spread > between a general bitmap and an arch specific one. > > The bitmaps start all being zero, single features can be set or reset > at any time by using the related platform_[re]set_feature() functions. > > The platform_has() function is using a simple test_bit() call for now, > further optimization might be added when needed. > > [1]: https://lore.kernel.org/lkml/1650646263-22047-1-git-send-email-olekstysh@gmail.com/T/#t For both patches: Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> Also I haven't faced any issues with testing current series (w/ and w/o xen-virtio series [1] applied) in Xen guest (Linux v5.18-rc4) on Arm64 based board. So, you can also add: [Arm64 only] Tested-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> Thanks! Note, I reworked patch #3 [1] to use new platform_xxx functionality: diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c index 07eb69f..1f9c3ba 100644 --- a/arch/arm/xen/enlighten.c +++ b/arch/arm/xen/enlighten.c @@ -443,6 +443,8 @@ static int __init xen_guest_init(void) if (!xen_domain()) return 0; + xen_set_restricted_virtio_memory_access(); + if (!acpi_disabled) xen_acpi_guest_init(); else diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c index 517a9d8..8b71b1d 100644 --- a/arch/x86/xen/enlighten_hvm.c +++ b/arch/x86/xen/enlighten_hvm.c @@ -195,6 +195,8 @@ static void __init xen_hvm_guest_init(void) if (xen_pv_domain()) return; + xen_set_restricted_virtio_memory_access(); + init_hvm_pv_info(); reserve_shared_info(); diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c index 5038edb..fcd5d5d 100644 --- a/arch/x86/xen/enlighten_pv.c +++ b/arch/x86/xen/enlighten_pv.c @@ -109,6 +109,8 @@ static DEFINE_PER_CPU(struct tls_descs, shadow_tls_desc); static void __init xen_pv_init_platform(void) { + xen_set_restricted_virtio_memory_access(); + populate_extra_pte(fix_to_virt(FIX_PARAVIRT_BOOTMAP)); set_fixmap(FIX_PARAVIRT_BOOTMAP, xen_start_info->shared_info); diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig index 313a9127..a7bd8ce 100644 --- a/drivers/xen/Kconfig +++ b/drivers/xen/Kconfig @@ -339,4 +339,15 @@ config XEN_GRANT_DMA_OPS bool select DMA_OPS +config XEN_VIRTIO + bool "Xen virtio support" + depends on VIRTIO + select XEN_GRANT_DMA_OPS + help + Enable virtio support for running as Xen guest. Depending on the + guest type this will require special support on the backend side + (qemu or kernel, depending on the virtio device types used). + + If in doubt, say n. + endmenu diff --git a/include/xen/xen.h b/include/xen/xen.h index a99bab8..0780a81 100644 --- a/include/xen/xen.h +++ b/include/xen/xen.h @@ -52,6 +52,14 @@ bool xen_biovec_phys_mergeable(const struct bio_vec *vec1, extern u64 xen_saved_max_mem_size; #endif +#include <linux/platform-feature.h> + +static inline void xen_set_restricted_virtio_memory_access(void) +{ + if (IS_ENABLED(CONFIG_XEN_VIRTIO) && xen_domain()) + platform_set(PLATFORM_VIRTIO_RESTRICTED_MEM_ACCESS); +} + #ifdef CONFIG_XEN_UNPOPULATED_ALLOC int xen_alloc_unpopulated_pages(unsigned int nr_pages, struct page **pages); void xen_free_unpopulated_pages(unsigned int nr_pages, struct page **pages); (END) > > Juergen Gross (2): > kernel: add platform_has() infrastructure > virtio: replace arch_has_restricted_virtio_memory_access() > > MAINTAINERS | 8 ++++++++ > arch/s390/Kconfig | 1 - > arch/s390/mm/init.c | 13 +++---------- > arch/x86/Kconfig | 1 - > arch/x86/mm/mem_encrypt.c | 7 ------- > arch/x86/mm/mem_encrypt_amd.c | 4 ++++ > drivers/virtio/Kconfig | 6 ------ > drivers/virtio/virtio.c | 5 ++--- > include/asm-generic/Kbuild | 1 + > include/asm-generic/platform-feature.h | 8 ++++++++ > include/linux/platform-feature.h | 19 ++++++++++++++++++ > include/linux/virtio_config.h | 9 --------- > kernel/Makefile | 2 +- > kernel/platform-feature.c | 27 ++++++++++++++++++++++++++ > 14 files changed, 73 insertions(+), 38 deletions(-) > create mode 100644 include/asm-generic/platform-feature.h > create mode 100644 include/linux/platform-feature.h > create mode 100644 kernel/platform-feature.c >