int offset = ibmveth_rxq_frame_offset(adapter);
                        int csum_good = ibmveth_rxq_csum_good(adapter);
                        int lrg_pkt = ibmveth_rxq_large_packet(adapter);
+                       __sum16 iph_check = 0;
 
                        skb = ibmveth_rxq_get_buffer(adapter);
 
                        skb_put(skb, length);
                        skb->protocol = eth_type_trans(skb, netdev);
 
-                       if (length > netdev->mtu + ETH_HLEN) {
+                       /* PHYP without PLSO support places a -1 in the ip
+                        * checksum for large send frames.
+                        */
+                       if (skb->protocol == cpu_to_be16(ETH_P_IP)) {
+                               struct iphdr *iph = (struct iphdr *)skb->data;
+
+                               iph_check = iph->check;
+                       }
+
+                       if ((length > netdev->mtu + ETH_HLEN) ||
+                           lrg_pkt || iph_check == 0xffff) {
                                ibmveth_rx_mss_helper(skb, mss, lrg_pkt);
                                adapter->rx_large_packets++;
                        }