* current #upstream bug?
@ 2006-03-12 15:42 Jeff Garzik
2006-03-12 16:57 ` [PATCH] libata: fix class handling in ata_bus_probe() Tejun Heo
0 siblings, 1 reply; 12+ messages in thread
From: Jeff Garzik @ 2006-03-12 15:42 UTC (permalink / raw)
To: Tejun Heo; +Cc: linux-ide@vger.kernel.org
[-- Attachment #1: Type: text/plain, Size: 2316 bytes --]
I see this in current #upstream, on an x86-64 SMP box with sata_nv and
sata_mv:
> libata version 1.20 loaded.
> sata_nv 0000:00:07.0: version 0.8
> ACPI: PCI Interrupt Link [LSA0] enabled at IRQ 23
> GSI 18 sharing vector 0xC1 and IRQ 18
> ACPI: PCI Interrupt 0000:00:07.0[A] -> Link [LSA0] -> GSI 23 (level, high) -> IRQ 193
> PCI: Setting latency timer of device 0000:00:07.0 to 64
> ata1: SATA max UDMA/133 cmd 0x28D0 ctl 0x28FA bmdma 0x28B0 irq 193
> ata2: SATA max UDMA/133 cmd 0x28D8 ctl 0x28FE bmdma 0x28B8 irq 193
> ata1: SATA link up 1.5 Gbps (SStatus 113)
> ata1: dev 0 cfg 49:2f00 82:3469 83:7f61 84:4003 85:3469 86:3e41 87:4003 88:407f
> ata1: dev 0 ATA-6, max UDMA/133, 488281250 sectors: LBA48
> nv_sata: Primary device added
> nv_sata: Primary device removed
> nv_sata: Secondary device added
> nv_sata: Secondary device removed
> ata1: dev 0 cfg 49:2f00 82:3469 83:7f61 84:4003 85:3469 86:3e41 87:4003 88:407f
> ata1: dev 0 configured for UDMA/133
> scsi2 : sata_nv
> ata2: SATA link down (SStatus 0)
> ata2: PIO error
> ata2: dev 0 failed to IDENTIFY (I/O error)
> scsi3 : sata_nv
> Vendor: ATA Model: WDC WD2500JD-75H Rev: 08.0
> Type: Direct-Access ANSI SCSI revision: 05
> SCSI device sda: 488281250 512-byte hdwr sectors (250000 MB)
> sda: Write Protect is off
> sda: Mode Sense: 00 3a 00 00
> SCSI device sda: drive cache: write back
> SCSI device sda: 488281250 512-byte hdwr sectors (250000 MB)
> sda: Write Protect is off
> sda: Mode Sense: 00 3a 00 00
> SCSI device sda: drive cache: write back
> sda:<4>nv_sata: Primary device added
> nv_sata: Primary device removed
> nv_sata: Secondary device added
> nv_sata: Secondary device removed
> sda1 sda2 sda3 sda4 <<4>nv_sata: Primary device added
> nv_sata: Primary device removed
> nv_sata: Secondary device added
> nv_sata: Secondary device removed
> sda5<4>nv_sata: Primary device added
> nv_sata: Primary device removed
> nv_sata: Secondary device added
> nv_sata: Secondary device removed
> sda6 >
> sd 2:0:0:0: Attached scsi disk sda
The problem is that it complains about a PIO error and that a device
failed IDENTIFY, when clearly (SStatus==0) there is no device present.
Full dmesg attached. sata_mv stopped finding its ATA device, but I
haven't even begun to look into that yet.
Jeff
[-- Attachment #2: dmesg.txt.bz2 --]
[-- Type: application/x-bzip, Size: 6052 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread* [PATCH] libata: fix class handling in ata_bus_probe() 2006-03-12 15:42 current #upstream bug? Jeff Garzik @ 2006-03-12 16:57 ` Tejun Heo 2006-03-12 17:50 ` Jeff Garzik 2006-03-12 18:24 ` Jeff Garzik 0 siblings, 2 replies; 12+ messages in thread From: Tejun Heo @ 2006-03-12 16:57 UTC (permalink / raw) To: Jeff Garzik; +Cc: linux-ide@vger.kernel.org ata_bus_probe() didn't set classes[] properly for port disabled case of ->phy_reset() compatibility path. This patch moves classes[] initialization and normalization out of ->probe_reset block such that it applies to both ->probe_reset and ->phy_reset paths. Signed-off-by: Tejun Heo <htejun@gmail.com> --- Jeff, the sata_nv case is similar bug as what Jiri reported, except that this one is affecting ->phy_reset path. This patch should fix sata_nv. For sata_mv, I have no idea at all. libata-core.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 42d43b5..c17df3f 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c @@ -1344,32 +1344,30 @@ static int ata_bus_probe(struct ata_port ata_port_probe(ap); - /* reset */ - if (ap->ops->probe_reset) { - for (i = 0; i < ATA_MAX_DEVICES; i++) - classes[i] = ATA_DEV_UNKNOWN; + /* reset and determine device classes */ + for (i = 0; i < ATA_MAX_DEVICES; i++) + classes[i] = ATA_DEV_UNKNOWN; + if (ap->ops->probe_reset) { rc = ap->ops->probe_reset(ap, classes); if (rc) { printk("ata%u: reset failed (errno=%d)\n", ap->id, rc); return rc; } - - for (i = 0; i < ATA_MAX_DEVICES; i++) - if (classes[i] == ATA_DEV_UNKNOWN) - classes[i] = ATA_DEV_NONE; } else { ap->ops->phy_reset(ap); - for (i = 0; i < ATA_MAX_DEVICES; i++) { - if (!(ap->flags & ATA_FLAG_PORT_DISABLED)) + if (!(ap->flags & ATA_FLAG_PORT_DISABLED)) + for (i = 0; i < ATA_MAX_DEVICES; i++) classes[i] = ap->device[i].class; - else - ap->device[i].class = ATA_DEV_UNKNOWN; - } + ata_port_probe(ap); } + for (i = 0; i < ATA_MAX_DEVICES; i++) + if (classes[i] == ATA_DEV_UNKNOWN) + classes[i] = ATA_DEV_NONE; + /* read IDENTIFY page and configure devices */ for (i = 0; i < ATA_MAX_DEVICES; i++) { struct ata_device *dev = &ap->device[i]; ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] libata: fix class handling in ata_bus_probe() 2006-03-12 16:57 ` [PATCH] libata: fix class handling in ata_bus_probe() Tejun Heo @ 2006-03-12 17:50 ` Jeff Garzik 2006-03-12 18:24 ` Jeff Garzik 1 sibling, 0 replies; 12+ messages in thread From: Jeff Garzik @ 2006-03-12 17:50 UTC (permalink / raw) To: Tejun Heo; +Cc: linux-ide@vger.kernel.org Tejun Heo wrote: > ata_bus_probe() didn't set classes[] properly for port disabled case > of ->phy_reset() compatibility path. This patch moves classes[] > initialization and normalization out of ->probe_reset block such that > it applies to both ->probe_reset and ->phy_reset paths. > > Signed-off-by: Tejun Heo <htejun@gmail.com> applied ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] libata: fix class handling in ata_bus_probe() 2006-03-12 16:57 ` [PATCH] libata: fix class handling in ata_bus_probe() Tejun Heo 2006-03-12 17:50 ` Jeff Garzik @ 2006-03-12 18:24 ` Jeff Garzik 2006-03-12 18:34 ` Tejun Heo 2006-03-13 5:33 ` [PATCH] libata: clean up IDENTIFY printing Tejun Heo 1 sibling, 2 replies; 12+ messages in thread From: Jeff Garzik @ 2006-03-12 18:24 UTC (permalink / raw) To: Tejun Heo; +Cc: linux-ide@vger.kernel.org [-- Attachment #1: Type: text/plain, Size: 1622 bytes --] Tejun Heo wrote: > ata_bus_probe() didn't set classes[] properly for port disabled case > of ->phy_reset() compatibility path. This patch moves classes[] > initialization and normalization out of ->probe_reset block such that > it applies to both ->probe_reset and ->phy_reset paths. > > Signed-off-by: Tejun Heo <htejun@gmail.com> > > --- > > Jeff, the sata_nv case is similar bug as what Jiri reported, except > that this one is affecting ->phy_reset path. > > This patch should fix sata_nv. For sata_mv, I have no idea at all. Yep, that solves that bug. I spotted another minor one: > libata version 1.20 loaded. > sata_nv 0000:00:07.0: version 0.8 > ACPI: PCI Interrupt Link [LSA0] enabled at IRQ 23 > GSI 18 sharing vector 0xC1 and IRQ 18 > ACPI: PCI Interrupt 0000:00:07.0[A] -> Link [LSA0] -> GSI 23 (level, high) -> IRQ 193 > PCI: Setting latency timer of device 0000:00:07.0 to 64 > ata1: SATA max UDMA/133 cmd 0x28D0 ctl 0x28FA bmdma 0x28B0 irq 193 > ata2: SATA max UDMA/133 cmd 0x28D8 ctl 0x28FE bmdma 0x28B8 irq 193 > ata1: SATA link up 1.5 Gbps (SStatus 113) > ata1: dev 0 cfg 49:2f00 82:3469 83:7f61 84:4003 85:3469 86:3e41 87:4003 88:407f > ata1: dev 0 ATA-6, max UDMA/133, 488281250 sectors: LBA48 > nv_sata: Primary device added > nv_sata: Primary device removed > nv_sata: Secondary device added > nv_sata: Secondary device removed > ata1: dev 0 cfg 49:2f00 82:3469 83:7f61 84:4003 85:3469 86:3e41 87:4003 88:407f > ata1: dev 0 configured for UDMA/133 The dev 0 id words are printed twice, but should not be. Or, the second one should only be printed if something relevant changed. Jeff [-- Attachment #2: dmesg.txt.bz2 --] [-- Type: application/x-bzip, Size: 6026 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] libata: fix class handling in ata_bus_probe() 2006-03-12 18:24 ` Jeff Garzik @ 2006-03-12 18:34 ` Tejun Heo 2006-03-13 5:33 ` [PATCH] libata: clean up IDENTIFY printing Tejun Heo 1 sibling, 0 replies; 12+ messages in thread From: Tejun Heo @ 2006-03-12 18:34 UTC (permalink / raw) To: Jeff Garzik; +Cc: linux-ide@vger.kernel.org Jeff Garzik wrote: > Tejun Heo wrote: > >> ata_bus_probe() didn't set classes[] properly for port disabled case >> of ->phy_reset() compatibility path. This patch moves classes[] >> initialization and normalization out of ->probe_reset block such that >> it applies to both ->probe_reset and ->phy_reset paths. >> >> Signed-off-by: Tejun Heo <htejun@gmail.com> >> >> --- >> >> Jeff, the sata_nv case is similar bug as what Jiri reported, except >> that this one is affecting ->phy_reset path. >> >> This patch should fix sata_nv. For sata_mv, I have no idea at all. > > > > Yep, that solves that bug. I spotted another minor one: > >> libata version 1.20 loaded. >> sata_nv 0000:00:07.0: version 0.8 >> ACPI: PCI Interrupt Link [LSA0] enabled at IRQ 23 >> GSI 18 sharing vector 0xC1 and IRQ 18 >> ACPI: PCI Interrupt 0000:00:07.0[A] -> Link [LSA0] -> GSI 23 (level, >> high) -> IRQ 193 >> PCI: Setting latency timer of device 0000:00:07.0 to 64 >> ata1: SATA max UDMA/133 cmd 0x28D0 ctl 0x28FA bmdma 0x28B0 irq 193 >> ata2: SATA max UDMA/133 cmd 0x28D8 ctl 0x28FE bmdma 0x28B8 irq 193 >> ata1: SATA link up 1.5 Gbps (SStatus 113) >> ata1: dev 0 cfg 49:2f00 82:3469 83:7f61 84:4003 85:3469 86:3e41 >> 87:4003 88:407f >> ata1: dev 0 ATA-6, max UDMA/133, 488281250 sectors: LBA48 >> nv_sata: Primary device added >> nv_sata: Primary device removed >> nv_sata: Secondary device added >> nv_sata: Secondary device removed >> ata1: dev 0 cfg 49:2f00 82:3469 83:7f61 84:4003 85:3469 86:3e41 >> 87:4003 88:407f >> ata1: dev 0 configured for UDMA/133 > > > The dev 0 id words are printed twice, but should not be. Or, the second > one should only be printed if something relevant changed. > The duplicated messages are KERN_DEBUG messages which usually won't show up on the console. Still, yeah, annonying. I'll send a patch which changes the code such that the message isn't printed the second time (during revalidation) tomorrow. I gotta sleep now. Good night. -- tejun ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] libata: clean up IDENTIFY printing 2006-03-12 18:24 ` Jeff Garzik 2006-03-12 18:34 ` Tejun Heo @ 2006-03-13 5:33 ` Tejun Heo 2006-03-13 5:48 ` Tejun Heo 2006-03-13 5:51 ` [PATCH] libata: clean up IDENTIFY printing Jeff Garzik 1 sibling, 2 replies; 12+ messages in thread From: Tejun Heo @ 2006-03-13 5:33 UTC (permalink / raw) To: Jeff Garzik; +Cc: linux-ide@vger.kernel.org Printing info about IDENTIFY page used to be the responsibility of ata_dev_read_id(). As all devices are revalidated after xfer mode configuration, this resulted in two info messages about one device. This patch improves ata_dump_id() such that it can be generally useable and makes printing the responsibility of ata_dev_configure() which has better understanding of what's going on. The IDENTIFY info printing now looks like the following. ata2: dev 1 cfg 49:2f00 53:0007 63:0007 64:0003 75:001f 80:00fe 81:0000 82:346b 83:7d01 84:4023 85:3469 86:3c01 87:4023 88:207f 93:0000 Signed-off-by: Tejun Heo <htejun@gmail.com> --- libata-core.c | 61 +++++++++++++++++++++++----------------------------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 439b6db..7e9cb70 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c @@ -743,40 +743,33 @@ void ata_dev_select(struct ata_port *ap, /** * ata_dump_id - IDENTIFY DEVICE info debugging output * @id: IDENTIFY DEVICE page to dump + * @level: KERN_* message level + * @fmt: header format string + * @...: header string arguments * - * Dump selected 16-bit words from the given IDENTIFY DEVICE - * page. + * Dump selected 16-bit words from the given IDENTIFY DEVICE page + * with the specified header. * * LOCKING: * caller. */ - -static inline void ata_dump_id(const u16 *id) +static void ata_dump_id(const u16 *id, const char *level, const char *fmt, ...) { - DPRINTK("49==0x%04x " - "53==0x%04x " - "63==0x%04x " - "64==0x%04x " - "75==0x%04x \n", - id[49], - id[53], - id[63], - id[64], - id[75]); - DPRINTK("80==0x%04x " - "81==0x%04x " - "82==0x%04x " - "83==0x%04x " - "84==0x%04x \n", - id[80], - id[81], - id[82], - id[83], - id[84]); - DPRINTK("88==0x%04x " - "93==0x%04x\n", - id[88], - id[93]); + va_list ap; + char buf[24]; + + va_start(ap, fmt); + vscnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + + printk("%s%s49:%04x 53:%04x 63:%04x 64:%04x 75:%04x 80:%04x 81:%04x 82:%04x\n", + level, buf, + id[49], id[53], id[63], id[64], id[75], id[80], id[81], id[82]); + + memset(buf, ' ', strlen(buf)); + printk("%s%s83:%04x 84:%04x 85:%04x 86:%04x 87:%04x 88:%04x 93:%04x\n", + level, buf, + id[83], id[84], id[85], id[86], id[87], id[88], id[93]); } /** @@ -1120,12 +1113,6 @@ static int ata_dev_read_id(struct ata_po swap_buf_le16(id, ATA_ID_WORDS); - /* print device capabilities */ - printk(KERN_DEBUG "ata%u: dev %u cfg " - "49:%04x 82:%04x 83:%04x 84:%04x 85:%04x 86:%04x 87:%04x 88:%04x\n", - ap->id, dev->devno, - id[49], id[82], id[83], id[84], id[85], id[86], id[87], id[88]); - /* sanity check */ if ((class == ATA_DEV_ATA) != ata_id_is_ata(id)) { rc = -EINVAL; @@ -1204,6 +1191,10 @@ static int ata_dev_configure(struct ata_ DPRINTK("ENTER, host %u, dev %u\n", ap->id, dev->devno); + if (print_info) + ata_dump_id(dev->id, KERN_DEBUG, "ata%u: dev %u cfg ", + ap->id, dev->devno); + /* initialize to-be-configured parameters */ dev->flags = 0; dev->max_sectors = 0; @@ -1227,8 +1218,6 @@ static int ata_dev_configure(struct ata_ /* find max transfer mode; for printk only */ xfer_mask = ata_id_xfermask(dev->id); - ata_dump_id(dev->id); - /* ATA-specific feature tests */ if (dev->class == ATA_DEV_ATA) { dev->n_sectors = ata_id_n_sectors(dev->id); ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH] libata: clean up IDENTIFY printing 2006-03-13 5:33 ` [PATCH] libata: clean up IDENTIFY printing Tejun Heo @ 2006-03-13 5:48 ` Tejun Heo 2006-03-13 5:52 ` Jeff Garzik 2006-03-13 5:51 ` [PATCH] libata: clean up IDENTIFY printing Jeff Garzik 1 sibling, 1 reply; 12+ messages in thread From: Tejun Heo @ 2006-03-13 5:48 UTC (permalink / raw) To: Jeff Garzik; +Cc: linux-ide@vger.kernel.org Printing info about IDENTIFY page used to be the responsibility of ata_dev_read_id(). As all devices are revalidated after xfer mode configuration, this resulted in two info messages about one device. This patch improves ata_dump_id() such that it can be generally useable and makes printing the responsibility of ata_dev_configure() which has better understanding of what's going on. The IDENTIFY info printing now looks like the following. ata2: dev 1 cfg 49:2f00 53:0007 63:0007 64:0003 75:001f 80:00fe 81:0000 82:346b 83:7d01 84:4023 85:3469 86:3c01 87:4023 88:207f 93:0000 Signed-off-by: Tejun Heo <htejun@gmail.com> --- Jeff, this is slightly improved version which removes unnecessary strlen() in ata_dump_id() as vscnprintf() returns the same value. libata-core.c | 62 ++++++++++++++++++++++++---------------------------------- 1 file changed, 26 insertions(+), 36 deletions(-) diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 439b6db..2a2c15e 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c @@ -743,40 +743,34 @@ void ata_dev_select(struct ata_port *ap, /** * ata_dump_id - IDENTIFY DEVICE info debugging output * @id: IDENTIFY DEVICE page to dump + * @level: KERN_* message level + * @fmt: header format string + * @...: header string arguments * - * Dump selected 16-bit words from the given IDENTIFY DEVICE - * page. + * Dump selected 16-bit words from the given IDENTIFY DEVICE page + * with the specified header. * * LOCKING: * caller. */ - -static inline void ata_dump_id(const u16 *id) +static void ata_dump_id(const u16 *id, const char *level, const char *fmt, ...) { - DPRINTK("49==0x%04x " - "53==0x%04x " - "63==0x%04x " - "64==0x%04x " - "75==0x%04x \n", - id[49], - id[53], - id[63], - id[64], - id[75]); - DPRINTK("80==0x%04x " - "81==0x%04x " - "82==0x%04x " - "83==0x%04x " - "84==0x%04x \n", - id[80], - id[81], - id[82], - id[83], - id[84]); - DPRINTK("88==0x%04x " - "93==0x%04x\n", - id[88], - id[93]); + va_list ap; + char buf[24]; + int len; + + va_start(ap, fmt); + len = vscnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + + printk("%s%s49:%04x 53:%04x 63:%04x 64:%04x 75:%04x 80:%04x 81:%04x 82:%04x\n", + level, buf, + id[49], id[53], id[63], id[64], id[75], id[80], id[81], id[82]); + + memset(buf, ' ', len); + printk("%s%s83:%04x 84:%04x 85:%04x 86:%04x 87:%04x 88:%04x 93:%04x\n", + level, buf, + id[83], id[84], id[85], id[86], id[87], id[88], id[93]); } /** @@ -1120,12 +1114,6 @@ static int ata_dev_read_id(struct ata_po swap_buf_le16(id, ATA_ID_WORDS); - /* print device capabilities */ - printk(KERN_DEBUG "ata%u: dev %u cfg " - "49:%04x 82:%04x 83:%04x 84:%04x 85:%04x 86:%04x 87:%04x 88:%04x\n", - ap->id, dev->devno, - id[49], id[82], id[83], id[84], id[85], id[86], id[87], id[88]); - /* sanity check */ if ((class == ATA_DEV_ATA) != ata_id_is_ata(id)) { rc = -EINVAL; @@ -1204,6 +1192,10 @@ static int ata_dev_configure(struct ata_ DPRINTK("ENTER, host %u, dev %u\n", ap->id, dev->devno); + if (print_info) + ata_dump_id(dev->id, KERN_DEBUG, "ata%u: dev %u cfg ", + ap->id, dev->devno); + /* initialize to-be-configured parameters */ dev->flags = 0; dev->max_sectors = 0; @@ -1227,8 +1219,6 @@ static int ata_dev_configure(struct ata_ /* find max transfer mode; for printk only */ xfer_mask = ata_id_xfermask(dev->id); - ata_dump_id(dev->id); - /* ATA-specific feature tests */ if (dev->class == ATA_DEV_ATA) { dev->n_sectors = ata_id_n_sectors(dev->id); ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] libata: clean up IDENTIFY printing 2006-03-13 5:48 ` Tejun Heo @ 2006-03-13 5:52 ` Jeff Garzik [not found] ` <20060313064016.GA26732@htj.dyndns.org> 0 siblings, 1 reply; 12+ messages in thread From: Jeff Garzik @ 2006-03-13 5:52 UTC (permalink / raw) To: Tejun Heo; +Cc: linux-ide@vger.kernel.org Tejun Heo wrote: > @@ -1120,12 +1114,6 @@ static int ata_dev_read_id(struct ata_po > > swap_buf_le16(id, ATA_ID_WORDS); > > - /* print device capabilities */ > - printk(KERN_DEBUG "ata%u: dev %u cfg " > - "49:%04x 82:%04x 83:%04x 84:%04x 85:%04x 86:%04x 87:%04x 88:%04x\n", > - ap->id, dev->devno, > - id[49], id[82], id[83], id[84], id[85], id[86], id[87], id[88]); > - > /* sanity check */ > if ((class == ATA_DEV_ATA) != ata_id_is_ata(id)) { > rc = -EINVAL; > @@ -1204,6 +1192,10 @@ static int ata_dev_configure(struct ata_ > > DPRINTK("ENTER, host %u, dev %u\n", ap->id, dev->devno); > > + if (print_info) > + ata_dump_id(dev->id, KERN_DEBUG, "ata%u: dev %u cfg ", > + ap->id, dev->devno); > + Also, the use of vscnprintf() feels like overengineering. How many places really need to print out this stuff? Just one? Jeff ^ permalink raw reply [flat|nested] 12+ messages in thread
[parent not found: <20060313064016.GA26732@htj.dyndns.org>]
* Re: [PATCH] libata: clean up IDENTIFY printing [not found] ` <20060313064016.GA26732@htj.dyndns.org> @ 2006-03-13 7:42 ` Jeff Garzik 2006-03-13 10:51 ` [PATCH 2/2] libata: move IDENTIFY info printing from ata_dev_read_id() to ata_dev_configure() Tejun Heo [not found] ` <20060313104804.GA29996@htj.dyndns.org> 0 siblings, 2 replies; 12+ messages in thread From: Jeff Garzik @ 2006-03-13 7:42 UTC (permalink / raw) To: Tejun Heo; +Cc: linux-ide@vger.kernel.org Tejun Heo wrote: > Printing info about IDENTIFY page used to be the responsibility of > ata_dev_read_id(). As all devices are revalidated after xfer mode > configuration, this resulted in two info messages about one device. > Also, ata_dump_id() was called from ata_dev_configure() which prints > some intersecting and some new information IDENTIFY page if ATA_DEBUG > is enabled. > > This patch makes ata_dev_configure() soley responsible for printing > IDENTIFY info and kill all others. > > The IDENTIFY info printing now looks like the following. > > ata2: dev 1 cfg 49:2f00 53:0007 63:0007 64:0003 75:001f 80:00fe 81:0000 82:346b > 83:7d01 84:4023 85:3469 86:3c01 87:4023 88:207f 93:0000 > > Signed-off-by: Tejun Heo <htejun@gmail.com> > > --- > > How about this one? ata10's second line will be misaligned though. :-p better, but * I only want one line of dev->id printed, just like 2.6.15 etc. does now. If you want more verbose dump of additional registers, that's a job for ap->msg_enable. * [you know this was coming :)] The use of new local 'id' should be split into a separate patch. ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/2] libata: move IDENTIFY info printing from ata_dev_read_id() to ata_dev_configure() 2006-03-13 7:42 ` Jeff Garzik @ 2006-03-13 10:51 ` Tejun Heo [not found] ` <20060313104804.GA29996@htj.dyndns.org> 1 sibling, 0 replies; 12+ messages in thread From: Tejun Heo @ 2006-03-13 10:51 UTC (permalink / raw) To: Jeff Garzik; +Cc: linux-ide@vger.kernel.org Move IDENTIFY info printing from ata_dev_read_id() to ata_dev_configure() and print only if @print_info is non-zero. This kills duplicate IDENTIFY info printing during probing. Signed-off-by: Tejun Heo <htejun@gmail.com> --- Jeff, I think ap->msg_enable conversion should happen as bombing raids. Such that we have either ATA_DEBUG or msg_enable. I'll leave ata_dump_id() alone for the time being. libata-core.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 6fe41fb..714b42b 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c @@ -1120,12 +1120,6 @@ static int ata_dev_read_id(struct ata_po swap_buf_le16(id, ATA_ID_WORDS); - /* print device capabilities */ - printk(KERN_DEBUG "ata%u: dev %u cfg " - "49:%04x 82:%04x 83:%04x 84:%04x 85:%04x 86:%04x 87:%04x 88:%04x\n", - ap->id, dev->devno, - id[49], id[82], id[83], id[84], id[85], id[86], id[87], id[88]); - /* sanity check */ if ((class == ATA_DEV_ATA) != ata_id_is_ata(id)) { rc = -EINVAL; @@ -1205,6 +1199,13 @@ static int ata_dev_configure(struct ata_ DPRINTK("ENTER, host %u, dev %u\n", ap->id, dev->devno); + /* print device capabilities */ + if (print_info) + printk(KERN_DEBUG "ata%u: dev %u cfg 49:%04x 82:%04x 83:%04x " + "84:%04x 85:%04x 86:%04x 87:%04x 88:%04x\n", + ap->id, dev->devno, id[49], id[82], id[83], + id[84], id[85], id[86], id[87], id[88]); + /* initialize to-be-configured parameters */ dev->flags = 0; dev->max_sectors = 0; ^ permalink raw reply related [flat|nested] 12+ messages in thread
[parent not found: <20060313104804.GA29996@htj.dyndns.org>]
* Re: [PATCH 1/2] libata: use local *id instead of dev->id in ata_dev_configure() [not found] ` <20060313104804.GA29996@htj.dyndns.org> @ 2006-03-17 0:23 ` Jeff Garzik 0 siblings, 0 replies; 12+ messages in thread From: Jeff Garzik @ 2006-03-17 0:23 UTC (permalink / raw) To: Tejun Heo; +Cc: linux-ide@vger.kernel.org Tejun Heo wrote: > dev->id is used many times in ata_dev_configure(). Use local variable > id instead for shorter notation. > > Signed-off-by: Tejun Heo <htejun@gmail.com> applied 1-2 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] libata: clean up IDENTIFY printing 2006-03-13 5:33 ` [PATCH] libata: clean up IDENTIFY printing Tejun Heo 2006-03-13 5:48 ` Tejun Heo @ 2006-03-13 5:51 ` Jeff Garzik 1 sibling, 0 replies; 12+ messages in thread From: Jeff Garzik @ 2006-03-13 5:51 UTC (permalink / raw) To: Tejun Heo; +Cc: linux-ide@vger.kernel.org Tejun Heo wrote: > Printing info about IDENTIFY page used to be the responsibility of > ata_dev_read_id(). As all devices are revalidated after xfer mode > configuration, this resulted in two info messages about one device. > This patch improves ata_dump_id() such that it can be generally > useable and makes printing the responsibility of ata_dev_configure() > which has better understanding of what's going on. > > The IDENTIFY info printing now looks like the following. > > ata2: dev 1 cfg 49:2f00 53:0007 63:0007 64:0003 75:001f 80:00fe 81:0000 82:346b > 83:7d01 84:4023 85:3469 86:3c01 87:4023 88:207f 93:0000 > > Signed-off-by: Tejun Heo <htejun@gmail.com> That doesn't address the issue of an increase in log spam :) When you read kernel messages with dmesg(8), KERN_DEBUG does nothing to decrease the visibility of any set of messages. So, please just decrease the current output from a doubled line to a single line of data. Anything more falls under the category of 'implement ap->msg_enable, and then use ata_msg_xxx()'. Jeff ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2006-03-17 0:24 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-03-12 15:42 current #upstream bug? Jeff Garzik
2006-03-12 16:57 ` [PATCH] libata: fix class handling in ata_bus_probe() Tejun Heo
2006-03-12 17:50 ` Jeff Garzik
2006-03-12 18:24 ` Jeff Garzik
2006-03-12 18:34 ` Tejun Heo
2006-03-13 5:33 ` [PATCH] libata: clean up IDENTIFY printing Tejun Heo
2006-03-13 5:48 ` Tejun Heo
2006-03-13 5:52 ` Jeff Garzik
[not found] ` <20060313064016.GA26732@htj.dyndns.org>
2006-03-13 7:42 ` Jeff Garzik
2006-03-13 10:51 ` [PATCH 2/2] libata: move IDENTIFY info printing from ata_dev_read_id() to ata_dev_configure() Tejun Heo
[not found] ` <20060313104804.GA29996@htj.dyndns.org>
2006-03-17 0:23 ` [PATCH 1/2] libata: use local *id instead of dev->id in ata_dev_configure() Jeff Garzik
2006-03-13 5:51 ` [PATCH] libata: clean up IDENTIFY printing Jeff Garzik
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.