On Tue, Jul 27, 2004 at 10:47:13 +0200, Tomasz Paszkowski wrote: > Hello, > > I'am running hfsc qdisc with huge set of rules loaded. Always when I delete > the root qdisc the machine stop responding for about 5-6 seconds. As I > think it's due the hfsc_destory_qdisc is executed in main kernel thread. > > Is there any solutions which can after completing each run in loop, put > itself at the end of run queue ? The code would have to be rewritten. If it's 2.6 kernel, recompile it with preemption. It should help Actualy, I am not sure whether it runs in an event thread (ie. from work queue, as the subject suggests), or from the syscall (as I would consider more likely). If it's from syscall, fixing it would be easy -- just add something like: if(current->need_resched) schedule() into the loop. If it's run from a work queue, it would have to be completely rewritten. Anyway, please post it on the linux-kernel@xxxxxxxxxxxxxxx list as a bug. > hfsc_destroy_qdisc(struct Qdisc *sch) > { > struct hfsc_sched *q = (struct hfsc_sched *)sch->data; > struct hfsc_class *cl, *next; > unsigned int i; > > for (i = 0; i < HFSC_HSIZE; i++) { > list_for_each_entry_safe(cl, next, &q->clhash[i], hlist) > hfsc_destroy_class(sch, cl); > } > __skb_queue_purge(&q->requeue); > del_timer(&q->wd_timer); > MOD_DEC_USE_COUNT; > } > > > > -- > Tomasz Paszkowski ------------------------------------------------------------------------------- Jan 'Bulb' Hudec <bulb@xxxxxx>
Attachment:
signature.asc
Description: Digital signature