DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] Non-argv dependant rte_eal_init() call
@ 2013-08-01 15:37 Marc Sune
  2013-08-01 16:01 ` Thomas Monjalon
  2013-08-01 17:06 ` Stephen Hemminger
  0 siblings, 2 replies; 9+ messages in thread
From: Marc Sune @ 2013-08-01 15:37 UTC (permalink / raw)
  To: dev

Dear all,

Sorry in advance if there is another API for this and I haven't found 
it, or if there is a strong reason for having it this way. I've seen 
that in the case of both baremetal and Linux applications, the way to 
initialize EAL is passing argv:

<code>
//...
     /* init EAL */
     ret = rte_eal_init(argc, argv);
     if (ret < 0)
         rte_exit(EXIT_FAILURE, "Invalid EAL arguments\n");
     argc -= ret;
     argv += ret;
//...
</code>

However, this is a little bit annoying in the case of GNU/Linux 
user-space applications, hence using DPDK as a library, when porting 
them to DPDK (specially in case of multi-platform applications, like in 
our case), since they are not necessarily designed to be changing the 
main routines in a per platform basis. In our case they are even in 
separate autotools package, since the library providing DPDK based 
services needs to be distributed also in binary version, linking to 
non-DPDK aware code.

In our case, we are right now simply faking the argv, which is a little 
bit ugly:
<code>
//...
  37         const char* argv[EAL_ARGS] = {"./fake", "-c",CORE_MASK, 
"-n",NUM_CACHE_LINES, ""};
//...
  53         ret = rte_eal_init(EAL_ARGS, (char**)argv);
  54         if (ret < 0)
  55                 rte_exit(EXIT_FAILURE, "rte_eal_init failed");
//...
</code>

IMHO it would make more sense to have actually two calls, adding a 
library-like initialization. Something like:

<code>
/*
* In the comments a warning that this should be called at the very 
beginning of the program.
*...
*/
int rte_eal_init(eal_coremask_t core_mask, unsigned int num_of_lines 
/*More parameters here...*/);

/*
*
*/
int rte_eal_init_argv(int argc, char **argv);

</code>

Btw, the same applies to the mangling of the main() (MAIN) routine. Is 
this really necessary? Isn't it enough to clearly state in the 
documentation that certain API calls need to be made on the very 
beginning of the application?

Best
Marc

---
BISDN GmbH
Marc Suñé Clos
Christburger Straße 45, 10405 Berlin, Germany

Berlin Institute for Software Defined Networks - BISDN GmbH
Managing Directors: Dr.-Ing. Hagen Woesner, Andreas Köpsel

Commercial register: Amtsgericht Berlin-Charlottenburg HRB 141569 B
VAT ID No: DE283257294
Corporate seat: Berlin

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2013-08-01 20:22 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-01 15:37 [dpdk-dev] Non-argv dependant rte_eal_init() call Marc Sune
2013-08-01 16:01 ` Thomas Monjalon
2013-08-01 16:13   ` Marc Sune
2013-08-01 16:47     ` Antti Kantee
2013-08-01 18:14       ` Marc Sune
2013-08-01 17:06 ` Stephen Hemminger
2013-08-01 18:17   ` Marc Sune
2013-08-01 19:23     ` Stephen Hemminger
2013-08-01 20:22       ` Balazs Nemeth

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).