On Fri, Mar 13, 2009 at 3:20 PM, Pei Lin <[email protected]> wrote:
> grep -r sched_fair.c sched.c;
> see "kernel/sched.c",you will find that how sched_fair.c is used.
I did the opposite, looking for inclusion of sched.c in sched_fair.c  :-)

>
> #include "sched_stats.h"
> #include "sched_idletask.c"
> #include "sched_fair.c"
> #include "sched_rt.c"
> #ifdef CONFIG_SCHED_DEBUG
> # include "sched_debug.c"
>
> That 's clearly.....
> I don't think it is good programming manner. But it 's really in many
> places of kernel. ^-^

Quite surprising ....

Thanks ...


>
>
> 2009/3/13 Sukanto Ghosh <[email protected]>:
>> I understand forward declaration ... But have a look at
>> kernel/sched_fair.c ... struct cfs_rq has been used a number of places
>> in it, but they don't even have a forward declaration of the
>> structure. The only header file that gets included is
>> linux/latencytop.h ... which doesn't includes any header that has a
>> forward declaration of struct cfs_rq.  so, how does the compiler gives
>> no errors ?
>>
>> If I just assume that i am missing a place from where the structure
>> gets the forward declaration (forward declaration is in linux\sched.h
>> header) ...  how are the fields of this structure being accessed
>> inside kernel/sched_fair.c ?
>>
>> Now, if I assume that somehow the compiler gets the complete
>> declaration of "struct cfs_rq" inside kernel/sched_fair.c ... then why
>> does the compiler complains when I try to write a kprobe module for
>> the a function "__enqueue_entity" of kernel/sched_fair.c which
>> accesses the fields of this structure.
>>
>> I can understand why the compiler is complaining but why doesn't it do
>> so for the kernel/sched_fair.c case ...
>>
>> What am I missing ?
>>
>>
>> On Thu, Mar 12, 2009 at 10:09 PM, Durga Prasad <[email protected]> wrote:
>>> Look for 'forward declaration' of variables in C.
>>> You are telling the compiler that "I am declaring such a structure.
>>> Understand it when you encounter it" .
>>> - Durga
>>>
>>> ________________________________
>>> From: Sukanto Ghosh <[email protected]>
>>> To: Nelson Castillo <[email protected]>; Pei Lin <[email protected]>
>>> Cc: kernelnewbies <[email protected]>
>>> Sent: Thursday, March 12, 2009 3:06:46 PM
>>> Subject: Re: structure definition in a .c file rather than .h file
>>>
>>> On Thu, Mar 12, 2009 at 11:58 AM, Nelson Castillo <[email protected]>
>>> wrote:
>>>> On Thu, Mar 12, 2009 at 2:06 PM, Sukanto Ghosh
>>>> <[email protected]> wrote:
>>>>> Hi,
>>>>>
>>>>> The complete definition of structure cfs_rq is in a .c file
>>>>> (kernel/sched.c). In the head linux/sched.h it has been declared as
>>>>> "struct cfs_rq;"
>>>>> What is the purpose of doing so ?
>>>>
>>>> With this declaration in linux/sched.h you can make pointers of the
>>>> structure anywhere. All pointers have the same size thus it just
>>>> doesn't matter if you don't know the details of the structure.
>>>>
>>>> The idea of not exposing the structure is just encapsulation. It means
>>>> you shouldn't be touching those fields outside kernel/sched.c unless
>>>> you use one of the provided API functions to do so (if any).
>>>>
>>>
>>> exactly, and yet the fields have been used in kernel/sched_fair.c
>>> .... this is what confuses me
>>>
>>>
>>> --
>>> Regards,
>>> Sukanto Ghosh
>>>
>>> --
>>> To unsubscribe from this list: send an email with
>>> "unsubscribe kernelnewbies" to [email protected]
>>> Please read the FAQ at http://kernelnewbies.org/FAQ
>>>
>>>
>>>
>>
>>
>>
>> --
>> Regards,
>> Sukanto Ghosh
>>
>



-- 
Regards,
Sukanto Ghosh

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [email protected]
Please read the FAQ at http://kernelnewbies.org/FAQ

Reply via email to