All of lore.kernel.org
 help / color / mirror / Atom feed
* 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: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

* 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

* 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

* 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

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.