On Fri, Mar 13, 2009 at 3:20 PM, Pei Lin <telent997@xxxxxxxxx> 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 <sukanto.cse.iitb@xxxxxxxxx>: >> 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 <writexdp@xxxxxxxxx> 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 <sukanto.cse.iitb@xxxxxxxxx> >>> To: Nelson Castillo <nelsoneci@xxxxxxxxx>; Pei Lin <telent997@xxxxxxxxx> >>> Cc: kernelnewbies <kernelnewbies@xxxxxxxxxxxx> >>> 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 <nelsoneci@xxxxxxxxx> >>> wrote: >>>> On Thu, Mar 12, 2009 at 2:06 PM, Sukanto Ghosh >>>> <sukanto.cse.iitb@xxxxxxxxx> 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 ecartis@xxxxxxxxxxxx >>> 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 ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