Re: [PATCH] thunderbolt: debugfs: Show all accessible dwords

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Gil,


On Tue, Mar 9, 2021 at 1:23 AM Gil Fine <gil.fine@xxxxxxxxx> wrote:
>
> Currently, when first failure occurs while reading of the block,
> we stop reading the block and jump to the next capability.
> This doesn't cover the case of block with "holes" of inaccessible
> dwords, followed by accessible dwords.
> This patch address this problem.
> In case of failure while reading the complete block in one transaction,
> (because of one or more dwords is inaccessible), we read the remaining
> dwords of the block dword-by-dword, one dword per transaction,
> till the end of the block.
> By doing this, we handle the case of block with "holes" of inaccessible
> dwords, followed by accessible dwords. The accessible dwords are shown
> with the fields: <offset> <relative_offset> <cap_id> <vs_cap_id> <value>
> E.g.:
> 0x01eb  236 0x05 0x06 0x0000d166
> While the inaccesible dwords are shown as: <offset> <not accessible>
> E.g.:
> 0x01ed <not accessible>
>
> Signed-off-by: Gil Fine <gil.fine@xxxxxxxxx>
> ---
>  drivers/thunderbolt/debugfs.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/thunderbolt/debugfs.c b/drivers/thunderbolt/debugfs.c
> index 201036507cb8..c850b0ac098c 100644
> --- a/drivers/thunderbolt/debugfs.c
> +++ b/drivers/thunderbolt/debugfs.c
> @@ -265,10 +265,8 @@ static void cap_show_by_dw(struct seq_file *s, struct tb_switch *sw,
>                 else
>                         ret = tb_sw_read(sw, &data, TB_CFG_SWITCH, cap + offset + i, 1);
>                 if (ret) {
> -                       seq_printf(s, "0x%04x <not accessible>\n", cap + offset);
> -                       if (dwords - i > 1)
> -                               seq_printf(s, "0x%04x ...\n", cap + offset + 1);
> -                       return;
> +                       seq_printf(s, "0x%04x <not accessible>\n", cap + offset + i);
> +                       continue;
>                 }
>
>                 seq_printf(s, "0x%04x %4d 0x%02x 0x%02x 0x%08x\n", cap + offset + i,
> @@ -292,7 +290,7 @@ static void cap_show(struct seq_file *s, struct tb_switch *sw,
>                 else
>                         ret = tb_sw_read(sw, data, TB_CFG_SWITCH, cap + offset, dwords);
>                 if (ret) {
> -                       cap_show_by_dw(s, sw, port, cap, offset, cap_id, vsec_id, dwords);

Sorry for being late here:
Can we call cap_show_by_dw(..., dwords) directly here, instead of
having the logic of doing the block read and then resorting to this if
the block read fails?
Since it's debugfs, I doubt efficiency gains are paramount here, and
we have a simpler invocation at the callsite.

> +                       cap_show_by_dw(s, sw, port, cap, offset, cap_id, vsec_id, length);
>                         return;
>                 }
>
> --
> 2.17.1
>
> ---------------------------------------------------------------------
> Intel Israel (74) Limited
>
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
>



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux