title: Regarding NAPI implementation in Linux kernel
body: <p>I am trying to understand the NAPI enabled Network driver and have some doubts regarding the same.</p>
  
  <p>If I talk about in layman's term whenever a network packets comes at the interface, it is notified to CPU and appropriate Ethernet driver(interrupt handler) code is executed.Ethernet driver code then copy the packet from Ethernet's Device memory to DMA buffers and finally packets are pushed to upper layer.</p>
  
  <p>Is above true for NAPI disabled Ethernet driver?</p>
  
  <p>Now for NAPI enabled Ethernet driver initially whenever packets comes at interface ,it is notified to CPU and appropriate Ethernet driver code (Interrupt handler)  is executed .Inside the interrupt handler code we check if type of interrupt is received packet.</p>
  
  <pre><code> if(statusword &amp; SNULL_RX_INTER)
     snull_rx_ints(dev,0);//Disbale further interrupts
     netif_rx_schedule(dev);
  </code></pre>
  
  <p>What does it mean by disabling further interrupts?</p>
  
  <p>Is it mean packets are still captured by device and kept in device memory but not notified to CPU about the availability of these packets?</p>
  
  <p>Also ,what it mean by CPU is pooling the device ,is it like CPU after every few second will run <code>snull_poll()</code> method and copy whatever number of packets are in device memory to DMA Buffer and pushed to Upper layer?    </p>
  
  <p>It would be great help if someone provides me clear picture on it.</p>