Reviewed-by: Richard Lyu <[email protected]>

On 2025/11/21 14:36, Thomas Zimmermann wrote:
> Replace usage of global screen_info with local pointers. This will
> later reduce churn when screen_info is being moved.
> 
> Signed-off-by: Thomas Zimmermann <[email protected]>
> ---
>  drivers/firmware/efi/earlycon.c | 40 ++++++++++++++++-----------------
>  1 file changed, 20 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/firmware/efi/earlycon.c b/drivers/firmware/efi/earlycon.c
> index d18a1a5de144..fac3a295c57f 100644
> --- a/drivers/firmware/efi/earlycon.c
> +++ b/drivers/firmware/efi/earlycon.c
> @@ -32,12 +32,13 @@ static void *efi_fb;
>   */
>  static int __init efi_earlycon_remap_fb(void)
>  {
> +     const struct screen_info *si = &screen_info;
> +
>       /* bail if there is no bootconsole or it was unregistered already */
>       if (!earlycon_console || !console_is_registered(earlycon_console))
>               return 0;
>  
> -     efi_fb = memremap(fb_base, screen_info.lfb_size,
> -                       fb_wb ? MEMREMAP_WB : MEMREMAP_WC);
> +     efi_fb = memremap(fb_base, si->lfb_size, fb_wb ? MEMREMAP_WB : 
> MEMREMAP_WC);
>  
>       return efi_fb ? 0 : -ENOMEM;
>  }
> @@ -71,12 +72,12 @@ static __ref void efi_earlycon_unmap(void *addr, unsigned 
> long len)
>       early_memunmap(addr, len);
>  }
>  
> -static void efi_earlycon_clear_scanline(unsigned int y)
> +static void efi_earlycon_clear_scanline(unsigned int y, const struct 
> screen_info *si)
>  {
>       unsigned long *dst;
>       u16 len;
>  
> -     len = screen_info.lfb_linelength;
> +     len = si->lfb_linelength;
>       dst = efi_earlycon_map(y*len, len);
>       if (!dst)
>               return;
> @@ -85,7 +86,7 @@ static void efi_earlycon_clear_scanline(unsigned int y)
>       efi_earlycon_unmap(dst, len);
>  }
>  
> -static void efi_earlycon_scroll_up(void)
> +static void efi_earlycon_scroll_up(const struct screen_info *si)
>  {
>       unsigned long *dst, *src;
>       u16 maxlen = 0;
> @@ -99,8 +100,8 @@ static void efi_earlycon_scroll_up(void)
>       }
>       maxlen *= 4;
>  
> -     len = screen_info.lfb_linelength;
> -     height = screen_info.lfb_height;
> +     len = si->lfb_linelength;
> +     height = si->lfb_height;
>  
>       for (i = 0; i < height - font->height; i++) {
>               dst = efi_earlycon_map(i*len, len);
> @@ -120,7 +121,8 @@ static void efi_earlycon_scroll_up(void)
>       }
>  }
>  
> -static void efi_earlycon_write_char(u32 *dst, unsigned char c, unsigned int 
> h)
> +static void efi_earlycon_write_char(u32 *dst, unsigned char c, unsigned int 
> h,
> +                                 const struct screen_info *si)
>  {
>       const u32 color_black = 0x00000000;
>       const u32 color_white = 0x00ffffff;
> @@ -145,13 +147,12 @@ 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)
>  {
> -     struct screen_info *si;
> +     const struct screen_info *si = &screen_info;
>       u32 cur_efi_x = efi_x;
>       unsigned int len;
>       const char *s;
>       void *dst;
>  
> -     si = &screen_info;
>       len = si->lfb_linelength;
>  
>       while (num) {
> @@ -174,7 +175,7 @@ efi_earlycon_write(struct console *con, const char *str, 
> unsigned int num)
>                       x = efi_x;
>  
>                       while (n-- > 0) {
> -                             efi_earlycon_write_char(dst + x*4, *s, h);
> +                             efi_earlycon_write_char(dst + x*4, *s, h, si);
>                               x += font->width;
>                               s++;
>                       }
> @@ -207,10 +208,10 @@ efi_earlycon_write(struct console *con, const char 
> *str, unsigned int num)
>                       cur_line_y = (cur_line_y + 1) % max_line_y;
>  
>                       efi_y -= font->height;
> -                     efi_earlycon_scroll_up();
> +                     efi_earlycon_scroll_up(si);
>  
>                       for (i = 0; i < font->height; i++)
> -                             efi_earlycon_clear_scanline(efi_y + i);
> +                             efi_earlycon_clear_scanline(efi_y + i, si);
>               }
>       }
>  }
> @@ -226,22 +227,21 @@ void __init efi_earlycon_reprobe(void)
>  static int __init efi_earlycon_setup(struct earlycon_device *device,
>                                    const char *opt)
>  {
> -     struct screen_info *si;
> +     const struct screen_info *si = &screen_info;
>       u16 xres, yres;
>       u32 i;
>  
>       fb_wb = opt && !strcmp(opt, "ram");
>  
> -     if (screen_info.orig_video_isVGA != VIDEO_TYPE_EFI) {
> +     if (si->orig_video_isVGA != VIDEO_TYPE_EFI) {
>               fb_probed = true;
>               return -ENODEV;
>       }
>  
> -     fb_base = screen_info.lfb_base;
> -     if (screen_info.capabilities & VIDEO_CAPABILITY_64BIT_BASE)
> -             fb_base |= (u64)screen_info.ext_lfb_base << 32;
> +     fb_base = si->lfb_base;
> +     if (si->capabilities & VIDEO_CAPABILITY_64BIT_BASE)
> +             fb_base |= (u64)si->ext_lfb_base << 32;
>  
> -     si = &screen_info;
>       xres = si->lfb_width;
>       yres = si->lfb_height;
>  
> @@ -266,7 +266,7 @@ static int __init efi_earlycon_setup(struct 
> earlycon_device *device,
>  
>       efi_y -= font->height;
>       for (i = 0; i < (yres - efi_y) / font->height; i++)
> -             efi_earlycon_scroll_up();
> +             efi_earlycon_scroll_up(si);
>  
>       device->con->write = efi_earlycon_write;
>       earlycon_console = device->con;
> -- 
> 2.51.1
> 
> 

Reply via email to