** Description changed:

+ [Impact]
+ On the RPI2/3 boards with eoan armhf kernel, if we copy large size
+ files to usb stick, the usb host driver dwc_otg will fail and print
+ lots of IO errors in the dmesg.
+ 
+ [Fix]
+ To support rpi4, we enabled the LPAE/HIGHMEM/VMSPLIT_3G in the armhf
+ kernel, the dwc_otg has some problem with highmem enabled. If the
+ urb's buffer is in the highmem region, the enqueue function will return
+ the -EINVALID unconditionally, as a result, it can't handle the urb
+ which contains the highmem buffer. But the driver itself can handle the
+ highmem buffer, we just need to do a little change.
+ 
+ [Test Case]
+ With the patch applied, I tested armhf and arm64 kernel on rpi2/3/4,
+ all worked well, no regression and the usb driver works well.
+ 
+ [Regression Risk]
+ Low, the upstream already looked at my patch and agreed with my
+ change, and I tested the patch on rpi2/3/4 with armhf and arm64
+ kernels, all worked well.
+ 
+ 
  Kernel tested:
  Linux ubuntu 5.3.0-1012-raspi2 #14-Ubuntu SMP Mon Nov 11 10:08:39 UTC 2019 
armv7l armv7l armv7l GNU/Linux
  
  I've only been able to reproduce this with the armhf kernel and on the 
following devices:
  RPI3B+
  RPI3B
  RPI2
  
  At the moment, it does not appear that arm64 is affected, nor are RPI3A+
  and RPI4 (at least not the 2GB version)
  
  Steps to reproduce:
  - Insert and mount a USB storage device
  - cp a large file to it (300-600MB recommended - smaller files will sometimes 
not trigger it)
  - sync
  
  After running the sync, a lot of IO errors will show up in dmesg like:
  [  176.129299] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR 
driverbyte=DRIVER_OK
  [  176.129326] sd 0:0:0:0: [sda] tag#0 CDB: Write(10) 2a 00 00 2e 24 b0 00 00 
f0 00
  [  176.129349] blk_update_request: I/O error, dev sda, sector 3024048 op 
0x1:(WRITE) flags 0x4000 phys_seg 15 prio class 0
  [  176.883968] usb 1-1.1.2: reset high-speed USB device number 8 using dwc_otg
  [  177.079960] usb 1-1.1.2: reset high-speed USB device number 8 using dwc_otg
  
  It eventually finishes, and if you unmount/remount the device, the
  checksum will be different from the original file.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1852510

Title:
  IO errors when writing large amounts of data to USB storage in eoan on
  RPI2/3 (armhf kernel)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux-raspi2/+bug/1852510/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to