All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* eata - issue appeared in Linus git master in last 24-48 hours
@ 2014-06-29 19:01 Arthur Marsh
  2014-06-29 19:59 ` Arthur Marsh
  2014-07-11  9:20 ` Christoph Hellwig
  0 siblings, 2 replies; 4+ messages in thread
From: Arthur Marsh @ 2014-06-29 19:01 UTC (permalink / raw
  To: linux-scsi

Hi, I haven't had time to do a git bisect yet, but just saw this after 
rebuilding the kernel in the last day or so:

[    1.044035] EATA0: warning, DMA protocol support not asserted.
[    1.044035] EATA0: IRQ 11 mapped to IO-APIC IRQ 16.
[    1.046040] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    1.046123] usb usb1: New USB device strings: Mfr=3, Product=2, 
SerialNumber=
1
[    1.046204] usb usb1: Product: EHCI Host Controller
[    1.046275] usb usb1: Manufacturer: Linux 3.16.0-rc2+ ehci_hcd
[    1.046348] usb usb1: SerialNumber: 0000:00:03.3
[    1.049496] hub 1-0:1.0: USB hub found
[    1.050029] hub 1-0:1.0: 6 ports detected
[    1.050625] BUG: spinlock wrong CPU on CPU#1, systemd-udevd/63
[    1.050700]  lock: driver_lock+0x0/0xffffef00 [eata], .magic: 
dead4ead, .owne
r: systemd-udevd/63, .owner_cpu: 0
[    1.050785] CPU: 1 PID: 63 Comm: systemd-udevd Not tainted 
3.16.0-rc2+ #1038
[    1.050850] Hardware name: System Manufacturer System Name/P4S800, 
BIOS ASUS
P4S800 ACPI BIOS Revision 1011 Beta 001 08/30/2005
[    1.050935]  f8048100 00000000 f707fad8 c1416ba9 f43aad44 f707fb04 
c1081b6f c
158aab0
[    1.051301]  f8048100 dead4ead f43aad44 0000003f 00000000 f8048100 
c155b1eb 0
0000010
[    1.051678]  f707fb14 c1081bdc f8048100 f50e8000 f707fb20 c1081e43 
f8048100 f
707fb2c
[    1.052051] Call Trace:
[    1.052119]  [<c1416ba9>] dump_stack+0x41/0x52
[    1.052183]  [<c1081b6f>] spin_dump+0x8c/0xde
[    1.052249]  [<c1081bdc>] spin_bug+0x1b/0x1f
[    1.052310]  [<c1081e43>] do_raw_spin_unlock+0x79/0x7b
[    1.052377]  [<c141c495>] _raw_spin_unlock_irq+0x1d/0x26
[    1.052444]  [<f8046176>] port_detect+0xa54/0xefc [eata]
[    1.052509]  [<c141a510>] ? __mutex_unlock_slowpath+0xb6/0x136
[    1.052576]  [<c141a598>] ? mutex_unlock+0x8/0xa
[    1.052641]  [<c102d766>] ? ioapic_write_entry+0x17/0x43
[    1.052706]  [<c102d78b>] ? ioapic_write_entry+0x3c/0x43
[    1.052771]  [<c102d78b>] ? ioapic_write_entry+0x3c/0x43
[    1.052837]  [<c102e633>] ? io_apic_setup_irq_pin+0x175/0x319
[    1.052904]  [<c12804bf>] ? acpi_os_release_lock+0x8/0xa
[    1.052970]  [<c131f7dc>] ? pci_conf1_read+0x43/0xdd
[    1.053036]  [<c131f801>] ? pci_conf1_read+0x68/0xdd
[    1.053101]  [<c1410ccc>] ? klist_next+0x1b/0xef
[    1.053166]  [<c1410d9e>] ? klist_next+0xed/0xef
[    1.053237]  [<c141c449>] ? _raw_spin_unlock+0x1d/0x20
[    1.053304]  [<c1410d9e>] ? klist_next+0xed/0xef
[    1.053383]  [<c12505f6>] ? pci_do_find_bus+0x36/0x36
[    1.053449]  [<c12e1a18>] ? bus_find_device+0x5b/0x7d
[    1.053511]  [<c12dfc7c>] ? put_device+0xf/0x11
[    1.053571]  [<c124f172>] ? pci_dev_put+0xf/0x11
[    1.053635]  [<c125078e>] ? pci_get_dev_by_id+0x3f/0x8a
[    1.053701]  [<c12505f6>] ? pci_do_find_bus+0x36/0x36
[    1.053763]  [<c12508d4>] ? pci_get_class+0x46/0x48
[    1.053829]  [<f80466f7>] eata2x_detect+0xd9/0x3ef [eata]
[    1.053836] ohci-pci: OHCI PCI platform driver
[    1.054213] ohci-pci 0000:00:03.0: OHCI PCI host controller
[    1.054231] ohci-pci 0000:00:03.0: new USB bus registered, assigned 
bus numbe
r 2
[    1.054293] ohci-pci 0000:00:03.0: irq 9, io mem 0xbe800000
[    1.054782]  [<f8021000>] ? 0xf8020fff
[    1.054853]  [<f8021054>] init_this_scsi_driver+0x54/0x1000 [eata]
[    1.054923]  [<f8021000>] ? 0xf8020fff
[    1.054987]  [<c100041b>] do_one_initcall+0x75/0x198
[    1.055051]  [<f8021000>] ? 0xf8020fff
[    1.055115]  [<c11255cd>] ? __vunmap+0x77/0xce
[    1.055179]  [<c10aa53b>] load_module+0x19a6/0x224a
[    1.055248]  [<c10aaed2>] SyS_finit_module+0x5c/0x6b
[    1.055320]  [<f8039000>] ? 0xf8038fff
[    1.055385]  [<c141ce0e>] syscall_call+0x7/0xb
[    1.060902] EATA/DMA 2.0x: Copyright (C) 1994-2003 Dario Ballabio.
[    1.060966] EATA config options -> tm:1, lc:y, mq:16, rs:y, et:n, 
ip:n, ep:n,
  pp:y.
