]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/sched/sch_etf.c
Merge tag 'scsi-sg' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux.git] / net / sched / sch_etf.c
index db0c2ba1d1562854826582cca0bafbab24cae243..cebfb65d85568c3afa48c52d1f05887fd59b937b 100644 (file)
 
 #define DEADLINE_MODE_IS_ON(x) ((x)->flags & TC_ETF_DEADLINE_MODE_ON)
 #define OFFLOAD_IS_ON(x) ((x)->flags & TC_ETF_OFFLOAD_ON)
+#define SKIP_SOCK_CHECK_IS_SET(x) ((x)->flags & TC_ETF_SKIP_SOCK_CHECK)
 
 struct etf_sched_data {
        bool offload;
        bool deadline_mode;
+       bool skip_sock_check;
        int clockid;
        int queue;
        s32 delta; /* in ns */
@@ -77,6 +79,9 @@ static bool is_packet_valid(struct Qdisc *sch, struct sk_buff *nskb)
        struct sock *sk = nskb->sk;
        ktime_t now;
 
+       if (q->skip_sock_check)
+               goto skip;
+
        if (!sk)
                return false;
 
@@ -92,6 +97,7 @@ static bool is_packet_valid(struct Qdisc *sch, struct sk_buff *nskb)
        if (sk->sk_txtime_deadline_mode != q->deadline_mode)
                return false;
 
+skip:
        now = q->get_time();
        if (ktime_before(txtime, now) || ktime_before(txtime, q->last))
                return false;
@@ -385,6 +391,7 @@ static int etf_init(struct Qdisc *sch, struct nlattr *opt,
        q->clockid = qopt->clockid;
        q->offload = OFFLOAD_IS_ON(qopt);
        q->deadline_mode = DEADLINE_MODE_IS_ON(qopt);
+       q->skip_sock_check = SKIP_SOCK_CHECK_IS_SET(qopt);
 
        switch (q->clockid) {
        case CLOCK_REALTIME:
@@ -473,6 +480,9 @@ static int etf_dump(struct Qdisc *sch, struct sk_buff *skb)
        if (q->deadline_mode)
                opt.flags |= TC_ETF_DEADLINE_MODE_ON;
 
+       if (q->skip_sock_check)
+               opt.flags |= TC_ETF_SKIP_SOCK_CHECK;
+
        if (nla_put(skb, TCA_ETF_PARMS, sizeof(opt), &opt))
                goto nla_put_failure;