RE: [net-next 01/16] ixgbe: add check for netif_carrier_ok in ixgbe_xmit_frame

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>-----Original Message-----
>From: Ben Hutchings [mailto:ben@xxxxxxxxxxxxxxx]
>Sent: Friday, March 14, 2014 5:19 PM
>To: David Miller
>Cc: Tantilov, Emil S; Kirsher, Jeffrey T;
>netdev@xxxxxxxxxxxxxxx; gospo@xxxxxxxxxx;
>sassmann@xxxxxxxxxx; asharma@xxxxxx; stable@xxxxxxxxxxxxxxx
>Subject: Re: [net-next 01/16] ixgbe: add check for
>netif_carrier_ok in ixgbe_xmit_frame
>
>On Fri, 2014-03-14 at 17:51 -0400, David Miller wrote:
>> From: "Tantilov, Emil S" <emil.s.tantilov@xxxxxxxxx>
>> Date: Fri, 14 Mar 2014 20:19:38 +0000
>>
>> > That would work, but what if there are other callers of
>> > ndo_start_xmit that don't have this check? Handling this in the
>> > driver takes care of all instances.
>>
>> netif_carrier_off() is supposed to stop traffic from flowing to
>> the device.
>>
>> The qdisc layer should be honoring this property, and my
>> suspicion is that it is just netpoll operates in the unique
>> environment that doesn't.
>
>There is no check for netif_carrier_ok() in the qdisc transmit path.
>Instead netif_carrier_off() eventually causes link_watch to call
>dev_deactivate() which installs the noop qdisc.
>
>It does seem like transmitters that bypass the qdisc should
>be checking netif_carrier_ok(), but drivers must also accept that the
>effect of netif_carrier_off() is not immediate.
>
>Maybe ixgbe is not calling netif_stop_all_queues() at quite
>the right time?

You're probably right. I'm looking into it.

Thanks,
Emil

>
>Ben.
>
>--
>Ben Hutchings
>When you say `I wrote a program that crashed Windows',
>people just stare ...
>and say `Hey, I got those with the system, *for free*'. -
>Linus Torvalds
��.n��������+%������w��{.n�����������ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f





[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]