some questions about kernel source

John Mahoney jmahoney at waav.com
Fri Feb 18 12:19:18 EST 2011


On Fri, Feb 18, 2011 at 12:16 PM, John Mahoney <jmahoney at waav.com> wrote:
> On Fri, Feb 18, 2011 at 9:28 AM, loody <miloody at gmail.com> wrote:
>> hi :
>>
>>
>> 2011/2/18 John Mahoney <jmahoney at waav.com>:
>>> On Thu, Feb 17, 2011 at 9:17 AM, loody <miloody at gmail.com> wrote:
>>>> hi :-)
>>>>
>>>> 2011/2/16 Mulyadi Santosa <mulyadi.santosa at gmail.com>:
>>>>> Hi :)
>>>>>
>>>>> On Wed, Feb 16, 2011 at 12:59, Rajat Jain <rajatjain at juniper.net> wrote:
>>>>>> Hello loody,
>>>>>>
>>>>>>> 1. in kernel/trace, I always see "__read_mostly" at the end of
>>>>>>> parameter is that a compiler optimization parameter?
>>>>>>
>>>>>> Yes, it is a hint to the compiler that the parameter is mostly read, thus if the compiler has to make a decision between optimizing one of the read / write paths, it will optimize the read path even at the expense of write path.
>>>>>
>>>>>
>>>>> To be precise, they will be grouped into same cache line as much as
>>>>> possible. By doing so, those cache line won't be invalidated so often
>>>>> (keeping them "hot" :) hehehhe )
>>>>
>>>> I cannot find it on the gcc manual.
>>>> is it a option in kernel for kernel usage?
>>>> if so, where I can found them.
>>>> If not, can I use it on normal user level program?
>>>>
>>>
>>> It is a macro defined for x86 as:
>>>
>>> #define __read_mostly __attribute__((__section__(".data..read_mostly")))
>>>
>>> http://lxr.linux.no/linux+v2.6.37/arch/x86/include/asm/cache.h
>> I found where you pointed out but I try to find out where is it in the
>> mips arch.
>
> It looks pretty new for mips and you may have older code.
>
> $ git log -p cache.h
> commit 1befdd5536e1500371f7f884d0f0ae528a519333
> Author: David Daney <ddaney at caviumnetworks.com>
> Date:   Thu Oct 14 12:36:49 2010 -0700
>
>    MIPS: Implement __read_mostly
> commit 1befdd5536e1500371f7f884d0f0ae528a519333
> Author: David Daney <ddaney at caviumnetworks.com>
> Date:   Thu Oct 14 12:36:49 2010 -0700
>
>    MIPS: Implement __read_mostly
>
>    Just do what everyone else is doing by placing __read_mostly things in
>    the .data.read_mostly section.
>
>    mips_io_port_base can not be read-only (const) and writable
>    (__read_mostly) at the same time.  One of them has to go, so I chose
>    to eliminate the __read_mostly.  It will still get stuck in a portion
>    of memory that is not adjacent to things that are written, and thus
>    not be on a dirty cache line, for whatever that is worth.
>
>    Signed-off-by: David Daney <ddaney at caviumnetworks.com>
>    To: linux-mips at linux-mips.org
>    Patchwork: http://patchwork.linux-mips.org/patch/1702/
>    Signed-off-by: Ralf Baechle <ralf at linux-mips.org>

I left off some the end see below.


diff --git a/arch/mips/include/asm/cache.h b/arch/mips/include/asm/cache.h
index 37f175c..650ac9b 100644
--- a/arch/mips/include/asm/cache.h
+++ b/arch/mips/include/asm/cache.h
@@ -17,4 +17,6 @@
 #define SMP_CACHE_SHIFT                L1_CACHE_SHIFT
 #define SMP_CACHE_BYTES                L1_CACHE_BYTES

+#define __read_mostly __attribute__((__section__(".data.read_mostly")))
+
 #endif /* _ASM_CACHE_H */



More information about the Kernelnewbies mailing list