I reproduced this problem on the rpi3B+ and rpi2Bv1.1 with armhf kernel.

This problem is introduced by enabling two kernel configs for arm32
kernel, they are HIGHMEM and VMSPLIT_3G.

We need to use a single arm32 kernel to support rpi2/3/4, while rpi4 has
1G/2G/4G ram, to support 2G and 4G ram, we have to enable HIGHMEM and
VMSPLIT_3G, otherwise we can't get 2G/4G memory in the system.

The upstream kernel of https://github.com/raspberrypi/linux.git also has
this issue.


some explanation:
These two configs are specific to 32bit kernel, so we can't reproduce this 
issue on arm64 kernel.
The usb ports on rpi4 are routed to xhci host controller instead of dwc_otg 
host controller, so we can't reproduce this issue on rpi4 even with armhf 
kernel.
On rpi3A+ board, there are only 512M physical memory, there is no ram to map to 
highmemory region, so we can't reproduce this problem on rpi3A+.

I guess the problem is in the dwc_otg usb host driver, it depends on dma
to work, but dma gets a highmem buffer then it can't work normally
anymore. I will report this issue to rpi community and try a find a fix
asap.

so far, the workaround is to set total_mem=512 in the config.txt for
rpi2/3 working with 32bit kernel , then there is no memory mapped to
highmem region.

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

Title:
  IO errors when writing large amounts of data to USB storage in eoan on
  RPI

Status in linux-raspi2 package in Ubuntu:
  New
Status in linux-raspi2 source package in Eoan:
  New

Bug description:
  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.

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

-- 
Mailing list: https://launchpad.net/~kernel-packages
Post to     : kernel-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kernel-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to