This is my function : static spinlock_t xgr_learn_lock = SPIN_LOCK_UNLOCKED; static int piga_seq_cpt = 1; /* * Function called for each systemcall (Hook SELinux avc function) */ int piga_control(u32 ssid, ...., struct av_decision * avd) { /* * Here my hypercall work but block my vm with this error : > Date: Wed, 8 Jun 2011 12:50:57 +0200* " BUG: scheduling while atomic ... " */ spin_lock_bh(&xgr_learn_lock); if ( in_atomic()) kvm_hypercall2 ( 6, (unsigned long)2 ,(unsigned long)piga_seq_cpt); spin_unlock_bh(&xgr_learn_lock); if (piga_on == 1) { /* * Here my hypercall make a kernel panic with this error: * " divide error: 0000 [#1] SMP" */ spin_lock_bh(&xgr_learn_lock); set_current_state(TASK_UNINTERRUPTIBLE); kvm_hypercall2 ( 6, (unsigned long)2 ,(unsigned long)piga_seq_cpt); set_current_state(TASK_RUNNING); spin_lock_bh(&xgr_learn_lock); } } > From: kernelnewbies@xxxxxxxxxxx > To: kernelnewbies@xxxxxxxxxxxxxxxxx > Subject: Re: Calling function from address > CC: mulyadi.santosa@xxxxxxxxx > > On Wed, Jun 08, 2011 at 04:52:14PM +0700, Mulyadi Santosa wrote: > > On Wed, Jun 8, 2011 at 03:47, Micha M. <kernelnewbies@xxxxxxxxxxx> wrote: > > > Hi! > > > > > > > > > Is it possible to call a function that is somewere in the physical-address > > > space? So I'd like to jump to a certain physical address, execute the code > > > there and then return to my kernel module. > > > I already tried to ioremap that address and cast the new address to a > > > funtion pointer and then call the function, but there where some page > > > faults. > > > > Interesting, and after page fault....the code is still not executed? > > > > what code(s) do you call? user mode? kernel mode? > > I don't think that the code was executed. There was a kernel Ooops direct > after the page fault and a register dump was printed. The code I what to > call is located in ROM and is mapped to the physical address space. > Is it possible to configure the kernel to ignore certain address areas and > allow calls to that space? > > And that code needs to be executed from that place, since it contains > pointer in the physical address space. (s oremapping won't work because > there are absolute jumps in that function I'd like to call) > > The only solution I kan think of at the moment is to solve it somehow in > assembly. But I don't know how... > > > regards, > > #micha > > -- > /* To err is human; to really fuck things up requires the root password */ > > _______________________________________________ > Kernelnewbies mailing list > Kernelnewbies@xxxxxxxxxxxxxxxxx > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies |
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies