Date: Fri, 27 Jul 2012 15:09:32 -0700 From: Adrian Chadd <adrian@freebsd.org> To: Luigi Rizzo <luigi@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r238765 - head/sys/dev/e1000 Message-ID: <CAJ-Vmokw-9if%2BzdTiG3ZeKaVVzE%2BTCtLhWM8ry1iaeRr7AC8gA@mail.gmail.com> In-Reply-To: <201207251128.q6PBSFlt052575@svn.freebsd.org> References: <201207251128.q6PBSFlt052575@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, Can you please revert this commit for now? * it has some netmap stuff in it that isn't related to the commit; * it's causing panics due to lock recursion; * it likely has other issues you haven't yet found. :) Adrian On 25 July 2012 04:28, Luigi Rizzo <luigi@freebsd.org> wrote: > Author: luigi > Date: Wed Jul 25 11:28:15 2012 > New Revision: 238765 > URL: http://svn.freebsd.org/changeset/base/238765 > > Log: > Use legacy interrupts as a default. This gives up to 10% speedup > when used in qemu (and this driver is for non-PCIe cards, > so probably its largest use is in virtualized environments). > > Approved by: Jack Vogel > MFC after: 3 days > > Modified: > head/sys/dev/e1000/if_lem.c > > Modified: head/sys/dev/e1000/if_lem.c > ============================================================================== > --- head/sys/dev/e1000/if_lem.c Wed Jul 25 10:55:14 2012 (r238764) > +++ head/sys/dev/e1000/if_lem.c Wed Jul 25 11:28:15 2012 (r238765) > @@ -239,6 +239,7 @@ static void lem_enable_wakeup(device > static int lem_enable_phy_wakeup(struct adapter *); > static void lem_led_func(void *, int); > > +#define EM_LEGACY_IRQ /* slightly faster, at least in qemu */ > #ifdef EM_LEGACY_IRQ > static void lem_intr(void *); > #else /* FAST IRQ */ > @@ -1549,6 +1550,13 @@ lem_xmit(struct adapter *adapter, struct > u32 txd_upper, txd_lower, txd_used, txd_saved; > int error, nsegs, i, j, first, last = 0; > > +extern int netmap_drop; > + if (netmap_drop == 95) { > +dropme: > + m_freem(*m_headp); > + *m_headp = NULL; > + return (ENOBUFS); > + } > m_head = *m_headp; > txd_upper = txd_lower = txd_used = txd_saved = 0; > > @@ -1688,6 +1696,9 @@ lem_xmit(struct adapter *adapter, struct > } > } > > + if (netmap_drop == 96) > + goto dropme; > + > adapter->next_avail_tx_desc = i; > > if (adapter->pcix_82544) > @@ -1715,6 +1726,16 @@ lem_xmit(struct adapter *adapter, struct > */ > ctxd->lower.data |= > htole32(E1000_TXD_CMD_EOP | E1000_TXD_CMD_RS); > + > +if (netmap_drop == 97) { > + static int count=0; > + if (count++ & 63 != 0) > + ctxd->lower.data &= > + ~htole32(E1000_TXD_CMD_RS); > + else > + D("preserve RS"); > + > +} > /* > * Keep track in the first buffer which > * descriptor will be written back > @@ -1733,6 +1754,12 @@ lem_xmit(struct adapter *adapter, struct > adapter->link_duplex == HALF_DUPLEX) > lem_82547_move_tail(adapter); > else { > +extern int netmap_repeat; > + if (netmap_repeat) { > + int x; > + for (x = 0; x < netmap_repeat; x++) > + E1000_WRITE_REG(&adapter->hw, E1000_TDT(0), i); > + } > E1000_WRITE_REG(&adapter->hw, E1000_TDT(0), i); > if (adapter->hw.mac.type == e1000_82547) > lem_82547_update_fifo_head(adapter, > @@ -2986,6 +3013,13 @@ lem_txeof(struct adapter *adapter) > return; > } > #endif /* DEV_NETMAP */ > +{ > + static int drops = 0; > + if (netmap_copy && drops++ < netmap_copy) > + return; > + drops = 0; > +} > + > if (adapter->num_tx_desc_avail == adapter->num_tx_desc) > return; >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmokw-9if%2BzdTiG3ZeKaVVzE%2BTCtLhWM8ry1iaeRr7AC8gA>