Skip site navigation (1)Skip section navigation (2)
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>