translate-common.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * Host code generation common components
  3. *
  4. * Copyright (c) 2015 Peter Crosthwaite <crosthwaite.peter@gmail.com>
  5. *
  6. * This library is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2 of the License, or (at your option) any later version.
  10. *
  11. * This library is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  18. */
  19. #include "qemu/osdep.h"
  20. #include "qemu-common.h"
  21. #include "qom/cpu.h"
  22. #include "sysemu/cpus.h"
  23. #include "qemu/main-loop.h"
  24. uintptr_t qemu_real_host_page_size;
  25. intptr_t qemu_real_host_page_mask;
  26. #ifndef CONFIG_USER_ONLY
  27. /* mask must never be zero, except for A20 change call */
  28. static void tcg_handle_interrupt(CPUState *cpu, int mask)
  29. {
  30. int old_mask;
  31. g_assert(qemu_mutex_iothread_locked());
  32. old_mask = cpu->interrupt_request;
  33. cpu->interrupt_request |= mask;
  34. /*
  35. * If called from iothread context, wake the target cpu in
  36. * case its halted.
  37. */
  38. if (!qemu_cpu_is_self(cpu)) {
  39. qemu_cpu_kick(cpu);
  40. } else {
  41. cpu->icount_decr.u16.high = -1;
  42. if (use_icount &&
  43. !cpu->can_do_io
  44. && (mask & ~old_mask) != 0) {
  45. cpu_abort(cpu, "Raised interrupt while not in I/O function");
  46. }
  47. }
  48. }
  49. CPUInterruptHandler cpu_interrupt_handler = tcg_handle_interrupt;
  50. #endif