Hi Damien, On Wed, Jul 31, 2024 at 1:39 AM Damien Le Moal <dlemoal@xxxxxxxxxx> wrote: > On 7/30/24 19:09, Geert Uytterhoeven wrote: > > On Fri, 26 Jul 2024, Damien Le Moal wrote: > >> Introduce the function ata_dev_print_quirks() to print the quirk flags > >> that will be applied to a scanned device. This new function is called > >> from ata_dev_quirks() when a match on a device model or device model > >> and revision is found for a device in the __ata_dev_quirks array. > >> > >> To implement this function, the ATA_QUIRK_ flags are redefined using > >> the new enum ata_quirk which defines the bit shift for each quirk > >> flag. The array of strings ata_quirk_names is used to define the name > >> of each flag, which are printed by ata_dev_print_quirks(). > >> > >> Example output for a device listed in the __ata_dev_quirks array and > >> which has the ATA_QUIRK_DISABLE flag applied: > >> > >> [10193.461270] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300) > >> [10193.469190] ata1.00: Model 'ASMT109x- Config', rev '2143 5', applying quirks: disable > >> [10193.469195] ata1.00: unsupported device, disabling > >> [10193.481564] ata1.00: disable device > >> > >> enum ata_quirk also defines the __ATA_QUIRK_MAX value as one plus the > >> last quirk flag defined. This value is used in ata_dev_quirks() to add a > >> build time check that all quirk flags fit within the unsigned int > >> (32-bits) quirks field of struct ata_device. > >> > >> Signed-off-by: Damien Le Moal <dlemoal@xxxxxxxxxx> > >> Reviewed-by: Igor Pylypiv <ipylypiv@xxxxxxxxxx> > > > > Thanks for your patch, which is now commit 58157d607aecb4e0 ("ata: > > libata: Print quirks applied to devices") in libata/for-next. > > > > During boot-up on Salvator-XS (using rcar-sata), the quirk info is > > printed not once, but four times. Is that intentional? > > Not at all. I tested on x86 with AHCI and see this message only once. So it > could be that different drivers may need some tweaks to avoid this spamming. > Though it is strange that the initialization or resume path takes this path 4 > times, meaning that the quirks are applied 4 times. Need to look into that. > What is the driver for rcar-sata ? Compatible string for it would be fine. drivers/ata/sata_rcar.c, using renesas,rcar-gen3-sata. I added a WARN() to ata_dev_quirks() to show backtraces: Call trace: ata_dev_quirks+0x98/0x19c ata_dev_configure+0x74/0x12d8 ata_eh_recover+0x8d8/0xd08 ata_do_eh+0x50/0xa8 ata_sff_error_handler+0xd0/0xec ata_bmdma_error_handler+0x7c/0x12c ata_scsi_port_error_handler+0xc8/0x5f8 ata_scsi_error+0x90/0xcc scsi_error_handler+0x148/0x308 kthread+0xe4/0xf4 ret_from_fork+0x10/0x20 Call trace: ata_dev_quirks+0x98/0x19c ata_dev_configure+0xf34/0x12d8 ata_eh_recover+0x8d8/0xd08 ata_do_eh+0x50/0xa8 ata_sff_error_handler+0xd0/0xec ata_bmdma_error_handler+0x7c/0x12c ata_scsi_port_error_handler+0xc8/0x5f8 ata_scsi_error+0x90/0xcc scsi_error_handler+0x148/0x308 kthread+0xe4/0xf4 ret_from_fork+0x10/0x20 Call trace: ata_dev_quirks+0x98/0x19c ata_dev_configure+0x74/0x12d8 ata_dev_revalidate+0xb4/0x1b8 ata_do_set_mode+0x534/0x6bc ata_set_mode+0xc8/0x128 ata_eh_recover+0x944/0xd08 ata_do_eh+0x50/0xa8 ata_sff_error_handler+0xd0/0xec ata_bmdma_error_handler+0x7c/0x12c ata_scsi_port_error_handler+0xc8/0x5f8 ata_scsi_error+0x90/0xcc scsi_error_handler+0x148/0x308 kthread+0xe4/0xf4 ret_from_fork+0x10/0x20 Call trace: ata_dev_quirks+0x98/0x19c ata_dev_configure+0xf34/0x12d8 ata_dev_revalidate+0xb4/0x1b8 ata_do_set_mode+0x534/0x6bc ata_set_mode+0xc8/0x128 ata_eh_recover+0x944/0xd08 ata_do_eh+0x50/0xa8 ata_sff_error_handler+0xd0/0xec ata_bmdma_error_handler+0x7c/0x12c ata_scsi_port_error_handler+0xc8/0x5f8 ata_scsi_error+0x90/0xcc scsi_error_handler+0x148/0x308 kthread+0xe4/0xf4 ret_from_fork+0x10/0x20 The backtraces seen during s2idle are slightly different: Call trace: ata_dev_quirks+0x98/0x19c ata_dev_configure+0x74/0x12d8 ata_dev_revalidate+0xb4/0x1b8 ata_eh_recover+0x7b4/0xd08 ata_do_eh+0x50/0xa8 ata_sff_error_handler+0xd0/0xec ata_bmdma_error_handler+0x7c/0x12c ata_scsi_port_error_handler+0xc8/0x5f8 ata_scsi_error+0x90/0xcc scsi_error_handler+0x148/0x308 kthread+0xe4/0xf4 ret_from_fork+0x10/0x20 Call trace: ata_dev_quirks+0x98/0x19c ata_dev_configure+0xf34/0x12d8 ata_dev_revalidate+0xb4/0x1b8 ata_eh_recover+0x7b4/0xd08 ata_do_eh+0x50/0xa8 ata_sff_error_handler+0xd0/0xec ata_bmdma_error_handler+0x7c/0x12c ata_scsi_port_error_handler+0xc8/0x5f8 ata_scsi_error+0x90/0xcc scsi_error_handler+0x148/0x308 kthread+0xe4/0xf4 ret_from_fork+0x10/0x20 Call trace: ata_dev_quirks+0x98/0x19c ata_dev_configure+0x74/0x12d8 ata_dev_revalidate+0xb4/0x1b8 ata_do_set_mode+0x534/0x6bc ata_set_mode+0xc8/0x128 ata_eh_recover+0x944/0xd08 ata_do_eh+0x50/0xa8 ata_sff_error_handler+0xd0/0xec ata_bmdma_error_handler+0x7c/0x12c ata_scsi_port_error_handler+0xc8/0x5f8 ata_scsi_error+0x90/0xcc scsi_error_handler+0x148/0x308 kthread+0xe4/0xf4 ret_from_fork+0x10/0x20 Call trace: ata_dev_quirks+0x98/0x19c ata_dev_configure+0xf34/0x12d8 ata_dev_revalidate+0xb4/0x1b8 ata_do_set_mode+0x534/0x6bc ata_set_mode+0xc8/0x128 ata_eh_recover+0x944/0xd08 ata_do_eh+0x50/0xa8 ata_sff_error_handler+0xd0/0xec ata_bmdma_error_handler+0x7c/0x12c ata_scsi_port_error_handler+0xc8/0x5f8 ata_scsi_error+0x90/0xcc scsi_error_handler+0x148/0x308 kthread+0xe4/0xf4 ret_from_fork+0x10/0x20 Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds