From e9a46d5fe5deaa91be4931d25f1ffc1ee4dc4d19 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roger=20Pau=20Monn=C3=A9?= Date: Thu, 27 Mar 2025 15:03:20 +0100 Subject: [PATCH] x86/vga: fix mapping of the VGA text buffer MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The call to ioremap_wc() in video_init() will always fail, because video_init() is called ahead of vm_init_type(), and so the underlying __vmap() call will fail to allocate the linear address space. Fix by reverting to the previous behavior and use __va() for the VGA text buffer, as it's below the 1MB boundary, and thus always mapped in the directmap. Fixes: 81d195c6c0e2 ('x86: introduce ioremap_wc()') Signed-off-by: Roger Pau Monné Reviewed-by: Jan Beulich master commit: 1ca5f69e35548e5196eadb329e5a3976821dc982 master date: 2025-03-20 17:16:10 +0100 --- xen/drivers/video/vga.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/xen/drivers/video/vga.c b/xen/drivers/video/vga.c index b4d0183261..b577b24619 100644 --- a/xen/drivers/video/vga.c +++ b/xen/drivers/video/vga.c @@ -71,7 +71,7 @@ void __init video_init(void) { case XEN_VGATYPE_TEXT_MODE_3: if ( page_is_ram_type(paddr_to_pfn(0xB8000), RAM_TYPE_CONVENTIONAL) || - ((video = ioremap_wc(0xB8000, 0x8000)) == NULL) ) + ((video = __va(0xB8000)) == NULL) ) return; outw(0x200a, 0x3d4); /* disable cursor */ columns = vga_console_info.u.text_mode_3.columns; @@ -158,7 +158,6 @@ void __init video_endboot(void) if ( !vgacon_keep ) { memset(video, 0, columns * lines * 2); - iounmap(video); video = ZERO_BLOCK_PTR; } break; -- 2.39.5