Re: [ep93xx] Oops when inserting USB storage in 2.6.27

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hi,

James Bottomley wrote:
On Fri, 2008-10-24 at 09:05 +0200, Matthias Kaehlcke wrote:
hi,

inserting a Verbatim 4GB USB stick in a ep9307 based device running kernel 2.6.27 results in the following Oops:

[42949395.050000] usb 1-3: new full speed USB device using ep93xx-ohci
and address 2
[42949395.250000] usb 1-3: configuration #1 chosen from 1 choice
[42949395.260000] scsi0 : SCSI emulation for USB Mass Storage devices
[42949395.270000] usb 1-3: New USB device found, idVendor=13fe,
idProduct=1f23
[42949395.280000] usb 1-3: New USB device strings: Mfr=1, Product=2,
SerialNumber=3
[42949395.280000] usb 1-3: Product: STORE N GO
[42949395.300000] usb 1-3: Manufacturer: Verbatim
[42949395.310000] usb 1-3: SerialNumber: 078813D90478
[42949400.280000] Unable to handle kernel NULL pointer dereference at
virtual address 00000003
[42949400.280000] pgd = c0648000
[42949400.300000] [00000003] *pgd=c0647031, *pte=00000000, *ppte=00000000
[42949400.300000] Internal error: Oops: 13 [#1] PREEMPT
[42949400.300000] Modules linked in:
[42949400.300000] CPU: 0    Not tainted  (2.6.27 #3)
[42949400.300000] PC is at scsi_calculate_bounce_limit+0x3c/0x44

Best guess is this line:

	if (host_dev && host_dev->dma_mask)
		bounce_limit = *host_dev->dma_mask;

I'd guess host_dev->dma_mask contains 0x3 ... could this be some sort of
ARM setup problem?

thanks for having a look!

i could figure out the difference between 2.6.26.3 and 2.6.27 that triggers the Oops:

diff -u linux-2.6.26.3/include/asm-arm/pci.h linux-2.6.27/arch/arm/include/asm/pci.h

...
@@ -30,7 +30,7 @@
  * The networking and block device layers use this boolean for bounce
  * buffer decisions.
  */
-#define PCI_DMA_BUS_IS_PHYS     (0)
+#define PCI_DMA_BUS_IS_PHYS     (1)

 /*
  * Whether pci_unmap_{single,page} is a nop depends upon the
...

this change affects the following piece of code in scsi_calculate_bounce_limit():

if (!PCI_DMA_BUS_IS_PHYS)
  return BLK_BOUNCE_ANY;

host_dev = scsi_get_device(shost);
if (host_dev && host_dev->dma_mask)
  bounce_limit = *host_dev->dma_mask;


host_dev->dma_mask is 0xffffffff and we try to dereference the pointer

what i don't know is what is the correct fix for the problem, i suppose there was a good reason to change PCI_DMA_BUS_IS_PHYS ...

begin:vcard
fn:Matthias Kaehlcke
n:Kaehlcke;Matthias
org:Electronic Engineering Solutions;Dept. de Software
adr:;;C/ Sant Ferran, 10-16 bajos;Barcelona;;08031;Spain
email;internet:mkaehlcke@xxxxxxx
title:Ingeniero de Firmware
tel;work:93 407 30 80
tel;fax:93 433 56 71
x-mozilla-html:FALSE
url:http://www.e2s.net
version:2.1
end:vcard


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux