5793112f75
After years of trying to find the reason for random kernel crashes while both CPU and SATA are under load it has been found. Some odd commented-out #defines in kref's single-port driver [1] which were copied from the vendor driver made me develop a theory: The IO-mapped memory area for DMA descriptors apparetly got some holes just before the alignment boundaries. This feels like an off-by-one bug in the hardware or maybe those fields are used internally by the SATA controller's firmware. Whatever the cause is: they cannot be used and trying to use them results in reading back unexpected stuff and ends up with oopsing Unable to handle kernel paging request at virtual address d085c004 Work around the issue by reducing the area used for bmdma descriptors. This reduces SATA performance (iops) quite a bit, but finally makes things work reliably. Possibly one could optimize this much more by really just skipping the holes in that memory area -- however, that seems to be non-trivial with the driver and libata in it's current form (suggestions are welcome). The 'proper' way to have good SATA performance would be to make use of the hardware RAID features (one can use the JBOD mode to access even just a single disc transparently through the RAID controller integrated in the SATA host instead of accessing the SATA ports 'raw' as we do now). [1]: https://github.com/kref/linux-oxnas/blob/master/drivers/ata/sata_oxnas.c#L25 Signed-off-by: Daniel Golle <daniel@makrotopia.org>
86 lines
2.6 KiB
Makefile
86 lines
2.6 KiB
Makefile
UBIFS_OPTS := -m 2048 -e 126KiB -c 4096
|
|
KERNEL_LOADADDR := 0x60008000
|
|
|
|
define Device/Default
|
|
KERNEL_NAME := zImage
|
|
KERNEL_SUFFIX := -uImage
|
|
KERNEL_INSTALL := 1
|
|
BLOCKSIZE := 128k
|
|
PAGESIZE := 2048
|
|
SUBPAGESIZE := 512
|
|
FILESYSTEMS := squashfs ubifs
|
|
PROFILES := Default
|
|
SUPPORTED_DEVICES := $(subst _,$(comma),$(1))
|
|
DEVICE_DTS := ox820-$(subst _,-,$(1))
|
|
KERNEL := kernel-bin | append-dtb | uImage none
|
|
IMAGES := ubinized.bin sysupgrade.tar
|
|
IMAGE/ubinized.bin := append-ubi
|
|
IMAGE/sysupgrade.tar := sysupgrade-tar | append-metadata
|
|
endef
|
|
|
|
define Build/omninas-factory
|
|
rm -rf $@.tmp $@.dummy $@.dummy.gz
|
|
mkdir -p $@.tmp
|
|
$(CP) $@ $@.tmp/uImage
|
|
dd if=/dev/zero bs=64k count=4 of=$@.dummy
|
|
gzip $@.dummy
|
|
mkimage -A arm -T ramdisk -C gzip -n "dummy" \
|
|
-d $@.dummy.gz \
|
|
$@.tmp/rdimg.gz
|
|
echo 2.35.20140102 > $@.tmp/version ; echo >> $@.tmp/version
|
|
chmod 0744 $@.tmp/*
|
|
$(TAR) -C $@.tmp -czvf $@ \
|
|
$(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") .
|
|
endef
|
|
|
|
define Build/encrypt-3des
|
|
openssl enc -des3 -a -k $(1) -in $@ -out $@.new && mv $@.new $@
|
|
endef
|
|
|
|
define Device/akitio_mycloud
|
|
DEVICE_VENDOR := Akitio
|
|
DEVICE_MODEL := MyCloud Mini
|
|
SUPPORTED_DEVICES += akitio
|
|
DEVICE_PACKAGES := kmod-ata-oxnas-sata kmod-i2c-gpio kmod-rtc-ds1307 \
|
|
kmod-usb2-oxnas kmod-usb-ledtrig-usbport
|
|
endef
|
|
TARGET_DEVICES += akitio_mycloud
|
|
|
|
define Device/cloudengines_pogoplugpro
|
|
DEVICE_VENDOR := Cloud Engines
|
|
DEVICE_MODEL := PogoPlug Pro (with mPCIe)
|
|
SUPPORTED_DEVICES += pogoplug-pro
|
|
DEVICE_PACKAGES := kmod-usb2-oxnas kmod-usb-ledtrig-usbport \
|
|
kmod-ata-oxnas-sata kmod-rt2800-pci wpad-basic
|
|
endef
|
|
TARGET_DEVICES += cloudengines_pogoplugpro
|
|
|
|
define Device/cloudengines_pogoplug-series-3
|
|
DEVICE_VENDOR := Cloud Engines
|
|
DEVICE_MODEL := PogoPlug Series V3 (without mPCIe)
|
|
SUPPORTED_DEVICES += cloudengines,pogoplugv3 pogoplug-v3
|
|
DEVICE_PACKAGES := kmod-usb2-oxnas kmod-usb-ledtrig-usbport \
|
|
kmod-ata-oxnas-sata
|
|
endef
|
|
TARGET_DEVICES += cloudengines_pogoplug-series-3
|
|
|
|
define Device/shuttle_kd20
|
|
DEVICE_VENDOR := Shuttle
|
|
DEVICE_MODEL := KD20
|
|
SUPPORTED_DEVICES += kd20
|
|
DEVICE_PACKAGES := kmod-usb2-oxnas kmod-usb3 kmod-usb-ledtrig-usbport \
|
|
kmod-i2c-gpio kmod-rtc-pcf8563 kmod-gpio-beeper kmod-hwmon-drivetemp \
|
|
kmod-hwmon-gpiofan kmod-ata-oxnas-sata kmod-md-mod kmod-md-raid0 \
|
|
kmod-md-raid1 kmod-fs-ext4 kmod-fs-xfs
|
|
endef
|
|
TARGET_DEVICES += shuttle_kd20
|
|
|
|
define Device/mitrastar_stg-212
|
|
DEVICE_VENDOR := MitraStar
|
|
DEVICE_MODEL := STG-212
|
|
SUPPORTED_DEVICES += stg212
|
|
DEVICE_PACKAGES := kmod-ata-oxnas-sata kmod-fs-ext4 kmod-fs-xfs \
|
|
kmod-usb2-oxnas kmod-usb-ledtrig-usbport
|
|
endef
|
|
TARGET_DEVICES += mitrastar_stg-212
|