svn commit: r238765 - head/sys/dev/e1000

Adrian Chadd adrian at freebsd.org
Fri Jul 27 22:09:33 UTC 2012


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 at 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;
>


More information about the svn-src-head mailing list