From: Ben Greear <greearb@candelatech.com>
To: Michal Kazior <michal.kazior@tieto.com>,
Kalle Valo <kvalo@qca.qualcomm.com>
Cc: "ath10k@lists.infradead.org" <ath10k@lists.infradead.org>,
linux-wireless <linux-wireless@vger.kernel.org>
Subject: Re: [PATCH v7 2/8] ath10k: provide firmware crash info via debugfs
Date: Tue, 19 Aug 2014 08:25:23 -0700 [thread overview]
Message-ID: <53F36C63.8040809@candelatech.com> (raw)
In-Reply-To: <CA+BoTQn2aq5EV4mvTs3Ww4i9gAJsmMM5iDfrFd=YfC0YxMi2WQ@mail.gmail.com>
On 08/19/2014 02:33 AM, Michal Kazior wrote:
> On 19 August 2014 10:22, Kalle Valo <kvalo@qca.qualcomm.com> wrote:
>> From: Ben Greear <greearb@candelatech.com>
>>
>> Store the firmware crash registers and last 128 or so
>> firmware debug-log ids and present them to user-space
>> via debugfs.
>>
>> Should help with figuring out why the firmware crashed.
>>
>> Signed-off-by: Ben Greear <greearb@candelatech.com>
>> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
>> ---
> [...]
>> +struct ath10k_dump_file_data {
>> + /* dump file information */
>> +
>> + /* "ATH10K-FW-DUMP" */
>> + char df_magic[16];
>> +
>> + __le32 len;
>> +
>> + /* file dump version */
>> + __le32 version;
>> +
>> + /* some info we can get from ath10k struct that might help */
>> +
>> + u8 uuid[16];
>> +
>> + __le32 chip_id;
>> +
>> + /* 0 for now, in place for later hardware */
>> + __le32 bus_type;
>> +
>> + __le32 target_version;
>> + __le32 fw_version_major;
>> + __le32 fw_version_minor;
>> + __le32 fw_version_release;
>> + __le32 fw_version_build;
>> + __le32 phy_capability;
>> + __le32 hw_min_tx_power;
>> + __le32 hw_max_tx_power;
>> + __le32 ht_cap_info;
>> + __le32 vht_cap_info;
>> + __le32 num_rf_chains;
>
> Hmm.. some of these values don't really change once driver is loaded
> so we could probably just export them as separate debugfs entries but
> perhaps that's an overkill just for dumping.
I think it will be easier for all involved if there is a single dump image that
has all needed info. Likely the end user of the dump file will have little or no
interaction with the host that dumped the file to begin with.
>> + dump_data->kernel_ver_code = cpu_to_le32(LINUX_VERSION_CODE);
>> + strlcpy(dump_data->kernel_ver, VERMAGIC_STRING,
>> + sizeof(dump_data->kernel_ver));
>> +
>> + dump_data->tv_sec = cpu_to_le64(crash_data->timestamp.tv_sec);
>> + dump_data->tv_nsec = cpu_to_le64(crash_data->timestamp.tv_nsec);
>> +
>> + /* Gather dbg-log */
>> + dump_tlv = (struct ath10k_tlv_dump_data *)(buf + sofar);
>> + dump_tlv->type = cpu_to_le32(ATH10K_FW_CRASH_DUMP_DBGLOG);
>> + dump_tlv->tlv_len = cpu_to_le32(sizeof(crash_data->dbglog_entry_data));
>
> Hmm should this really be sizeof()? Not next_idx (which effectively
> defines number of bytes of the dbglog)?
I haven't tried decoding this yet, but we may need to know the next_idx
to decode this properly.
>> + memcpy(dump_tlv->tlv_data, &crash_data->dbglog_entry_data,
>> + sizeof(crash_data->dbglog_entry_data));
>> + sofar += sizeof(*dump_tlv) + sizeof(crash_data->dbglog_entry_data);
>> +
>> + /* Gather crash-dump */
>> + dump_tlv = (struct ath10k_tlv_dump_data *)(buf + sofar);
>> + dump_tlv->type = cpu_to_le32(ATH10K_FW_CRASH_DUMP_REGDUMP);
>> + dump_tlv->tlv_len = cpu_to_le32(sizeof(crash_data->reg_dump_values));
>> + memcpy(dump_tlv->tlv_data, &crash_data->reg_dump_values,
>> + sizeof(crash_data->reg_dump_values));
>> + sofar += sizeof(*dump_tlv) + sizeof(crash_data->reg_dump_values);
>
> I haven't seen you mention that your latest patchset is based on my
> patches that remove implicit byte swap from some diag functions so I
> infer you're might've missed that reg_dump_values will be byte swapped
> on big-endian hosts and userspace will remain unaware of that since
> there is no endianess indication in the crash dump structure anymore.
>
> reg_dump_values must be swapped cpu_to_le32 here (or should be never
> implicit byte swapped in the first place).
>
> It's probably worth stating in the comments that
> ATH10K_FW_CRASH_DUMP_REGDUMP returns a list of __le32.
>
>
>> + ret = ath10k_pci_diag_read_mem(ar, dbuf.buffer, buffer,
>> + dbuf.length);
>> + if (ret != 0) {
>> + ath10k_warn("failed to read debug log buffer from address 0x%x: %d\n",
>> + dbuf.buffer, ret);
>> + kfree(buffer);
>> + return;
>> + }
>> +
>> + ath10k_debug_dbglog_add(ar, buffer, dbuf.length);
>> + kfree(buffer);
>
> Is the `buffer` really a string of bytes (u8) or just u32 in disguise?
> If it's the former then on big-endian host the implicit byte swap will
> mess it up and userspace will have no way of knowing that now.
dbglog is array of 32 bit ints.
Thanks,
Ben
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
next prev parent reply other threads:[~2014-08-19 15:25 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-19 8:22 [PATCH v7 0/8] ath10k: firmware crash dump Kalle Valo
2014-08-19 8:22 ` [PATCH v7 1/8] ath10k: add ath10k_pci_diag_* helpers Kalle Valo
2014-08-19 8:22 ` [PATCH v7 2/8] ath10k: provide firmware crash info via debugfs Kalle Valo
2014-08-19 9:33 ` Michal Kazior
2014-08-19 15:25 ` Ben Greear [this message]
2014-08-19 16:05 ` Ben Greear
2014-08-20 7:36 ` Kalle Valo
2014-08-20 6:28 ` Michal Kazior
2014-08-20 6:48 ` Kalle Valo
2014-08-20 6:56 ` Kalle Valo
2014-08-20 13:13 ` Ben Greear
2014-08-20 7:29 ` Kalle Valo
2014-08-20 13:08 ` Ben Greear
2014-08-20 14:19 ` Kalle Valo
2014-08-20 14:52 ` Ben Greear
2014-08-19 8:23 ` [PATCH v7 3/8] ath10k: save firmware debug log messages Kalle Valo
2014-08-19 9:39 ` Michal Kazior
2014-08-19 9:44 ` Michal Kazior
2014-08-19 15:16 ` Ben Greear
2014-08-19 8:23 ` [PATCH v7 4/8] ath10k: save firmware stack upon firmware crash Kalle Valo
2014-08-19 9:37 ` Michal Kazior
2014-08-19 8:23 ` [PATCH v7 5/8] ath10k: dump exception stack contents on " Kalle Valo
2014-08-19 9:38 ` Michal Kazior
2014-08-19 8:23 ` [PATCH v7 6/8] ath10k: save firmware RAM and ROM BSS sections on crash Kalle Valo
2014-08-19 9:39 ` Michal Kazior
2014-08-19 8:23 ` [PATCH v7 7/8] ath10k: rename ath10k_pci_hif_dump_area() to ath10k_pci_fw_crashed_dump() Kalle Valo
2014-08-19 8:23 ` [PATCH v7 8/8] ath10k: print more driver info when firmware crashes Kalle Valo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53F36C63.8040809@candelatech.com \
--to=greearb@candelatech.com \
--cc=ath10k@lists.infradead.org \
--cc=kvalo@qca.qualcomm.com \
--cc=linux-wireless@vger.kernel.org \
--cc=michal.kazior@tieto.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).