On Tue, Jul 13, 2021 at 08:16:25PM +1200, Michael Schmitz wrote:
I'll try that next. It certainly ran fine when I tried your earlier version which still had the __constant_copy_from_user() (but modified to use __get_user_asm() for the 1, 2 and 4 byte cases). That doesn't prove much though - I may not have hit the exact same memory pressure (not sure how often savelogs runs on that system, and I haven't checked how much the kernel size differs between the two versions). Anyway, I'll try my previous version again, and I'll try with the WARN_ON removed, but that'll take a few days (did I mention this 030 is clocked at 16 MHz only?).
No problem.
I suspect it may get called from an interrupt - not sure what interrupt handler would call vm_map_ram(), or if that even is allowed though. Might happen during a softirq, which is covered by in_interrupt as well ...
vm_map_ram isn't allowed to be called from interrupts, just like all the vmalloc/vmap code. But that doesn't mean it might not have crept in somewhere.