[PATCH] hw/igd: fix calculation of graphics stolen memory

Corvin Köhne posted 1 patch 2 weeks, 1 day ago
hw/vfio/igd.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] hw/igd: fix calculation of graphics stolen memory
Posted by Corvin Köhne 2 weeks, 1 day ago
From: Corvin Köhne <c.koehne@beckhoff.com>

When copying the calculation of the stolen memory size for Intels integrated
graphics device of gen 9 and later from the Linux kernel [1], we missed
subtracting 0xf0 from the graphics mode select value for values above 0xf0.
This leads to QEMU reporting a very large size of the graphics stolen memory
area. That's just a waste of memory. Additionally the guest firmware might be
unable to allocate such a large buffer.

[1] https://github.com/torvalds/linux/blob/7c626ce4bae1ac14f60076d00eafe71af30450ba/arch/x86/kernel/early-quirks.c#L455-L460

Fixes: 8719224166832ff8230d7dd8599f42bd60e2eb96
Signed-off-by: Corvin Köhne <c.koehne@beckhoff.com>
---
 hw/vfio/igd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/vfio/igd.c b/hw/vfio/igd.c
index a95d441f68..732f9c37a6 100644
--- a/hw/vfio/igd.c
+++ b/hw/vfio/igd.c
@@ -498,7 +498,7 @@ static int igd_get_stolen_mb(int gen, uint32_t gmch)
         if (gms < 0xf0)
             return gms * 32;
         else
-            return gms * 4 + 4;
+            return (gms - 0xf0) * 4 + 4;
     }
 }
 
-- 
2.47.0


Re: [PATCH] hw/igd: fix calculation of graphics stolen memory
Posted by Cédric Le Goater 2 weeks ago
On 11/8/24 13:49, Corvin Köhne wrote:
> From: Corvin Köhne <c.koehne@beckhoff.com>
> 
> When copying the calculation of the stolen memory size for Intels integrated
> graphics device of gen 9 and later from the Linux kernel [1], we missed
> subtracting 0xf0 from the graphics mode select value for values above 0xf0.
> This leads to QEMU reporting a very large size of the graphics stolen memory
> area. That's just a waste of memory. Additionally the guest firmware might be
> unable to allocate such a large buffer.
> 
> [1] https://github.com/torvalds/linux/blob/7c626ce4bae1ac14f60076d00eafe71af30450ba/arch/x86/kernel/early-quirks.c#L455-L460
> 
> Fixes: 8719224166832ff8230d7dd8599f42bd60e2eb96
> Signed-off-by: Corvin Köhne <c.koehne@beckhoff.com>

I changed the subject to "vfio/igd: ...."

Applied to vfio-next.

Thanks,

C.



Re: [PATCH] hw/igd: fix calculation of graphics stolen memory
Posted by Alex Williamson 2 weeks ago
On Fri,  8 Nov 2024 13:49:04 +0100
Corvin Köhne <corvin.koehne@gmail.com> wrote:

> From: Corvin Köhne <c.koehne@beckhoff.com>
> 
> When copying the calculation of the stolen memory size for Intels integrated

* Intel's

> graphics device of gen 9 and later from the Linux kernel [1], we missed
> subtracting 0xf0 from the graphics mode select value for values above 0xf0.
> This leads to QEMU reporting a very large size of the graphics stolen memory
> area. That's just a waste of memory. Additionally the guest firmware might be
> unable to allocate such a large buffer.
> 
> [1] https://github.com/torvalds/linux/blob/7c626ce4bae1ac14f60076d00eafe71af30450ba/arch/x86/kernel/early-quirks.c#L455-L460
> 
> Fixes: 8719224166832ff8230d7dd8599f42bd60e2eb96

Fixes: 871922416683 ("vfio/igd: correctly calculate stolen memory size for gen 9 and later")

> Signed-off-by: Corvin Köhne <c.koehne@beckhoff.com>
> ---
>  hw/vfio/igd.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/hw/vfio/igd.c b/hw/vfio/igd.c
> index a95d441f68..732f9c37a6 100644
> --- a/hw/vfio/igd.c
> +++ b/hw/vfio/igd.c
> @@ -498,7 +498,7 @@ static int igd_get_stolen_mb(int gen, uint32_t gmch)
>          if (gms < 0xf0)
>              return gms * 32;
>          else
> -            return gms * 4 + 4;
> +            return (gms - 0xf0) * 4 + 4;
>      }
>  }
>  

Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
Re: [PATCH] hw/igd: fix calculation of graphics stolen memory
Posted by Philippe Mathieu-Daudé 2 weeks, 1 day ago
On 8/11/24 12:49, Corvin Köhne wrote:
> From: Corvin Köhne <c.koehne@beckhoff.com>
> 
> When copying the calculation of the stolen memory size for Intels integrated
> graphics device of gen 9 and later from the Linux kernel [1], we missed
> subtracting 0xf0 from the graphics mode select value for values above 0xf0.
> This leads to QEMU reporting a very large size of the graphics stolen memory
> area. That's just a waste of memory. Additionally the guest firmware might be
> unable to allocate such a large buffer.
> 
> [1] https://github.com/torvalds/linux/blob/7c626ce4bae1ac14f60076d00eafe71af30450ba/arch/x86/kernel/early-quirks.c#L455-L460
> 
> Fixes: 8719224166832ff8230d7dd8599f42bd60e2eb96
> Signed-off-by: Corvin Köhne <c.koehne@beckhoff.com>
> ---
>   hw/vfio/igd.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>