[Xen-devel] [PATCH for-4.13 v2 2/3] x86/efi: properly handle 0 in pixel reserved bitmask

Igor Druzhinin posted 3 patches 6 years, 4 months ago
[Xen-devel] [PATCH for-4.13 v2 2/3] x86/efi: properly handle 0 in pixel reserved bitmask
Posted by Igor Druzhinin 6 years, 4 months ago
In some graphics modes firmware is allowed to return 0 in pixel reserved
bitmask which doesn't go against UEFI Spec 2.8 (12.9 Graphics Output Protocol).

Without this change non-TrueColor modes won't work which will cause
GOP init to fail - observed while trying to boot EFI Xen with Cirrus VGA.

Signed-off-by: Igor Druzhinin <igor.druzhinin@citrix.com>
---
 xen/arch/x86/efi/efi-boot.h | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h
index a0737f9..4af6314 100644
--- a/xen/arch/x86/efi/efi-boot.h
+++ b/xen/arch/x86/efi/efi-boot.h
@@ -528,9 +528,15 @@ static void __init efi_arch_video_init(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop,
         bpp = set_color(mode_info->PixelInformation.BlueMask, bpp,
                         &vga_console_info.u.vesa_lfb.blue_pos,
                         &vga_console_info.u.vesa_lfb.blue_size);
-        bpp = set_color(mode_info->PixelInformation.ReservedMask, bpp,
-                        &vga_console_info.u.vesa_lfb.rsvd_pos,
-                        &vga_console_info.u.vesa_lfb.rsvd_size);
+        if ( !mode_info->PixelInformation.ReservedMask )
+        {
+            vga_console_info.u.vesa_lfb.rsvd_pos = 0;
+            vga_console_info.u.vesa_lfb.rsvd_size = 0;
+        }
+        else
+            bpp = set_color(mode_info->PixelInformation.ReservedMask, bpp,
+                            &vga_console_info.u.vesa_lfb.rsvd_pos,
+                            &vga_console_info.u.vesa_lfb.rsvd_size);
         if ( bpp > 0 )
             break;
         /* fall through */
-- 
2.7.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [PATCH for-4.13 v2 2/3] x86/efi: properly handle 0 in pixel reserved bitmask
Posted by Jan Beulich 6 years, 4 months ago
On 09.10.2019 22:40, Igor Druzhinin wrote:
> --- a/xen/arch/x86/efi/efi-boot.h
> +++ b/xen/arch/x86/efi/efi-boot.h
> @@ -528,9 +528,15 @@ static void __init efi_arch_video_init(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop,
>          bpp = set_color(mode_info->PixelInformation.BlueMask, bpp,
>                          &vga_console_info.u.vesa_lfb.blue_pos,
>                          &vga_console_info.u.vesa_lfb.blue_size);
> -        bpp = set_color(mode_info->PixelInformation.ReservedMask, bpp,
> -                        &vga_console_info.u.vesa_lfb.rsvd_pos,
> -                        &vga_console_info.u.vesa_lfb.rsvd_size);
> +        if ( !mode_info->PixelInformation.ReservedMask )
> +        {
> +            vga_console_info.u.vesa_lfb.rsvd_pos = 0;
> +            vga_console_info.u.vesa_lfb.rsvd_size = 0;
> +        }
> +        else
> +            bpp = set_color(mode_info->PixelInformation.ReservedMask, bpp,
> +                            &vga_console_info.u.vesa_lfb.rsvd_pos,
> +                            &vga_console_info.u.vesa_lfb.rsvd_size);

Why not simply

        if ( mode_info->PixelInformation.ReservedMask )
            bpp = set_color(mode_info->PixelInformation.ReservedMask, bpp,
                            &vga_console_info.u.vesa_lfb.rsvd_pos,
                            &vga_console_info.u.vesa_lfb.rsvd_size);

? There's nothing I can see which might have changed
vga_console_info.u.vesa_lfb.rsvd_{pos,size} from its zero-initialized
value. With this adjustment (which could be done while committing) or
with a reason supplied for the more complex code
Reviewed-by: Jan Beulich <jbeulich@suse.com>

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [PATCH for-4.13 v2 2/3] x86/efi: properly handle 0 in pixel reserved bitmask
Posted by Igor Druzhinin 6 years, 4 months ago
On 10/10/2019 08:13, Jan Beulich wrote:
> On 09.10.2019 22:40, Igor Druzhinin wrote:
>> --- a/xen/arch/x86/efi/efi-boot.h
>> +++ b/xen/arch/x86/efi/efi-boot.h
>> @@ -528,9 +528,15 @@ static void __init efi_arch_video_init(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop,
>>          bpp = set_color(mode_info->PixelInformation.BlueMask, bpp,
>>                          &vga_console_info.u.vesa_lfb.blue_pos,
>>                          &vga_console_info.u.vesa_lfb.blue_size);
>> -        bpp = set_color(mode_info->PixelInformation.ReservedMask, bpp,
>> -                        &vga_console_info.u.vesa_lfb.rsvd_pos,
>> -                        &vga_console_info.u.vesa_lfb.rsvd_size);
>> +        if ( !mode_info->PixelInformation.ReservedMask )
>> +        {
>> +            vga_console_info.u.vesa_lfb.rsvd_pos = 0;
>> +            vga_console_info.u.vesa_lfb.rsvd_size = 0;
>> +        }
>> +        else
>> +            bpp = set_color(mode_info->PixelInformation.ReservedMask, bpp,
>> +                            &vga_console_info.u.vesa_lfb.rsvd_pos,
>> +                            &vga_console_info.u.vesa_lfb.rsvd_size);
> 
> Why not simply
> 
>         if ( mode_info->PixelInformation.ReservedMask )
>             bpp = set_color(mode_info->PixelInformation.ReservedMask, bpp,
>                             &vga_console_info.u.vesa_lfb.rsvd_pos,
>                             &vga_console_info.u.vesa_lfb.rsvd_size);
> 
> ? There's nothing I can see which might have changed
> vga_console_info.u.vesa_lfb.rsvd_{pos,size} from its zero-initialized
> value. With this adjustment (which could be done while committing) or
> with a reason supplied for the more complex code
> Reviewed-by: Jan Beulich <jbeulich@suse.com>
> 

Didn't notice it was actually statically zero-initialized. Perfectly
fine with the suggested change.

Igor

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel