tglx@xxxxxxxxxxxxx,mingo@xxxxxxxxxx,bp@xxxxxxxxx,linux@xxxxxxxxxxxxxxxx,masami.hiramatsu.pt@xxxxxxxxxxx,jbaron@xxxxxxxxxx,heiko.carstens@xxxxxxxxxx,ananth@xxxxxxxxxxxxxxxxxx,anil.s.keshavamurthy@xxxxxxxxx,davem@xxxxxxxxxxxxx,realmz6@xxxxxxxxx,x86@xxxxxxxxxx,luto@xxxxxxxxxxxxxx,keescook@xxxxxxxxxxxx,torvalds@xxxxxxxxxxxxxxxxxxxx,gregkh@xxxxxxxxxxxxxxxxxxx,rusty@xxxxxxxxxxxxxxx,gnomes@xxxxxxxxxxxxxxxxxxx,alan@xxxxxxxxxxxxxxx,dwmw2@xxxxxxxxxxxxx,arnd@xxxxxxxx,ming.lei@xxxxxxxxxxxxx,linux-arch@xxxxxxxxxxxxxxx,benh@xxxxxxxxxxxxxxxxxxx,ananth@xxxxxxxxxx,pebolle@xxxxxxxxxx,fontana@xxxxxxxxxxxxxxx,ciaran.farrell@xxxxxxxx,christopher.denicolo@xxxxxxxx,david.vrabel@xxxxxxxxxx,konrad.wilk@xxxxxxxxxx,mcb30@xxxxxxxx,jgross@xxxxxxxx,andrew.cooper3@xxxxxxxxxx,andriy.shevchenko@xxxxxxxxxxxxxxx,paul.gortmaker@xxxxxxxxxxxxx,xen-devel@xxxxxxxxxxxxxxxxxxx,ak@xxxxxxxxxxxxxxx,pali.rohar@xxxxxxxxx,dvhart@xxxxxxxxxxxxx,platform-driver-x86@xxxxxxxxxxxxxxx,mmarek@xxxxxxxx,linux@xxxxxxxxxxxxxxxxxx,jko! sina@suse .cz,korea.drzix@xxxxxxxxx,linux-kbuild@xxxxxxxxxxxxxxx,tony.luck@xxxxxxxxx,akpm@xxxxxxxxxxxxxxxxxxxx,linux-ia64@xxxxxxxxxxxxxxx,linux-arm-kernel@xxxxxxxxxxxxxxxxxxx,linux-sh@xxxxxxxxxxxxxxx,sparclinux@xxxxxxxxxxxxxxx,catalin.marinas@xxxxxxx,will.deacon@xxxxxxx,rostedt@xxxxxxxxxxx,jpoimboe@xxxxxxxxxx Message-ID: <01FD20B1-E788-4CC6-81CF-BA26F000FFCB@xxxxxxxxx> On July 27, 2016 4:02:18 PM PDT, "Luis R. Rodriguez" <mcgrof@xxxxxxxxxx> wrote: >On Tue, Jul 26, 2016 at 12:30:14AM +0900, Masami Hiramatsu wrote: >> On Fri, 22 Jul 2016 14:24:41 -0700 >> "Luis R. Rodriguez" <mcgrof@xxxxxxxxxx> wrote: >> >> > +/** >> > + * LINKTABLE_RUN_ALL - iterate and run through all entries on a >linker table >> > + * >> > + * @tbl: linker table >> > + * @func: structure name for the function name we want to call. >> > + * @args...: arguments to pass to func >> > + * >> > + * Example usage: >> > + * >> > + * LINKTABLE_RUN_ALL(frobnicator_fns, some_run,); >> > + */ >> > +#define LINKTABLE_RUN_ALL(tbl, func, args...) \ >> > +do { \ >> > + size_t i; \ >> > + for (i = 0; i < LINUX_SECTION_SIZE(tbl); i++) \ >> > + (tbl[i]).func (args); \ >> > +} while (0); >> > + >> > +/** >> > + * LINKTABLE_RUN_ERR - run each linker table entry func and return >error if any >> > + * >> > + * @tbl: linker table >> > + * @func: structure name for the function name we want to call. >> > + * @args...: arguments to pass to func >> > + * >> > + * Example usage: >> > + * >> > + * unsigned int err = LINKTABLE_RUN_ERR(frobnicator_fns, >some_run,); >> > + */ >> > +#define LINKTABLE_RUN_ERR(tbl, func, args...) \ >> > +({ \ >> > + size_t i; \ >> > + int err = 0; \ >> > + for (i = 0; !err && i < LINUX_SECTION_SIZE(tbl); i++) \ >> > + err = (tbl[i]).func (args); \ >> > + err; \ >> > +}) >> >> These iteration APIs are a bit dangerous, at least for these APIs >we'd better change >> name like as FUNCTABLE_RUN etc. because LINKTABLE can contain not >only function address >> but also some data (or address of data). > >Sure will do, thanks for the review. > > Luis I don't know if they are dangerous. Keep in mind C type checking is still present. -- Sent from my Android device with K-9 Mail. Please excuse brevity and formatting. -- To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html