ath10k: detach coredump.c from debug.c
authorKalle Valo <kvalo@qca.qualcomm.com>
Fri, 22 Dec 2017 13:38:59 +0000 (15:38 +0200)
committerKalle Valo <kvalo@qca.qualcomm.com>
Wed, 27 Dec 2017 10:20:23 +0000 (12:20 +0200)
Now coredump is totally separate from debug.c and doesn't depend on
CONFIG_ATH10K_DEBUGFS anymore, only on CONFIG_DEV_COREDUMP. Also remove
leftovers from the removed debugfs file support.

Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/Makefile
drivers/net/wireless/ath/ath10k/core.c
drivers/net/wireless/ath/ath10k/core.h
drivers/net/wireless/ath/ath10k/coredump.c
drivers/net/wireless/ath/ath10k/coredump.h
drivers/net/wireless/ath/ath10k/debug.c

index 4e6a396..6739ac2 100644 (file)
@@ -21,7 +21,7 @@ ath10k_core-$(CONFIG_ATH10K_TRACING) += trace.o
 ath10k_core-$(CONFIG_THERMAL) += thermal.o
 ath10k_core-$(CONFIG_MAC80211_DEBUGFS) += debugfs_sta.o
 ath10k_core-$(CONFIG_PM) += wow.o
-ath10k_core-$(CONFIG_ATH10K_DEBUGFS) += coredump.o
+ath10k_core-$(CONFIG_DEV_COREDUMP) += coredump.o
 
 obj-$(CONFIG_ATH10K_PCI) += ath10k_pci.o
 ath10k_pci-y += pci.o \
index fe47516..a771746 100644 (file)
@@ -2735,12 +2735,19 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
 
        init_dummy_netdev(&ar->napi_dev);
 
-       ret = ath10k_debug_create(ar);
+       ret = ath10k_coredump_create(ar);
        if (ret)
                goto err_free_aux_wq;
 
+       ret = ath10k_debug_create(ar);
+       if (ret)
+               goto err_free_coredump;
+
        return ar;
 
+err_free_coredump:
+       ath10k_coredump_destroy(ar);
+
 err_free_aux_wq:
        destroy_workqueue(ar->workqueue_aux);
 err_free_wq:
@@ -2762,6 +2769,7 @@ void ath10k_core_destroy(struct ath10k *ar)
        destroy_workqueue(ar->workqueue_aux);
 
        ath10k_debug_destroy(ar);
+       ath10k_coredump_destroy(ar);
        ath10k_htt_tx_destroy(&ar->htt);
        ath10k_wmi_free_host_mem(ar);
        ath10k_mac_destroy(ar);
