Hi, On Fri, Aug 7, 2009 at 8:41 AM, Prasad Joshi<prasadjoshi124@xxxxxxxxx> wrote: > > > On Thu, Aug 6, 2009 at 5:45 PM, Belisko Marek <marek.belisko@xxxxxxxxx> > wrote: >> >> Hi, >> >> On Thu, Aug 6, 2009 at 1:04 PM, Prasad Joshi<prasadjoshi124@xxxxxxxxx> >> wrote: >> > Hi All, >> > >> > I am porting a Windows device driver to Linux. >> > >> > I defined a macro for CONTANING_RECORD like >> > #define CONTAINING_RECORD(ptr, type, member) list_entry((ptr), (type), >> > (member)) >> > >> > When i compiled my module, i got following errors >> > >> > $ make 2>&1 | grep 1132 >> > alloc.c:1132: error: expected expression before ‘)’ token >> > alloc.c:1132: error: expected identifier before ‘(’ token >> > alloc.c:1132: warning: type defaults to ‘int’ in declaration of ‘__mptr’ >> > alloc.c:1132: warning: initialization from incompatible pointer type >> > alloc.c:1132: error: expected expression before ‘)’ token >> > >> > >> > Corresponding code snippet >> > >> > 1130 list_for_each(Entry, &Ptr->ActiveList[target]) { >> > 1131 >> > 1132 node = CONTAINING_RECORD(Entry, IFTL_EU, link); >> Could you please post also what type is IFTL_EU? > > This is how IFTL_EU is declared > > typedef struct _IFTL_EU { > EU_TYPE eu_type; /* Type of EU */ > EU_STATE eu_state; /* State of EU */ > UINT8 eu_live; /* number of live pages */ > UINT8 eu_next_free_page; /*next page to allocate from this > EU*/ > UINT8 eu_written_page; /* last written page in this EU */ > ftl_atomic_t eu_erase_cnt; /* erase count */ > UINT64 eu; /* eu number */ > UINT64 eu_live_bitmask[2]; /* bitmask of live pages */ > LIST_ENTRY link; /* list pointers */ > } IFTL_EU, *PIFTL_EU; > > >> list_entry is just wrapper >> for container_of and I think there could be a problem. I make some small tests and find out that you get error when you use additional brackets in list_entry macro in input args. Just get rid of them and everything will work. Bracket will destroy of container_of definition and that's the reason why compiler complain. You can use bracket only in (prt) argument, all other must be without them. > > Yes, list_entry is just a wrapper around container_of. But i don't see any > difference between the two versions of CONTAINING_RECORD i am using. Can you > please elaborate on problem you see? > >> >> > 1133 >> > 1134 die = DIE_FROM_EU(node->eu); >> > 1135 >> > 1136 if (Ptr->LastDie != die) { >> > 1137 Ptr->LastDie = die; >> > 1138 break; >> > 1139 } >> > 1140 } >> > >> > >> > >> > Then I changed macro with >> > #define CONTAINING_RECORD list_entry >> > $ make 2>&1 | grep 1132 >> > $ >> > >> > And it worked, but I am not getting what was problem with the first >> > macro >> > definition. >> > >> > Thanks and Regards, >> > Prasad >> > >> > >> > >> > >> > >> >> good luck, >> >> Marek >> >> -- >> as simple as primitive as possible >> ------------------------------------------------- >> Marek Belisko - OPEN-NANDRA >> >> Ruska Nova Ves 219 | Presov, 08005 Slovak Republic >> Tel: +421 915 052 184 >> skype: marekwhite >> icq: 290551086 >> web: http://open-nandra.com > > Marek -- as simple as primitive as possible ------------------------------------------------- Marek Belisko - OPEN-NANDRA Ruska Nova Ves 219 | Presov, 08005 Slovak Republic Tel: +421 915 052 184 skype: marekwhite icq: 290551086 web: http://open-nandra.com -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