Re: Fwd: Kernel 6.5.2 Causes Marvell Technology Group 88SE9128 PCIe SATA to Constantly Reset

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

 



Le 2023/09/15 à 16:50, Niklas Cassel a écrit :
On Fri, Sep 15, 2023 at 02:54:19PM +0800, David Gow wrote:
Le 2023/09/15 à 13:41, Damien Le Moal a écrit :
On 9/15/23 12:22, David Gow wrote:
Le 2023/09/13 à 23:12, Niklas Cassel a écrit :
On Wed, Sep 13, 2023 at 06:25:31PM +0700, Bagas Sanjaya wrote:
Hi,

I notice a regression report on Bugzilla [1]. Quoting from it:

After upgrading to 6.5.2 from 6.4.12 I keep getting the following kernel messages around three times per second:

[ 9683.269830] ata16: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[ 9683.270399] ata16.00: configured for UDMA/66

So I've tracked the offending device:

ll /sys/class/ata_port/ata16
lrwxrwxrwx 1 root root 0 Sep 10 21:51 /sys/class/ata_port/ata16 -> ../../devices/pci0000:00/0000:00:1c.7/0000:0a:00.0/ata16/ata_port/ata16

cat /sys/bus/pci/devices/0000:0a:00.0/uevent
DRIVER=ahci
PCI_CLASS=10601
PCI_ID=1B4B:9130
PCI_SUBSYS_ID=1043:8438
PCI_SLOT_NAME=0000:0a:00.0
MODALIAS=pci:v00001B4Bd00009130sv00001043sd00008438bc01sc06i01

lspci | grep 0a:00.0
0a:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9128 PCIe SATA 6 Gb/s RAID controller with HyperDuo (rev 11)

I am not using the 88SE9128, so I have no way of knowing whether it works or not. It may simply be getting reset a couple of times per second or it may not function at all.

See Bugzilla for the full thread.

patenteng: I have asked you to bisect this regression. Any conclusion?

Anyway, I'm adding this regression to regzbot:

#regzbot: introduced: v6.4..v6.5 https://bugzilla.kernel.org/show_bug.cgi?id=217902

Hello Bagas, patenteng,


FYI, the prints:
[ 9683.269830] ata16: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[ 9683.270399] ata16.00: configured for UDMA/66

Just show that ATA error handler has been invoked.
There was no reset performed.

If there was a reset, you would have seen something like:
[    1.441326] ata8: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[    1.541250] ata8.00: configured for UDMA/133
[    1.541411] ata8: hard resetting link


Could you please try this patch and see if it improves things for you:
https://lore.kernel.org/linux-ide/20230913150443.1200790-1-nks@xxxxxxxxxxx/T/#u


FWIW, I'm seeing a very similar issue both in 6.5.2 and in git master
[aed8aee11130 ("Merge tag 'pmdomain-v6.6-rc1' of
git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm") with that
patch applied.


The log is similar (the last two lines repeat several times a second):
[    0.369632] ata14: SATA max UDMA/133 abar m2048@0xf7c10000 port
0xf7c10480 irq 33
[    0.683693] ata14: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[    1.031662] ata14.00: ATAPI: MARVELL VIRTUALL, 1.09, max UDMA/66
[    1.031852] ata14.00: configured for UDMA/66
[    1.414145] ata14: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[    1.414505] ata14.00: configured for UDMA/66
[    1.744094] ata14: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[    1.744368] ata14.00: configured for UDMA/66
[    2.073916] ata14: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[    2.074276] ata14.00: configured for UDMA/66


lspci shows:
09:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9230 PCIe 2.0
x2 4-port SATA 6 Gb/s RAID Controller (rev 10) (prog-if 01 [AHCI 1.0])
           Subsystem: Gigabyte Technology Co., Ltd Device b000
           Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B- DisINTx+
           Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
           Latency: 0, Cache Line Size: 64 bytes
           Interrupt: pin A routed to IRQ 33
           Region 0: I/O ports at b050 [size=8]
           Region 1: I/O ports at b040 [size=4]
           Region 2: I/O ports at b030 [size=8]
           Region 3: I/O ports at b020 [size=4]
           Region 4: I/O ports at b000 [size=32]
           Region 5: Memory at f7c10000 (32-bit, non-prefetchable) [size=2K]
           Expansion ROM at f7c00000 [disabled] [size=64K]
           Capabilities: <access denied>
           Kernel driver in use: ahci

The controller in question lives on a Gigabyte Z87X-UD5H-CF motherboard.
I'm using the controller for several drives, and it's working, it's just
spammy. (At worst, there's some performance hitching, but that might
just be journald rotating logs as they fill up with the message).

I haven't had a chance to bisect yet (this is a slightly awkward machine
for me to install test kernels on), but can also confirm it worked with
6.4.12.

Hopefully that's useful. I'll get back to you if I manage to bisect it.

Bisect will definitely be welcome. But first, please try adding the patch that
Niklas mentioned above:

https://lore.kernel.org/linux-ide/20230913150443.1200790-1-nks@xxxxxxxxxxx/T/#u

If that fixes the issue, we know the culprit :)



