Patchwork [21/35] Break up user and system cpu_interrupt implementations

login
register
mail settings
Submitter Marcelo Tosatti
Date March 15, 2011, 9:50 p.m.
Message ID <f06197008087c5fa592f65a96f46d7f00dddb1cd.1300225848.git.mtosatti@redhat.com>
Download mbox | patch
Permalink /patch/87104/
State New
Headers show

Comments

Marcelo Tosatti - March 15, 2011, 9:50 p.m.
From: Jan Kiszka <jan.kiszka@siemens.com>

Both have only two lines in common, and we will convert the system
service into a callback which is of no use for user mode operation.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
CC: Riku Voipio <riku.voipio@iki.fi>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
---
 exec.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)
Jan Kiszka - March 16, 2011, 9:02 a.m.
On 2011-03-15 22:50, Marcelo Tosatti wrote:
> From: Jan Kiszka <jan.kiszka@siemens.com>
> 
> Both have only two lines in common, and we will convert the system
> service into a callback which is of no use for user mode operation.

From KVM POV, the value of this patch is not that high as long as we do
not push the callback patches as well.

Jan
Marcelo Tosatti - March 16, 2011, 8:13 p.m.
On Wed, Mar 16, 2011 at 10:02:18AM +0100, Jan Kiszka wrote:
> On 2011-03-15 22:50, Marcelo Tosatti wrote:
> > From: Jan Kiszka <jan.kiszka@siemens.com>
> > 
> > Both have only two lines in common, and we will convert the system
> > service into a callback which is of no use for user mode operation.
> 
> >From KVM POV, the value of this patch is not that high as long as we do
> not push the callback patches as well.

Agreed, patch removed from queue.

Patch

diff --git a/exec.c b/exec.c
index c5358c3..12ea582 100644
--- a/exec.c
+++ b/exec.c
@@ -1627,6 +1627,7 @@  static void cpu_unlink_tb(CPUState *env)
     spin_unlock(&interrupt_lock);
 }
 
+#ifndef CONFIG_USER_ONLY
 /* mask must never be zero, except for A20 change call */
 void cpu_interrupt(CPUState *env, int mask)
 {
@@ -1635,7 +1636,6 @@  void cpu_interrupt(CPUState *env, int mask)
     old_mask = env->interrupt_request;
     env->interrupt_request |= mask;
 
-#ifndef CONFIG_USER_ONLY
     /*
      * If called from iothread context, wake the target cpu in
      * case its halted.
@@ -1644,21 +1644,27 @@  void cpu_interrupt(CPUState *env, int mask)
         qemu_cpu_kick(env);
         return;
     }
-#endif
 
     if (use_icount) {
         env->icount_decr.u16.high = 0xffff;
-#ifndef CONFIG_USER_ONLY
         if (!can_do_io(env)
             && (mask & ~old_mask) != 0) {
             cpu_abort(env, "Raised interrupt while not in I/O function");
         }
-#endif
     } else {
         cpu_unlink_tb(env);
     }
 }
 
+#else /* CONFIG_USER_ONLY */
+
+void cpu_interrupt(CPUState *env, int mask)
+{
+    env->interrupt_request |= mask;
+    cpu_unlink_tb(env);
+}
+#endif /* CONFIG_USER_ONLY */
+
 void cpu_reset_interrupt(CPUState *env, int mask)
 {
     env->interrupt_request &= ~mask;