}
 
 /**
- * ice_rx_hash - set the hash value in the skb
+ * ice_get_rx_hash - get RX hash value from descriptor
+ * @rx_desc: specific descriptor
+ *
+ * Returns hash, if present, 0 otherwise.
+ */
+static u32 ice_get_rx_hash(const union ice_32b_rx_flex_desc *rx_desc)
+{
+       const struct ice_32b_rx_flex_desc_nic *nic_mdid;
+
+       if (unlikely(rx_desc->wb.rxdid != ICE_RXDID_FLEX_NIC))
+               return 0;
+
+       nic_mdid = (struct ice_32b_rx_flex_desc_nic *)rx_desc;
+       return le32_to_cpu(nic_mdid->rss_hash);
+}
+
+/**
+ * ice_rx_hash_to_skb - set the hash value in the skb
  * @rx_ring: descriptor ring
  * @rx_desc: specific descriptor
  * @skb: pointer to current skb
  * @rx_ptype: the ptype value from the descriptor
  */
 static void
-ice_rx_hash(struct ice_rx_ring *rx_ring, union ice_32b_rx_flex_desc *rx_desc,
-           struct sk_buff *skb, u16 rx_ptype)
+ice_rx_hash_to_skb(const struct ice_rx_ring *rx_ring,
+                  const union ice_32b_rx_flex_desc *rx_desc,
+                  struct sk_buff *skb, u16 rx_ptype)
 {
-       struct ice_32b_rx_flex_desc_nic *nic_mdid;
        u32 hash;
 
        if (!(rx_ring->netdev->features & NETIF_F_RXHASH))
                return;
 
-       if (rx_desc->wb.rxdid != ICE_RXDID_FLEX_NIC)
-               return;
-
-       nic_mdid = (struct ice_32b_rx_flex_desc_nic *)rx_desc;
-       hash = le32_to_cpu(nic_mdid->rss_hash);
-       skb_set_hash(skb, hash, ice_ptype_to_htype(rx_ptype));
+       hash = ice_get_rx_hash(rx_desc);
+       if (likely(hash))
+               skb_set_hash(skb, hash, ice_ptype_to_htype(rx_ptype));
 }
 
 /**
                       union ice_32b_rx_flex_desc *rx_desc,
                       struct sk_buff *skb, u16 ptype)
 {
-       ice_rx_hash(rx_ring, rx_desc, skb, ptype);
+       ice_rx_hash_to_skb(rx_ring, rx_desc, skb, ptype);
 
        /* modifies the skb - consumes the enet header */
        skb->protocol = eth_type_trans(skb, rx_ring->netdev);