On 2025-02-25 at 11:41:56 GMT, Mikolaj Wasiak wrote: > When driver is loaded on system with numa nodes it might be run in kthread. > This makes it impossible to use current->mm in selftests which currently > creates null pointer exception. > This patch allows selftest to use current->mm by using active_mm. > > Signed-off-by: Mikolaj Wasiak <mikolaj.wasiak@xxxxxxxxx> > --- > > This patch is mostly damage control. By using active_mm we expose our > test to foreign memory mapping, which sometimes makes the test fail. > That is still better than just having null pointer exception in driver > code. > We talked about this offline a bit, I'll recount what we determined here just for the record. On NUMA systems, the driver might be probed via a kthread consuming a workqueue. This shouldn't be a problem as long as we don't rely on current->mm (i915 usually doesn't, unless it's ioctls where it's fair game) - but this test wasn't written with that in mind, hence the derefs. We can't just use current->active_mm in place of current->mm inside of the test code, because one of the functions that the test uses (vma_lookup to be exact) ends up using current->mm. That's too deep into the kernel to ever touch it with such a patch. The problem is, we also can't just set current->mm of the kthread to current->active_mm, because God knows what that value can be (again, we are executing in some random kthread that just happened to work on the probe). So I don't think this patch is a good idea; it IS better than just having a NULL deref, but since active_mm is being so unreliable here, that kind of defeats the point of running the test. Also, since this is an mmap test and it does stuff like user pointers, it does not really make much sense to run it in a kthread (unless it's explicitly forked from a context, current->mm of which we have control over, but that's not what's happening here). I have two suggestions for a different fix: 1. Disable the test on systems with NUMA and/or if it's running in a kthread, on the premise that it doesn't make sense to run this specific test in a kthread. This is the easier option. 2. Find a way to pass an argument to the selftest, so we can pass a known mm to the test thread. Then set it as current->mm for the duration of the test like you're doing in your patch. We could pass the IGT process's mm to "emulate" having it being the initializer of the test task; this way we're being a good citizen and we don't mess with some other process memory. I figure this is the harder option. I'd try 2 and if it doesn't work then just resort to 1 if there's no better idea floating around. Thanks Krzysztof