2018-12-06 07:30:46

by Wen Pu

[permalink] [raw]
Subject: [RFC PATCH RESEND] x86/cpu: Avoid endless loop to get the number of cache leaves

To get the number of cache leaves on AMD or Hygon platform, it should
get the value of cpuid leaf 0x8000001d. But on certain broken platform
such as a not fullly implemented virtual platform(for example Xen),
the value of the cpuid leaf will nerver be CTYPE_NULL, so the kernel
will run into an endless loop.

To fix this problem, add a new enum type CTYPE_MAX to limit the maximum
cpuid accessing.

Signed-off-by: Pu Wen <[email protected]>
---
arch/x86/kernel/cpu/cacheinfo.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/cpu/cacheinfo.c b/arch/x86/kernel/cpu/cacheinfo.c
index dc1b934..7bd167f 100644
--- a/arch/x86/kernel/cpu/cacheinfo.c
+++ b/arch/x86/kernel/cpu/cacheinfo.c
@@ -121,7 +121,8 @@ enum _cache_type {
CTYPE_NULL = 0,
CTYPE_DATA = 1,
CTYPE_INST = 2,
- CTYPE_UNIFIED = 3
+ CTYPE_UNIFIED = 3,
+ CTYPE_MAX = 4
};

union _cpuid4_leaf_eax {
@@ -640,7 +641,7 @@ static int find_num_cache_leaves(struct cpuinfo_x86 *c)
/* Do cpuid(op) loop to find out num_cache_leaves */
cpuid_count(op, i, &eax, &ebx, &ecx, &edx);
cache_eax.full = eax;
- } while (cache_eax.split.type != CTYPE_NULL);
+ } while (cache_eax.split.type != CTYPE_NULL && i != CTYPE_MAX);
return i;
}

--
2.7.4



2018-12-06 10:39:11

by Borislav Petkov

[permalink] [raw]
Subject: Re: [RFC PATCH RESEND] x86/cpu: Avoid endless loop to get the number of cache leaves

On Thu, Dec 06, 2018 at 03:26:13PM +0800, Pu Wen wrote:
> To get the number of cache leaves on AMD or Hygon platform, it should
> get the value of cpuid leaf 0x8000001d. But on certain broken platform
> such as a not fullly implemented virtual platform(for example Xen),
> the value of the cpuid leaf will nerver be CTYPE_NULL, so the kernel
> will run into an endless loop.
>
> To fix this problem, add a new enum type CTYPE_MAX to limit the maximum
> cpuid accessing.
>
> Signed-off-by: Pu Wen <[email protected]>
> ---
> arch/x86/kernel/cpu/cacheinfo.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)

Did you not see my reply to this last time?

https://lkml.kernel.org/r/[email protected]

--
Regards/Gruss,
Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.

2018-12-08 03:54:34

by Wen Pu

[permalink] [raw]
Subject: Re: [RFC PATCH RESEND] x86/cpu: Avoid endless loop to get the number of cache leaves

On 2018/12/6 18:37, Borislav Petkov wrote:
> Did you not see my reply to this last time?
>
> https://lkml.kernel.org/r/[email protected]

I'm sorry that there is something wrong with my mail filter. So I was
not notified about your reply for many days. :)

I just found your reply and replied to it.

Thx.

--
Regards,
Pu Wen

2018-12-08 03:58:13

by Wen Pu

[permalink] [raw]
Subject: Re: [RFC PATCH RESEND] x86/cpu: Avoid endless loop to get the number of cache leaves

On 2018/12/6 18:37, Borislav Petkov wrote:
> Did you not see my reply to this last time?
>
> https://lkml.kernel.org/r/[email protected]

I'm sorry that there is something wrong with my mail filter. So I was
not notified about your reply for many days. :)

I just found your reply and replied to it.

Thx.

--
Regards,
Pu Wen