mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	xen/virtio: Enable restricted memory access using Xen grant mappings
In order to support virtio in Xen guests add a config option XEN_VIRTIO enabling the user to specify whether in all Xen guests virtio should be able to access memory via Xen grant mappings only on the host side. Also set PLATFORM_VIRTIO_RESTRICTED_MEM_ACCESS feature from the guest initialization code on Arm and x86 if CONFIG_XEN_VIRTIO is enabled. Signed-off-by: Juergen Gross <jgross@suse.com> Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Link: https://lore.kernel.org/r/1654197833-25362-5-git-send-email-olekstysh@gmail.com Signed-off-by: Juergen Gross <jgross@suse.com>
This commit is contained in:
		
							parent
							
								
									d6aca3504c
								
							
						
					
					
						commit
						fa1f57421e
					
				
					 5 changed files with 25 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue