All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <shemminger@vyatta.com>
To: Yegor Yefremov <yegorslists@googlemail.com>
Cc: "Figo.zhang" <figo1802@gmail.com>,
	Dick Hollenbeck <dick@softplc.com>,
	netdev@vger.kernel.org, zealcook@gmail.com
Subject: Re: KS8695: possible NAPI issue
Date: Fri, 5 Mar 2010 08:22:18 -0800	[thread overview]
Message-ID: <20100305082218.4f734857@nehalam> (raw)
In-Reply-To: <f69abfc31003050700y57718a6aje3c1ff41d04748ae@mail.gmail.com>

On Fri, 5 Mar 2010 16:00:11 +0100
Yegor Yefremov <yegorslists@googlemail.com> wrote:

> >> My tests look like following:
> >>
> >> 1. system start
> >> 2. ping one host: O.K.
> >> 3. nc -l -p 5000 > /var/test (about 1Mb): O.K.
> >> 4. ping the same host: failed
> > 1. type "arp" command, see the arp is exit or expire?
> 
> debian:~# nc -l -p 5000 > /var/zImage
> 
> debian:~# ping -c 1 192.168.1.38
> 
> PING 192.168.1.38 (192.168.1.38) 56(84) bytes of data.
> 
> From 192.168.1.66 icmp_seq=1 Destination Host Unreachable
> 
> 
> 
> --- 192.168.1.38 ping statistics ---
> 
> 1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
> 
> 
> 
> debian:~# arp
> 
> Address                  HWtype  HWaddress           Flags Mask            Iface
> 192.168.1.38          (incomplete)                              eth0
> 
> 192.168.1.36             ether   00:10:18:39:19:aa   C                     eth0
> 
> 
> > 2. at this point, see is it still have RX interrpt and receive packet in
> > ks8695_rx()? (in some watchpoint add printk).
> 
> I've inserted some printks and I can see that interrupts are coming
> and the received count will be increased. I can also see my system
> sending arp requests. Even this ping request is visible in wireshark
> and its reply, but the ping utility sees nothing of it.


One of the requirements for NAPI to work is that the IRQ is level triggered.
Otherwise there can be a race between packet arrival and the end of
NAPI processing:

static int ks8695_poll(struct napi_struct *napi, int budget)
{
	struct ks8695_priv *ksp = container_of(napi, struct ks8695_priv, napi);
	unsigned long  work_done;

	unsigned long isr = readl(KS8695_IRQ_VA + KS8695_INTEN);
	unsigned long mask_bit = 1 << ks8695_get_rx_enable_bit(ksp);

	work_done = ks8695_rx(ksp, budget);

	if (work_done < budget) {
		unsigned long flags;
		spin_lock_irqsave(&ksp->rx_lock, flags);
>>> packet arrives >>
		/*enable rx interrupt*/
		writel(isr | mask_bit, KS8695_IRQ_VA + KS8695_INTEN);
>>> or here >>
		__napi_complete(napi);
		spin_unlock_irqrestore(&ksp->rx_lock, flags);

If the hardware can't be reprogrammed to level mode;
the solution used in some drivers is to poll for lost packet after re-enabling
NAPI.



-- 

  reply	other threads:[~2010-03-05 16:22 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-02 12:04 KS8695: possible NAPI issue Yegor Yefremov
2010-03-02 14:09 ` Dick Hollenbeck
2010-03-03  1:46   ` figo zhang
2010-03-03  5:01     ` Dick Hollenbeck
2010-03-03  8:28       ` Yegor Yefremov
2010-03-04 10:10     ` Yegor Yefremov
2010-03-05  6:54       ` figo zhang
2010-03-05 10:06         ` Yegor Yefremov
2010-03-05 13:52           ` Figo.zhang
2010-03-05 15:03             ` Yegor Yefremov
2010-03-05 14:07           ` Figo.zhang
2010-03-05 15:00             ` Yegor Yefremov
2010-03-05 16:22               ` Stephen Hemminger [this message]
2010-03-06  2:40                 ` Figo.zhang
2010-03-08  9:04               ` figo zhang
2010-03-08 14:10                 ` Yegor Yefremov
2010-03-08 14:11                   ` Yegor Yefremov
2010-03-09  1:50                     ` figo zhang
2010-03-15  9:19                       ` Yegor Yefremov
2010-08-04 14:40                         ` Yegor Yefremov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100305082218.4f734857@nehalam \
    --to=shemminger@vyatta.com \
    --cc=dick@softplc.com \
    --cc=figo1802@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=yegorslists@googlemail.com \
    --cc=zealcook@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.