Skip to content

Commit

Permalink
s390/qeth: add SW timestamping support for IQD devices
Browse files Browse the repository at this point in the history
This adds support for SOF_TIMESTAMPING_TX_SOFTWARE.
No support for non-IQD devices, since they orphan the skb in their xmit
path.

To play nice with TX bulking, set the timestamp when the buffer that
contains the skb(s) is actually flushed out to HW.

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Julian Wiedmann authored and David S. Miller committed Mar 18, 2020
1 parent 5d8ce41 commit 8d145da
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
6 changes: 5 additions & 1 deletion drivers/s390/net/qeth_core_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3355,6 +3355,7 @@ static void qeth_flush_buffers(struct qeth_qdio_out_q *queue, int index,

for (i = index; i < index + count; ++i) {
unsigned int bidx = QDIO_BUFNR(i);
struct sk_buff *skb;

buf = queue->bufs[bidx];
buf->buffer->element[buf->next_element_to_fill - 1].eflags |=
Expand All @@ -3363,8 +3364,11 @@ static void qeth_flush_buffers(struct qeth_qdio_out_q *queue, int index,
if (queue->bufstates)
queue->bufstates[bidx].user = buf;

if (IS_IQD(queue->card))
if (IS_IQD(card)) {
skb_queue_walk(&buf->skb_list, skb)
skb_tx_timestamp(skb);
continue;
}

if (!queue->do_pack) {
if ((atomic_read(&queue->used_buffers) >=
Expand Down
12 changes: 12 additions & 0 deletions drivers/s390/net/qeth_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,17 @@ static int qeth_set_channels(struct net_device *dev,
return qeth_set_real_num_tx_queues(card, channels->tx_count);
}

static int qeth_get_ts_info(struct net_device *dev,
struct ethtool_ts_info *info)
{
struct qeth_card *card = dev->ml_priv;

if (!IS_IQD(card))
return -EOPNOTSUPP;

return ethtool_op_get_ts_info(dev, info);
}

static int qeth_get_tunable(struct net_device *dev,
const struct ethtool_tunable *tuna, void *data)
{
Expand Down Expand Up @@ -440,6 +451,7 @@ const struct ethtool_ops qeth_ethtool_ops = {
.get_drvinfo = qeth_get_drvinfo,
.get_channels = qeth_get_channels,
.set_channels = qeth_set_channels,
.get_ts_info = qeth_get_ts_info,
.get_tunable = qeth_get_tunable,
.set_tunable = qeth_set_tunable,
.get_link_ksettings = qeth_get_link_ksettings,
Expand Down

0 comments on commit 8d145da

Please sign in to comment.