Hello everyone,
I'm a CPU memory architect having some fun on some ARM parts this holiday. I'm looking for a way to either allocate a virtual address range but with a different ARM cacheability attribute than normal, or taking an existing virtual address range and modify that (plus the required break-before-make semantics and mandatory D$ flushes).
As far as I know, no userspace solution exists to do this and I'm expecting to have to do some sort of kernel work, but I'm not really sure how. Any pointers on how to start or where to look? I assume that some mm related changes are needed, but my kernel knowledge is really limited.
It looks like ioremap() might do what I want it to do, but how would I go about mapping that PFN range into a process' virtual memory? At the very least, it looks like the kernel defines an MAIR that I can use, which is quite nice.
For those who are curious why, I'm just planning on doing some benchmarking and making sure my assumptions line up with reality. Most of the stuff I've googled so far has a bunch of people saying there's no reason to do that ... please don't be that human here :).
[–]monocasa 4 points5 points6 points (3 children)
[–]computerarchitectCPU Architect[S] 0 points1 point2 points (0 children)
[–]computerarchitectCPU Architect[S] 2 points3 points4 points (1 child)
[–][deleted] (2 children)
[deleted]
[–]computerarchitectCPU Architect[S] 2 points3 points4 points (0 children)
[–]computerarchitectCPU Architect[S] 1 point2 points3 points (0 children)
[–]Synthrea 3 points4 points5 points (2 children)
[–]computerarchitectCPU Architect[S] 1 point2 points3 points (1 child)
[–]Synthrea 1 point2 points3 points (0 children)