From: Jesus Sanchez-Palencia <jesus.sanchez-palencia@intel.com>
To: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Cc: "Network Development" <netdev@vger.kernel.org>,
"Thomas Gleixner" <tglx@linutronix.de>,
jan.altenberg@linutronix.de,
"Vinicius Gomes" <vinicius.gomes@intel.com>,
kurt.kanzenbach@linutronix.de, "Henrik Austad" <henrik@austad.us>,
"Richard Cochran" <richardcochran@gmail.com>,
ilias.apalodimas@linaro.org, ivan.khoronzhuk@linaro.org,
"Miroslav Lichvar" <mlichvar@redhat.com>,
"Willem de Bruijn" <willemb@google.com>,
"Jamal Hadi Salim" <jhs@mojatatu.com>,
"Cong Wang" <xiyou.wangcong@gmail.com>,
"Jiří Pírko" <jiri@resnulli.us>
Subject: Re: [PATCH v1 net-next 14/14] net/sched: Make etf report drops on error_queue
Date: Fri, 29 Jun 2018 10:48:34 -0700 [thread overview]
Message-ID: <88846dcd-b4dc-ddde-6c4b-5a29ffde016b@intel.com> (raw)
In-Reply-To: <CAF=yD-+R867otr0n9q-pHvvUhv6o3Nj42a3Ts54J7gwPgr0G9Q@mail.gmail.com>
Hi Willem,
On 06/28/2018 07:27 AM, Willem de Bruijn wrote:
(...)
>
>> struct sock_txtime {
>> clockid_t clockid; /* reference clockid */
>> - u16 flags; /* bit 0: txtime in deadline_mode */
>> + u16 flags; /* bit 0: txtime in deadline_mode
>> + * bit 1: report drops on sk err queue
>> + */
>> };
>
> If this is shared with userspace, should be defined in an uapi header.
> Same on the flag bits below. Self documenting code is preferable over
> comments.
Fixed for v2.
>
>> /*
>> diff --git a/include/net/sock.h b/include/net/sock.h
>> index 73f4404e49e4..e681a45cfe7e 100644
>> --- a/include/net/sock.h
>> +++ b/include/net/sock.h
>> @@ -473,6 +473,7 @@ struct sock {
>> u16 sk_clockid;
>> u16 sk_txtime_flags;
>> #define SK_TXTIME_DEADLINE_MASK BIT(0)
>> +#define SK_TXTIME_RECV_ERR_MASK BIT(1)
>
> Integer bitfields are (arguably) more readable. There is no requirement
> that the user interface be the same as the in-kernel implementation. Indeed
> if you can save bits in struct sock, that is preferable (but not so for the ABI,
> which cannot easily be extended).
Sure, changed for v2.
(...)
>> diff --git a/net/sched/sch_etf.c b/net/sched/sch_etf.c
>> index 5514a8aa3bd5..166f4b72875b 100644
>> --- a/net/sched/sch_etf.c
>> +++ b/net/sched/sch_etf.c
>> @@ -11,6 +11,7 @@
>> #include <linux/kernel.h>
>> #include <linux/string.h>
>> #include <linux/errno.h>
>> +#include <linux/errqueue.h>
>> #include <linux/rbtree.h>
>> #include <linux/skbuff.h>
>> #include <linux/posix-timers.h>
>> @@ -124,6 +125,35 @@ static void reset_watchdog(struct Qdisc *sch)
>> qdisc_watchdog_schedule_ns(&q->watchdog, ktime_to_ns(next));
>> }
>>
>> +static void report_sock_error(struct sk_buff *skb, u32 err, u8 code)
>> +{
>> + struct sock_exterr_skb *serr;
>> + ktime_t txtime = skb->tstamp;
>> +
>> + if (!skb->sk || !(skb->sk->sk_txtime_flags & SK_TXTIME_RECV_ERR_MASK))
>> + return;
>> +
>> + skb = skb_clone_sk(skb);
>> + if (!skb)
>> + return;
>> +
>> + sock_hold(skb->sk);
>
> Why take an extra reference? The skb holds a ref on the sk.
Yes, the cloned skb holds a ref on the socket, but the documentation of
skb_clone_sk() makes this explicit suggestion:
(...)
* When passing buffers allocated with this function to sock_queue_err_skb
* it is necessary to wrap the call with sock_hold/sock_put in order to
* prevent the socket from being released prior to being enqueued on
* the sk_error_queue.
*/
which I believe is here just so we are protected against a possible race after
skb_orphan() is called from sock_queue_err_skb(). Please let me know if I'm
misreading anything.
And for v2 I will move the sock_hold() call to immediately before the
sock_queue_err_skb() to avoid any future confusion.
>
>> +
>> + serr = SKB_EXT_ERR(skb);
>> + serr->ee.ee_errno = err;
>> + serr->ee.ee_origin = SO_EE_ORIGIN_LOCAL;
>
> I suggest adding a new SO_EE_ORIGIN_TXTIME as opposed to overloading
> the existing
> local origin. Then the EE_CODE can start at 1, as ee_code can be
> demultiplexed by origin.
OK, it looks better indeed. Fixed for v2.
>
>> + serr->ee.ee_type = 0;
>> + serr->ee.ee_code = code;
>> + serr->ee.ee_pad = 0;
>> + serr->ee.ee_data = (txtime >> 32); /* high part of tstamp */
>> + serr->ee.ee_info = txtime; /* low part of tstamp */
>> +
>> + if (sock_queue_err_skb(skb->sk, skb))
>> + kfree_skb(skb);
>> +
>> + sock_put(skb->sk);
>> +}
Thanks,
Jesus
next prev parent reply other threads:[~2018-06-29 17:53 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-27 21:59 [PATCH v1 net-next 00/14] Scheduled packet Transmission: ETF Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 01/14] net: Clear skb->tstamp only on the forwarding path Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 02/14] net: Add a new socket option for a future transmit time Jesus Sanchez-Palencia
2018-06-27 22:16 ` Eric Dumazet
2018-06-27 23:07 ` Jesus Sanchez-Palencia
2018-06-28 0:05 ` Eric Dumazet
2018-06-28 2:16 ` kbuild test robot
2018-06-28 14:26 ` Willem de Bruijn
2018-06-28 14:40 ` Willem de Bruijn
2018-06-28 18:33 ` Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 03/14] net: ipv4: Hook into time based transmission Jesus Sanchez-Palencia
2018-06-28 14:26 ` Willem de Bruijn
2018-06-27 21:59 ` [PATCH v1 net-next 04/14] net: packet: " Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 05/14] net/sched: Allow creating a Qdisc watchdog with other clocks Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 06/14] net/sched: Introduce the ETF Qdisc Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 07/14] net/sched: Add HW offloading capability to ETF Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 08/14] igb: Refactor igb_configure_cbs() Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 09/14] igb: Only change Tx arbitration when CBS is on Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 10/14] igb: Refactor igb_offload_cbs() Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 11/14] igb: Add support for ETF offload Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 12/14] igb: Only call skb_tx_timestamp after descriptors are ready Jesus Sanchez-Palencia
2018-06-27 23:56 ` Eric Dumazet
2018-06-28 17:12 ` Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 13/14] net/sched: Enforce usage of CLOCK_TAI for sch_etf Jesus Sanchez-Palencia
2018-06-28 14:26 ` Willem de Bruijn
2018-06-28 17:11 ` Jesus Sanchez-Palencia
2018-06-27 21:59 ` [PATCH v1 net-next 14/14] net/sched: Make etf report drops on error_queue Jesus Sanchez-Palencia
2018-06-28 14:27 ` Willem de Bruijn
2018-06-29 17:48 ` Jesus Sanchez-Palencia [this message]
2018-06-29 18:49 ` Willem de Bruijn
2018-06-29 20:14 ` Jesus Sanchez-Palencia
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=88846dcd-b4dc-ddde-6c4b-5a29ffde016b@intel.com \
--to=jesus.sanchez-palencia@intel.com \
--cc=henrik@austad.us \
--cc=ilias.apalodimas@linaro.org \
--cc=ivan.khoronzhuk@linaro.org \
--cc=jan.altenberg@linutronix.de \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=kurt.kanzenbach@linutronix.de \
--cc=mlichvar@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=richardcochran@gmail.com \
--cc=tglx@linutronix.de \
--cc=vinicius.gomes@intel.com \
--cc=willemb@google.com \
--cc=willemdebruijn.kernel@gmail.com \
--cc=xiyou.wangcong@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).