On 5/30/2016 10:41 AM, Jerin Jacob wrote: --snip-- >> Of course, that won't help if we need to pass in more data, in which case >> we'd probably need an >> opaque data pointer somewhere. It would probably be most useful to pass it >> in with the >> alloc, which may need the data. Any suggestions? > But the top level rte_mempool_create() function needs to pass the data. Right? > That would be an ABI change. IMO, we need to start thinking about > passing a struct of config data to rte_mempool_create to create > backward compatibility on new argument addition to rte_mempool_create()
New mempool handlers will use rte_mempool_create_empty(), rte_mempool_set_handler(), then rte_mempool_populate_*(). These three functions are new to this release, to no problem to add a parameter to one of them for the config data. Also since we're adding some new elements to the mempool structure, how about we add a new pointer for a void pointer to a config data structure, as defined by the handler. So, new element in rte_mempool struct alongside the *pool void *pool; void *pool_config; Then add a param to the rte_mempool_set_handler function: int rte_mempool_set_handler(struct rte_mempool *mp, const char *name, void *pool_config) The function would simply set the pointer in the mempool struct, and the custom handler alloc/create function would use as apporopriate as needed. Handlers that do not need this data can be passed NULL. > Other points in HW assisted pool manager perspective, > > 1) May be RING can be replaced with some other higher abstraction name > for the internal MEMPOOL_F_RING_CREATED flag Agreed. I'll change to MEMPOOL_F_POOL_CREATED, since we're already changing the *ring element of the mempool struct to *pool > 2) IMO, It is better to change void *pool in struct rte_mempool to > anonymous union type, something like below, so that mempool > implementation can choose the best type. > union { > void *pool; > uint64_t val; > } Could we do this by using the union for the *pool_config suggested above, would that give you what you need? > 3) int32_t handler_idx creates 4 byte hole in struct rte_mempool in > 64 bit system. IMO it better to rearrange.(as const struct rte_memzone > *mz comes next) OK, Will look at this. > 4) IMO, It is better to change ext_alloc/ext_free to ext_create/ext_destroy > as their is no allocation in HW assisted pool manager case, > it will be mostly creating some HW initialization. OK, I'll change. I think that makes more sense. Regards, Dave.