Hi Jesse,

I have some difficulties understanding the meaning of the following code fragments in e1000 driver. It seems this is for packet-split and non packet-split respectively. But could you shed more lights on the logic behind this code fragment?

Thanks,

John

static boolean_t e1000_clean_rx_irq()
{
.............
skb_put(skb, length);
if (!(status & E1000_RXD_STAT_EOP)) {
  if (!rx_ring->rx_skb_top) {
   rx_ring->rx_skb_top = skb;
   rx_ring->rx_skb_top->len = length;
   rx_ring->rx_skb_prev = skb;
  } else {
   if (skb_shinfo(rx_ring->rx_skb_top)->frag_list) {
    rx_ring->rx_skb_prev->next = skb;
    skb->prev = rx_ring->rx_skb_prev;
   } else {
    skb_shinfo(rx_ring->rx_skb_top)->frag_list = skb;
   }
   rx_ring->rx_skb_prev = skb;
   rx_ring->rx_skb_top->data_len += length;
  }
  goto next_desc;
 } else {
  if (rx_ring->rx_skb_top) {
   if (skb_shinfo(rx_ring->rx_skb_top)
      ->frag_list) {
    rx_ring->rx_skb_prev->next = skb;
    skb->prev = rx_ring->rx_skb_prev;
   } else
    skb_shinfo(rx_ring->rx_skb_top)
      ->frag_list = skb;

   rx_ring->rx_skb_top->data_len += length;
   rx_ring->rx_skb_top->len +=
    rx_ring->rx_skb_top->data_len;

   skb = rx_ring->rx_skb_top;
   multi_descriptor = TRUE;
   rx_ring->rx_skb_top = NULL;
   rx_ring->rx_skb_prev = NULL;
  }
 }
............
} -
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to