|
@@ -27,6 +27,7 @@
|
|
|
#include <linux/kmod.h>
|
|
|
#include <linux/list.h>
|
|
|
#include <linux/hrtimer.h>
|
|
|
+#include <linux/lockdep.h>
|
|
|
|
|
|
#include <net/net_namespace.h>
|
|
|
#include <net/sock.h>
|
|
@@ -707,6 +708,10 @@ static int qdisc_graft(struct net_device *dev, struct Qdisc *parent,
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
+/* lockdep annotation is needed for ingress; egress gets it only for name */
|
|
|
+static struct lock_class_key qdisc_tx_lock;
|
|
|
+static struct lock_class_key qdisc_rx_lock;
|
|
|
+
|
|
|
/*
|
|
|
Allocate and initialize new qdisc.
|
|
|
|
|
@@ -767,6 +772,7 @@ qdisc_create(struct net_device *dev, struct netdev_queue *dev_queue,
|
|
|
if (handle == TC_H_INGRESS) {
|
|
|
sch->flags |= TCQ_F_INGRESS;
|
|
|
handle = TC_H_MAKE(TC_H_INGRESS, 0);
|
|
|
+ lockdep_set_class(qdisc_lock(sch), &qdisc_rx_lock);
|
|
|
} else {
|
|
|
if (handle == 0) {
|
|
|
handle = qdisc_alloc_handle(dev);
|
|
@@ -774,6 +780,7 @@ qdisc_create(struct net_device *dev, struct netdev_queue *dev_queue,
|
|
|
if (handle == 0)
|
|
|
goto err_out3;
|
|
|
}
|
|
|
+ lockdep_set_class(qdisc_lock(sch), &qdisc_tx_lock);
|
|
|
}
|
|
|
|
|
|
sch->handle = handle;
|