Date: Mon, 11 Jan 2010 23:00:18 +0000 (UTC) From: Luigi Rizzo <luigi@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r202128 - user/luigi/ipfw3-head/sys/netinet/ipfw Message-ID: <201001112300.o0BN0IxS002220@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: luigi Date: Mon Jan 11 23:00:17 2010 New Revision: 202128 URL: http://svn.freebsd.org/changeset/base/202128 Log: clean up a bit the pipe flush code. Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched.h user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_fifo.c user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_wf2q.c user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_io.c user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched.h ============================================================================== --- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched.h Mon Jan 11 22:57:52 2010 (r202127) +++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched.h Mon Jan 11 23:00:17 2010 (r202128) @@ -144,7 +144,7 @@ SLIST_HEAD(dn_sched_head, dn_sched); /* * delete a queue, which we assume nobody references */ -int dn_delete_queue(struct new_queue *q); +int dn_delete_queue(struct new_queue *q, int extract); /* Allocate an hash table. * Returns the pointer to the table @@ -200,9 +200,9 @@ dn_return_packet(struct new_queue *q) q->ni.length--; q->si->ni.len_bytes -= m->m_pkthdr.len; q->si->ni.len_bytes -= m->m_pkthdr.len; - if (q->mq.head == NULL && q->fs && q->fs->kflags & DN_DELETE) - dn_delete_queue(q); - + if (q->mq.head == NULL && q->fs && q->fs->kflags & DN_DELETE) { + dn_delete_queue(q, 1 /* remove from ql_list */); + } return m; } Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_fifo.c ============================================================================== --- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_fifo.c Mon Jan 11 22:57:52 2010 (r202127) +++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_fifo.c Mon Jan 11 23:00:17 2010 (r202128) @@ -144,23 +144,6 @@ fifo_new_sched(struct new_schk *s, struc return 0; } -static int -fifo_free_sched(struct new_sch_inst *_si) -{ - /* - * Delete a FIFO scheduler instance - * - Deallocate memory if the create_scheduler_instance() function - * allocate memory - * - Delete the queue if exists - */ - struct fifo_si *si = (struct fifo_si *)(_si + 1); - - if (si->q) - dn_delete_queue(si->q); - - return 0; -} - /* * FIFO scheduler descriptor * contains the type of the scheduler, the name, the size of the various @@ -178,7 +161,6 @@ static struct dn_sched fifo_desc = { .dequeue = fifo_dequeue, .new_sched = fifo_new_sched, - .free_sched = fifo_free_sched, }; DECLARE_DNSCHED_MODULE(dn_fifo, &fifo_desc); Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_wf2q.c ============================================================================== --- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_wf2q.c Mon Jan 11 22:57:52 2010 (r202127) +++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_wf2q.c Mon Jan 11 23:00:17 2010 (r202128) @@ -143,25 +143,8 @@ fifo_new_sched(struct new_schk *s, struc return 0; } -static int -fifo_free_sched(struct new_sch_inst *_si) -{ - /* - * Delete a FIFO scheduler instance - * - Deallocate memory if the create_scheduler_instance() function - * allocate memory - * - Delete the queue if exists - */ - struct fifo_si *si = (struct fifo_si *)(_si + 1); - - if (si->q) - dn_delete_queue(si->q); - - return 0; -} - /* - * FIFO scheduler descriptor + * WF2Q(fake) scheduler descriptor * contains the type of the scheduler, the name, the size of the various * structures and function pointers. If a function is not implemented, * the pointer is initialized to NULL @@ -177,7 +160,6 @@ static struct dn_sched fifo_desc = { .dequeue = fifo_dequeue, .new_sched = fifo_new_sched, - .free_sched = fifo_free_sched, }; DECLARE_DNSCHED_MODULE(dn_wf2qp, &fifo_desc); Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_io.c ============================================================================== --- user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_io.c Mon Jan 11 22:57:52 2010 (r202127) +++ user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_io.c Mon Jan 11 23:00:17 2010 (r202128) @@ -280,6 +280,7 @@ transmit_event(struct mq *q, struct dela struct mbuf *m; struct dn_pkt_tag *pkt = NULL; + dline->oid.subtype = 0; /* not in heap */ while ((m = dline->mq.head) != NULL) { pkt = dn_tag_get(m); if (!DN_KEY_LEQ(pkt->output_time, now)) @@ -287,8 +288,10 @@ transmit_event(struct mq *q, struct dela dline->mq.head = m->m_nextpkt; mq_append(q, m); } - if (m != NULL) + if (m != NULL) { + dline->oid.subtype = 1; /* in heap */ heap_insert(&dn_cfg.system_heap, pkt->output_time, dline); + } } #define div64(a, b) ((int64_t)(a) / (int64_t)(b)) @@ -437,6 +440,7 @@ create_si(struct new_schk *s, int slot) */ set_oid(&si->ni.oid, DN_SCH_I, 0, sizeof(struct new_inst)); set_oid(&(si->dline.oid), DN_DELAY_LINE, 0, sizeof(struct delay_line)); + si->ni.oid.id = si->dline.oid.id = -1; /* mark outside scheduler */ si->sched = s; si->dline.si = si; Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c ============================================================================== --- user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c Mon Jan 11 22:57:52 2010 (r202127) +++ user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c Mon Jan 11 23:00:17 2010 (r202128) @@ -133,17 +133,16 @@ destroy_si(struct new_sch_inst *si) struct delay_line *dl = &si->dline; struct new_queue *q; - /* XXX below we use oid.id as a marker of presence in the sysheap */ - if (si->ni.oid.id >= 0) /* is in the heap */ + if (si->kflags & DN_ACTIVE) /* is in the heap */ heap_extract(&dn_cfg.system_heap, si); if (s->fp->free_sched) s->fp->free_sched(si); - if (dl->oid.id >= 0) /* is in the heap */ + if (dl->oid.subtype) /* is in the heap */ heap_extract(&dn_cfg.system_heap, dl); dn_free_pkts(dl->mq.head); while ( (q = SLIST_FIRST(&si->ql_list)) ) { SLIST_REMOVE_HEAD(&si->ql_list, ql_next); - dn_delete_queue(q); + dn_delete_queue(q, 0); } free(si, M_DUMMYNET); dn_cfg.si_count--; @@ -218,11 +217,12 @@ dn_create_queue(struct new_sch_inst *si, * Delete a queue (helper for the schedulers) */ int -dn_delete_queue(struct new_queue *q) +dn_delete_queue(struct new_queue *q, int extract) { struct new_fsk *fs = q->fs; - SLIST_REMOVE(&q->si->ql_list, q, new_queue, ql_next); + if (extract) + SLIST_REMOVE(&q->si->ql_list, q, new_queue, ql_next); if (q->mq.head) dn_free_pkts(q->mq.head); if (fs->sched->fp->free_queue) @@ -236,12 +236,13 @@ dn_delete_queue(struct new_queue *q) } static struct new_schk * -destroy_schk(struct new_schk *s, int del) +destroy_schk(struct new_schk *s) { int i; struct new_sch_inst *si; struct dn_sched *fp = s->fp; +printf("%s slots %d\n", __FUNCTION__, s->ht_slots); for (i = 0; i < s->ht_slots; i++) { struct new_sch_inst_head *h = &s->ht[i]; while ((si = SLIST_FIRST(h)) != NULL) { @@ -360,7 +361,7 @@ dummynet_flush(void) while ( (s = SLIST_FIRST(sh)) != NULL) { SLIST_REMOVE_HEAD(sh, next); - destroy_schk(s, 1 /* delete */); + destroy_schk(s); } } @@ -575,7 +576,7 @@ config_sched(struct new_sch *nsch, struc printf("%s type %s old %p\n", __FUNCTION__, fp->name, s); if (s && s->fp != fp) { /* type changed, hard delete */ /* preserve old pipe ? */ - s = destroy_schk(s, 1); + s = destroy_schk(s); } if (s) { is_new = 0;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001112300.o0BN0IxS002220>