yield() should be rendered dead, according to Mike. It is hard to wait properly for all qdisc's to transmit all packets. So just keep the original logic.
Reported-by: Mike Galbraith <efa...@gmx.de> Signed-off-by: Cong Wang <xiyou.wangc...@gmail.com> --- net/sched/sch_generic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 1a2f9e9..4725d2f 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -925,7 +925,7 @@ void dev_deactivate_many(struct list_head *head) /* Wait for outstanding qdisc_run calls. */ list_for_each_entry(dev, head, close_list) while (some_qdisc_is_busy(dev)) - yield(); + cond_resched(); } void dev_deactivate(struct net_device *dev) -- 2.5.5