enum {
        ETHTOOL_STAT_EEE_WAKEUP,
+       ETHTOOL_STAT_SKB_ALLOC_ERR,
+       ETHTOOL_STAT_REFILL_ERR,
        ETHTOOL_MAX_STATS,
 };
 
        { 0x3054, T_REG_32, "fc_sent", },
        { 0x300c, T_REG_32, "internal_mac_transmit_err", },
        { ETHTOOL_STAT_EEE_WAKEUP, T_SW, "eee_wakeup_errors", },
+       { ETHTOOL_STAT_SKB_ALLOC_ERR, T_SW, "skb_alloc_errors", },
+       { ETHTOOL_STAT_REFILL_ERR, T_SW, "refill_errors", },
 };
 
 struct mvneta_pcpu_stats {
        /* num of rx descriptors in the rx descriptor ring */
        int size;
 
-       /* counter of times when mvneta_refill() failed */
-       int missed;
-
        u32 pkts_coal;
        u32 time_coal;
 
 
        /* Index of the next RX DMA descriptor to process */
        int next_desc_to_proc;
+
+       /* error counters */
+       u32 skb_alloc_err;
+       u32 refill_err;
 };
 
 static enum cpuhp_state online_hpstate;
                if (rx_bytes <= rx_copybreak) {
                /* better copy a small frame and not unmap the DMA region */
                        skb = netdev_alloc_skb_ip_align(dev, rx_bytes);
-                       if (unlikely(!skb))
+                       if (unlikely(!skb)) {
+                               netdev_err(dev,
+                                          "Can't allocate skb on queue %d\n",
+                                          rxq->id);
+                               rxq->skb_alloc_err++;
                                goto err_drop_frame;
+                       }
 
                        dma_sync_single_range_for_cpu(dev->dev.parent,
                                                      phys_addr,
                err = mvneta_rx_refill(pp, rx_desc, rxq);
                if (err) {
                        netdev_err(dev, "Linux processing - Can't refill\n");
-                       rxq->missed++;
+                       rxq->refill_err++;
                        goto err_drop_frame;
                }
 
                err = hwbm_pool_refill(&bm_pool->hwbm_pool, GFP_ATOMIC);
                if (err) {
                        netdev_err(dev, "Linux processing - Can't refill\n");
-                       rxq->missed++;
+                       rxq->refill_err++;
                        goto err_drop_frame_ret_pool;
                }
 
                        case ETHTOOL_STAT_EEE_WAKEUP:
                                val = phylink_get_eee_err(pp->phylink);
                                break;
+                       case ETHTOOL_STAT_SKB_ALLOC_ERR:
+                               val = pp->rxqs[0].skb_alloc_err;
+                               break;
+                       case ETHTOOL_STAT_REFILL_ERR:
+                               val = pp->rxqs[0].refill_err;
+                               break;
                        }
                        break;
                }