From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A804F248F51 for ; Thu, 27 Nov 2025 01:21:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764206505; cv=none; b=gGtwmAzidojvxslQr/tI9kqN32L3ZxX9FGqI7tKk21XzQfa4KYaQYRB+SlqsUvvEeR3NTgkgdRBg78SsvSptQKWotBi3fwuBWAkhXbWT0b7iMOo/LrSGUSFC54bQZXKtSVhHV0xixgBVGfzWLs5y5ZK6zxMcwdw2FAb96/Ed0j0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764206505; c=relaxed/simple; bh=P/9Z/N8PKstZq6Sgt3L6FnHwOnlWxpkbv8chn8cZ30U=; h=From:Date:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ewD2bPvM6i0oTTgef6cIF7UrLnv4a5iPqy+eLs57vSlPh0J9Qamjd3WDkOfn7EynTMoKIgBB7WDYCcPC0IhWlwrZwmuK2Ct+xXQxu9zw7ckDhGid/M3/Wf3Usl0SmvC3PpMjBqzE9SpUpAVYtnrxur2zNCokGRe9T5KMeSYjDJ8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=L7XOB5nv; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="L7XOB5nv" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4775895d69cso1027645e9.0 for ; Wed, 26 Nov 2025 17:21:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1764206501; x=1764811301; darn=vger.kernel.org; h=user-agent:in-reply-to:content-disposition:mime-version:references :message-id:subject:cc:to:date:from:from:to:cc:subject:date :message-id:reply-to; bh=XKB+umqjLQJdt0Xtb5+/u9pc/TjHJihZz4gGx4BvVKM=; b=L7XOB5nvWoova4x3YvbBULdJtB0kHlMGcR11p8XKXIquf4eqkn3jcEeOCYSaKIXK/X jQWJ4Eplfp5pGrp/PWOypY102MASd90fepGAMXR2b9UyI6EmCbZ5GyZ/LF2P+hWnwWs8 KcIGdw+LwQPP/iThlyeViKJlE+kpMlyvNAvIybes1m9LIpCkQxB2ipWPWRKyoxUBUFrG UFpDarBQvl6zRt48x4LABc7tf/vPzbtLXr+Van9d4aRCLmjxMtpk1+ul4dD6wR9jTbrs iswtrI8n1+OEM+3trjKsAtDH86N/4cwlBRdRHZJYl8UoZQq4u37YCRWIpnWayUTTBFAl saOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764206501; x=1764811301; h=user-agent:in-reply-to:content-disposition:mime-version:references :message-id:subject:cc:to:date:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=XKB+umqjLQJdt0Xtb5+/u9pc/TjHJihZz4gGx4BvVKM=; b=mcZUC/FLwuQpNkWCRrITuuHvx8Fjg4VS6r1pDXD6gHzdTasjAp/F/ihPXJJkcNbKKv Pq1UD1Se1QNeGTq+dtdKZ6bDlLKvN7YTRCZC6JzJ0AaSlbSrjttWCM/LyZ0HNXwYVkps QaW2og4D5b2r33wSiYS9q0arTwpmrJHona87w0a0JBrYZ+nXOocqQg5vy4ibI/H3/Dzr pCwKzhNmQWwZEb5EY3aXh40nlwMquuD4AmsAVhv+iLiPglJWxtMKQ7nVvFnCS+aSJ7ZY 9aj71n/6qrlWo8Lu7RWRGsO2i7eGe7zf7E9C4wNV2NNEDTVA6AM0uIFRaon6fgfkkwWI UCpA== X-Forwarded-Encrypted: i=1; AJvYcCXMb2SqFoUWEfVTCtKHSdG4RRPPaMQccUq5ie+8OdkZhn8mjZ69y/vKIO16oUT+74gSgJjLj4LQuwednQ==@vger.kernel.org X-Gm-Message-State: AOJu0YyNj1zRMg99BZqHqHivwKoBGf1PHNIwNZORM+EPAgHXDicVUP64 g5GRC8bJdiUWkN7uqfGL2GaQgu3UsAmJc9fgmz0i7DqZSYB99uoJmLRVaMWL9ul1B5Y= X-Gm-Gg: ASbGncvZa4c+HfiCPzXbPccEgvcNN0KKdWEl9JLk7xMcU8vhkT6LaX5e7eZ8bzFzE8A Q/NgVb3EZoCcE5OkuZhiPhmw7FSZeH7jbUVDHVUgbDLgx6EFsF41XcU55VfnBE+GeSFJg6dCl6u c6SS03XGplBXzr+BBc7qaun2tAfRkhy6Zky8Zpcp4izk3a1zJtvd3DWu618Agw5Ag1p5qRfW5py fNFfv9rjoi/qoyG9kBG+RuDcpG7DBB3x2caKj8R16vL+rua5tRIwy0XhrTkw7j5i1GQjosx8TRD OEIJCqqYoL/vuX1Sd7A9sF5dOPsqKKGTubbQqv5h+tXXdPCAI3jXmaVQZjB2OgwSEEQFdsKbZw0 p5HVMySOnY5QeF/SPnK4PoxQfnQvuIIFCgN2ks2Bh965So9a4TMSeTtsnkUpX6iAHnGCK/iZo62 zwhMYZhm/M6ESxgYcfdQa7wQBye51zznTg22t2nxKsuSA= X-Google-Smtp-Source: AGHT+IH5dreI2mWiT9OHT4iDH1t5EyaQjC3x4sVC42/rf7Nn0IkLjAie1oF/6UEYyyU2S+G28jWY9w== X-Received: by 2002:a05:600c:1382:b0:475:de68:3c30 with SMTP id 5b1f17b1804b1-47904b103edmr91666245e9.16.1764206500927; Wed, 26 Nov 2025 17:21:40 -0800 (PST) Received: from r1chard (1-169-246-18.dynamic-ip.hinet.net. [1.169.246.18]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7c3ed472744sm22492012b3a.26.2025.11.26.17.21.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Nov 2025 17:21:40 -0800 (PST) From: Richard Lyu X-Google-Original-From: Richard Lyu Date: Thu, 27 Nov 2025 09:21:33 +0800 To: Thomas Zimmermann , ardb@kernel.org, javierm@redhat.com, arnd@arndb.de Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org, loongarch@lists.linux.dev, linux-riscv@lists.infradead.org, dri-devel@lists.freedesktop.org, linux-hyperv@vger.kernel.org, linux-pci@vger.kernel.org, linux-fbdev@vger.kernel.org Subject: Re: [PATCH v3 4/9] sysfb: Replace screen_info with sysfb_primary_display Message-ID: References: <20251126160854.553077-1-tzimmermann@suse.de> <20251126160854.553077-5-tzimmermann@suse.de> Precedence: bulk X-Mailing-List: linux-fbdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20251126160854.553077-5-tzimmermann@suse.de> User-Agent: Mutt/2.2.13 (2024-03-09) Reviewed-by: Richard Lyu On 2025/11/26 17:03, Thomas Zimmermann wrote: > Replace the global screen_info with sysfb_primary_display of type > struct sysfb_display_info. Adapt all users of screen_info. > > Instances of screen_info are defined for x86, loongarch and EFI, > with only one instance compiled into a specific build. Replace all > of them with sysfb_primary_display. > > All existing users of screen_info are updated by pointing them to > sysfb_primary_display.screen instead. This introduces some churn to > the code, but has no impact on functionality. > > Boot parameters and EFI config tables are unchanged. They transfer > screen_info as before. The logic in EFI's alloc_screen_info() changes > slightly, as it now returns the screen field of sysfb_primary_display. > > v2: > - update comment > - rename init_screen_info() to init_primary_display() > > Signed-off-by: Thomas Zimmermann > Acked-by: Arnd Bergmann > Acked-by: Ard Biesheuvel > Acked-by: Bjorn Helgaas # drivers/pci/ > --- > arch/arm64/kernel/image-vars.h | 2 +- > arch/loongarch/kernel/efi.c | 15 +++++++------ > arch/loongarch/kernel/image-vars.h | 2 +- > arch/riscv/kernel/image-vars.h | 2 +- > arch/x86/kernel/kexec-bzimage64.c | 4 +++- > arch/x86/kernel/setup.c | 10 +++++---- > arch/x86/video/video-common.c | 4 ++-- > drivers/firmware/efi/earlycon.c | 8 +++---- > drivers/firmware/efi/efi-init.c | 22 +++++++++---------- > drivers/firmware/efi/libstub/efi-stub-entry.c | 18 ++++++++++----- > drivers/firmware/efi/sysfb_efi.c | 4 ++-- > drivers/firmware/sysfb.c | 6 ++--- > drivers/hv/vmbus_drv.c | 6 ++--- > drivers/pci/vgaarb.c | 4 ++-- > drivers/video/screen_info_pci.c | 5 +++-- > include/linux/screen_info.h | 2 -- > include/linux/sysfb.h | 5 +++-- > 17 files changed, 66 insertions(+), 53 deletions(-) > > diff --git a/arch/arm64/kernel/image-vars.h b/arch/arm64/kernel/image-vars.h > index 85bc629270bd..d7b0d12b1015 100644 > --- a/arch/arm64/kernel/image-vars.h > +++ b/arch/arm64/kernel/image-vars.h > @@ -38,7 +38,7 @@ PROVIDE(__efistub__end = _end); > PROVIDE(__efistub___inittext_end = __inittext_end); > PROVIDE(__efistub__edata = _edata); > #if defined(CONFIG_EFI_EARLYCON) || defined(CONFIG_SYSFB) > -PROVIDE(__efistub_screen_info = screen_info); > +PROVIDE(__efistub_sysfb_primary_display = sysfb_primary_display); > #endif > PROVIDE(__efistub__ctype = _ctype); > > diff --git a/arch/loongarch/kernel/efi.c b/arch/loongarch/kernel/efi.c > index 860a3bc030e0..638a392d2cd2 100644 > --- a/arch/loongarch/kernel/efi.c > +++ b/arch/loongarch/kernel/efi.c > @@ -18,7 +18,7 @@ > #include > #include > #include > -#include > +#include > #include > > #include > @@ -75,11 +75,11 @@ bool efi_poweroff_required(void) > unsigned long __initdata screen_info_table = EFI_INVALID_TABLE_ADDR; > > #if defined(CONFIG_SYSFB) || defined(CONFIG_EFI_EARLYCON) > -struct screen_info screen_info __section(".data"); > -EXPORT_SYMBOL_GPL(screen_info); > +struct sysfb_display_info sysfb_primary_display __section(".data"); > +EXPORT_SYMBOL_GPL(sysfb_primary_display); > #endif > > -static void __init init_screen_info(void) > +static void __init init_primary_display(void) > { > struct screen_info *si; > > @@ -91,11 +91,12 @@ static void __init init_screen_info(void) > pr_err("Could not map screen_info config table\n"); > return; > } > - screen_info = *si; > + sysfb_primary_display.screen = *si; > memset(si, 0, sizeof(*si)); > early_memunmap(si, sizeof(*si)); > > - memblock_reserve(__screen_info_lfb_base(&screen_info), screen_info.lfb_size); > + memblock_reserve(__screen_info_lfb_base(&sysfb_primary_display.screen), > + sysfb_primary_display.screen.lfb_size); > } > > void __init efi_init(void) > @@ -127,7 +128,7 @@ void __init efi_init(void) > set_bit(EFI_CONFIG_TABLES, &efi.flags); > > if (IS_ENABLED(CONFIG_EFI_EARLYCON) || IS_ENABLED(CONFIG_SYSFB)) > - init_screen_info(); > + init_primary_display(); > > if (boot_memmap == EFI_INVALID_TABLE_ADDR) > return; > diff --git a/arch/loongarch/kernel/image-vars.h b/arch/loongarch/kernel/image-vars.h > index 41ddcf56d21c..e557ebd46c2b 100644 > --- a/arch/loongarch/kernel/image-vars.h > +++ b/arch/loongarch/kernel/image-vars.h > @@ -12,7 +12,7 @@ __efistub_kernel_entry = kernel_entry; > __efistub_kernel_asize = kernel_asize; > __efistub_kernel_fsize = kernel_fsize; > #if defined(CONFIG_EFI_EARLYCON) || defined(CONFIG_SYSFB) > -__efistub_screen_info = screen_info; > +__efistub_sysfb_primary_display = sysfb_primary_display; > #endif > > #endif > diff --git a/arch/riscv/kernel/image-vars.h b/arch/riscv/kernel/image-vars.h > index 3df30dd1c458..3bd9d06a8b8f 100644 > --- a/arch/riscv/kernel/image-vars.h > +++ b/arch/riscv/kernel/image-vars.h > @@ -29,7 +29,7 @@ __efistub__end = _end; > __efistub__edata = _edata; > __efistub___init_text_end = __init_text_end; > #if defined(CONFIG_EFI_EARLYCON) || defined(CONFIG_SYSFB) > -__efistub_screen_info = screen_info; > +__efistub_sysfb_primary_display = sysfb_primary_display; > #endif > > #endif > diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c > index c3244ac680d1..7508d0ccc740 100644 > --- a/arch/x86/kernel/kexec-bzimage64.c > +++ b/arch/x86/kernel/kexec-bzimage64.c > @@ -20,6 +20,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -303,7 +304,8 @@ setup_boot_parameters(struct kimage *image, struct boot_params *params, > params->hdr.hardware_subarch = boot_params.hdr.hardware_subarch; > > /* Copying screen_info will do? */ > - memcpy(¶ms->screen_info, &screen_info, sizeof(struct screen_info)); > + memcpy(¶ms->screen_info, &sysfb_primary_display.screen, > + sizeof(sysfb_primary_display.screen)); > > /* Fill in memsize later */ > params->screen_info.ext_mem_k = 0; > diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c > index 1b2edd07a3e1..675e4b9deb1f 100644 > --- a/arch/x86/kernel/setup.c > +++ b/arch/x86/kernel/setup.c > @@ -22,6 +22,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -211,8 +212,9 @@ arch_initcall(init_x86_sysctl); > /* > * Setup options > */ > -struct screen_info screen_info; > -EXPORT_SYMBOL(screen_info); > + > +struct sysfb_display_info sysfb_primary_display; > +EXPORT_SYMBOL(sysfb_primary_display); > #if defined(CONFIG_FIRMWARE_EDID) > struct edid_info edid_info; > EXPORT_SYMBOL_GPL(edid_info); > @@ -526,7 +528,7 @@ static void __init parse_setup_data(void) > static void __init parse_boot_params(void) > { > ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev); > - screen_info = boot_params.screen_info; > + sysfb_primary_display.screen = boot_params.screen_info; > #if defined(CONFIG_FIRMWARE_EDID) > edid_info = boot_params.edid_info; > #endif > @@ -1254,7 +1256,7 @@ void __init setup_arch(char **cmdline_p) > #ifdef CONFIG_VT > #if defined(CONFIG_VGA_CONSOLE) > if (!efi_enabled(EFI_BOOT) || (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY)) > - vgacon_register_screen(&screen_info); > + vgacon_register_screen(&sysfb_primary_display.screen); > #endif > #endif > x86_init.oem.banner(); > diff --git a/arch/x86/video/video-common.c b/arch/x86/video/video-common.c > index e0aeee99bc99..152789f00fcd 100644 > --- a/arch/x86/video/video-common.c > +++ b/arch/x86/video/video-common.c > @@ -9,7 +9,7 @@ > > #include > #include > -#include > +#include > #include > > #include > @@ -29,7 +29,7 @@ EXPORT_SYMBOL(pgprot_framebuffer); > bool video_is_primary_device(struct device *dev) > { > #ifdef CONFIG_SCREEN_INFO > - struct screen_info *si = &screen_info; > + struct screen_info *si = &sysfb_primary_display.screen; > struct resource res[SCREEN_INFO_MAX_RESOURCES]; > ssize_t i, numres; > #endif > diff --git a/drivers/firmware/efi/earlycon.c b/drivers/firmware/efi/earlycon.c > index 42e3a173dac1..3d060d59968c 100644 > --- a/drivers/firmware/efi/earlycon.c > +++ b/drivers/firmware/efi/earlycon.c > @@ -9,7 +9,7 @@ > #include > #include > #include > -#include > +#include > #include > > #include > @@ -32,7 +32,7 @@ static void *efi_fb; > */ > static int __init efi_earlycon_remap_fb(void) > { > - const struct screen_info *si = &screen_info; > + const struct screen_info *si = &sysfb_primary_display.screen; > > /* bail if there is no bootconsole or it was unregistered already */ > if (!earlycon_console || !console_is_registered(earlycon_console)) > @@ -147,7 +147,7 @@ static void efi_earlycon_write_char(u32 *dst, unsigned char c, unsigned int h, > static void > efi_earlycon_write(struct console *con, const char *str, unsigned int num) > { > - const struct screen_info *si = &screen_info; > + const struct screen_info *si = &sysfb_primary_display.screen; > u32 cur_efi_x = efi_x; > unsigned int len; > const char *s; > @@ -227,7 +227,7 @@ void __init efi_earlycon_reprobe(void) > static int __init efi_earlycon_setup(struct earlycon_device *device, > const char *opt) > { > - const struct screen_info *si = &screen_info; > + const struct screen_info *si = &sysfb_primary_display.screen; > u16 xres, yres; > u32 i; > > diff --git a/drivers/firmware/efi/efi-init.c b/drivers/firmware/efi/efi-init.c > index a65c2d5b9e7b..d1d418a34407 100644 > --- a/drivers/firmware/efi/efi-init.c > +++ b/drivers/firmware/efi/efi-init.c > @@ -19,7 +19,7 @@ > #include > #include > #include > -#include > +#include > > #include > > @@ -57,15 +57,15 @@ static phys_addr_t __init efi_to_phys(unsigned long addr) > extern __weak const efi_config_table_type_t efi_arch_tables[]; > > /* > - * x86 defines its own screen_info and uses it even without EFI, > - * everything else can get it from here. > + * x86 defines its own instance of sysfb_primary_display and uses > + * it even without EFI, everything else can get them from here. > */ > #if !defined(CONFIG_X86) && (defined(CONFIG_SYSFB) || defined(CONFIG_EFI_EARLYCON)) > -struct screen_info screen_info __section(".data"); > -EXPORT_SYMBOL_GPL(screen_info); > +struct sysfb_display_info sysfb_primary_display __section(".data"); > +EXPORT_SYMBOL_GPL(sysfb_primary_display); > #endif > > -static void __init init_screen_info(void) > +static void __init init_primary_display(void) > { > struct screen_info *si; > > @@ -75,13 +75,13 @@ static void __init init_screen_info(void) > pr_err("Could not map screen_info config table\n"); > return; > } > - screen_info = *si; > + sysfb_primary_display.screen = *si; > memset(si, 0, sizeof(*si)); > early_memunmap(si, sizeof(*si)); > > - if (memblock_is_map_memory(screen_info.lfb_base)) > - memblock_mark_nomap(screen_info.lfb_base, > - screen_info.lfb_size); > + if (memblock_is_map_memory(sysfb_primary_display.screen.lfb_base)) > + memblock_mark_nomap(sysfb_primary_display.screen.lfb_base, > + sysfb_primary_display.screen.lfb_size); > > if (IS_ENABLED(CONFIG_EFI_EARLYCON)) > efi_earlycon_reprobe(); > @@ -274,5 +274,5 @@ void __init efi_init(void) > if (IS_ENABLED(CONFIG_X86) || > IS_ENABLED(CONFIG_SYSFB) || > IS_ENABLED(CONFIG_EFI_EARLYCON)) > - init_screen_info(); > + init_primary_display(); > } > diff --git a/drivers/firmware/efi/libstub/efi-stub-entry.c b/drivers/firmware/efi/libstub/efi-stub-entry.c > index a6c049835190..401ecbbdf331 100644 > --- a/drivers/firmware/efi/libstub/efi-stub-entry.c > +++ b/drivers/firmware/efi/libstub/efi-stub-entry.c > @@ -1,13 +1,18 @@ > // SPDX-License-Identifier: GPL-2.0-only > > #include > -#include > +#include > > #include > > #include "efistub.h" > > -static unsigned long screen_info_offset; > +static unsigned long kernel_image_offset; > + > +static void *kernel_image_addr(void *addr) > +{ > + return addr + kernel_image_offset; > +} > > struct screen_info *alloc_screen_info(void) > { > @@ -16,8 +21,11 @@ struct screen_info *alloc_screen_info(void) > > if (IS_ENABLED(CONFIG_X86) || > IS_ENABLED(CONFIG_EFI_EARLYCON) || > - IS_ENABLED(CONFIG_SYSFB)) > - return (void *)&screen_info + screen_info_offset; > + IS_ENABLED(CONFIG_SYSFB)) { > + struct sysfb_display_info *dpy = kernel_image_addr(&sysfb_primary_display); > + > + return &dpy->screen; > + } > > return NULL; > } > @@ -73,7 +81,7 @@ efi_status_t __efiapi efi_pe_entry(efi_handle_t handle, > return status; > } > > - screen_info_offset = image_addr - (unsigned long)image->image_base; > + kernel_image_offset = image_addr - (unsigned long)image->image_base; > > status = efi_stub_common(handle, image, image_addr, cmdline_ptr); > > diff --git a/drivers/firmware/efi/sysfb_efi.c b/drivers/firmware/efi/sysfb_efi.c > index 8e0f9d08397f..46ad95084b50 100644 > --- a/drivers/firmware/efi/sysfb_efi.c > +++ b/drivers/firmware/efi/sysfb_efi.c > @@ -176,7 +176,7 @@ static int __init efifb_set_system(struct screen_info *si, const struct dmi_syst > > static int __init efifb_set_system_callback(const struct dmi_system_id *id) > { > - return efifb_set_system(&screen_info, id); > + return efifb_set_system(&sysfb_primary_display.screen, id); > } > > #define EFIFB_DMI_SYSTEM_ID(vendor, name, enumid) \ > @@ -316,7 +316,7 @@ static struct device_node *find_pci_overlap_node(void) > } > > for_each_of_pci_range(&parser, &range) > - if (efifb_overlaps_pci_range(&screen_info, &range)) > + if (efifb_overlaps_pci_range(&sysfb_primary_display.screen, &range)) > return np; > } > return NULL; > diff --git a/drivers/firmware/sysfb.c b/drivers/firmware/sysfb.c > index 916b28538a29..1f671f9219b0 100644 > --- a/drivers/firmware/sysfb.c > +++ b/drivers/firmware/sysfb.c > @@ -66,7 +66,7 @@ static bool sysfb_unregister(void) > */ > void sysfb_disable(struct device *dev) > { > - struct screen_info *si = &screen_info; > + struct screen_info *si = &sysfb_primary_display.screen; > struct device *parent; > > mutex_lock(&disable_lock); > @@ -92,7 +92,7 @@ EXPORT_SYMBOL_GPL(sysfb_disable); > */ > bool sysfb_handles_screen_info(void) > { > - const struct screen_info *si = &screen_info; > + const struct screen_info *si = &sysfb_primary_display.screen; > > return !!screen_info_video_type(si); > } > @@ -141,7 +141,7 @@ static struct device *sysfb_parent_dev(const struct screen_info *si) > > static __init int sysfb_init(void) > { > - struct screen_info *si = &screen_info; > + struct screen_info *si = &sysfb_primary_display.screen; > struct device *parent; > unsigned int type; > struct simplefb_platform_data mode; > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > index a53af6fe81a6..9c937190be81 100644 > --- a/drivers/hv/vmbus_drv.c > +++ b/drivers/hv/vmbus_drv.c > @@ -29,7 +29,7 @@ > #include > #include > #include > -#include > +#include > #include > #include > #include > @@ -2340,8 +2340,8 @@ static void __maybe_unused vmbus_reserve_fb(void) > if (efi_enabled(EFI_BOOT)) { > /* Gen2 VM: get FB base from EFI framebuffer */ > if (IS_ENABLED(CONFIG_SYSFB)) { > - start = screen_info.lfb_base; > - size = max_t(__u32, screen_info.lfb_size, 0x800000); > + start = sysfb_primary_display.screen.lfb_base; > + size = max_t(__u32, sysfb_primary_display.screen.lfb_size, 0x800000); > } > } else { > /* Gen1 VM: get FB base from PCI */ > diff --git a/drivers/pci/vgaarb.c b/drivers/pci/vgaarb.c > index 436fa7f4c387..805be9ea4a34 100644 > --- a/drivers/pci/vgaarb.c > +++ b/drivers/pci/vgaarb.c > @@ -26,7 +26,7 @@ > #include > #include > #include > -#include > +#include > #include > #include > #include > @@ -557,7 +557,7 @@ EXPORT_SYMBOL(vga_put); > static bool vga_is_firmware_default(struct pci_dev *pdev) > { > #if defined CONFIG_X86 > - return pdev == screen_info_pci_dev(&screen_info); > + return pdev == screen_info_pci_dev(&sysfb_primary_display.screen); > #else > return false; > #endif > diff --git a/drivers/video/screen_info_pci.c b/drivers/video/screen_info_pci.c > index 66bfc1d0a6dc..8f34d8a74f09 100644 > --- a/drivers/video/screen_info_pci.c > +++ b/drivers/video/screen_info_pci.c > @@ -4,6 +4,7 @@ > #include > #include > #include > +#include > > static struct pci_dev *screen_info_lfb_pdev; > static size_t screen_info_lfb_bar; > @@ -26,7 +27,7 @@ static bool __screen_info_relocation_is_valid(const struct screen_info *si, stru > > void screen_info_apply_fixups(void) > { > - struct screen_info *si = &screen_info; > + struct screen_info *si = &sysfb_primary_display.screen; > > if (screen_info_lfb_pdev) { > struct resource *pr = &screen_info_lfb_pdev->resource[screen_info_lfb_bar]; > @@ -75,7 +76,7 @@ static void screen_info_fixup_lfb(struct pci_dev *pdev) > .flags = IORESOURCE_MEM, > }; > const struct resource *pr; > - const struct screen_info *si = &screen_info; > + const struct screen_info *si = &sysfb_primary_display.screen; > > if (screen_info_lfb_pdev) > return; // already found > diff --git a/include/linux/screen_info.h b/include/linux/screen_info.h > index 1690706206e8..c022403c599a 100644 > --- a/include/linux/screen_info.h > +++ b/include/linux/screen_info.h > @@ -151,6 +151,4 @@ static inline struct pci_dev *screen_info_pci_dev(const struct screen_info *si) > } > #endif > > -extern struct screen_info screen_info; > - > #endif /* _SCREEN_INFO_H */ > diff --git a/include/linux/sysfb.h b/include/linux/sysfb.h > index 8b37247528bf..e8bde392c690 100644 > --- a/include/linux/sysfb.h > +++ b/include/linux/sysfb.h > @@ -8,11 +8,10 @@ > */ > > #include > +#include > #include > #include > > -#include > - > struct device; > struct platform_device; > struct screen_info; > @@ -65,6 +64,8 @@ struct sysfb_display_info { > struct screen_info screen; > }; > > +extern struct sysfb_display_info sysfb_primary_display; > + > #ifdef CONFIG_SYSFB > > void sysfb_disable(struct device *dev); > -- > 2.51.1 >