iwlwifi: return error if d0i3 was aborted
authorEliad Peller <eliad@wizery.com>
Thu, 4 Jun 2015 18:59:32 +0000 (21:59 +0300)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Tue, 4 Aug 2015 07:11:47 +0000 (10:11 +0300)
Allow the transport layer to return an error upon suspend.

Signed-off-by: Eliad Peller <eliadx.peller@intel.com>
Reviewed-by: Luciano Coelho <luciano.coelho@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/iwlwifi/iwl-trans.h
drivers/net/wireless/iwlwifi/mvm/d3.c

index 8f67004faf4de98bb433e7285e7ddcca5496501b..e698ed5e34cc311f427151b7c0d9e4c34302e580 100644 (file)
@@ -598,7 +598,7 @@ struct iwl_trans_ops {
                              u32 value);
        void (*ref)(struct iwl_trans *trans);
        void (*unref)(struct iwl_trans *trans);
-       void (*suspend)(struct iwl_trans *trans);
+       int  (*suspend)(struct iwl_trans *trans);
        void (*resume)(struct iwl_trans *trans);
 
        struct iwl_trans_dump_data *(*dump_data)(struct iwl_trans *trans);
@@ -807,10 +807,12 @@ static inline void iwl_trans_unref(struct iwl_trans *trans)
                trans->ops->unref(trans);
 }
 
-static inline void iwl_trans_suspend(struct iwl_trans *trans)
+static inline int iwl_trans_suspend(struct iwl_trans *trans)
 {
-       if (trans->ops->suspend)
-               trans->ops->suspend(trans);
+       if (!trans->ops->suspend)
+               return 0;
+
+       return trans->ops->suspend(trans);
 }
 
 static inline void iwl_trans_resume(struct iwl_trans *trans)
index 246e60aa2905bf866f29e8d80f6cc05bf9ba433a..68d7218236457646cee949d99827e052cc4f41f0 100644 (file)
@@ -1168,13 +1168,17 @@ remove_notif:
 int iwl_mvm_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
 {
        struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
+       int ret;
+
+       ret = iwl_trans_suspend(mvm->trans);
+       if (ret)
+               return ret;
 
-       iwl_trans_suspend(mvm->trans);
        mvm->trans->wowlan_d0i3 = wowlan->any;
        if (mvm->trans->wowlan_d0i3) {
                /* 'any' trigger means d0i3 usage */
                if (mvm->trans->d0i3_mode == IWL_D0I3_MODE_ON_SUSPEND) {
-                       int ret = iwl_mvm_enter_d0i3_sync(mvm);
+                       ret = iwl_mvm_enter_d0i3_sync(mvm);
 
                        if (ret)
                                return ret;