Message ID | 20240502045410.3524155-2-dw@davidwei.uk (mailing list archive) |
---|---|
State | RFC |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | bnxt: implement queue api | expand |
On Wed, May 01, 2024 at 09:54:02PM -0700, David Wei wrote: > From: Mina Almasry <almasrymina@google.com> > > This API enables the net stack to reset the queues used for devmem TCP. > > Signed-off-by: Mina Almasry <almasrymina@google.com> > Signed-off-by: David Wei <dw@davidwei.uk> ... > diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h > index 1ec408585373..58042957c39f 100644 > --- a/include/net/netdev_queues.h > +++ b/include/net/netdev_queues.h > @@ -60,6 +60,33 @@ struct netdev_stat_ops { > struct netdev_queue_stats_tx *tx); > }; > > +/** > + * struct netdev_queue_mgmt_ops - netdev ops for queue management > + * > + * @ndo_queue_mem_alloc: Allocate memory for an RX queue. The memory returned > + * in the form of a void* can be passed to > + * ndo_queue_mem_free() for freeing or to ndo_queue_start > + * to create an RX queue with this memory. > + * > + * @ndo_queue_mem_free: Free memory from an RX queue. > + * > + * @ndo_queue_start: Start an RX queue at the specified index. > + * > + * @ndo_queue_stop: Stop the RX queue at the specified index. > + */ > +struct netdev_queue_mgmt_ops { > + void * (*ndo_queue_mem_alloc)(struct net_device *dev, > + int idx); > + void (*ndo_queue_mem_free)(struct net_device *dev, > + void *queue_mem); > + int (*ndo_queue_start)(struct net_device *dev, > + int idx, > + void *queue_mem); > + int (*ndo_queue_stop)(struct net_device *dev, > + int idx, > + void **out_queue_mem); Nit: The indentation (before the return types) should use tabs rather than spaces. And I'm not sure I see the value of the large indentation after the return types. Basically, I suggest this: void * (*ndo_queue_mem_alloc)(struct net_device *dev, int idx); void (*ndo_queue_mem_free)(struct net_device *dev, void *queue_mem); int (*ndo_queue_start)(struct net_device *dev, int idx, void *queue_mem); int (*ndo_queue_stop)(struct net_device *dev, int idx, void **out_queue_mem); > +}; > + > /** > * DOC: Lockless queue stopping / waking helpers. > * > -- > 2.43.0 > >
On 2024-05-04 05:11, Simon Horman wrote: > On Wed, May 01, 2024 at 09:54:02PM -0700, David Wei wrote: >> From: Mina Almasry <almasrymina@google.com> ... >> +struct netdev_queue_mgmt_ops { >> + void * (*ndo_queue_mem_alloc)(struct net_device *dev, >> + int idx); >> + void (*ndo_queue_mem_free)(struct net_device *dev, >> + void *queue_mem); >> + int (*ndo_queue_start)(struct net_device *dev, >> + int idx, >> + void *queue_mem); >> + int (*ndo_queue_stop)(struct net_device *dev, >> + int idx, >> + void **out_queue_mem); > > Nit: The indentation (before the return types) should use tabs rather than > spaces. And I'm not sure I see the value of the large indentation after > the return types. Basically, I suggest this: > > void * (*ndo_queue_mem_alloc)(struct net_device *dev, int idx); > void (*ndo_queue_mem_free)(struct net_device *dev, void *queue_mem); > int (*ndo_queue_start)(struct net_device *dev, int idx, > void *queue_mem); > int (*ndo_queue_stop)(struct net_device *dev, int idx, > void **out_queue_mem); > Hi Simon, this patch came from Shailend and Mina which I applied to this patchset. We'll make sure it's formatted properly once we send a non-RFC. Thanks. >> +}; >> + >> /** >> * DOC: Lockless queue stopping / waking helpers. >> * >> -- >> 2.43.0 >> >>
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index f849e7d110ed..6a58ec73c5e8 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1957,6 +1957,7 @@ enum netdev_reg_state { * @sysfs_rx_queue_group: Space for optional per-rx queue attributes * @rtnl_link_ops: Rtnl_link_ops * @stat_ops: Optional ops for queue-aware statistics + * @queue_mgmt_ops: Optional ops for queue management * * @gso_max_size: Maximum size of generic segmentation offload * @tso_max_size: Device (as in HW) limit on the max TSO request size @@ -2340,6 +2341,8 @@ struct net_device { const struct netdev_stat_ops *stat_ops; + const struct netdev_queue_mgmt_ops *queue_mgmt_ops; + /* for setting kernel sock attribute on TCP connection setup */ #define GSO_MAX_SEGS 65535u #define GSO_LEGACY_MAX_SIZE 65536u diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h index 1ec408585373..58042957c39f 100644 --- a/include/net/netdev_queues.h +++ b/include/net/netdev_queues.h @@ -60,6 +60,33 @@ struct netdev_stat_ops { struct netdev_queue_stats_tx *tx); }; +/** + * struct netdev_queue_mgmt_ops - netdev ops for queue management + * + * @ndo_queue_mem_alloc: Allocate memory for an RX queue. The memory returned + * in the form of a void* can be passed to + * ndo_queue_mem_free() for freeing or to ndo_queue_start + * to create an RX queue with this memory. + * + * @ndo_queue_mem_free: Free memory from an RX queue. + * + * @ndo_queue_start: Start an RX queue at the specified index. + * + * @ndo_queue_stop: Stop the RX queue at the specified index. + */ +struct netdev_queue_mgmt_ops { + void * (*ndo_queue_mem_alloc)(struct net_device *dev, + int idx); + void (*ndo_queue_mem_free)(struct net_device *dev, + void *queue_mem); + int (*ndo_queue_start)(struct net_device *dev, + int idx, + void *queue_mem); + int (*ndo_queue_stop)(struct net_device *dev, + int idx, + void **out_queue_mem); +}; + /** * DOC: Lockless queue stopping / waking helpers. *