struct iwl_power_constraint {
        struct ieee80211_vif *bf_vif;
        struct ieee80211_vif *bss_vif;
+       struct ieee80211_vif *p2p_vif;
        u16 bss_phyctx_id;
        u16 p2p_phyctx_id;
        bool pm_disabled;
                if (mvmvif->phy_ctxt)
                        power_iterator->p2p_phyctx_id = mvmvif->phy_ctxt->id;
 
+               /* we should have only one P2P vif */
+               WARN_ON(power_iterator->p2p_vif);
+               power_iterator->p2p_vif = vif;
+
                IWL_DEBUG_POWER(mvm, "p2p: p2p_id=%d, bss_id=%d\n",
                                power_iterator->p2p_phyctx_id,
                                power_iterator->bss_phyctx_id);
                        return ret;
        }
 
-       ret = iwl_mvm_power_send_cmd(mvm, vif);
-       if (ret)
-               return ret;
-
-       if (constraint.bss_vif && vif != constraint.bss_vif) {
+       if (constraint.bss_vif) {
                ret = iwl_mvm_power_send_cmd(mvm, constraint.bss_vif);
                if (ret)
                        return ret;
        }
 
+       if (constraint.p2p_vif) {
+               ret = iwl_mvm_power_send_cmd(mvm, constraint.p2p_vif);
+               if (ret)
+                       return ret;
+       }
+
        if (!constraint.bf_vif)
                return 0;