remove mutex code
This commit is contained in:
parent
42771848d6
commit
c6de7930c9
|
@ -41,11 +41,9 @@ typedef struct {
|
||||||
} BounceBuffer;
|
} BounceBuffer;
|
||||||
|
|
||||||
typedef struct RAMList {
|
typedef struct RAMList {
|
||||||
QemuMutex mutex;
|
|
||||||
/* Protected by the iothread lock. */
|
/* Protected by the iothread lock. */
|
||||||
unsigned long *dirty_memory[DIRTY_MEMORY_NUM];
|
unsigned long *dirty_memory[DIRTY_MEMORY_NUM];
|
||||||
RAMBlock *mru_block;
|
RAMBlock *mru_block;
|
||||||
/* Protected by the ramlist lock. */
|
|
||||||
QTAILQ_HEAD(, RAMBlock) blocks;
|
QTAILQ_HEAD(, RAMBlock) blocks;
|
||||||
uint32_t version;
|
uint32_t version;
|
||||||
} RAMList;
|
} RAMList;
|
||||||
|
|
|
@ -188,7 +188,6 @@ struct uc_struct {
|
||||||
unsigned memory_region_transaction_depth;
|
unsigned memory_region_transaction_depth;
|
||||||
bool memory_region_update_pending;
|
bool memory_region_update_pending;
|
||||||
bool ioeventfd_update_pending;
|
bool ioeventfd_update_pending;
|
||||||
QemuMutex flat_view_mutex;
|
|
||||||
QTAILQ_HEAD(memory_listeners, MemoryListener) memory_listeners;
|
QTAILQ_HEAD(memory_listeners, MemoryListener) memory_listeners;
|
||||||
QTAILQ_HEAD(, AddressSpace) address_spaces;
|
QTAILQ_HEAD(, AddressSpace) address_spaces;
|
||||||
MachineState *machine_state;
|
MachineState *machine_state;
|
||||||
|
|
|
@ -2381,7 +2381,6 @@
|
||||||
#define qemu_clock_get_us qemu_clock_get_us_aarch64
|
#define qemu_clock_get_us qemu_clock_get_us_aarch64
|
||||||
#define qemu_clock_ptr qemu_clock_ptr_aarch64
|
#define qemu_clock_ptr qemu_clock_ptr_aarch64
|
||||||
#define qemu_clocks qemu_clocks_aarch64
|
#define qemu_clocks qemu_clocks_aarch64
|
||||||
#define qemu_flush_coalesced_mmio_buffer qemu_flush_coalesced_mmio_buffer_aarch64
|
|
||||||
#define qemu_get_cpu qemu_get_cpu_aarch64
|
#define qemu_get_cpu qemu_get_cpu_aarch64
|
||||||
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_aarch64
|
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_aarch64
|
||||||
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_aarch64
|
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_aarch64
|
||||||
|
|
|
@ -2381,7 +2381,6 @@
|
||||||
#define qemu_clock_get_us qemu_clock_get_us_arm
|
#define qemu_clock_get_us qemu_clock_get_us_arm
|
||||||
#define qemu_clock_ptr qemu_clock_ptr_arm
|
#define qemu_clock_ptr qemu_clock_ptr_arm
|
||||||
#define qemu_clocks qemu_clocks_arm
|
#define qemu_clocks qemu_clocks_arm
|
||||||
#define qemu_flush_coalesced_mmio_buffer qemu_flush_coalesced_mmio_buffer_arm
|
|
||||||
#define qemu_get_cpu qemu_get_cpu_arm
|
#define qemu_get_cpu qemu_get_cpu_arm
|
||||||
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_arm
|
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_arm
|
||||||
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_arm
|
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_arm
|
||||||
|
|
26
qemu/exec.c
26
qemu/exec.c
|
@ -906,20 +906,6 @@ static void mem_add(MemoryListener *listener, MemoryRegionSection *section)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void qemu_flush_coalesced_mmio_buffer(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void qemu_mutex_lock_ramlist(struct uc_struct *uc)
|
|
||||||
{
|
|
||||||
qemu_mutex_lock(&uc->ram_list.mutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
void qemu_mutex_unlock_ramlist(struct uc_struct *uc)
|
|
||||||
{
|
|
||||||
qemu_mutex_unlock(&uc->ram_list.mutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
|
|
||||||
#include <sys/vfs.h>
|
#include <sys/vfs.h>
|
||||||
|
@ -1012,8 +998,6 @@ static ram_addr_t ram_block_add(struct uc_struct *uc, RAMBlock *new_block, Error
|
||||||
|
|
||||||
old_ram_size = last_ram_offset(uc) >> TARGET_PAGE_BITS;
|
old_ram_size = last_ram_offset(uc) >> TARGET_PAGE_BITS;
|
||||||
|
|
||||||
/* This assumes the iothread lock is taken here too. */
|
|
||||||
qemu_mutex_lock_ramlist(uc);
|
|
||||||
new_block->offset = find_ram_offset(uc, new_block->length);
|
new_block->offset = find_ram_offset(uc, new_block->length);
|
||||||
|
|
||||||
if (!new_block->host) {
|
if (!new_block->host) {
|
||||||
|
@ -1023,7 +1007,6 @@ static ram_addr_t ram_block_add(struct uc_struct *uc, RAMBlock *new_block, Error
|
||||||
error_setg_errno(errp, errno,
|
error_setg_errno(errp, errno,
|
||||||
"cannot set up guest memory '%s'",
|
"cannot set up guest memory '%s'",
|
||||||
memory_region_name(new_block->mr));
|
memory_region_name(new_block->mr));
|
||||||
qemu_mutex_unlock_ramlist(uc);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
memory_try_enable_merging(new_block->host, new_block->length);
|
memory_try_enable_merging(new_block->host, new_block->length);
|
||||||
|
@ -1043,7 +1026,6 @@ static ram_addr_t ram_block_add(struct uc_struct *uc, RAMBlock *new_block, Error
|
||||||
uc->ram_list.mru_block = NULL;
|
uc->ram_list.mru_block = NULL;
|
||||||
|
|
||||||
uc->ram_list.version++;
|
uc->ram_list.version++;
|
||||||
qemu_mutex_unlock_ramlist(uc);
|
|
||||||
|
|
||||||
new_ram_size = last_ram_offset(uc) >> TARGET_PAGE_BITS;
|
new_ram_size = last_ram_offset(uc) >> TARGET_PAGE_BITS;
|
||||||
|
|
||||||
|
@ -1102,8 +1084,6 @@ void qemu_ram_free_from_ptr(struct uc_struct *uc, ram_addr_t addr)
|
||||||
{
|
{
|
||||||
RAMBlock *block;
|
RAMBlock *block;
|
||||||
|
|
||||||
/* This assumes the iothread lock is taken here too. */
|
|
||||||
qemu_mutex_lock_ramlist(uc);
|
|
||||||
QTAILQ_FOREACH(block, &uc->ram_list.blocks, next) {
|
QTAILQ_FOREACH(block, &uc->ram_list.blocks, next) {
|
||||||
if (addr == block->offset) {
|
if (addr == block->offset) {
|
||||||
QTAILQ_REMOVE(&uc->ram_list.blocks, block, next);
|
QTAILQ_REMOVE(&uc->ram_list.blocks, block, next);
|
||||||
|
@ -1113,15 +1093,12 @@ void qemu_ram_free_from_ptr(struct uc_struct *uc, ram_addr_t addr)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qemu_mutex_unlock_ramlist(uc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void qemu_ram_free(struct uc_struct *uc, ram_addr_t addr)
|
void qemu_ram_free(struct uc_struct *uc, ram_addr_t addr)
|
||||||
{
|
{
|
||||||
RAMBlock *block;
|
RAMBlock *block;
|
||||||
|
|
||||||
/* This assumes the iothread lock is taken here too. */
|
|
||||||
qemu_mutex_lock_ramlist(uc);
|
|
||||||
QTAILQ_FOREACH(block, &uc->ram_list.blocks, next) {
|
QTAILQ_FOREACH(block, &uc->ram_list.blocks, next) {
|
||||||
if (addr == block->offset) {
|
if (addr == block->offset) {
|
||||||
QTAILQ_REMOVE(&uc->ram_list.blocks, block, next);
|
QTAILQ_REMOVE(&uc->ram_list.blocks, block, next);
|
||||||
|
@ -1141,8 +1118,6 @@ void qemu_ram_free(struct uc_struct *uc, ram_addr_t addr)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qemu_mutex_unlock_ramlist(uc);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
|
@ -1555,7 +1530,6 @@ static void memory_map_init(struct uc_struct *uc)
|
||||||
void cpu_exec_init_all(struct uc_struct *uc)
|
void cpu_exec_init_all(struct uc_struct *uc)
|
||||||
{
|
{
|
||||||
#if !defined(CONFIG_USER_ONLY)
|
#if !defined(CONFIG_USER_ONLY)
|
||||||
qemu_mutex_init(&uc->ram_list.mutex);
|
|
||||||
memory_map_init(uc);
|
memory_map_init(uc);
|
||||||
#endif
|
#endif
|
||||||
io_mem_init(uc);
|
io_mem_init(uc);
|
||||||
|
|
|
@ -2387,7 +2387,6 @@ symbols = (
|
||||||
'qemu_clock_get_us',
|
'qemu_clock_get_us',
|
||||||
'qemu_clock_ptr',
|
'qemu_clock_ptr',
|
||||||
'qemu_clocks',
|
'qemu_clocks',
|
||||||
'qemu_flush_coalesced_mmio_buffer',
|
|
||||||
'qemu_get_cpu',
|
'qemu_get_cpu',
|
||||||
'qemu_get_guest_memory_mapping',
|
'qemu_get_guest_memory_mapping',
|
||||||
'qemu_get_guest_simple_memory_mapping',
|
'qemu_get_guest_simple_memory_mapping',
|
||||||
|
|
|
@ -3,10 +3,6 @@
|
||||||
#include "pthread.h"
|
#include "pthread.h"
|
||||||
#include <semaphore.h>
|
#include <semaphore.h>
|
||||||
|
|
||||||
struct QemuMutex {
|
|
||||||
pthread_mutex_t lock;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct QemuThread {
|
struct QemuThread {
|
||||||
pthread_t thread;
|
pthread_t thread;
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,11 +2,6 @@
|
||||||
#define __QEMU_THREAD_WIN32_H 1
|
#define __QEMU_THREAD_WIN32_H 1
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
|
||||||
struct QemuMutex {
|
|
||||||
CRITICAL_SECTION lock;
|
|
||||||
LONG owner;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct QemuThreadData QemuThreadData;
|
typedef struct QemuThreadData QemuThreadData;
|
||||||
struct QemuThread {
|
struct QemuThread {
|
||||||
QemuThreadData *data;
|
QemuThreadData *data;
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
typedef struct QemuMutex QemuMutex;
|
|
||||||
typedef struct QemuThread QemuThread;
|
typedef struct QemuThread QemuThread;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -16,11 +15,6 @@ typedef struct QemuThread QemuThread;
|
||||||
#define QEMU_THREAD_JOINABLE 0
|
#define QEMU_THREAD_JOINABLE 0
|
||||||
#define QEMU_THREAD_DETACHED 1
|
#define QEMU_THREAD_DETACHED 1
|
||||||
|
|
||||||
void qemu_mutex_init(QemuMutex *mutex);
|
|
||||||
void qemu_mutex_destroy(QemuMutex *mutex);
|
|
||||||
void qemu_mutex_lock(QemuMutex *mutex);
|
|
||||||
void qemu_mutex_unlock(QemuMutex *mutex);
|
|
||||||
|
|
||||||
struct uc_struct;
|
struct uc_struct;
|
||||||
// return -1 on error, 0 on success
|
// return -1 on error, 0 on success
|
||||||
int qemu_thread_create(struct uc_struct *uc, QemuThread *thread, const char *name,
|
int qemu_thread_create(struct uc_struct *uc, QemuThread *thread, const char *name,
|
||||||
|
|
|
@ -123,14 +123,6 @@ static inline int64_t qemu_clock_get_us(QEMUClockType type)
|
||||||
QEMUTimerList *timerlist_new(QEMUClockType type,
|
QEMUTimerList *timerlist_new(QEMUClockType type,
|
||||||
QEMUTimerListNotifyCB *cb, void *opaque);
|
QEMUTimerListNotifyCB *cb, void *opaque);
|
||||||
|
|
||||||
/**
|
|
||||||
* timerlist_free:
|
|
||||||
* @timer_list: the timer list to free
|
|
||||||
*
|
|
||||||
* Frees a timer_list. It must have no active timers.
|
|
||||||
*/
|
|
||||||
void timerlist_free(QEMUTimerList *timer_list);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* timerlist_has_timers:
|
* timerlist_has_timers:
|
||||||
* @timer_list: the timer list to operate on
|
* @timer_list: the timer list to operate on
|
||||||
|
|
|
@ -2381,7 +2381,6 @@
|
||||||
#define qemu_clock_get_us qemu_clock_get_us_m68k
|
#define qemu_clock_get_us qemu_clock_get_us_m68k
|
||||||
#define qemu_clock_ptr qemu_clock_ptr_m68k
|
#define qemu_clock_ptr qemu_clock_ptr_m68k
|
||||||
#define qemu_clocks qemu_clocks_m68k
|
#define qemu_clocks qemu_clocks_m68k
|
||||||
#define qemu_flush_coalesced_mmio_buffer qemu_flush_coalesced_mmio_buffer_m68k
|
|
||||||
#define qemu_get_cpu qemu_get_cpu_m68k
|
#define qemu_get_cpu qemu_get_cpu_m68k
|
||||||
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_m68k
|
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_m68k
|
||||||
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_m68k
|
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_m68k
|
||||||
|
|
|
@ -122,16 +122,8 @@ int memory_free(struct uc_struct *uc)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* flat_view_mutex is taken around reading as->current_map; the critical
|
|
||||||
* section is extremely short, so I'm using a single mutex for every AS.
|
|
||||||
* We could also RCU for the read-side.
|
|
||||||
*
|
|
||||||
* The BQL is taken around transaction commits, hence both locks are taken
|
|
||||||
* while writing to as->current_map (with the BQL taken outside).
|
|
||||||
*/
|
|
||||||
static void memory_init(struct uc_struct *uc)
|
static void memory_init(struct uc_struct *uc)
|
||||||
{
|
{
|
||||||
qemu_mutex_init(&uc->flat_view_mutex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct AddrRange AddrRange;
|
typedef struct AddrRange AddrRange;
|
||||||
|
@ -484,9 +476,6 @@ static void memory_region_read_accessor(MemoryRegion *mr,
|
||||||
{
|
{
|
||||||
uint64_t tmp;
|
uint64_t tmp;
|
||||||
|
|
||||||
if (mr->flush_coalesced_mmio) {
|
|
||||||
qemu_flush_coalesced_mmio_buffer();
|
|
||||||
}
|
|
||||||
tmp = mr->ops->read(mr->uc, mr->opaque, addr, size);
|
tmp = mr->ops->read(mr->uc, mr->opaque, addr, size);
|
||||||
*value |= (tmp & mask) << shift;
|
*value |= (tmp & mask) << shift;
|
||||||
}
|
}
|
||||||
|
@ -513,9 +502,6 @@ static void memory_region_write_accessor(MemoryRegion *mr,
|
||||||
{
|
{
|
||||||
uint64_t tmp;
|
uint64_t tmp;
|
||||||
|
|
||||||
if (mr->flush_coalesced_mmio) {
|
|
||||||
qemu_flush_coalesced_mmio_buffer();
|
|
||||||
}
|
|
||||||
tmp = (*value >> shift) & mask;
|
tmp = (*value >> shift) & mask;
|
||||||
mr->ops->write(mr->uc, mr->opaque, addr, tmp, size);
|
mr->ops->write(mr->uc, mr->opaque, addr, tmp, size);
|
||||||
}
|
}
|
||||||
|
@ -732,10 +718,8 @@ static FlatView *address_space_get_flatview(AddressSpace *as)
|
||||||
{
|
{
|
||||||
FlatView *view;
|
FlatView *view;
|
||||||
|
|
||||||
qemu_mutex_lock(&as->uc->flat_view_mutex);
|
|
||||||
view = as->current_map;
|
view = as->current_map;
|
||||||
flatview_ref(view);
|
flatview_ref(view);
|
||||||
qemu_mutex_unlock(&as->uc->flat_view_mutex);
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -845,10 +829,8 @@ static void address_space_update_topology(AddressSpace *as)
|
||||||
address_space_update_topology_pass(as, old_view, new_view, false);
|
address_space_update_topology_pass(as, old_view, new_view, false);
|
||||||
address_space_update_topology_pass(as, old_view, new_view, true);
|
address_space_update_topology_pass(as, old_view, new_view, true);
|
||||||
|
|
||||||
qemu_mutex_lock(&as->uc->flat_view_mutex);
|
|
||||||
flatview_unref(as->current_map);
|
flatview_unref(as->current_map);
|
||||||
as->current_map = new_view;
|
as->current_map = new_view;
|
||||||
qemu_mutex_unlock(&as->uc->flat_view_mutex);
|
|
||||||
|
|
||||||
/* Note that all the old MemoryRegions are still alive up to this
|
/* Note that all the old MemoryRegions are still alive up to this
|
||||||
* point. This relieves most MemoryListeners from the need to
|
* point. This relieves most MemoryListeners from the need to
|
||||||
|
@ -863,7 +845,6 @@ static void address_space_update_topology(AddressSpace *as)
|
||||||
|
|
||||||
void memory_region_transaction_begin(struct uc_struct *uc)
|
void memory_region_transaction_begin(struct uc_struct *uc)
|
||||||
{
|
{
|
||||||
qemu_flush_coalesced_mmio_buffer();
|
|
||||||
++uc->memory_region_transaction_depth;
|
++uc->memory_region_transaction_depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1459,7 +1440,6 @@ void memory_region_clear_coalescing(MemoryRegion *mr)
|
||||||
CoalescedMemoryRange *cmr;
|
CoalescedMemoryRange *cmr;
|
||||||
bool updated = false;
|
bool updated = false;
|
||||||
|
|
||||||
qemu_flush_coalesced_mmio_buffer();
|
|
||||||
mr->flush_coalesced_mmio = false;
|
mr->flush_coalesced_mmio = false;
|
||||||
|
|
||||||
while (!QTAILQ_EMPTY(&mr->coalesced)) {
|
while (!QTAILQ_EMPTY(&mr->coalesced)) {
|
||||||
|
|
|
@ -2381,7 +2381,6 @@
|
||||||
#define qemu_clock_get_us qemu_clock_get_us_mips
|
#define qemu_clock_get_us qemu_clock_get_us_mips
|
||||||
#define qemu_clock_ptr qemu_clock_ptr_mips
|
#define qemu_clock_ptr qemu_clock_ptr_mips
|
||||||
#define qemu_clocks qemu_clocks_mips
|
#define qemu_clocks qemu_clocks_mips
|
||||||
#define qemu_flush_coalesced_mmio_buffer qemu_flush_coalesced_mmio_buffer_mips
|
|
||||||
#define qemu_get_cpu qemu_get_cpu_mips
|
#define qemu_get_cpu qemu_get_cpu_mips
|
||||||
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_mips
|
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_mips
|
||||||
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_mips
|
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_mips
|
||||||
|
|
|
@ -2381,7 +2381,6 @@
|
||||||
#define qemu_clock_get_us qemu_clock_get_us_mips64
|
#define qemu_clock_get_us qemu_clock_get_us_mips64
|
||||||
#define qemu_clock_ptr qemu_clock_ptr_mips64
|
#define qemu_clock_ptr qemu_clock_ptr_mips64
|
||||||
#define qemu_clocks qemu_clocks_mips64
|
#define qemu_clocks qemu_clocks_mips64
|
||||||
#define qemu_flush_coalesced_mmio_buffer qemu_flush_coalesced_mmio_buffer_mips64
|
|
||||||
#define qemu_get_cpu qemu_get_cpu_mips64
|
#define qemu_get_cpu qemu_get_cpu_mips64
|
||||||
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_mips64
|
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_mips64
|
||||||
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_mips64
|
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_mips64
|
||||||
|
|
|
@ -2381,7 +2381,6 @@
|
||||||
#define qemu_clock_get_us qemu_clock_get_us_mips64el
|
#define qemu_clock_get_us qemu_clock_get_us_mips64el
|
||||||
#define qemu_clock_ptr qemu_clock_ptr_mips64el
|
#define qemu_clock_ptr qemu_clock_ptr_mips64el
|
||||||
#define qemu_clocks qemu_clocks_mips64el
|
#define qemu_clocks qemu_clocks_mips64el
|
||||||
#define qemu_flush_coalesced_mmio_buffer qemu_flush_coalesced_mmio_buffer_mips64el
|
|
||||||
#define qemu_get_cpu qemu_get_cpu_mips64el
|
#define qemu_get_cpu qemu_get_cpu_mips64el
|
||||||
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_mips64el
|
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_mips64el
|
||||||
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_mips64el
|
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_mips64el
|
||||||
|
|
|
@ -2381,7 +2381,6 @@
|
||||||
#define qemu_clock_get_us qemu_clock_get_us_mipsel
|
#define qemu_clock_get_us qemu_clock_get_us_mipsel
|
||||||
#define qemu_clock_ptr qemu_clock_ptr_mipsel
|
#define qemu_clock_ptr qemu_clock_ptr_mipsel
|
||||||
#define qemu_clocks qemu_clocks_mipsel
|
#define qemu_clocks qemu_clocks_mipsel
|
||||||
#define qemu_flush_coalesced_mmio_buffer qemu_flush_coalesced_mmio_buffer_mipsel
|
|
||||||
#define qemu_get_cpu qemu_get_cpu_mipsel
|
#define qemu_get_cpu qemu_get_cpu_mipsel
|
||||||
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_mipsel
|
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_mipsel
|
||||||
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_mipsel
|
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_mipsel
|
||||||
|
|
|
@ -2381,7 +2381,6 @@
|
||||||
#define qemu_clock_get_us qemu_clock_get_us_powerpc
|
#define qemu_clock_get_us qemu_clock_get_us_powerpc
|
||||||
#define qemu_clock_ptr qemu_clock_ptr_powerpc
|
#define qemu_clock_ptr qemu_clock_ptr_powerpc
|
||||||
#define qemu_clocks qemu_clocks_powerpc
|
#define qemu_clocks qemu_clocks_powerpc
|
||||||
#define qemu_flush_coalesced_mmio_buffer qemu_flush_coalesced_mmio_buffer_powerpc
|
|
||||||
#define qemu_get_cpu qemu_get_cpu_powerpc
|
#define qemu_get_cpu qemu_get_cpu_powerpc
|
||||||
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_powerpc
|
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_powerpc
|
||||||
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_powerpc
|
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_powerpc
|
||||||
|
|
|
@ -64,7 +64,6 @@ static QEMUClock qemu_clocks[QEMU_CLOCK_MAX];
|
||||||
|
|
||||||
struct QEMUTimerList {
|
struct QEMUTimerList {
|
||||||
QEMUClock *clock;
|
QEMUClock *clock;
|
||||||
QemuMutex active_timers_lock;
|
|
||||||
QEMUTimer *active_timers;
|
QEMUTimer *active_timers;
|
||||||
QLIST_ENTRY(QEMUTimerList) list;
|
QLIST_ENTRY(QEMUTimerList) list;
|
||||||
QEMUTimerListNotifyCB *notify_cb;
|
QEMUTimerListNotifyCB *notify_cb;
|
||||||
|
@ -89,16 +88,6 @@ static bool timer_expired_ns(QEMUTimer *timer_head, int64_t current_time)
|
||||||
return timer_head && (timer_head->expire_time <= current_time);
|
return timer_head && (timer_head->expire_time <= current_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
void timerlist_free(QEMUTimerList *timer_list)
|
|
||||||
{
|
|
||||||
assert(!timerlist_has_timers(timer_list));
|
|
||||||
if (timer_list->clock) {
|
|
||||||
QLIST_REMOVE(timer_list, list);
|
|
||||||
}
|
|
||||||
qemu_mutex_destroy(&timer_list->active_timers_lock);
|
|
||||||
g_free(timer_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool timerlist_has_timers(QEMUTimerList *timer_list)
|
bool timerlist_has_timers(QEMUTimerList *timer_list)
|
||||||
{
|
{
|
||||||
return !!timer_list->active_timers;
|
return !!timer_list->active_timers;
|
||||||
|
@ -172,9 +161,7 @@ void timer_del(QEMUTimer *ts)
|
||||||
{
|
{
|
||||||
QEMUTimerList *timer_list = ts->timer_list;
|
QEMUTimerList *timer_list = ts->timer_list;
|
||||||
|
|
||||||
qemu_mutex_lock(&timer_list->active_timers_lock);
|
|
||||||
timer_del_locked(timer_list, ts);
|
timer_del_locked(timer_list, ts);
|
||||||
qemu_mutex_unlock(&timer_list->active_timers_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* modify the current timer so that it will be fired when current_time
|
/* modify the current timer so that it will be fired when current_time
|
||||||
|
@ -184,10 +171,8 @@ void timer_mod_ns(QEMUTimer *ts, int64_t expire_time)
|
||||||
QEMUTimerList *timer_list = ts->timer_list;
|
QEMUTimerList *timer_list = ts->timer_list;
|
||||||
bool rearm;
|
bool rearm;
|
||||||
|
|
||||||
qemu_mutex_lock(&timer_list->active_timers_lock);
|
|
||||||
timer_del_locked(timer_list, ts);
|
timer_del_locked(timer_list, ts);
|
||||||
rearm = timer_mod_ns_locked(timer_list, ts, expire_time);
|
rearm = timer_mod_ns_locked(timer_list, ts, expire_time);
|
||||||
qemu_mutex_unlock(&timer_list->active_timers_lock);
|
|
||||||
|
|
||||||
if (rearm) {
|
if (rearm) {
|
||||||
timerlist_rearm(timer_list);
|
timerlist_rearm(timer_list);
|
||||||
|
|
|
@ -2381,7 +2381,6 @@
|
||||||
#define qemu_clock_get_us qemu_clock_get_us_sparc
|
#define qemu_clock_get_us qemu_clock_get_us_sparc
|
||||||
#define qemu_clock_ptr qemu_clock_ptr_sparc
|
#define qemu_clock_ptr qemu_clock_ptr_sparc
|
||||||
#define qemu_clocks qemu_clocks_sparc
|
#define qemu_clocks qemu_clocks_sparc
|
||||||
#define qemu_flush_coalesced_mmio_buffer qemu_flush_coalesced_mmio_buffer_sparc
|
|
||||||
#define qemu_get_cpu qemu_get_cpu_sparc
|
#define qemu_get_cpu qemu_get_cpu_sparc
|
||||||
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_sparc
|
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_sparc
|
||||||
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_sparc
|
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_sparc
|
||||||
|
|
|
@ -2381,7 +2381,6 @@
|
||||||
#define qemu_clock_get_us qemu_clock_get_us_sparc64
|
#define qemu_clock_get_us qemu_clock_get_us_sparc64
|
||||||
#define qemu_clock_ptr qemu_clock_ptr_sparc64
|
#define qemu_clock_ptr qemu_clock_ptr_sparc64
|
||||||
#define qemu_clocks qemu_clocks_sparc64
|
#define qemu_clocks qemu_clocks_sparc64
|
||||||
#define qemu_flush_coalesced_mmio_buffer qemu_flush_coalesced_mmio_buffer_sparc64
|
|
||||||
#define qemu_get_cpu qemu_get_cpu_sparc64
|
#define qemu_get_cpu qemu_get_cpu_sparc64
|
||||||
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_sparc64
|
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_sparc64
|
||||||
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_sparc64
|
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_sparc64
|
||||||
|
|
|
@ -33,47 +33,6 @@ static void error_exit(int err, const char *msg)
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
void qemu_mutex_init(QemuMutex *mutex)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
pthread_mutexattr_t mutexattr;
|
|
||||||
|
|
||||||
pthread_mutexattr_init(&mutexattr);
|
|
||||||
pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_ERRORCHECK);
|
|
||||||
err = pthread_mutex_init(&mutex->lock, &mutexattr);
|
|
||||||
pthread_mutexattr_destroy(&mutexattr);
|
|
||||||
if (err)
|
|
||||||
error_exit(err, __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
void qemu_mutex_destroy(QemuMutex *mutex)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
|
|
||||||
err = pthread_mutex_destroy(&mutex->lock);
|
|
||||||
if (err)
|
|
||||||
error_exit(err, __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void qemu_mutex_lock(QemuMutex *mutex)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
|
|
||||||
err = pthread_mutex_lock(&mutex->lock);
|
|
||||||
if (err)
|
|
||||||
error_exit(err, __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
void qemu_mutex_unlock(QemuMutex *mutex)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
|
|
||||||
err = pthread_mutex_unlock(&mutex->lock);
|
|
||||||
if (err)
|
|
||||||
error_exit(err, __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
int qemu_thread_create(struct uc_struct *uc, QemuThread *thread, const char *name,
|
int qemu_thread_create(struct uc_struct *uc, QemuThread *thread, const char *name,
|
||||||
void *(*start_routine)(void*),
|
void *(*start_routine)(void*),
|
||||||
void *arg, int mode)
|
void *arg, int mode)
|
||||||
|
|
|
@ -30,36 +30,6 @@ static void error_exit(int err, const char *msg)
|
||||||
//abort();
|
//abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
void qemu_mutex_init(QemuMutex *mutex)
|
|
||||||
{
|
|
||||||
mutex->owner = 0;
|
|
||||||
InitializeCriticalSection(&mutex->lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
void qemu_mutex_destroy(QemuMutex *mutex)
|
|
||||||
{
|
|
||||||
assert(mutex->owner == 0);
|
|
||||||
DeleteCriticalSection(&mutex->lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
void qemu_mutex_lock(QemuMutex *mutex)
|
|
||||||
{
|
|
||||||
EnterCriticalSection(&mutex->lock);
|
|
||||||
|
|
||||||
/* Win32 CRITICAL_SECTIONs are recursive. Assert that we're not
|
|
||||||
* using them as such.
|
|
||||||
*/
|
|
||||||
assert(mutex->owner == 0);
|
|
||||||
mutex->owner = GetCurrentThreadId();
|
|
||||||
}
|
|
||||||
|
|
||||||
void qemu_mutex_unlock(QemuMutex *mutex)
|
|
||||||
{
|
|
||||||
assert(mutex->owner == GetCurrentThreadId());
|
|
||||||
mutex->owner = 0;
|
|
||||||
LeaveCriticalSection(&mutex->lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct QemuThreadData {
|
struct QemuThreadData {
|
||||||
/* Passed to win32_start_routine. */
|
/* Passed to win32_start_routine. */
|
||||||
void *(*start_routine)(void *);
|
void *(*start_routine)(void *);
|
||||||
|
|
|
@ -2381,7 +2381,6 @@
|
||||||
#define qemu_clock_get_us qemu_clock_get_us_x86_64
|
#define qemu_clock_get_us qemu_clock_get_us_x86_64
|
||||||
#define qemu_clock_ptr qemu_clock_ptr_x86_64
|
#define qemu_clock_ptr qemu_clock_ptr_x86_64
|
||||||
#define qemu_clocks qemu_clocks_x86_64
|
#define qemu_clocks qemu_clocks_x86_64
|
||||||
#define qemu_flush_coalesced_mmio_buffer qemu_flush_coalesced_mmio_buffer_x86_64
|
|
||||||
#define qemu_get_cpu qemu_get_cpu_x86_64
|
#define qemu_get_cpu qemu_get_cpu_x86_64
|
||||||
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_x86_64
|
#define qemu_get_guest_memory_mapping qemu_get_guest_memory_mapping_x86_64
|
||||||
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_x86_64
|
#define qemu_get_guest_simple_memory_mapping qemu_get_guest_simple_memory_mapping_x86_64
|
||||||
|
|
Loading…
Reference in New Issue