Skip to contentSkip to conversation

New: WARNING: at lib/dma-debug.c:539 check_sync+0xe9/0x341() (Not tainted)

Bugme-new Andrew Morton 4 participants 6 messages Apr 1, 2009 – Apr 7, 2009 4 messages not in the archive

Subsystems (2)
lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]/

#1 lore raw

(switched to email. Please respond via emailed reply-to-all, not via the bugzilla web interface).

Quoted 45 lines · On Sun, 29 Mar 2009 11:43:19 GMT [email protected] wrote:

http://bugzilla.kernel.org/show_bug.cgi?id=12969

           Summary: WARNING: at lib/dma-debug.c:539
                    check_sync+0xe9/0x341() (Not tainted)
           Product: Drivers
           Version: 2.5
          Platform: All
        OS/Version: Linux
              Tree: Fedora
            Status: NEW
          Severity: normal
          Priority: P1
         Component: Network
        AssignedTo: [email protected]
        ReportedBy: [email protected]
        Regression: Yes
------------[ cut here ]------------                                            
WARNING: at lib/dma-debug.c:539 check_sync+0xe9/0x341() (Not tainted)           
Hardware name: HP Compaq nx6110 (PY501EA#AB9)                                   
b44 0000:02:0e.0: DMA-API: device driver tries to sync DMA memory it has not
allocated [device address=0x0000000075941040] [size=1566 bytes]  
Modules linked in: llc bnep l2cap bluetooth autofs4 lm90 hwmon i2c_i801 sunrpc

ipv6 cpufreq_ondemand acpi_cpufreq uinput snd_intel8x0m snd_intel8x0 snd_ac97_codec snd_seq_dummy ac97_bus snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss snd_pcm b44 ssb firewire_ohci snd_timer ipw2200 iTCO_wdt mii firewire_core snd iTCO_vendor_support libipw yenta_socket crc_itu_t lib80211 rsrc_nonstatic soundcore snd_page_alloc joydev pcspkr wmi serio_raw ata_generic pata_acpi i915 drm i2c_algo_bit i2c_core video output [last unloaded: scsi_wait_scan]
Pid: 2418, comm: S58ntpd Not tainted 2.6.29-16.fc10.i686.PAE #1

Call Trace:                                                                     
 [<c04396d1>] warn_slowpath+0x7c/0xbd                                           
 [<c0457fe1>] ? register_lock_class+0x17/0x290                                  
 [<c0458d61>] ? mark_lock+0x1e/0x349                                            
 [<c0556448>] ? _raw_spin_unlock+0x74/0x78                                      
 [<c0458d61>] ? mark_lock+0x1e/0x349                                            
 [<c055a060>] ? check_sync+0x37/0x341                                           
 [<c055a112>] check_sync+0xe9/0x341                                             
 [<c0711245>] ? _spin_unlock_irqrestore+0x45/0x55                               
 [<c04592db>] ? trace_hardirqs_on+0xb/0xd                                       
 [<c055a4d1>] debug_dma_sync_single_for_device+0x2f/0x39                        
 [<f828f722>] dma_sync_single_for_device+0x4a/0x59 [b44]                        
 [<f828f76f>] ssb_dma_sync_single_for_device+0x3e/0x48 [b44]                    
Quoted 8 lines
 [<f8291d1e>] b44_recycle_rx+0x18c/0x196 [b44]                                  
 [<f8291f9f>] b44_poll+0x277/0x3c0 [b44]                                        
 [<c0687bb9>] net_rx_action+0xa1/0x1ca                                          
 [<c043e30a>] __do_softirq+0x9d/0x154                                           
 [<c043e413>] do_softirq+0x52/0x7e                                              
 [<c043e56f>] irq_exit+0x49/0x77                                                
 [<c040b22e>] do_IRQ+0x97/0xad                                                  
 [<c0409dac>] common_interrupt+0x2c/0x34                                        

This would appear to be reporting a bug in b44's DMA API usage. See the newly-added documentation in Documentation/DMA-API.txt, starting with

Part III - Debug drivers use of the DMA-API

The line numbers have changed, but it is:

		err_printk(ref->dev, NULL, "DMA-API: device driver tries "
			   "to free DMA memory it has not allocated "
			   "[device address=0x%016llx] [size=%llu bytes]\n",
			   ref->dev_addr, ref->size);
#2 lore raw
Quoted 60 lines · Andrew Morton

(switched to email. Please respond via emailed reply-to-all, not via the bugzilla web interface).

Quoted 45 lines · On Sun, 29 Mar 2009 11:43:19 GMT [email protected] wrote:

http://bugzilla.kernel.org/show_bug.cgi?id=12969

           Summary: WARNING: at lib/dma-debug.c:539
                    check_sync+0xe9/0x341() (Not tainted)
           Product: Drivers
           Version: 2.5
          Platform: All
        OS/Version: Linux
              Tree: Fedora
            Status: NEW
          Severity: normal
          Priority: P1
         Component: Network
        AssignedTo: [email protected]
        ReportedBy: [email protected]
        Regression: Yes
------------[ cut here ]------------                                            
WARNING: at lib/dma-debug.c:539 check_sync+0xe9/0x341() (Not tainted)           
Hardware name: HP Compaq nx6110 (PY501EA#AB9)                                   
b44 0000:02:0e.0: DMA-API: device driver tries to sync DMA memory it has not
allocated [device address=0x0000000075941040] [size=1566 bytes]  
Modules linked in: llc bnep l2cap bluetooth autofs4 lm90 hwmon i2c_i801 sunrpc

ipv6 cpufreq_ondemand acpi_cpufreq uinput snd_intel8x0m snd_intel8x0 snd_ac97_codec snd_seq_dummy ac97_bus snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss snd_pcm b44 ssb firewire_ohci snd_timer ipw2200 iTCO_wdt mii firewire_core snd iTCO_vendor_support libipw yenta_socket crc_itu_t lib80211 rsrc_nonstatic soundcore snd_page_alloc joydev pcspkr wmi serio_raw ata_generic pata_acpi i915 drm i2c_algo_bit i2c_core video output [last unloaded: scsi_wait_scan]
Pid: 2418, comm: S58ntpd Not tainted 2.6.29-16.fc10.i686.PAE #1

Call Trace:                                                                     
 [<c04396d1>] warn_slowpath+0x7c/0xbd                                           
 [<c0457fe1>] ? register_lock_class+0x17/0x290                                  
 [<c0458d61>] ? mark_lock+0x1e/0x349                                            
 [<c0556448>] ? _raw_spin_unlock+0x74/0x78                                      
 [<c0458d61>] ? mark_lock+0x1e/0x349                                            
 [<c055a060>] ? check_sync+0x37/0x341                                           
 [<c055a112>] check_sync+0xe9/0x341                                             
 [<c0711245>] ? _spin_unlock_irqrestore+0x45/0x55                               
 [<c04592db>] ? trace_hardirqs_on+0xb/0xd                                       
 [<c055a4d1>] debug_dma_sync_single_for_device+0x2f/0x39                        
 [<f828f722>] dma_sync_single_for_device+0x4a/0x59 [b44]                        
 [<f828f76f>] ssb_dma_sync_single_for_device+0x3e/0x48 [b44]                    
Quoted 8 lines
 [<f8291d1e>] b44_recycle_rx+0x18c/0x196 [b44]                                  
 [<f8291f9f>] b44_poll+0x277/0x3c0 [b44]                                        
 [<c0687bb9>] net_rx_action+0xa1/0x1ca                                          
 [<c043e30a>] __do_softirq+0x9d/0x154                                           
 [<c043e413>] do_softirq+0x52/0x7e                                              
 [<c043e56f>] irq_exit+0x49/0x77                                                
 [<c040b22e>] do_IRQ+0x97/0xad                                                  
 [<c0409dac>] common_interrupt+0x2c/0x34                                        
Quoted 1 line

This would appear to be reporting a bug in b44's DMA API usage.

Hi!, are you saying that could be a bug in new DMA-API ? (if we have one)

I don't had problems before with this b44 and laptop is not new. With kernel 2.6.29, I am testing KMS on new drm/dri Intel video, I also have one big warning with i915 reported on
Bug 12419 - possible circular locking dependency on i915 dma.

What I would like to know is :
Could bug 12419 make this warning on b44 ? or could DMA-API make the 2 warnings ? or the 2 warnings are completed different ? and the combinations of this questions :)

Thanks,

Quoted 14 lines

See
the newly-added documentation in Documentation/DMA-API.txt, starting with

Part III - Debug drivers use of the DMA-API

The line numbers have changed, but it is:

		err_printk(ref->dev, NULL, "DMA-API: device driver tries "
			   "to free DMA memory it has not allocated "
			   "[device address=0x%016llx] [size=%llu bytes]\n",
			   ref->dev_addr, ref->size);
Signature · 1 line
Sérgio M. B.
#3 lore raw
Quoted 36 lines · Sergio Monteiro Basto
Quoted 36 lines
Quoted 35 lines
------------[ cut here ]------------                                            
WARNING: at lib/dma-debug.c:539 check_sync+0xe9/0x341() (Not tainted)           
Hardware name: HP Compaq nx6110 (PY501EA#AB9)                                   
b44 0000:02:0e.0: DMA-API: device driver tries to sync DMA memory it has not
allocated [device address=0x0000000075941040] [size=1566 bytes]  
Modules linked in: llc bnep l2cap bluetooth autofs4 lm90 hwmon i2c_i801 sunrpc

ipv6 cpufreq_ondemand acpi_cpufreq uinput snd_intel8x0m snd_intel8x0 snd_ac97_codec snd_seq_dummy ac97_bus snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss snd_pcm b44 ssb firewire_ohci snd_timer ipw2200 iTCO_wdt mii firewire_core snd iTCO_vendor_support libipw yenta_socket crc_itu_t lib80211 rsrc_nonstatic soundcore snd_page_alloc joydev pcspkr wmi serio_raw ata_generic pata_acpi i915 drm i2c_algo_bit i2c_core video output [last unloaded: scsi_wait_scan]
Pid: 2418, comm: S58ntpd Not tainted 2.6.29-16.fc10.i686.PAE #1

Call Trace:                                                                     
 [<c04396d1>] warn_slowpath+0x7c/0xbd                                           
 [<c0457fe1>] ? register_lock_class+0x17/0x290                                  
 [<c0458d61>] ? mark_lock+0x1e/0x349                                            
 [<c0556448>] ? _raw_spin_unlock+0x74/0x78                                      
 [<c0458d61>] ? mark_lock+0x1e/0x349                                            
 [<c055a060>] ? check_sync+0x37/0x341                                           
 [<c055a112>] check_sync+0xe9/0x341                                             
 [<c0711245>] ? _spin_unlock_irqrestore+0x45/0x55                               
 [<c04592db>] ? trace_hardirqs_on+0xb/0xd                                       
 [<c055a4d1>] debug_dma_sync_single_for_device+0x2f/0x39                        
 [<f828f722>] dma_sync_single_for_device+0x4a/0x59 [b44]                        
 [<f828f76f>] ssb_dma_sync_single_for_device+0x3e/0x48 [b44]                    
 [<f8291d1e>] b44_recycle_rx+0x18c/0x196 [b44]                                  
 [<f8291f9f>] b44_poll+0x277/0x3c0 [b44]                                        
 [<c0687bb9>] net_rx_action+0xa1/0x1ca                                          
 [<c043e30a>] __do_softirq+0x9d/0x154                                           
 [<c043e413>] do_softirq+0x52/0x7e                                              
 [<c043e56f>] irq_exit+0x49/0x77                                                
 [<c040b22e>] do_IRQ+0x97/0xad                                                  
 [<c0409dac>] common_interrupt+0x2c/0x34                                        
Quoted 4 lines
Quoted 1 line

This would appear to be reporting a bug in b44's DMA API usage.

Hi!, are you saying that could be a bug in new DMA-API ? (if we have one)

We don't have a new DMA-API. I wrote a piece of code which checks if drivers use the DMA-API as expected.

Quoted 1 line

I don't had problems before with this b44 and laptop is not new.

Most things we check for typically have no impact when there is no hardware IOMMU. The purpose of this debugging code is to find those bugs even without an hardware IOMMU in the system.

Quoted 8 lines

With kernel 2.6.29, I am testing KMS on new drm/dri Intel video, I also have one big warning with i915 reported on
Bug 12419 - possible circular locking dependency on i915 dma.

What I would like to know is :
Could bug 12419 make this warning on b44 ? or could DMA-API make the 2 warnings ? or the 2 warnings are completed different ? and the combinations of this questions :)

It is hard to imagine that these two bugs have something to do with each other. The bugzilla entry is a warning about a locking problem and the DMA-API debugging code warns about wrong usage of the DMA-API.

Joerg

Signature · 6 lines
           | Advanced Micro Devices GmbH
 Operating | Karl-Hammerschmidt-Str. 34, 85609 Dornach bei München
 System    | 
 Research  | Geschäftsführer: Jochen Polster, Thomas M. McCoy, Giuliano Meroni
 Center    | Sitz: Dornach, Gemeinde Aschheim, Landkreis München
           | Registergericht München, HRB Nr. 43632

A message that is not in the archive (sent off-list or not yet received): 66E4AD309580E34AA457975F33D2A7473FBC6A35EE@IRVEXCHCCR01.corp.ad.broadcom.com

#5 lore raw
Quoted 27 lines
Quoted 27 lines
------------[ cut here ]------------                                            
WARNING: at lib/dma-debug.c:539 check_sync+0xe9/0x341() (Not tainted)           
Hardware name: HP Compaq nx6110 (PY501EA#AB9)                                   
b44 0000:02:0e.0: DMA-API: device driver tries to sync DMA memory it has not
allocated [device address=0x0000000075941040] [size=1566 bytes]  
Modules linked in: llc bnep l2cap bluetooth autofs4 lm90 hwmon i2c_i801 sunrpc

ipv6 cpufreq_ondemand acpi_cpufreq uinput snd_intel8x0m snd_intel8x0 snd_ac97_codec snd_seq_dummy ac97_bus snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss snd_pcm b44 ssb firewire_ohci snd_timer ipw2200 iTCO_wdt mii firewire_core snd iTCO_vendor_support libipw yenta_socket crc_itu_t lib80211 rsrc_nonstatic soundcore snd_page_alloc joydev pcspkr wmi serio_raw ata_generic pata_acpi i915 drm i2c_algo_bit i2c_core video output [last unloaded: scsi_wait_scan]
Pid: 2418, comm: S58ntpd Not tainted 2.6.29-16.fc10.i686.PAE #1

Call Trace:                                                                     
 [<c04396d1>] warn_slowpath+0x7c/0xbd                                           
 [<c0457fe1>] ? register_lock_class+0x17/0x290                                  
 [<c0458d61>] ? mark_lock+0x1e/0x349                                            
 [<c0556448>] ? _raw_spin_unlock+0x74/0x78                                      
 [<c0458d61>] ? mark_lock+0x1e/0x349                                            
 [<c055a060>] ? check_sync+0x37/0x341                                           
 [<c055a112>] check_sync+0xe9/0x341                                             
 [<c0711245>] ? _spin_unlock_irqrestore+0x45/0x55                               
 [<c04592db>] ? trace_hardirqs_on+0xb/0xd                                       
 [<c055a4d1>] debug_dma_sync_single_for_device+0x2f/0x39                        
 [<f828f722>] dma_sync_single_for_device+0x4a/0x59 [b44]                        
 [<f828f76f>] ssb_dma_sync_single_for_device+0x3e/0x48 [b44]                    
Quoted 8 lines
Quoted 8 lines
 [<f8291d1e>] b44_recycle_rx+0x18c/0x196 [b44]                                  
 [<f8291f9f>] b44_poll+0x277/0x3c0 [b44]                                        
 [<c0687bb9>] net_rx_action+0xa1/0x1ca                                          
 [<c043e30a>] __do_softirq+0x9d/0x154                                           
 [<c043e413>] do_softirq+0x52/0x7e                                              
 [<c043e56f>] irq_exit+0x49/0x77                                                
 [<c040b22e>] do_IRQ+0x97/0xad                                                  
 [<c0409dac>] common_interrupt+0x2c/0x34                                        

I don't know if this is related, but the following patch seems to fix some DMA mapping bug. Can somebody comment who does understand the code better than me?

(completely untested)

drivers/net/b44.c +3 -3
Index: wireless-testing/drivers/net/b44.c
===================================================================
@@ -703,7 +703,7 @@ static int b44_alloc_rx_skb(struct b44 *
 
 	if (bp->flags & B44_FLAG_RX_RING_HACK)
 		b44_sync_dma_desc_for_device(bp->sdev, bp->rx_ring_dma,
-			                    dest_idx * sizeof(dp),
+			                    dest_idx * sizeof(*dp),
 			                    DMA_BIDIRECTIONAL);
 
 	return RX_PKT_BUF_SZ;
@@ -731,7 +731,7 @@ static void b44_recycle_rx(struct b44 *b
 
 	if (bp->flags & B44_FLAG_RX_RING_HACK)
 		b44_sync_dma_desc_for_cpu(bp->sdev, bp->rx_ring_dma,
-			                 src_idx * sizeof(src_desc),
+			                 src_idx * sizeof(*src_desc),
 			                 DMA_BIDIRECTIONAL);
 
 	ctrl = src_desc->ctrl;
@@ -747,7 +747,7 @@ static void b44_recycle_rx(struct b44 *b
 
 	if (bp->flags & B44_FLAG_RX_RING_HACK)
 		b44_sync_dma_desc_for_device(bp->sdev, bp->rx_ring_dma,
-					     dest_idx * sizeof(dest_desc),
+					     dest_idx * sizeof(*dest_desc),
 					     DMA_BIDIRECTIONAL);
 
 	ssb_dma_sync_single_for_device(bp->sdev, le32_to_cpu(src_desc->addr),
Signature · 1 line
Greetings, Michael.
#6 lore raw
In reply to Andrew Morton

+ b44-use-kernel-dma-addresses-for-the-kernel-dma-api.patch added to -mm tree

fixes the bug for me

Thanks,

Quoted 105 lines · Andrew Morton
Quoted 18 lines · On Sun, 29 Mar 2009 11:43:19 GMT [email protected] wrote:

http://bugzilla.kernel.org/show_bug.cgi?id=12969

           Summary: WARNING: at lib/dma-debug.c:539
                    check_sync+0xe9/0x341() (Not tainted)
           Product: Drivers
           Version: 2.5
          Platform: All
        OS/Version: Linux
              Tree: Fedora
            Status: NEW
          Severity: normal
          Priority: P1
         Component: Network
        AssignedTo: [email protected]
        ReportedBy: [email protected]
        Regression: Yes
Quoted 1 line

------------[ cut

here ]------------

Quoted 1 line
WARNING: at lib/dma-debug.c:539 check_sync+0xe9/0x341() (Not

tainted)

Quoted 1 line
Hardware name: HP Compaq nx6110

(PY501EA#AB9)

Quoted 1 line

b44 0000:02:0e.0: DMA-API: device driver tries to sync DMA memory it

has not

Quoted 2 lines

allocated [device address=0x0000000075941040] [size=1566 bytes]

Modules linked in: llc bnep l2cap bluetooth autofs4 lm90 hwmon

i2c_i801 sunrpc

Quoted 2 lines

ipv6 cpufreq_ondemand acpi_cpufreq uinput snd_intel8x0m snd_intel8x0 snd_ac97_codec snd_seq_dummy ac97_bus snd_seq_oss snd_seq_midi_event

snd_seq

Quoted 1 line

snd_seq_device snd_pcm_oss snd_mixer_oss snd_pcm b44 ssb

firewire_ohci

Quoted 1 line

snd_timer ipw2200 iTCO_wdt mii firewire_core snd iTCO_vendor_support

libipw

Quoted 1 line

yenta_socket crc_itu_t lib80211 rsrc_nonstatic soundcore

snd_page_alloc joydev

Quoted 1 line

pcspkr wmi serio_raw ata_generic pata_acpi i915 drm i2c_algo_bit

i2c_core video

Quoted 1 line

output [last unloaded:

scsi_wait_scan]

Quoted 1 line

Pid: 2418, comm: S58ntpd Not tainted 2.6.29-16.fc10.i686.PAE

#1

Quoted 1 line

Call

Trace:

Quoted 1 line

[<c04396d1>] warn_slowpath

+0x7c/0xbd

Quoted 1 line

[<c0457fe1>] ? register_lock_class

+0x17/0x290

Quoted 1 line

[<c0458d61>] ? mark_lock

+0x1e/0x349

Quoted 1 line

[<c0556448>] ? _raw_spin_unlock

+0x74/0x78

Quoted 1 line

[<c0458d61>] ? mark_lock

+0x1e/0x349

Quoted 1 line

[<c055a060>] ? check_sync

+0x37/0x341

Quoted 1 line

[<c055a112>] check_sync

+0xe9/0x341

Quoted 1 line

[<c0711245>] ? _spin_unlock_irqrestore

+0x45/0x55

Quoted 1 line

[<c04592db>] ? trace_hardirqs_on

+0xb/0xd

Quoted 1 line

[<c055a4d1>] debug_dma_sync_single_for_device

+0x2f/0x39

Quoted 1 line

[<f828f722>] dma_sync_single_for_device+0x4a/0x59

[b44]

Quoted 1 line

[<f828f76f>] ssb_dma_sync_single_for_device+0x3e/0x48

[b44]

Quoted 1 line

[<f8291d1e>] b44_recycle_rx+0x18c/0x196

[b44]

Quoted 1 line

[<f8291f9f>] b44_poll+0x277/0x3c0

[b44]

Quoted 1 line

[<c0687bb9>] net_rx_action

+0xa1/0x1ca

Quoted 1 line

[<c043e30a>] __do_softirq

+0x9d/0x154

Quoted 1 line

[<c043e413>] do_softirq

+0x52/0x7e

Quoted 1 line

[<c043e56f>] irq_exit

+0x49/0x77

Quoted 1 line

[<c040b22e>] do_IRQ

+0x97/0xad

Quoted 1 line

[<c0409dac>] common_interrupt

+0x2c/0x34

This would appear to be reporting a bug in b44's DMA API usage. See the newly-added documentation in Documentation/DMA-API.txt, starting with

Part III - Debug drivers use of the DMA-API

The line numbers have changed, but it is:

                err_printk(ref->dev, NULL, "DMA-API: device driver

tries "
"to free DMA memory it has not allocated " "[device address=0x%016llx] [size=%llu
bytes]\n",

                           ref->dev_addr, ref->size);
Signature · 1 line
Sérgio M. B.

A message that is not in the archive (sent off-list or not yet received): [email protected]

A message that is not in the archive (sent off-list or not yet received): 66E4AD309580E34AA457975F33D2A7473FBC6A3626@IRVEXCHCCR01.corp.ad.broadcom.com

#9 lore raw

Subject: [PATCH] b44: Use kernel DMA addresses for the kernel DMA API

We must not use the device DMA addresses for the kernel DMA API, because device DMA addresses have an additional offset added for the SSB translation.

Use the original dma_addr_t for the sync operation.

---

I could reproduce the bug on my b44 card and this patch fixes it. Please apply the patch and close the bug. Thanks.

drivers/net/b44.c +1 -1
Index: linux-2.6/drivers/net/b44.c
===================================================================
@@ -750,7 +750,7 @@
 					     dest_idx * sizeof(*dest_desc),
 					     DMA_BIDIRECTIONAL);
 
-	ssb_dma_sync_single_for_device(bp->sdev, le32_to_cpu(src_desc->addr),
+	ssb_dma_sync_single_for_device(bp->sdev, dest_map->mapping,
 				       RX_PKT_BUF_SZ,
 				       DMA_FROM_DEVICE);
 }
Signature · 1 line
Greetings, Michael.