Commit 934ef33e authored by Jan Beulich's avatar Jan Beulich Committed by Juergen Gross
Browse files

x86/PVH: obtain VGA console info in Dom0



A new platform-op was added to Xen to allow obtaining the same VGA
console information PV Dom0 is handed. Invoke the new function and have
the output data processed by xen_init_vga().

Signed-off-by: default avatarJan Beulich <jbeulich@suse.com>
Reviewed-by: default avatarJuergen Gross <jgross@suse.com>

Link: https://lore.kernel.org/r/8f315e92-7bda-c124-71cc-478ab9c5e610@suse.com


Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
parent 99a7bcaf
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -45,6 +45,6 @@ obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o

obj-$(CONFIG_XEN_DEBUG_FS)	+= debugfs.o

obj-$(CONFIG_XEN_PV_DOM0)	+= vga.o
obj-$(CONFIG_XEN_DOM0)		+= vga.o

obj-$(CONFIG_XEN_EFI)		+= efi.o
+2 −1
Original line number Diff line number Diff line
@@ -1389,7 +1389,8 @@ asmlinkage __visible void __init xen_start_kernel(struct start_info *si)

		x86_platform.set_legacy_features =
				xen_dom0_set_legacy_features;
		xen_init_vga(info, xen_start_info->console.dom0.info_size);
		xen_init_vga(info, xen_start_info->console.dom0.info_size,
			     &boot_params.screen_info);
		xen_start_info->console.domU.mfn = 0;
		xen_start_info->console.domU.evtchn = 0;

+13 −0
Original line number Diff line number Diff line
@@ -43,6 +43,19 @@ void __init xen_pvh_init(struct boot_params *boot_params)
	x86_init.oem.banner = xen_banner;

	xen_efi_init(boot_params);

	if (xen_initial_domain()) {
		struct xen_platform_op op = {
			.cmd = XENPF_get_dom0_console,
		};
		long ret = HYPERVISOR_platform_op(&op);

		if (ret > 0)
			xen_init_vga(&op.u.dom0_console,
				     min(ret * sizeof(char),
					 sizeof(op.u.dom0_console)),
				     &boot_params->screen_info);
	}
}

void __init mem_map_via_hcall(struct boot_params *boot_params_p)
+2 −3
Original line number Diff line number Diff line
@@ -9,10 +9,9 @@

#include "xen-ops.h"

void __init xen_init_vga(const struct dom0_vga_console_info *info, size_t size)
void __init xen_init_vga(const struct dom0_vga_console_info *info, size_t size,
			 struct screen_info *screen_info)
{
	struct screen_info *screen_info = &boot_params.screen_info;

	/* This is drawn from a dump from vgacon:startup in
	 * standard Linux. */
	screen_info->orig_video_mode = 3;
+4 −3
Original line number Diff line number Diff line
@@ -108,11 +108,12 @@ static inline void xen_uninit_lock_cpu(int cpu)

struct dom0_vga_console_info;

#ifdef CONFIG_XEN_PV_DOM0
void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size);
#ifdef CONFIG_XEN_DOM0
void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size,
			 struct screen_info *);
#else
static inline void __init xen_init_vga(const struct dom0_vga_console_info *info,
				       size_t size)
				       size_t size, struct screen_info *si)
{
}
#endif
Loading