Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 31 Jul 2012 19:13:24 +0400
From:      Andrey Zonov <andrey@zonov.org>
To:        Adrian Chadd <adrian@freebsd.org>
Cc:        svn-src-head@freebsd.org, Luigi Rizzo <luigi@freebsd.org>, src-committers@freebsd.org, svn-src-all@freebsd.org
Subject:   Re: svn commit: r238765 - head/sys/dev/e1000
Message-ID:  <5017F614.1010304@zonov.org>
In-Reply-To: <CAJ-Vmokw-9if%2BzdTiG3ZeKaVVzE%2BTCtLhWM8ry1iaeRr7AC8gA@mail.gmail.com>
References:  <201207251128.q6PBSFlt052575@svn.freebsd.org> <CAJ-Vmokw-9if%2BzdTiG3ZeKaVVzE%2BTCtLhWM8ry1iaeRr7AC8gA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 7/28/12 2:09 AM, Adrian Chadd wrote:
> 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;

I can confirm panics with the latest HEAD running under ESX.

_mtx_lock_sleep: recursed on non-recursive mutex em0 @ 
/usr/src/sys/dev/e1000/if_lem.c:881

Tracing pid 12 tid 100030 td 0xfffffe0002960480
kdb_enter() at kdb_enter+0x3b
panic() at panic+0x1d1
_mtx_lock_sleep() at _mtx_lock_sleep+0x35f
_mtx_lock_flags() at _mtx_lock_flags+0x111
lem_start() at lem_start+0x34
if_transmit() at if_transmit+0xd6
ether_output_frame() at ether_output_frame+0x45
ether_output() at ether_output+0x548
arpintr() at arpintr+0x10c1
netisr_dispatch_src() at netisr_dispatch_src+0x152
ether_demux() at ether_demux+0x18d
ether_nh_input() at ether_nh_input+0x290
netisr_dispatch_src() at netisr_dispatch_src+0x152
lem_intr() at lem_intr+0x3ba
intr_event_execute_handlers() at intr_event_execute_handlers+0x6a
ithread_loop() at ithread_loop+0xab
fork_exit() at fork_exit+0x135
fork_trampoline() at fork_trampoline+0xe
--- trap 0, rip = 0, rsp = 0xffffff8000301cb0, rbp = 0 ---

> * 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;
>>
> _______________________________________________
> svn-src-all@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
>


-- 
Andrey Zonov



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5017F614.1010304>