On Thu, 2 Mar 2017 00:33:42 -0500 Pavel Tatashin <pasha.tatashin@xxxxxxxxxx> wrote: > Early in boot Linux patches memset and memcpy to branch to platform > optimized versions of these routines. The NG4 (Niagra 4) versions are > currently used on all platforms starting from T4. Recently, there were M7 > optimized routines added into UEK4 but not into mainline yet. So, even with > M7 optimized routines NG4 are still going to be used on T4, T5, M5, and M6 > processors. > > While investigating how to improve initialization time of dentry_hashtable > which is 8G long on M6 ldom with 7T of main memory, I noticed that memset() > does not reset all the memory in this array, after studying the code, I > realized that NG4memset() branches use %icc register instead of %xcc to > check compare, so if value of length is over 32-bit long, which is true for > 8G array, these routines fail to work properly. > > The fix is to replace all %icc with %xcc in these routines. (Alternative is > to use %ncc, but this is misleading, as the code already has sparcv9 only > instructions, and cannot be compiled on 32-bit). > > This is important to fix this bug, because even older T4-4 can have 2T of > memory, and there are large memory proportional data structures in kernel > which can be larger than 4G in size. The failing of memset() is silent and > corruption is hard to detect. > > Signed-off-by: Pavel Tatashin <pasha.tatashin@xxxxxxxxxx> > Reviewed-by: Babu Moger <babu.moger@xxxxxxxxxx> It sounds like this fix should be backported into -stable kernels? If so, which version(s)? Also, what are the user-visible runtime effects of this change?