kernelnewbies.kernelnewbies.org archive mirror
 help / color / mirror / Atom feed
From: htmldeveloper@gmail.com (Peter Teoh)
To: kernelnewbies@lists.kernelnewbies.org
Subject: Problems with hypercalls
Date: Thu, 9 Jun 2011 09:46:12 +0800	[thread overview]
Message-ID: <BANLkTimVqKUDybz0UVnHTsEfXeX7fuh-fw@mail.gmail.com> (raw)
In-Reply-To: <BLU124-W1837A65FCC53385AAC1076CF620@phx.gbl>

perhaps this example will provide u with more info:

http://a380.informatik.uni-bremen.de/lxr/source/arch/x86/lguest/boot.c

I think the correct step is to disable IRQ instead - before every call
to kvm_hypercallX().   The reason is given in the remark:

110         /*
111          * Disable interrupts if not already disabled: we don't want an
112          * interrupt handler making a hypercall while we're already doing
113          * one!
114          */

On Wed, Jun 8, 2011 at 10:54 PM, emilie lefebvre <tricheurs@hotmail.fr> wrote:
>
> 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 :
> * ?????????????? " 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);
> }
> }
>
>

I think u generally set TASK_UNINTERRUPTIBLE whenever about to modify
the scheduling task list (eg, wait queue manipulation) or about to
call "schedule()" (ie, doing your own scheduling).   The function
set_current_state() literally just set the variable value only, it
does not disable interrupt.

-- 
Regards,
Peter Teoh

  parent reply	other threads:[~2011-06-09  1:46 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-07  8:39 Problems with hypercalls emilie lefebvre
2011-06-08  9:55 ` Mulyadi Santosa
2011-06-08 10:22   ` Rajat Sharma
2011-06-08 14:54     ` emilie lefebvre
2011-06-08 16:46       ` Mulyadi Santosa
2011-06-09  1:46       ` Peter Teoh [this message]
2011-06-09  8:35         ` emilie lefebvre
2011-06-09 16:46           ` Peter Teoh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BANLkTimVqKUDybz0UVnHTsEfXeX7fuh-fw@mail.gmail.com \
    --to=htmldeveloper@gmail.com \
    --cc=kernelnewbies@lists.kernelnewbies.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).