Greeting all,
I'm trying to make sense of an Oops in a driver I'm trying to port
from 2.4 to 2.6.21 on an embedded ARM platform. I've scoured every
archive and Google page I could find but because my issue is very
specific I can't find anything that helps.
In a nutshell, I have the module building and loading for 2.6 but
when a user land app attempts to use the driver it fails (unable to
handle kernel paging request).
The address in question is of the CPU's internal peripheral
registers. The key issue is that I can access that address from
kernel mode just fine. But the failure happens when the user land app
down-calls via an ioctl into the driver module. The oops message says
it was "Mode SVC_32 Segment user".
I thought I'd read that once the syscall happens and the driver is
called by do_ioctl (which is happening) that it should be in kernel
mode. I don't understand what else I need to do to allow me to access
kernel mappings that I know exist.
Is there a call I need to make to reach kernel mode? Or am I supposed
to map the physical range I need again during an init down-call?
I think I have the code doing basically what it did under 2.4 but I
never saw this problem there.
Thanks for any advise or pointers.
-Mike
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