[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] i386: flush cache only on VIA C3 and earlier
From: |
ValdikSS |
Subject: |
[PATCH] i386: flush cache only on VIA C3 and earlier |
Date: |
Fri, 7 Jul 2023 00:25:36 +0300 |
The code used to flush the cache on VIA processors unconditionally,
which is excessive.
Check for cpuid family and execute wbinvd only on C7 and earlier.
See: https://savannah.gnu.org/bugs/?45149
See: commit 25492a0f047cb7a6583ae195568599c296a604d6
---
grub-core/kern/i386/pc/init.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/grub-core/kern/i386/pc/init.c b/grub-core/kern/i386/pc/init.c
index 27bc68b8a..7f08d2067 100644
--- a/grub-core/kern/i386/pc/init.c
+++ b/grub-core/kern/i386/pc/init.c
@@ -191,7 +191,7 @@ extern grub_uint16_t grub_bios_via_workaround1,
grub_bios_via_workaround2;
static void
grub_via_workaround_init (void)
{
- grub_uint32_t manufacturer[3], max_cpuid;
+ grub_uint32_t manufacturer[3], max_cpuid, procinfo;
if (! grub_cpu_is_cpuid_supported ())
return;
@@ -200,6 +200,15 @@ grub_via_workaround_init (void)
if (grub_memcmp (manufacturer, "CentaurHauls", 12) != 0)
return;
+ if (max_cpuid > 0)
+ {
+ grub_cpuid (1, procinfo, /* Don't care */ manufacturer[0],
+ manufacturer[2], manufacturer[1]);
+ /* Check model, apply only to VIA C3 and lower */
+ if (((procinfo & 0xF0) >> 4 | (procinfo & 0xF0000) >> 12) > 10)
+ return;
+ }
+
grub_bios_via_workaround1 = 0x090f;
grub_bios_via_workaround2 = 0x090f;
asm volatile ("wbinvd");
--
2.41.0
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] i386: flush cache only on VIA C3 and earlier,
ValdikSS <=