Date: Thu, 30 Jul 2009 17:51:51 -0700 (PDT) From: Neelkanth Natu <neelnatu@yahoo.com> To: freebsd-mips@freebsd.org Subject: Diffs to fix L1 cache flush problems Message-ID: <153254.15259.qm@web34402.mail.mud.yahoo.com>
next in thread | raw e-mail | index | archive | help
Hi, This is a simple change that fixes problems invalidating L1 data/instruction caches. The problem is that the type of the variable that holds the size of the instruction/data caches is uint8_t. Clearly this is going to overflow. On the Sibyte with 32KB cache size the uint8_t was causing it to be truncated to 0. This in turn makes the cache flush routines turn into no-ops. I ran into this when testing kernel loadable modules and have verified that this change fixes the problem. best Neel ==== //depot/user/neelnatu/freebsd_sibyte/src/sys/mips/include/cpuinfo.h#2 (text) - //depot/user/neelnatu/freebsd_sibyte/src/sys/mips/include/cpuinfo.h#3 (text) ==== content @@ -57,11 +57,11 @@ u_int16_t tlb_nentries; u_int8_t icache_virtual; struct { - u_int8_t ic_size; + unsigned int ic_size; u_int8_t ic_linesize; u_int8_t ic_nways; u_int16_t ic_nsets; - u_int8_t dc_size; + unsigned int dc_size; u_int8_t dc_linesize; u_int8_t dc_nways; u_int16_t dc_nsets;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?153254.15259.qm>