2015-06-23 14:30, Dumitrescu, Cristian:
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Thomas Monjalon
> > 2015-06-19 11:41, Maciej Gajdzica:
> > >  /** Input port interface defining the input port operation */
> > >  struct rte_port_in_ops {
> > >   rte_port_in_op_create f_create; /**< Create */
> > >   rte_port_in_op_free f_free;     /**< Free */
> > >   rte_port_in_op_rx f_rx;         /**< Packet RX (packet burst) */
> > > + rte_port_in_op_stats_read f_stats;      /**< Stats */
> > >  };
> > 
> > Isn't it breaking an ABI?
> 
> This is simply adding a field at the end of the API structure. This structure 
> is instantiated per each port type  and its role is very similar to a driver 
> ops structure, for example:
> 
>       in file "rte_port_ethdev.h": extern struct rte_port_out_ops 
> rte_port_ethdev_writer_ops;
>       in file "rte_port_ring.h": extern struct rte_port_out_ops 
> rte_port_ring_writer_nodrop_ops;
> 
> Typically, instances of these structures are only referenced through pointers 
> by application code (and other libraries, like librte_pipeline), so code that 
> is not aware of this last field in the structure will still continue to work.
> 
> The only case I see possible when code will break is if somebody would create 
> an array of such structures, but I think this is not a realistic scenario. 
> Instances of this structure are infrequent: once per port type in 
> librte_port, and new instances are only created when the user wants to create 
> new port type. Basically, instances of this structure are created in 
> isolation and not in bulk (arrays).
Why wouldn't it be a problem even for single instance?
If the application allocates one with old sizeof and the lib is trying to write
in the new field, there can be a problem, no?

Maybe Neil has an opinion?

> Due to this, I do not see this as breaking the API. I think this is the most 
> it could be done to minimize the effect on the ABI will still adding new 
> functionality. Please let me know what you think.
> 
> > 
> > >  struct rte_port_out_ops {
> > > - rte_port_out_op_create f_create;   /**< Create */
> > > - rte_port_out_op_free f_free;       /**< Free */
> > > - rte_port_out_op_tx f_tx;           /**< Packet TX (single packet) */
> > > - rte_port_out_op_tx_bulk f_tx_bulk; /**< Packet TX (packet burst)
> > */
> > > - rte_port_out_op_flush f_flush;     /**< Flush */
> > > + rte_port_out_op_create f_create;                /**< Create */
> > > + rte_port_out_op_free f_free;                    /**< Free */
> > > + rte_port_out_op_tx f_tx;                                /**< Packet
> > TX (single packet) */
> > > + rte_port_out_op_tx_bulk f_tx_bulk;              /**< Packet TX
> > (packet burst) */
> > > + rte_port_out_op_flush f_flush;                  /**< Flush */
> > 
> > What is the goal of this change? Breaking the alignment?
> 
> Shall we submit a new patch revision to fix the alignment of the comments?

Yes using spaces for alignment would be better.

Reply via email to