Sorry: I wasn't clear. I did try with that patch (applied on top of
torvalds/master), and the issue remained.

I've started bisecting, but fear it'll take a while.

I can recommend using QEMU and PCI passthrough to bisect, as it is much
faster to boot a kernel using QEMU with KVM than to do a real reboot.

It takes a while to set up the first time, but you know what they say:
"give a man a fish and you feed him for a day;
teach a man to fish and you feed him for a lifetime".

There are many ways to do it, but here is an example guide:
https://github.com/floatious/qemu-bisect-doc


Thanks. Alas, this machine doesn't have an IOMMU, which makes that difficult. I've definitely saved the link for the future, though.

In any case, the bisect is done:

624885209f31eb9985bf51abe204ecbffe2fdeea is the first bad commit
commit 624885209f31eb9985bf51abe204ecbffe2fdeea
Author: Damien Le Moal <dlemoal@xxxxxxxxxx>
Date:   Thu May 11 03:13:41 2023 +0200

    scsi: core: Detect support for command duration limits

    Introduce the function scsi_cdl_check() to detect if a device supports
command duration limits (CDL). Support for the READ 16, WRITE 16, READ 32 and WRITE 32 commands are checked using the function scsi_report_opcode() to probe the rwcdlp and cdlp bits as they indicate the mode page defining
    the command duration limits descriptors that apply to the command being
    tested.

    If any of these commands support CDL, the field cdl_supported of struct
    scsi_device is set to 1 to indicate that the device supports CDL.

    Support for CDL for a device is advertizes through sysfs using the new
    cdl_supported device attribute. This attribute value is 1 for a device
    supporting CDL and 0 otherwise.

    Signed-off-by: Damien Le Moal <dlemoal@xxxxxxxxxx>
    Reviewed-by: Hannes Reinecke <hare@xxxxxxx>
    Co-developed-by: Niklas Cassel <niklas.cassel@xxxxxxx>
    Signed-off-by: Niklas Cassel <niklas.cassel@xxxxxxx>
    Link: https://lore.kernel.org/r/20230511011356.227789-9-nks@xxxxxxxxxxx
    Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>

 Documentation/ABI/testing/sysfs-block-device |  9 ++++
drivers/scsi/scsi.c | 81 ++++++++++++++++++++++++++++
 drivers/scsi/scsi_scan.c                     |  3 ++
 drivers/scsi/scsi_sysfs.c                    |  2 +
 include/scsi/scsi_device.h                   |  3 ++
 5 files changed, 98 insertions(+)


This seems to match what was found on the Arch Linux forums, too:
https://bbs.archlinux.org/viewtopic.php?id=288723&p=3

I haven't tried it yet, but according to that forum thread, removing the calls to scsi_cdl_check() seems to resolve the issue. This is all well beyond my SCSI knowledge, but maybe a quirk to disable these CDL checks for these older marvell controllers is required? Though it seems odd that the device would be rescanned and/or scsi_add_lun called multiple times a second -- is that normal?

In any case, this seems to be the cause.

Thanks!
-- David




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux