wake_up(&pf->aq_wait_queue);
 }
 
+#define ICE_MBX_OVERFLOW_WATERMARK 64
+
 /**
  * __ice_clean_ctrlq - helper function to clean controlq rings
  * @pf: ptr to struct ice_pf
                return 0;
 
        do {
+               struct ice_mbx_data data = {};
                u16 opcode;
                int ret;
 
                        ice_vf_lan_overflow_event(pf, &event);
                        break;
                case ice_mbx_opc_send_msg_to_pf:
-                       if (!ice_is_malicious_vf(pf, &event, i, pending))
+                       data.num_msg_proc = i;
+                       data.num_pending_arq = pending;
+                       data.max_num_msgs_mbx = hw->mailboxq.num_rq_entries;
+                       data.async_watermark_val = ICE_MBX_OVERFLOW_WATERMARK;
+
+                       if (!ice_is_malicious_vf(pf, &event, &data))
                                ice_vc_process_vf_msg(pf, &event);
                        break;
                case ice_aqc_opc_fw_logging:
 
  * ice_is_malicious_vf - helper function to detect a malicious VF
  * @pf: ptr to struct ice_pf
  * @event: pointer to the AQ event
- * @num_msg_proc: the number of messages processed so far
- * @num_msg_pending: the number of messages peinding in admin queue
+ * @mbxdata: data about the state of the mailbox
  */
 bool
 ice_is_malicious_vf(struct ice_pf *pf, struct ice_rq_event_info *event,
-                   u16 num_msg_proc, u16 num_msg_pending)
+                   struct ice_mbx_data *mbxdata)
 {
        s16 vf_id = le16_to_cpu(event->desc.retval);
        struct device *dev = ice_pf_to_dev(pf);
-       struct ice_mbx_data mbxdata;
        bool report_malvf = false;
        struct ice_vf *vf;
        int status;
        if (test_bit(ICE_VF_STATE_DIS, vf->vf_states))
                goto out_put_vf;
 
-       mbxdata.num_msg_proc = num_msg_proc;
-       mbxdata.num_pending_arq = num_msg_pending;
-       mbxdata.max_num_msgs_mbx = pf->hw.mailboxq.num_rq_entries;
-#define ICE_MBX_OVERFLOW_WATERMARK 64
-       mbxdata.async_watermark_val = ICE_MBX_OVERFLOW_WATERMARK;
-
        /* check to see if we have a newly malicious VF */
-       status = ice_mbx_vf_state_handler(&pf->hw, &mbxdata, &vf->mbx_info,
+       status = ice_mbx_vf_state_handler(&pf->hw, mbxdata, &vf->mbx_info,
                                          &report_malvf);
        if (status)
                goto out_put_vf;
 
 void ice_restore_all_vfs_msi_state(struct pci_dev *pdev);
 bool
 ice_is_malicious_vf(struct ice_pf *pf, struct ice_rq_event_info *event,
-                   u16 num_msg_proc, u16 num_msg_pending);
+                   struct ice_mbx_data *mbxdata);
 
 int
 ice_set_vf_port_vlan(struct net_device *netdev, int vf_id, u16 vlan_id, u8 qos,
 static inline bool
 ice_is_malicious_vf(struct ice_pf __always_unused *pf,
                    struct ice_rq_event_info __always_unused *event,
-                   u16 __always_unused num_msg_proc,
-                   u16 __always_unused num_msg_pending)
+                   struct ice_mbx_data *mbxdata)
 {
        return false;
 }