- Status New
- Percent Complete
- Task Type Patches
- Category Operating System/Drivers
- Assigned To No-one
- Operating System All players
- Severity Low
- Priority Very Low
- Reported Version Daily build (which?)
- Due in Version Undecided
-
Due Date
Undecided
- Votes
- Private
FS#11429 - Improved sector cache / Remove on-stack and in-struct sector buffers / Align storage accesses
This patch adds a sector-based read/write cache between the storage and fat drivers.
It has a static pool of 64 sector buffers which can be locked by the file handling code to replace the sector buffers in the file and dir structs, and serve as cache as long as they aren’t used. It can also be used to enforce exclusive access to a sector.
If requested using the STORAGE_NEEDS_ALIGN define, all storage accesses will be aligned to cacheline boundaries.
Loading...
Available keyboard shortcuts
- Alt + ⇧ Shift + l Login Dialog / Logout
- Alt + ⇧ Shift + a Add new task
- Alt + ⇧ Shift + m My searches
- Alt + ⇧ Shift + t focus taskid search
Tasklist
- o open selected task
- j move cursor down
- k move cursor up
Task Details
- n Next task
- p Previous task
- Alt + ⇧ Shift + e ↵ Enter Edit this task
- Alt + ⇧ Shift + w watch task
- Alt + ⇧ Shift + y Close Task
Task Editing
- Alt + ⇧ Shift + s save task
doesn't build for MULTIDRIVE/MULTIVOLUME
funman: I almost expected that. There seems to be quite a lot of inconsistent use of IF_MD vs. IF_MV even in the old FAT code, and to be honest, I haven't really understood what this is all about and what the difference between volumes and drives actually is.
Easy: drives are drives ! Volumes are logical drives (e.g a FAT partition)
If you have multidrive, then multivolume is enabled.
But yeah, the code is quitte different depending on MD or mot, this is a shame.
hopefully works on multivolume/multidrive now
I am trying to build Rockbox with this patch for my Nano2G, but I get the following error when attempting to link:
LD rockbox.elf
/home/michael/Downloads/rockbox/build/apps/main.o: In function `main':
main.c:(.text+0x1c8): undefined reference to `sectorcache_init'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(powermgmt.o): In function `shutdown_hw':
powermgmt.c:(.text+0x2d8): undefined reference to `sectorcache_clean_all'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(rolo.o): In function `rolo_load':
rolo.c:(.text+0x1bc): undefined reference to `sectorcache_clean_all'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(file.o): In function `lseek':
file.c:(.text+0x184): undefined reference to `sectorcache_clean'
file.c:(.text+0x1a8): undefined reference to `sectorcache_unlock'
file.c:(.text+0x20c): undefined reference to `sectorcache_lock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(file.o): In function `readwrite':
file.c:(.text+0x364): undefined reference to `sectorcache_markdirty'
file.c:(.text+0x39c): undefined reference to `sectorcache_clean'
file.c:(.text+0x3d0): undefined reference to `sectorcache_unlock'
file.c:(.text+0x53c): undefined reference to `sectorcache_lock'
file.c:(.text+0x5ac): undefined reference to `sectorcache_markdirty'
file.c:(.text+0x5fc): undefined reference to `sectorcache_lock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(file.o): In function `fsync':
file.c:(.text+0xc14): undefined reference to `sectorcache_clean'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(file.o): In function `close':
file.c:(.text+0xd5c): undefined reference to `sectorcache_unlock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(disk.o): In function `disk_init':
disk.c:(.text+0x5c): undefined reference to `sectorcache_lock'
disk.c:(.text+0x108): undefined reference to `sectorcache_unlock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(disk.o): In function `disk_mount':
disk.c:(.text+0x13c): undefined reference to `sectorcache_invalidate'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `fat_closedir':
fat.c:(.text+0x134): undefined reference to `sectorcache_unlock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `flush_fat_sector':
fat.c:(.text+0x16c): undefined reference to `sectorcache_writethrough'
fat.c:(.text+0x1ac): undefined reference to `sectorcache_writethrough'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `cache_fat_sector':
fat.c:(.text+0x288): undefined reference to `sectorcache_readthrough'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `fat_getnext':
fat.c:(.text+0x75c): undefined reference to `sectorcache_unlock'
fat.c:(.text+0x784): undefined reference to `sectorcache_lock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `transfer':
fat.c:(.text+0xc84): undefined reference to `sectorcache_writethrough'
fat.c:(.text+0xc9c): undefined reference to `sectorcache_readthrough'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `free_direntries':
fat.c:(.text+0xfc8): undefined reference to `sectorcache_lock'
fat.c:(.text+0x1028): undefined reference to `sectorcache_markdirty'
fat.c:(.text+0x1030): undefined reference to `sectorcache_clean'
fat.c:(.text+0x1054): undefined reference to `sectorcache_unlock'
fat.c:(.text+0x1080): undefined reference to `sectorcache_lock'
fat.c:(.text+0x10b4): undefined reference to `sectorcache_markdirty'
fat.c:(.text+0x10bc): undefined reference to `sectorcache_clean'
fat.c:(.text+0x10e0): undefined reference to `sectorcache_unlock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `update_fsinfo':
fat.c:(.text+0x111c): undefined reference to `sectorcache_lock'
fat.c:(.text+0x115c): undefined reference to `sectorcache_markdirty'
fat.c:(.text+0x1164): undefined reference to `sectorcache_clean'
fat.c:(.text+0x1188): undefined reference to `sectorcache_unlock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `fat_mount':
fat.c:(.text+0x1378): undefined reference to `sectorcache_lock'
fat.c:(.text+0x1528): undefined reference to `sectorcache_unlock'
fat.c:(.text+0x1540): undefined reference to `sectorcache_unlock'
fat.c:(.text+0x15ac): undefined reference to `sectorcache_unlock'
fat.c:(.text+0x16a0): undefined reference to `sectorcache_unlock'
fat.c:(.text+0x16dc): undefined reference to `sectorcache_lock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `write_long_name':
fat.c:(.text+0x19b4): undefined reference to `sectorcache_lock'
fat.c:(.text+0x1ab0): undefined reference to `sectorcache_markdirty'
fat.c:(.text+0x1ab8): undefined reference to `sectorcache_clean'
fat.c:(.text+0x1adc): undefined reference to `sectorcache_unlock'
fat.c:(.text+0x1b1c): undefined reference to `sectorcache_lock'
fat.c:(.text+0x1dc0): undefined reference to `sectorcache_markdirty'
fat.c:(.text+0x1dc8): undefined reference to `sectorcache_clean'
fat.c:(.text+0x1dec): undefined reference to `sectorcache_unlock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `add_dir_entry':
fat.c:(.text+0x2100): undefined reference to `sectorcache_unlock'
fat.c:(.text+0x2110): undefined reference to `sectorcache_lock'
fat.c:(.text+0x21f4): undefined reference to `sectorcache_unlock'
fat.c:(.text+0x2240): undefined reference to `sectorcache_lock'
fat.c:(.text+0x2270): undefined reference to `sectorcache_markdirty'
fat.c:(.text+0x2278): undefined reference to `sectorcache_clean'
fat.c:(.text+0x22a0): undefined reference to `sectorcache_unlock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `update_short_entry':
fat.c:(.text+0x2494): undefined reference to `sectorcache_lock'
fat.c:(.text+0x2520): undefined reference to `sectorcache_markdirty'
fat.c:(.text+0x2528): undefined reference to `sectorcache_clean'
fat.c:(.text+0x254c): undefined reference to `sectorcache_unlock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `fat_rename':
fat.c:(.text+0x26c4): undefined reference to `sectorcache_lock'
fat.c:(.text+0x2730): undefined reference to `sectorcache_markdirty'
fat.c:(.text+0x2738): undefined reference to `sectorcache_clean'
fat.c:(.text+0x275c): undefined reference to `sectorcache_unlock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(fat.o): In function `fat_create_dir':
fat.c:(.text+0x28a8): undefined reference to `sectorcache_lock'
fat.c:(.text+0x28d8): undefined reference to `sectorcache_markdirty'
fat.c:(.text+0x28e0): undefined reference to `sectorcache_clean'
fat.c:(.text+0x2904): undefined reference to `sectorcache_unlock'
/home/michael/Downloads/rockbox/build/firmware/libfirmware.a(usb_storage.o): In function `usb_storage_init_connection':
usb_storage.c:(.text+0x1198): undefined reference to `sectorcache_invalidate'
usb_storage.c:(.text+0x11a8): undefined reference to `sectorcache_lock'
usb_storage.c:(.text+0x11bc): undefined reference to `sectorcache_unlock'
collect2: ld returned 1 exit status
make: *** [/home/michael/Downloads/rockbox/build/rockbox.elf] Error 1
rm /home/michael/Downloads/rockbox/build/apps/bitmaps/native/usblogo.128x37x16.c /home/michael/Downloads/rockbox/build/apps/bitmaps/native/default_icons.6x8x16.c /home/michael/Downloads/rockbox/build/apps/bitmaps/native/rockboxlogo.176x54x16.c
I found the problem. Your second patch does not include the necessary modifications to the SOURCES file.
This patch causes Rockbox not to work correctly. When it boots, it says that it couldn't find the Rockbox directory and that the installation is incomplete. It then displays an unthemed version of the normal menu, and attempting to access the "Files" list results in much garbage being displayed for the file names instead of the correct ones.