index 6ed40f3..7839e83 100644 (file)
@@ -462,8 +462,6 @@ struct ath10k_ce_crash_hdr {
 
 /* used for crash-dump storage, protected by data-lock */
 struct ath10k_fw_crash_data {
-       bool crashed_since_read;
-
        guid_t guid;
        struct timespec64 timestamp;
        __le32 registers[REG_DUMP_COUNT_QCA988X];
@@ -493,8 +491,6 @@ struct ath10k_debug {
        u32 reg_addr;
        u32 nf_cal_period;
        void *cal_data;
-
-       struct ath10k_fw_crash_data *fw_crash_data;
 };
 
 enum ath10k_state {
@@ -971,6 +967,13 @@ struct ath10k {
 #endif
 
        u32 pktlog_filter;
+
+#ifdef CONFIG_DEV_COREDUMP
+       struct {
+               struct ath10k_fw_crash_data *fw_crash_data;
+       } coredump;
+#endif
+
        struct {
                /* protected by conf_mutex */
                struct ath10k_fw_components utf_mode_fw;
index 51b8687..968ab2f 100644 (file)
 
 #include "debug.h"
 
-#ifdef CONFIG_DEV_COREDUMP
-
 struct ath10k_fw_crash_data *ath10k_coredump_new(struct ath10k *ar)
 {
-       struct ath10k_fw_crash_data *crash_data = ar->debug.fw_crash_data;
+       struct ath10k_fw_crash_data *crash_data = ar->coredump.fw_crash_data;
 
        lockdep_assert_held(&ar->data_lock);
 
-       crash_data->crashed_since_read = true;
        guid_gen(&crash_data->guid);
        ktime_get_real_ts64(&crash_data->timestamp);
 
@@ -37,10 +34,9 @@ struct ath10k_fw_crash_data *ath10k_coredump_new(struct ath10k *ar)
 }
 EXPORT_SYMBOL(ath10k_coredump_new);
 
-static struct ath10k_dump_file_data *ath10k_coredump_build(struct ath10k *ar,
-                                                          bool mark_read)
+static struct ath10k_dump_file_data *ath10k_coredump_build(struct ath10k *ar)
 {
-       struct ath10k_fw_crash_data *crash_data = ar->debug.fw_crash_data;
+       struct ath10k_fw_crash_data *crash_data = ar->coredump.fw_crash_data;
        struct ath10k_ce_crash_hdr *ce_hdr;
        struct ath10k_dump_file_data *dump_data;
        struct ath10k_tlv_dump_data *dump_tlv;
@@ -64,12 +60,6 @@ static struct ath10k_dump_file_data *ath10k_coredump_build(struct ath10k *ar,
 
        spin_lock_bh(&ar->data_lock);
 
-       if (!crash_data->crashed_since_read) {
-               spin_unlock_bh(&ar->data_lock);
-               vfree(buf);
-               return NULL;
-       }
-
        dump_data = (struct ath10k_dump_file_data *)(buf);
        strlcpy(dump_data->df_magic, "ATH10K-FW-DUMP",
                sizeof(dump_data->df_magic));
@@ -122,8 +112,6 @@ static struct ath10k_dump_file_data *ath10k_coredump_build(struct ath10k *ar,
        sofar += sizeof(*dump_tlv) + sizeof(*ce_hdr) +
                 CE_COUNT * sizeof(ce_hdr->entries[0]);
 
-       ar->debug.fw_crash_data->crashed_since_read = !mark_read;
-
        spin_unlock_bh(&ar->data_lock);
 
        return dump_data;
@@ -132,34 +120,29 @@ static struct ath10k_dump_file_data *ath10k_coredump_build(struct ath10k *ar,
 int ath10k_coredump_submit(struct ath10k *ar)
 {
        struct ath10k_dump_file_data *dump;
-       void *dump_ptr;
-       u32 dump_len;
 
-       /* To keep the dump file available also for debugfs don't mark the
-        * file read, only debugfs should do that.
-        */
-       dump = ath10k_coredump_build(ar, false);
+       dump = ath10k_coredump_build(ar);
        if (!dump) {
                ath10k_warn(ar, "no crash dump data found for devcoredump");
                return -ENODATA;
        }
 
-       /* Make a copy of the dump file for dev_coredumpv() as during the
-        * transition period we need to own the original file. Once
-        * fw_crash_dump debugfs file is removed no need to have a copy
-        * anymore.
-        */
-       dump_len = le32_to_cpu(dump->len);
-       dump_ptr = vzalloc(dump_len);
+       dev_coredumpv(ar->dev, dump, le32_to_cpu(dump->len), GFP_KERNEL);
 
-       if (!dump_ptr)
-               return -ENOMEM;
-
-       memcpy(dump_ptr, dump, dump_len);
+       return 0;
+}
 
-       dev_coredumpv(ar->dev, dump_ptr, dump_len, GFP_KERNEL);
+int ath10k_coredump_create(struct ath10k *ar)
+{
+       ar->coredump.fw_crash_data = vzalloc(sizeof(*ar->coredump.fw_crash_data));
+       if (!ar->coredump.fw_crash_data)
+               return -ENOMEM;
 
        return 0;
 }
 
-#endif /* CONFIG_DEV_COREDUMP */
+void ath10k_coredump_destroy(struct ath10k *ar)
+{
+       vfree(ar->coredump.fw_crash_data);
+       ar->coredump.fw_crash_data = NULL;
+}
index 2d2f45b..2d33075 100644 (file)
@@ -103,6 +103,8 @@ struct ath10k_dump_file_data {
 
 int ath10k_coredump_submit(struct ath10k *ar);
 struct ath10k_fw_crash_data *ath10k_coredump_new(struct ath10k *ar);
+int ath10k_coredump_create(struct ath10k *ar);
+void ath10k_coredump_destroy(struct ath10k *ar);
 
 #else /* CONFIG_DEV_COREDUMP */
 
@@ -116,6 +118,15 @@ static inline struct ath10k_fw_crash_data *ath10k_coredump_new(struct ath10k *ar
        return NULL;
 }
 
+static inline int ath10k_coredump_create(struct ath10k *ar)
+{
+       return 0;
+}
+
+static inline void ath10k_coredump_destroy(struct ath10k *ar)
+{
+}
+
 #endif /* CONFIG_DEV_COREDUMP */
 
 #endif /* _COREDUMP_H_ */
index f8e4488..48788c8 100644 (file)
@@ -2137,10 +2137,6 @@ static const struct file_operations fops_fw_checksums = {
 
 int ath10k_debug_create(struct ath10k *ar)
 {
-       ar->debug.fw_crash_data = vzalloc(sizeof(*ar->debug.fw_crash_data));
-       if (!ar->debug.fw_crash_data)
-               return -ENOMEM;
-
        ar->debug.cal_data = vzalloc(ATH10K_DEBUG_CAL_DATA_LEN);
        if (!ar->debug.cal_data)
                return -ENOMEM;
@@ -2155,9 +2151,6 @@ int ath10k_debug_create(struct ath10k *ar)
 
 void ath10k_debug_destroy(struct ath10k *ar)
 {
-       vfree(ar->debug.fw_crash_data);
-       ar->debug.fw_crash_data = NULL;
-
        vfree(ar->debug.cal_data);
        ar->debug.cal_data = NULL;