Subject: Re: [PATCH 1/1] powerpc: fix missing L2 cache size in /sys/devices/system/cpu

From: Dave Olson <[email-masked]>
Date: Tue, 10 Feb 2015 00:00:02 -0800

Benjamin Herrenschmidt <[email-masked]> wrote:
> On Mon, 2015-02-09 at 15:43 -0800, Dave Olson wrote:
> > Michael Ellerman <[email-masked]> wrote:
> > 
> > > On Mon, 2015-02-09 at 14:14 -0800, Dave Olson wrote:
> > > > From: Dave Olson <[email-masked]>
> > > > 
> > > > Fix missing L2 cache size in /sys/devices/system/cpu/cpu0/cache/index2/size
> > > > This bug appears to be introduced in 2.6.29 by 93197a36a9c16a85fb24cf5a8639f7bf9af838a3.
> > > > The missing entry caused lscpu to error out on e500v2 devices, and probably others
> > > >  error: cannot open /sys/devices/system/cpu/cpu0/cache/index2/size: No such file or directory
> > > > The DTS files we see use cache-size for the unified L2 cache size, not d-cache-size
> > > 
> > > Can you convince me that this is not going to break other machines that have
> > > "d-cache-size" but not "cache-size"?
> > 
> > I'm unable to find any dts file that uses d-cache-size for the L2
> > unified cache.  All in the powerpc tree in arch/powerpc/boot/dts/*
> > are using cache-size in the L2 description for the cache size.
> > 
> > As best as I can tell from looking around, this is universal.
> 
> It may be universal for embedded machines using DTS in the kernel tree
> but it's definitely not true of any Mac or server machine (from which
> there is no DTS in the kernel as we get the DT from the firmware).

OK, now that I understand that's the case, I'll have to go back and
re-do the patch to handle both cache-size and d-cache-size for the
L2 cache (using whichever is present).

I don't have any power Macs to use for testing, would one of you be
willing and able to verify the patch on a power Mac?

The patch below fixes my problem, and I don't think it will break
platforms like the PowerPC Mac that use d-cache-size
=====
diff --git a/arch/powerpc/kernel/cacheinfo.c b/arch/powerpc/kernel/cacheinfo.c
index a3c684b..0d1f879 100644
--- a/arch/powerpc/kernel/cacheinfo.c
+++ b/arch/powerpc/kernel/cacheinfo.c
@@ -200,6 +200,10 @@ static int cache_size(const struct cache *cache, unsigned int *ret)
 	propname = cache_type_info[cache->type].size_prop;
 
 	cache_size = of_get_property(cache->ofnode, propname, NULL);
+	if (!cache_size && cache->type == CACHE_TYPE_UNIFIED) {
+        /* most embedded systems with L2 use "cache-size", allow that also */
+        cache_size = of_get_property(cache->ofnode, "cache-size", NULL);
+    }
 	if (!cache_size)
 		return -ENODEV;
 
=====

Thanks,

Dave Olson
[email-masked]