diff mbox series

[RFC,net-next,v2,1/9] queue_api: define queue api

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

Checks

Context Check Description
netdev/series_format success Posting correctly formatted
netdev/tree_selection success Clearly marked for net-next, async
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 4855 this patch: 4855
netdev/build_tools success Errors and warnings before: 0 this patch: 0
netdev/cc_maintainers success CCed 4 of 4 maintainers
netdev/build_clang success Errors and warnings before: 1041 this patch: 1041
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 5132 this patch: 5132
netdev/checkpatch fail ERROR: code indent should use tabs where possible WARNING: please, no spaces at the start of a line
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 22 this patch: 22
netdev/source_inline success Was 0 now: 0

Commit Message

David Wei May 2, 2024, 4:54 a.m. UTC
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>
---
 include/linux/netdevice.h   |  3 +++
 include/net/netdev_queues.h | 27 +++++++++++++++++++++++++++
 2 files changed, 30 insertions(+)

Comments

Simon Horman May 4, 2024, 12:11 p.m. UTC | #1
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
> 
>
David Wei May 6, 2024, 12:34 a.m. UTC | #2
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 mbox series

Patch

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.
  *