views:

78

answers:

0

Hello all;

I'm working on modifying a Linux 2.6.22-5 kernel driver in order to add threading, and I'm running into a problem I can't seem to figure out. I have set up the module so that there is a single function which is called, which invokes one or more worker threads to do the actual work. The worker threads contain only existing functionality, the only difference is how some of the parameters are provided (since I'm using kthreads, instead of passing all of the arguments via the function call directly I pass a void pointer to a structure containing all of the parameters). At the moment I'm only testing with one worker thread, so there should be no contention between threads for data structure access (however, the data structures are read-only anyways).

Sometimes, there will be no problems and the module will perform precisely as intended. However, other times the kernel will throw an OOPS, saying that it was "unable to handle kernel paging request at virtual address x". The address it refers to is one of the data structures it is reading, however I don't actually know what the error itself is trying to tell me. I have figured out approximately where the error is occuring, but not understanding what the message is trying to tell me is making it very difficult to make much progress.

Therefore, I am asking what it means when the kernel is unable to handle a kernel paging request at a specified virtual address. I would appreciate any insight that the SO community can provide.

Thanks; ~Robert