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

Submitted by Marcelo Tosatti on March 15, 2011, 9:50 p.m.

Details

Message ID f06197008087c5fa592f65a96f46d7f00dddb1cd.1300225848.git.mtosatti@redhat.com
State New
Headers show

Commit Message

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(-)

Comments

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 hide | download patch | download mbox

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;