Hi Yi, On Mon, 2009-11-30 at 12:25 +0800, Zhu Yi wrote: > static void iwm_rx_process_packet(struct iwm_priv *iwm, > struct iwm_rx_packet *packet, > struct iwm_rx_ticket_node *ticket_node) > @@ -1548,22 +1579,31 @@ static void iwm_rx_process_packet(struct iwm_priv *iwm, > switch (le16_to_cpu(ticket_node->ticket->action)) { > case IWM_RX_TICKET_RELEASE: > IWM_DBG_RX(iwm, DBG, "RELEASE packet\n"); > + > + skb->dev = iwm_to_ndev(iwm); > + skb->protocol = eth_type_trans(skb, ndev); > + skb->ip_summed = CHECKSUM_NONE; > + memset(skb->cb, 0, sizeof(skb->cb)); > + I dont think you want to do that processing before calling iwm_rx_adjust_packet() and probably not even before ieee80211_data_to_8023(). You need 802.3 frames for it to be relevant. Moreover, you probably want to do it for every skb on the skb queue you get from the amsdu processing. Cheers, Samuel. > classify8023(skb); > iwm_rx_adjust_packet(iwm, packet, ticket_node); > + > + if (le16_to_cpu(ticket_node->ticket->flags) & > + IWM_RX_TICKET_AMSDU_MSK) { > + iwm_rx_process_amsdu(iwm, skb); > + break; > + } > + > ret = ieee80211_data_to_8023(skb, ndev->dev_addr, wdev->iftype); > if (ret < 0) { > IWM_DBG_RX(iwm, DBG, "Couldn't convert 802.11 header - " > "%d\n", ret); > + kfree_skb(packet->skb); > break; > } > > IWM_HEXDUMP(iwm, DBG, RX, "802.3: ", skb->data, skb->len); > > - skb->dev = iwm_to_ndev(iwm); > - skb->protocol = eth_type_trans(skb, ndev); > - skb->ip_summed = CHECKSUM_NONE; > - memset(skb->cb, 0, sizeof(skb->cb)); > - > ndev->stats.rx_packets++; > ndev->stats.rx_bytes += skb->len; > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html