[    1.061029] EATA0: 2.0C, PCI 0x7410, IRQ 16, BMST, SG 122, MB 64.
[    1.061080] EATA0: wide SCSI support enabled, max_id 16, max_lun 8.
[    1.061132] EATA0: SCSI channel 0 enabled, host target ID 7.
[    1.061192] scsi0 : EATA/DMA 2.0x rev. 8.10.00

The machine has a dual core P4 and the kernel was compiled with gcc-4.9.0:

  Linux version 3.16.0-rc2+ (root@am64) (gcc version 4.9.0 (Debian
4.9.0-9) ) #1038 SMP Sun Jun 29 10:19:20 CST 2014

The actual SCSI HBA is a DPT 2044W.

Regards,

Arthur.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: eata - issue appeared in Linus git master in last 24-48 hours
  2014-06-29 19:01 eata - issue appeared in Linus git master in last 24-48 hours Arthur Marsh
@ 2014-06-29 19:59 ` Arthur Marsh
  2014-07-11  9:20 ` Christoph Hellwig
  1 sibling, 0 replies; 4+ messages in thread
From: Arthur Marsh @ 2014-06-29 19:59 UTC (permalink / raw
  To: linux-scsi

Arthur Marsh wrote, on 30/06/14 04:31:
> Hi, I haven't had time to do a git bisect yet, but just saw this after
> rebuilding the kernel in the last day or so:
>
> [    1.044035] EATA0: warning, DMA protocol support not asserted.
> [    1.044035] EATA0: IRQ 11 mapped to IO-APIC IRQ 16.
> [    1.046040] usb usb1: New USB device found, idVendor=1d6b,
> idProduct=0002
> [    1.046123] usb usb1: New USB device strings: Mfr=3, Product=2,
> SerialNumber=
> 1
> [    1.046204] usb usb1: Product: EHCI Host Controller
> [    1.046275] usb usb1: Manufacturer: Linux 3.16.0-rc2+ ehci_hcd
> [    1.046348] usb usb1: SerialNumber: 0000:00:03.3
> [    1.049496] hub 1-0:1.0: USB hub found
> [    1.050029] hub 1-0:1.0: 6 ports detected
> [    1.050625] BUG: spinlock wrong CPU on CPU#1, systemd-udevd/63
> [    1.050700]  lock: driver_lock+0x0/0xffffef00 [eata], .magic:
> dead4ead, .owne
> r: systemd-udevd/63, .owner_cpu: 0
> [    1.050785] CPU: 1 PID: 63 Comm: systemd-udevd Not tainted
> 3.16.0-rc2+ #1038
> [    1.050850] Hardware name: System Manufacturer System Name/P4S800,
> BIOS ASUS
> P4S800 ACPI BIOS Revision 1011 Beta 001 08/30/2005
> [    1.050935]  f8048100 00000000 f707fad8 c1416ba9 f43aad44 f707fb04
> c1081b6f c
> 158aab0
> [    1.051301]  f8048100 dead4ead f43aad44 0000003f 00000000 f8048100
> c155b1eb 0
> 0000010
> [    1.051678]  f707fb14 c1081bdc f8048100 f50e8000 f707fb20 c1081e43
> f8048100 f
> 707fb2c
> [    1.052051] Call Trace:
> [    1.052119]  [<c1416ba9>] dump_stack+0x41/0x52
> [    1.052183]  [<c1081b6f>] spin_dump+0x8c/0xde
> [    1.052249]  [<c1081bdc>] spin_bug+0x1b/0x1f
> [    1.052310]  [<c1081e43>] do_raw_spin_unlock+0x79/0x7b
> [    1.052377]  [<c141c495>] _raw_spin_unlock_irq+0x1d/0x26
> [    1.052444]  [<f8046176>] port_detect+0xa54/0xefc [eata]
> [    1.052509]  [<c141a510>] ? __mutex_unlock_slowpath+0xb6/0x136
> [    1.052576]  [<c141a598>] ? mutex_unlock+0x8/0xa
> [    1.052641]  [<c102d766>] ? ioapic_write_entry+0x17/0x43
> [    1.052706]  [<c102d78b>] ? ioapic_write_entry+0x3c/0x43
> [    1.052771]  [<c102d78b>] ? ioapic_write_entry+0x3c/0x43
> [    1.052837]  [<c102e633>] ? io_apic_setup_irq_pin+0x175/0x319
> [    1.052904]  [<c12804bf>] ? acpi_os_release_lock+0x8/0xa
> [    1.052970]  [<c131f7dc>] ? pci_conf1_read+0x43/0xdd
> [    1.053036]  [<c131f801>] ? pci_conf1_read+0x68/0xdd
> [    1.053101]  [<c1410ccc>] ? klist_next+0x1b/0xef
> [    1.053166]  [<c1410d9e>] ? klist_next+0xed/0xef
> [    1.053237]  [<c141c449>] ? _raw_spin_unlock+0x1d/0x20
> [    1.053304]  [<c1410d9e>] ? klist_next+0xed/0xef
> [    1.053383]  [<c12505f6>] ? pci_do_find_bus+0x36/0x36
> [    1.053449]  [<c12e1a18>] ? bus_find_device+0x5b/0x7d
> [    1.053511]  [<c12dfc7c>] ? put_device+0xf/0x11
> [    1.053571]  [<c124f172>] ? pci_dev_put+0xf/0x11
> [    1.053635]  [<c125078e>] ? pci_get_dev_by_id+0x3f/0x8a
> [    1.053701]  [<c12505f6>] ? pci_do_find_bus+0x36/0x36
> [    1.053763]  [<c12508d4>] ? pci_get_class+0x46/0x48
> [    1.053829]  [<f80466f7>] eata2x_detect+0xd9/0x3ef [eata]
> [    1.053836] ohci-pci: OHCI PCI platform driver
> [    1.054213] ohci-pci 0000:00:03.0: OHCI PCI host controller
> [    1.054231] ohci-pci 0000:00:03.0: new USB bus registered, assigned
> bus numbe
> r 2
> [    1.054293] ohci-pci 0000:00:03.0: irq 9, io mem 0xbe800000
> [    1.054782]  [<f8021000>] ? 0xf8020fff
> [    1.054853]  [<f8021054>] init_this_scsi_driver+0x54/0x1000 [eata]
> [    1.054923]  [<f8021000>] ? 0xf8020fff
> [    1.054987]  [<c100041b>] do_one_initcall+0x75/0x198
> [    1.055051]  [<f8021000>] ? 0xf8020fff
> [    1.055115]  [<c11255cd>] ? __vunmap+0x77/0xce
> [    1.055179]  [<c10aa53b>] load_module+0x19a6/0x224a
> [    1.055248]  [<c10aaed2>] SyS_finit_module+0x5c/0x6b
> [    1.055320]  [<f8039000>] ? 0xf8038fff
> [    1.055385]  [<c141ce0e>] syscall_call+0x7/0xb
> [    1.060902] EATA/DMA 2.0x: Copyright (C) 1994-2003 Dario Ballabio.
> [    1.060966] EATA config options -> tm:1, lc:y, mq:16, rs:y, et:n,
> ip:n, ep:n,
>   pp:y.
> [    1.061029] EATA0: 2.0C, PCI 0x7410, IRQ 16, BMST, SG 122, MB 64.
> [    1.061080] EATA0: wide SCSI support enabled, max_id 16, max_lun 8.
> [    1.061132] EATA0: SCSI channel 0 enabled, host target ID 7.
> [    1.061192] scsi0 : EATA/DMA 2.0x rev. 8.10.00

This wasn't repeated on a reboot, so at this stage it is a one-off problem.

Arthur.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: eata - issue appeared in Linus git master in last 24-48 hours
  2014-06-29 19:01 eata - issue appeared in Linus git master in last 24-48 hours Arthur Marsh
  2014-06-29 19:59 ` Arthur Marsh
@ 2014-07-11  9:20 ` Christoph Hellwig
  2014-07-12  5:13   ` Arthur Marsh
  1 sibling, 1 reply; 4+ messages in thread
From: Christoph Hellwig @ 2014-07-11  9:20 UTC (permalink / raw
  To: Arthur Marsh; +Cc: linux-scsi

On Mon, Jun 30, 2014 at 04:31:33AM +0930, Arthur Marsh wrote:
> Hi, I haven't had time to do a git bisect yet, but just saw this after
> rebuilding the kernel in the last day or so:

It seems like some of the routines called during the driver
initialization may sleep while the driver_lock is held and irqs are
disabled.

As eata2x_detect is only called during module load the lock seems
entirely pointless and should be removed, like in the patch below:


diff --git a/drivers/scsi/eata.c b/drivers/scsi/eata.c
index 03372cf..980898e 100644
--- a/drivers/scsi/eata.c
+++ b/drivers/scsi/eata.c
@@ -837,7 +837,6 @@ struct hostdata {
 static struct Scsi_Host *sh[MAX_BOARDS];
 static const char *driver_name = "EATA";
 static char sha[MAX_BOARDS];
-static DEFINE_SPINLOCK(driver_lock);
 
 /* Initialize num_boards so that ihdlr can work while detect is in progress */
 static unsigned int num_boards = MAX_BOARDS;
@@ -1097,8 +1096,6 @@ static int port_detect(unsigned long port_base, unsigned int j,
 		goto fail;
 	}
 
-	spin_lock_irq(&driver_lock);
-
 	if (do_dma(port_base, 0, READ_CONFIG_PIO)) {
 #if defined(DEBUG_DETECT)
 		printk("%s: detect, do_dma failed at 0x%03lx.\n", name,
@@ -1265,10 +1262,7 @@ static int port_detect(unsigned long port_base, unsigned int j,
 	}
 #endif
 
-	spin_unlock_irq(&driver_lock);
 	sh[j] = shost = scsi_register(tpnt, sizeof(struct hostdata));
-	spin_lock_irq(&driver_lock);
-
 	if (shost == NULL) {
 		printk("%s: unable to register host, detaching.\n", name);
 		goto freedma;
@@ -1345,8 +1339,6 @@ static int port_detect(unsigned long port_base, unsigned int j,
 	else
 		sprintf(dma_name, "DMA %u", dma_channel);
 
-	spin_unlock_irq(&driver_lock);
-
 	for (i = 0; i < shost->can_queue; i++)
 		ha->cp[i].cp_dma_addr = pci_map_single(ha->pdev,
 							  &ha->cp[i],
@@ -1439,7 +1431,6 @@ static int port_detect(unsigned long port_base, unsigned int j,
       freeirq:
 	free_irq(irq, &sha[j]);
       freelock:
-	spin_unlock_irq(&driver_lock);
 	release_region(port_base, REGION_SIZE);
       fail:
 	return 0;

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: eata - issue appeared in Linus git master in last 24-48 hours
  2014-07-11  9:20 ` Christoph Hellwig
@ 2014-07-12  5:13   ` Arthur Marsh
  0 siblings, 0 replies; 4+ messages in thread
From: Arthur Marsh @ 2014-07-12  5:13 UTC (permalink / raw
  To: Christoph Hellwig; +Cc: linux-scsi



Christoph Hellwig wrote, on 11/07/14 18:50:
> On Mon, Jun 30, 2014 at 04:31:33AM +0930, Arthur Marsh wrote:
>> Hi, I haven't had time to do a git bisect yet, but just saw this after
>> rebuilding the kernel in the last day or so:
>
> It seems like some of the routines called during the driver
> initialization may sleep while the driver_lock is held and irqs are
> disabled.
>
> As eata2x_detect is only called during module load the lock seems
> entirely pointless and should be removed, like in the patch below:
>
>
> diff --git a/drivers/scsi/eata.c b/drivers/scsi/eata.c
> index 03372cf..980898e 100644
> --- a/drivers/scsi/eata.c
> +++ b/drivers/scsi/eata.c
> @@ -837,7 +837,6 @@ struct hostdata {
>   static struct Scsi_Host *sh[MAX_BOARDS];
>   static const char *driver_name = "EATA";
>   static char sha[MAX_BOARDS];
> -static DEFINE_SPINLOCK(driver_lock);
>
>   /* Initialize num_boards so that ihdlr can work while detect is in progress */
>   static unsigned int num_boards = MAX_BOARDS;
> @@ -1097,8 +1096,6 @@ static int port_detect(unsigned long port_base, unsigned int j,
>   		goto fail;
>   	}
>
> -	spin_lock_irq(&driver_lock);
> -
>   	if (do_dma(port_base, 0, READ_CONFIG_PIO)) {
>   #if defined(DEBUG_DETECT)
>   		printk("%s: detect, do_dma failed at 0x%03lx.\n", name,
> @@ -1265,10 +1262,7 @@ static int port_detect(unsigned long port_base, unsigned int j,
>   	}
>   #endif
>
> -	spin_unlock_irq(&driver_lock);
>   	sh[j] = shost = scsi_register(tpnt, sizeof(struct hostdata));
> -	spin_lock_irq(&driver_lock);
> -
>   	if (shost == NULL) {
>   		printk("%s: unable to register host, detaching.\n", name);
>   		goto freedma;
> @@ -1345,8 +1339,6 @@ static int port_detect(unsigned long port_base, unsigned int j,
>   	else
>   		sprintf(dma_name, "DMA %u", dma_channel);
>
> -	spin_unlock_irq(&driver_lock);
> -
>   	for (i = 0; i < shost->can_queue; i++)
>   		ha->cp[i].cp_dma_addr = pci_map_single(ha->pdev,
>   							  &ha->cp[i],
> @@ -1439,7 +1431,6 @@ static int port_detect(unsigned long port_base, unsigned int j,
>         freeirq:
>   	free_irq(irq, &sha[j]);
>         freelock:
> -	spin_unlock_irq(&driver_lock);
>   	release_region(port_base, REGION_SIZE);
>         fail:
>   	return 0;
>

Thanks, I've rebuilt the kernel with this patch applied and running the 
rebuilt kernel fine using a DPT 2044W SCSI adaptor:

$ lspci|grep DPT
00:0c.0 SCSI storage controller: Adaptec (formerly DPT) SmartCache/Raid 
I-IV Controller (rev 02)


$ dmesg|grep -i eata
[    1.038968] EATA0: warning, DMA protocol support not asserted.
[    1.039041] EATA0: IRQ 11 mapped to IO-APIC IRQ 16.
[    1.040801] EATA/DMA 2.0x: Copyright (C) 1994-2003 Dario Ballabio.
[    1.040861] EATA config options -> tm:1, lc:y, mq:16, rs:y, et:n, 
ip:n, ep:n, pp:y.
[    1.040922] EATA0: 2.0C, PCI 0x7410, IRQ 16, BMST, SG 122, MB 64.
[    1.040973] EATA0: wide SCSI support enabled, max_id 16, max_lun 8.
[    1.041025] EATA0: SCSI channel 0 enabled, host target ID 7.
[    1.041095] scsi2 : EATA/DMA 2.0x rev. 8.10.00

Arthur.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-07-12  5:13 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-29 19:01 eata - issue appeared in Linus git master in last 24-48 hours Arthur Marsh
2014-06-29 19:59 ` Arthur Marsh
2014-07-11  9:20 ` Christoph Hellwig
2014-07-12  5:13   ` Arthur Marsh

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.