From owner-p4-projects@FreeBSD.ORG Tue Oct 30 19:05:22 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4E5DE16A46C; Tue, 30 Oct 2007 19:05:22 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EFC1116A417 for ; Tue, 30 Oct 2007 19:05:21 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id E18D413C4B7 for ; Tue, 30 Oct 2007 19:05:21 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l9UJ5LMS019015 for ; Tue, 30 Oct 2007 19:05:21 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l9UJ5LVg019012 for perforce@freebsd.org; Tue, 30 Oct 2007 19:05:21 GMT (envelope-from kmacy@freebsd.org) Date: Tue, 30 Oct 2007 19:05:21 GMT Message-Id: <200710301905.l9UJ5LVg019012@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to kmacy@freebsd.org using -f From: Kip Macy To: Perforce Change Reviews Cc: Subject: PERFORCE change 128361 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Oct 2007 19:05:22 -0000 http://perforce.freebsd.org/chv.cgi?CH=128361 Change 128361 by kmacy@kmacy:storage:toestack on 2007/10/30 19:04:26 remove some dead (kprobes) code and add debug prints Affected files ... .. //depot/projects/toestack/sys/dev/cxgb/cxgb_l2t.c#5 edit .. //depot/projects/toestack/sys/dev/cxgb/cxgb_l2t.h#6 edit Differences ... ==== //depot/projects/toestack/sys/dev/cxgb/cxgb_l2t.c#5 (text+ko) ==== @@ -197,7 +197,8 @@ } arpq_enqueue(e, m); mtx_unlock(&e->lock); - + printf("enqueueing arp request\n"); + if ((m0 = m_gethdr(M_NOWAIT, MT_DATA)) == NULL) return (ENOMEM); /* @@ -208,6 +209,7 @@ * A better way would be to use a work request to retry L2T * entries when there's no memory. */ + printf("doing arpresolve\n"); if (arpresolve(rt->rt_ifp, rt, m0, rt->rt_gateway, RT_ENADDR(rt)) == 0) { mtx_lock(&e->lock); @@ -216,7 +218,9 @@ else m_freem(m); mtx_unlock(&e->lock); - } + } else + printf("arpresolve returned non-zero\n"); + } return 0; } @@ -379,6 +383,8 @@ /* Need to allocate a new entry */ e = alloc_l2e(d); if (e) { + printf("initializing new entry\n"); + mtx_lock(&e->lock); /* avoid race with t3_l2t_free */ e->next = d->l2tab[hash].first; d->l2tab[hash].first = e; @@ -433,11 +439,6 @@ } -#if defined(NETEVENT) || !defined(CONFIG_CHELSIO_T3_MODULE) -/* - * Called when the host's ARP layer makes a change to some entry that is - * loaded into the HW L2 table. - */ void t3_l2t_update(struct t3cdev *dev, struct rtentry *neigh) { @@ -484,71 +485,6 @@ if (arpq) handle_failed_resolution(dev, arpq); } -#else -/* - * Called from a kprobe, interrupts are off. - */ -void -t3_l2t_update(struct t3cdev *dev, struct rtentry *neigh) -{ - struct l2t_entry *e; - struct l2t_data *d = L2DATA(dev); - u32 addr = *(u32 *) rt_key(neigh); - int ifidx = neigh->dev->ifindex; - int hash = arp_hash(addr, ifidx, d); - - rw_rlock(&d->lock); - for (e = d->l2tab[hash].first; e; e = e->next) - if (e->addr == addr && e->ifindex == ifidx) { - mtx_lock(&e->lock); - if (atomic_load_acq_int(&e->refcnt)) { - if (neigh != e->neigh) - neigh_replace(e, neigh); - e->tdev = dev; - mod_timer(&e->update_timer, jiffies + 1); - } - mtx_unlock(&e->lock); - break; - } - rw_runlock(&d->lock); -} - -static void -update_timer_cb(unsigned long data) -{ - struct mbuf *arpq = NULL; - struct l2t_entry *e = (struct l2t_entry *)data; - struct rtentry *neigh = e->neigh; - struct t3cdev *dev = e->tdev; - - barrier(); - if (!atomic_load_acq_int(&e->refcnt)) - return; - - rw_rlock(&neigh->lock); - mtx_lock(&e->lock); - - if (atomic_load_acq_int(&e->refcnt)) { - if (e->state == L2T_STATE_RESOLVING) { - if (neigh->nud_state & NUD_FAILED) { - arpq = e->arpq_head; - e->arpq_head = e->arpq_tail = NULL; - } else if (neigh_is_connected(neigh) && e->arpq_head) - setup_l2e_send_pending(dev, NULL, e); - } else { - e->state = neigh_is_connected(neigh) ? - L2T_STATE_VALID : L2T_STATE_STALE; - if (memcmp(e->dmac, RT_ENADDR(neigh), sizeof(e->dmac))) - setup_l2e_send_pending(dev, NULL, e); - } - } - mtx_unlock(&e->lock); - rw_runlock(&neigh->lock); - - if (arpq) - handle_failed_resolution(dev, arpq); -} -#endif struct l2t_data * t3_init_l2t(unsigned int l2t_capacity) ==== //depot/projects/toestack/sys/dev/cxgb/cxgb_l2t.h#6 (text+ko) ==== @@ -148,8 +148,13 @@ static inline int l2t_send(struct t3cdev *dev, struct mbuf *m, struct l2t_entry *e) { - if (__predict_true(e->state == L2T_STATE_VALID)) + if (__predict_true(e->state == L2T_STATE_VALID)) { + printf ("l2t_entry state is valid\n"); + return cxgb_ofld_send(dev, (struct mbuf *)m); + } + printf("send slow\n"); + return t3_l2t_send_slow(dev, (struct mbuf *)m, e); }