* [PATCH net-next] net: Functions to report space available in device TX queues
@ 2014-08-24 20:19 Tom Herbert
2014-08-25 5:35 ` David Miller
0 siblings, 1 reply; 5+ messages in thread
From: Tom Herbert @ 2014-08-24 20:19 UTC (permalink / raw)
To: davem, netdev
This patch adds netdev_tx_avail_queue and netdev_avail_queue which are
used to report number of bytes available in transmit queues per BQL. The
functions call dql_avail which returns BQL limit minus number of
inflight bytes. These functions can be called without txlock, for
instance to ascertain how much data should be dequeued from a qdisc in
a batch. When called without the tx_lock, the result is technically a
hint, subsequently when the tx_lock is done for a transmit it is
possible the availability has changed (for example a transmit
completion may have freed up more space in the queue or changed the
limit).
Signed-off-by: Tom Herbert <therbert@google.com>
---
include/linux/netdevice.h | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 0fac884..13883c1 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2544,6 +2544,30 @@ static inline void netdev_completed_queue(struct net_device *dev,
netdev_tx_completed_queue(netdev_get_tx_queue(dev, 0), pkts, bytes);
}
+static inline int netdev_tx_avail_queue(struct netdev_queue *dev_queue)
+{
+#ifdef CONFIG_BQL
+ return dql_avail(&dev_queue->dql);
+#else
+ return DQL_MAX_LIMIT;
+#endif
+}
+
+/**
+ * netdev_avail_queue - report how much space is availble for xmit
+ * @dev: network device
+ *
+ * Report the amount of space available in the TX queue in terms of
+ * number of bytes. This returns the number of bytes avaiable per
+ * DQL. This function may be called without taking the txlock on
+ * the device, however in that case the result should be taken as
+ * a (strong) hint.
+ */
+static inline int netdev_avail_queue(struct net_device *dev_queue)
+{
+ return netdev_tx_avail_queue(netdev_get_tx_queue(dev_queue, 0));
+}
+
static inline void netdev_tx_reset_queue(struct netdev_queue *q)
{
#ifdef CONFIG_BQL
--
2.1.0.rc2.206.gedb03e5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] net: Functions to report space available in device TX queues
2014-08-24 20:19 [PATCH net-next] net: Functions to report space available in device TX queues Tom Herbert
@ 2014-08-25 5:35 ` David Miller
2014-08-25 15:18 ` Tom Herbert
0 siblings, 1 reply; 5+ messages in thread
From: David Miller @ 2014-08-25 5:35 UTC (permalink / raw)
To: therbert; +Cc: netdev
From: Tom Herbert <therbert@google.com>
Date: Sun, 24 Aug 2014 13:19:47 -0700 (PDT)
> +/**
> + * netdev_avail_queue - report how much space is availble for xmit
> + * @dev: network device
> + *
> + * Report the amount of space available in the TX queue in terms of
> + * number of bytes. This returns the number of bytes avaiable per
> + * DQL. This function may be called without taking the txlock on
> + * the device, however in that case the result should be taken as
> + * a (strong) hint.
> + */
> +static inline int netdev_avail_queue(struct net_device *dev_queue)
> +{
> + return netdev_tx_avail_queue(netdev_get_tx_queue(dev_queue, 0));
> +}
> +
This doesn't make any sense, you're only providing queue zero's
information.
You're passing in a net_device, calling it a "dev_queue" in the
variable name, the exlicitly using queue zero of that device in the
netdev_get_tx_queue() call.
Pretty confusing if you ask me :)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] net: Functions to report space available in device TX queues
2014-08-25 5:35 ` David Miller
@ 2014-08-25 15:18 ` Tom Herbert
2014-08-25 19:24 ` Cong Wang
0 siblings, 1 reply; 5+ messages in thread
From: Tom Herbert @ 2014-08-25 15:18 UTC (permalink / raw)
To: David Miller; +Cc: Linux Netdev List
On Sun, Aug 24, 2014 at 10:35 PM, David Miller <davem@davemloft.net> wrote:
> From: Tom Herbert <therbert@google.com>
> Date: Sun, 24 Aug 2014 13:19:47 -0700 (PDT)
>
>> +/**
>> + * netdev_avail_queue - report how much space is availble for xmit
>> + * @dev: network device
>> + *
>> + * Report the amount of space available in the TX queue in terms of
>> + * number of bytes. This returns the number of bytes avaiable per
>> + * DQL. This function may be called without taking the txlock on
>> + * the device, however in that case the result should be taken as
>> + * a (strong) hint.
>> + */
>> +static inline int netdev_avail_queue(struct net_device *dev_queue)
>> +{
>> + return netdev_tx_avail_queue(netdev_get_tx_queue(dev_queue, 0));
>> +}
>> +
>
> This doesn't make any sense, you're only providing queue zero's
> information.
>
It's consistent with the other BQL functions. netdev_*_queue is used
for single queue devices, netdev_tx_*_queue is used for specific
queues in MQ.
> You're passing in a net_device, calling it a "dev_queue" in the
> variable name, the exlicitly using queue zero of that device in the
> netdev_get_tx_queue() call.
>
Cut and paste prototype from netdev_reset_queue which was doing
that... I'll fix it.
> Pretty confusing if you ask me :)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] net: Functions to report space available in device TX queues
2014-08-25 15:18 ` Tom Herbert
@ 2014-08-25 19:24 ` Cong Wang
2014-08-25 19:34 ` Tom Herbert
0 siblings, 1 reply; 5+ messages in thread
From: Cong Wang @ 2014-08-25 19:24 UTC (permalink / raw)
To: Tom Herbert; +Cc: David Miller, Linux Netdev List
On Mon, Aug 25, 2014 at 8:18 AM, Tom Herbert <therbert@google.com> wrote:
> On Sun, Aug 24, 2014 at 10:35 PM, David Miller <davem@davemloft.net> wrote:
>> From: Tom Herbert <therbert@google.com>
>> Date: Sun, 24 Aug 2014 13:19:47 -0700 (PDT)
>>
>>> +/**
>>> + * netdev_avail_queue - report how much space is availble for xmit
>>> + * @dev: network device
>>> + *
>>> + * Report the amount of space available in the TX queue in terms of
>>> + * number of bytes. This returns the number of bytes avaiable per
>>> + * DQL. This function may be called without taking the txlock on
>>> + * the device, however in that case the result should be taken as
>>> + * a (strong) hint.
>>> + */
>>> +static inline int netdev_avail_queue(struct net_device *dev_queue)
>>> +{
>>> + return netdev_tx_avail_queue(netdev_get_tx_queue(dev_queue, 0));
>>> +}
>>> +
>>
>> This doesn't make any sense, you're only providing queue zero's
>> information.
>>
> It's consistent with the other BQL functions. netdev_*_queue is used
> for single queue devices, netdev_tx_*_queue is used for specific
> queues in MQ.
>
I was also confused by these names when I read the code, it doesn't
make sense to me either. We need some cleanup no matter of your
patch. I will try to do it after your patch is in.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next] net: Functions to report space available in device TX queues
2014-08-25 19:24 ` Cong Wang
@ 2014-08-25 19:34 ` Tom Herbert
0 siblings, 0 replies; 5+ messages in thread
From: Tom Herbert @ 2014-08-25 19:34 UTC (permalink / raw)
To: Cong Wang; +Cc: David Miller, Linux Netdev List
On Mon, Aug 25, 2014 at 12:24 PM, Cong Wang <cwang@twopensource.com> wrote:
> On Mon, Aug 25, 2014 at 8:18 AM, Tom Herbert <therbert@google.com> wrote:
>> On Sun, Aug 24, 2014 at 10:35 PM, David Miller <davem@davemloft.net> wrote:
>>> From: Tom Herbert <therbert@google.com>
>>> Date: Sun, 24 Aug 2014 13:19:47 -0700 (PDT)
>>>
>>>> +/**
>>>> + * netdev_avail_queue - report how much space is availble for xmit
>>>> + * @dev: network device
>>>> + *
>>>> + * Report the amount of space available in the TX queue in terms of
>>>> + * number of bytes. This returns the number of bytes avaiable per
>>>> + * DQL. This function may be called without taking the txlock on
>>>> + * the device, however in that case the result should be taken as
>>>> + * a (strong) hint.
>>>> + */
>>>> +static inline int netdev_avail_queue(struct net_device *dev_queue)
>>>> +{
>>>> + return netdev_tx_avail_queue(netdev_get_tx_queue(dev_queue, 0));
>>>> +}
>>>> +
>>>
>>> This doesn't make any sense, you're only providing queue zero's
>>> information.
>>>
>> It's consistent with the other BQL functions. netdev_*_queue is used
>> for single queue devices, netdev_tx_*_queue is used for specific
>> queues in MQ.
>>
>
> I was also confused by these names when I read the code, it doesn't
> make sense to me either. We need some cleanup no matter of your
> patch. I will try to do it after your patch is in.
That would be great if you can clean this up in a sane way, but beware
that some of these functions following the naming convention are
already in widespread use. For instance, both netif_stop_queue and
netif_tx_stop_queue are called a lot from drivers.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-08-25 19:34 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-24 20:19 [PATCH net-next] net: Functions to report space available in device TX queues Tom Herbert
2014-08-25 5:35 ` David Miller
2014-08-25 15:18 ` Tom Herbert
2014-08-25 19:24 ` Cong Wang
2014-08-25 19:34 ` Tom Herbert
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).