* [bug report] tc: Add support for configuring the taprio scheduler
@ 2018-10-11 12:01 Dan Carpenter
0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2018-10-11 12:01 UTC (permalink / raw)
To: kernel-janitors
Hello Vinicius Costa Gomes,
The patch 5a781ccbd19e: "tc: Add support for configuring the taprio
scheduler" from Sep 28, 2018, leads to the following static checker
warning:
net/sched/sch_taprio.c:647 taprio_change()
warn: can 'mqprio' even be NULL?
net/sched/sch_taprio.c
578 static int taprio_change(struct Qdisc *sch, struct nlattr *opt,
579 struct netlink_ext_ack *extack)
580 {
581 struct nlattr *tb[TCA_TAPRIO_ATTR_MAX + 1] = { };
582 struct taprio_sched *q = qdisc_priv(sch);
583 struct net_device *dev = qdisc_dev(sch);
584 struct tc_mqprio_qopt *mqprio = NULL;
^^^^^^^^^^^^^
585 struct ethtool_link_ksettings ecmd;
586 int i, err, size;
587 s64 link_speed;
588 ktime_t start;
589
590 err = nla_parse_nested(tb, TCA_TAPRIO_ATTR_MAX, opt,
591 taprio_policy, extack);
592 if (err < 0)
593 return err;
594
595 err = -EINVAL;
596 if (tb[TCA_TAPRIO_ATTR_PRIOMAP])
597 mqprio = nla_data(tb[TCA_TAPRIO_ATTR_PRIOMAP]);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
598
599 err = taprio_parse_mqprio_opt(dev, mqprio, extack);
^^^^^^
This returns error pointer is mqprio is NULL.
600 if (err < 0)
601 return err;
602
603 /* A schedule with less than one entry is an error */
604 size = parse_taprio_opt(tb, q, extack);
605 if (size < 0)
606 return size;
607
608 hrtimer_init(&q->advance_timer, q->clockid, HRTIMER_MODE_ABS);
609 q->advance_timer.function = advance_sched;
610
611 switch (q->clockid) {
612 case CLOCK_REALTIME:
613 q->get_time = ktime_get_real;
614 break;
615 case CLOCK_MONOTONIC:
616 q->get_time = ktime_get;
617 break;
618 case CLOCK_BOOTTIME:
619 q->get_time = ktime_get_boottime;
620 break;
621 case CLOCK_TAI:
622 q->get_time = ktime_get_clocktai;
622 q->get_time = ktime_get_clocktai;
623 break;
624 default:
625 return -ENOTSUPP;
626 }
627
628 for (i = 0; i < dev->num_tx_queues; i++) {
629 struct netdev_queue *dev_queue;
630 struct Qdisc *qdisc;
631
632 dev_queue = netdev_get_tx_queue(dev, i);
633 qdisc = qdisc_create_dflt(dev_queue,
634 &pfifo_qdisc_ops,
635 TC_H_MAKE(TC_H_MAJ(sch->handle),
636 TC_H_MIN(i + 1)),
637 extack);
638 if (!qdisc)
639 return -ENOMEM;
640
641 if (i < dev->real_num_tx_queues)
642 qdisc_hash_add(qdisc, false);
643
644 q->qdiscs[i] = qdisc;
645 }
646
647 if (mqprio) {
^^^^^^
This can't be NULL. Smatch doesn't always complain about unnecessary
NULL checks, but the reason that Smatch complains about it is because it
thinks we are whether if nla_data() returns NULL.
648 netdev_set_num_tc(dev, mqprio->num_tc);
649 for (i = 0; i < mqprio->num_tc; i++)
650 netdev_set_tc_queue(dev, i,
651 mqprio->count[i],
652 mqprio->offset[i]);
regards,
dan carpenter
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2018-10-11 12:01 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-11 12:01 [bug report] tc: Add support for configuring the taprio scheduler Dan Carpenter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox