Revision 97ffbd8d
b/exec.c | ||
---|---|---|
1629 | 1629 |
spin_unlock(&interrupt_lock); |
1630 | 1630 |
} |
1631 | 1631 |
|
1632 |
#ifndef CONFIG_USER_ONLY |
|
1632 | 1633 |
/* mask must never be zero, except for A20 change call */ |
1633 | 1634 |
void cpu_interrupt(CPUState *env, int mask) |
1634 | 1635 |
{ |
... | ... | |
1637 | 1638 |
old_mask = env->interrupt_request; |
1638 | 1639 |
env->interrupt_request |= mask; |
1639 | 1640 |
|
1640 |
#ifndef CONFIG_USER_ONLY |
|
1641 | 1641 |
/* |
1642 | 1642 |
* If called from iothread context, wake the target cpu in |
1643 | 1643 |
* case its halted. |
... | ... | |
1646 | 1646 |
qemu_cpu_kick(env); |
1647 | 1647 |
return; |
1648 | 1648 |
} |
1649 |
#endif |
|
1650 | 1649 |
|
1651 | 1650 |
if (use_icount) { |
1652 | 1651 |
env->icount_decr.u16.high = 0xffff; |
1653 |
#ifndef CONFIG_USER_ONLY |
|
1654 | 1652 |
if (!can_do_io(env) |
1655 | 1653 |
&& (mask & ~old_mask) != 0) { |
1656 | 1654 |
cpu_abort(env, "Raised interrupt while not in I/O function"); |
1657 | 1655 |
} |
1658 |
#endif |
|
1659 | 1656 |
} else { |
1660 | 1657 |
cpu_unlink_tb(env); |
1661 | 1658 |
} |
1662 | 1659 |
} |
1663 | 1660 |
|
1661 |
#else /* CONFIG_USER_ONLY */ |
|
1662 |
|
|
1663 |
void cpu_interrupt(CPUState *env, int mask) |
|
1664 |
{ |
|
1665 |
env->interrupt_request |= mask; |
|
1666 |
cpu_unlink_tb(env); |
|
1667 |
} |
|
1668 |
#endif /* CONFIG_USER_ONLY */ |
|
1669 |
|
|
1664 | 1670 |
void cpu_reset_interrupt(CPUState *env, int mask) |
1665 | 1671 |
{ |
1666 | 1672 |
env->interrupt_request &= ~mask; |
Also available in: Unified diff