提交 b3c7724c 编写于 作者: P pbrook

Move CPU save/load registration to common code.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4808 c046a42c-6fe2-441c-8c8c-71466251a162
上级 6913ba56
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include "exec-all.h" #include "exec-all.h"
#include "qemu-common.h" #include "qemu-common.h"
#include "tcg.h" #include "tcg.h"
#include "hw/hw.h"
#if defined(CONFIG_USER_ONLY) #if defined(CONFIG_USER_ONLY)
#include <qemu.h> #include <qemu.h>
#endif #endif
...@@ -457,6 +458,10 @@ void cpu_exec_init(CPUState *env) ...@@ -457,6 +458,10 @@ void cpu_exec_init(CPUState *env)
env->cpu_index = cpu_index; env->cpu_index = cpu_index;
env->nb_watchpoints = 0; env->nb_watchpoints = 0;
*penv = env; *penv = env;
#if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
register_savevm("cpu", cpu_index, CPU_SAVE_VERSION,
cpu_save, cpu_load, env);
#endif
} }
static inline void invalidate_page_bitmap(PageDesc *p) static inline void invalidate_page_bitmap(PageDesc *p)
......
...@@ -67,7 +67,6 @@ void bareetraxfs_init (ram_addr_t ram_size, int vga_ram_size, ...@@ -67,7 +67,6 @@ void bareetraxfs_init (ram_addr_t ram_size, int vga_ram_size,
cpu_model = "crisv32"; cpu_model = "crisv32";
} }
env = cpu_init(cpu_model); env = cpu_init(cpu_model);
register_savevm("cpu", 0, 1, cpu_save, cpu_load, env);
qemu_register_reset(main_cpu_reset, env); qemu_register_reset(main_cpu_reset, env);
/* allocate RAM */ /* allocate RAM */
......
...@@ -146,7 +146,6 @@ void mips_jazz_init (ram_addr_t ram_size, int vga_ram_size, ...@@ -146,7 +146,6 @@ void mips_jazz_init (ram_addr_t ram_size, int vga_ram_size,
fprintf(stderr, "Unable to find CPU definition\n"); fprintf(stderr, "Unable to find CPU definition\n");
exit(1); exit(1);
} }
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
qemu_register_reset(main_cpu_reset, env); qemu_register_reset(main_cpu_reset, env);
/* allocate RAM */ /* allocate RAM */
......
...@@ -802,7 +802,6 @@ void mips_malta_init (ram_addr_t ram_size, int vga_ram_size, ...@@ -802,7 +802,6 @@ void mips_malta_init (ram_addr_t ram_size, int vga_ram_size,
fprintf(stderr, "Unable to find CPU definition\n"); fprintf(stderr, "Unable to find CPU definition\n");
exit(1); exit(1);
} }
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
qemu_register_reset(main_cpu_reset, env); qemu_register_reset(main_cpu_reset, env);
/* allocate RAM */ /* allocate RAM */
......
...@@ -129,7 +129,6 @@ mips_mipssim_init (ram_addr_t ram_size, int vga_ram_size, ...@@ -129,7 +129,6 @@ mips_mipssim_init (ram_addr_t ram_size, int vga_ram_size,
fprintf(stderr, "Unable to find CPU definition\n"); fprintf(stderr, "Unable to find CPU definition\n");
exit(1); exit(1);
} }
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
qemu_register_reset(main_cpu_reset, env); qemu_register_reset(main_cpu_reset, env);
/* Allocate RAM. */ /* Allocate RAM. */
......
...@@ -175,7 +175,6 @@ void mips_r4k_init (ram_addr_t ram_size, int vga_ram_size, ...@@ -175,7 +175,6 @@ void mips_r4k_init (ram_addr_t ram_size, int vga_ram_size,
fprintf(stderr, "Unable to find CPU definition\n"); fprintf(stderr, "Unable to find CPU definition\n");
exit(1); exit(1);
} }
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
qemu_register_reset(main_cpu_reset, env); qemu_register_reset(main_cpu_reset, env);
/* allocate RAM */ /* allocate RAM */
......
...@@ -764,7 +764,6 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, ...@@ -764,7 +764,6 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size,
/* XXX: enable it in all cases */ /* XXX: enable it in all cases */
env->cpuid_features |= CPUID_APIC; env->cpuid_features |= CPUID_APIC;
} }
register_savevm("cpu", i, 5, cpu_save, cpu_load, env);
qemu_register_reset(main_cpu_reset, env); qemu_register_reset(main_cpu_reset, env);
if (pci_enabled) { if (pci_enabled) {
apic_init(env); apic_init(env);
......
...@@ -56,7 +56,6 @@ CPUState *ppc4xx_init (const unsigned char *cpu_model, ...@@ -56,7 +56,6 @@ CPUState *ppc4xx_init (const unsigned char *cpu_model,
ppc_dcr_init(env, NULL, NULL); ppc_dcr_init(env, NULL, NULL);
/* Register qemu callbacks */ /* Register qemu callbacks */
qemu_register_reset(&cpu_ppc_reset, env); qemu_register_reset(&cpu_ppc_reset, env);
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
return env; return env;
} }
......
...@@ -103,7 +103,6 @@ static void ppc_core99_init (ram_addr_t ram_size, int vga_ram_size, ...@@ -103,7 +103,6 @@ static void ppc_core99_init (ram_addr_t ram_size, int vga_ram_size,
env->osi_call = vga_osi_call; env->osi_call = vga_osi_call;
#endif #endif
qemu_register_reset(&cpu_ppc_reset, env); qemu_register_reset(&cpu_ppc_reset, env);
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
envs[i] = env; envs[i] = env;
} }
if (env->nip < 0xFFF80000) { if (env->nip < 0xFFF80000) {
......
...@@ -143,7 +143,6 @@ static void ppc_heathrow_init (ram_addr_t ram_size, int vga_ram_size, ...@@ -143,7 +143,6 @@ static void ppc_heathrow_init (ram_addr_t ram_size, int vga_ram_size,
cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL); cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL);
env->osi_call = vga_osi_call; env->osi_call = vga_osi_call;
qemu_register_reset(&cpu_ppc_reset, env); qemu_register_reset(&cpu_ppc_reset, env);
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
envs[i] = env; envs[i] = env;
} }
if (env->nip < 0xFFF80000) { if (env->nip < 0xFFF80000) {
......
...@@ -580,7 +580,6 @@ static void ppc_prep_init (ram_addr_t ram_size, int vga_ram_size, ...@@ -580,7 +580,6 @@ static void ppc_prep_init (ram_addr_t ram_size, int vga_ram_size,
cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL); cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL);
} }
qemu_register_reset(&cpu_ppc_reset, env); qemu_register_reset(&cpu_ppc_reset, env);
register_savevm("cpu", 0, 3, cpu_save, cpu_load, env);
envs[i] = env; envs[i] = env;
} }
......
...@@ -2046,9 +2046,6 @@ struct pxa2xx_state_s *pxa270_init(unsigned int sdram_size, ...@@ -2046,9 +2046,6 @@ struct pxa2xx_state_s *pxa270_init(unsigned int sdram_size,
fprintf(stderr, "Unable to find CPU definition\n"); fprintf(stderr, "Unable to find CPU definition\n");
exit(1); exit(1);
} }
register_savevm("cpu", 0, ARM_CPU_SAVE_VERSION, cpu_save, cpu_load,
s->env);
s->reset = qemu_allocate_irqs(pxa2xx_reset, s, 1)[0]; s->reset = qemu_allocate_irqs(pxa2xx_reset, s, 1)[0];
/* SDRAM & Internal Memory Storage */ /* SDRAM & Internal Memory Storage */
...@@ -2173,9 +2170,6 @@ struct pxa2xx_state_s *pxa255_init(unsigned int sdram_size, ...@@ -2173,9 +2170,6 @@ struct pxa2xx_state_s *pxa255_init(unsigned int sdram_size,
fprintf(stderr, "Unable to find CPU definition\n"); fprintf(stderr, "Unable to find CPU definition\n");
exit(1); exit(1);
} }
register_savevm("cpu", 0, ARM_CPU_SAVE_VERSION, cpu_save, cpu_load,
s->env);
s->reset = qemu_allocate_irqs(pxa2xx_reset, s, 1)[0]; s->reset = qemu_allocate_irqs(pxa2xx_reset, s, 1)[0];
/* SDRAM & Internal Memory Storage */ /* SDRAM & Internal Memory Storage */
......
...@@ -426,7 +426,6 @@ static void sun4m_hw_init(const struct hwdef *hwdef, ram_addr_t RAM_size, ...@@ -426,7 +426,6 @@ static void sun4m_hw_init(const struct hwdef *hwdef, ram_addr_t RAM_size,
qemu_register_reset(secondary_cpu_reset, env); qemu_register_reset(secondary_cpu_reset, env);
env->halted = 1; env->halted = 1;
} }
register_savevm("cpu", i, 4, cpu_save, cpu_load, env);
cpu_irqs[i] = qemu_allocate_irqs(cpu_set_irq, envs[i], MAX_PILS); cpu_irqs[i] = qemu_allocate_irqs(cpu_set_irq, envs[i], MAX_PILS);
env->prom_addr = hwdef->slavio_base; env->prom_addr = hwdef->slavio_base;
} }
...@@ -601,7 +600,6 @@ static void sun4c_hw_init(const struct hwdef *hwdef, ram_addr_t RAM_size, ...@@ -601,7 +600,6 @@ static void sun4c_hw_init(const struct hwdef *hwdef, ram_addr_t RAM_size,
cpu_sparc_set_id(env, 0); cpu_sparc_set_id(env, 0);
qemu_register_reset(main_cpu_reset, env); qemu_register_reset(main_cpu_reset, env);
register_savevm("cpu", 0, 4, cpu_save, cpu_load, env);
cpu_irqs = qemu_allocate_irqs(cpu_set_irq, env, MAX_PILS); cpu_irqs = qemu_allocate_irqs(cpu_set_irq, env, MAX_PILS);
env->prom_addr = hwdef->slavio_base; env->prom_addr = hwdef->slavio_base;
...@@ -1413,7 +1411,6 @@ static void sun4d_hw_init(const struct sun4d_hwdef *hwdef, ram_addr_t RAM_size, ...@@ -1413,7 +1411,6 @@ static void sun4d_hw_init(const struct sun4d_hwdef *hwdef, ram_addr_t RAM_size,
qemu_register_reset(secondary_cpu_reset, env); qemu_register_reset(secondary_cpu_reset, env);
env->halted = 1; env->halted = 1;
} }
register_savevm("cpu", i, 4, cpu_save, cpu_load, env);
cpu_irqs[i] = qemu_allocate_irqs(cpu_set_irq, envs[i], MAX_PILS); cpu_irqs[i] = qemu_allocate_irqs(cpu_set_irq, envs[i], MAX_PILS);
env->prom_addr = hwdef->slavio_base; env->prom_addr = hwdef->slavio_base;
} }
......
...@@ -282,7 +282,6 @@ static void sun4u_init(ram_addr_t RAM_size, int vga_ram_size, ...@@ -282,7 +282,6 @@ static void sun4u_init(ram_addr_t RAM_size, int vga_ram_size,
bh = qemu_bh_new(hstick_irq, env); bh = qemu_bh_new(hstick_irq, env);
env->hstick = ptimer_init(bh); env->hstick = ptimer_init(bh);
ptimer_set_period(env->hstick, 1ULL); ptimer_set_period(env->hstick, 1ULL);
register_savevm("cpu", 0, 4, cpu_save, cpu_load, env);
qemu_register_reset(main_cpu_reset, env); qemu_register_reset(main_cpu_reset, env);
main_cpu_reset(env); main_cpu_reset(env);
......
...@@ -132,4 +132,8 @@ typedef struct SerialState SerialState; ...@@ -132,4 +132,8 @@ typedef struct SerialState SerialState;
typedef struct IRQState *qemu_irq; typedef struct IRQState *qemu_irq;
struct pcmcia_card_s; struct pcmcia_card_s;
/* CPU save/load. */
void cpu_save(QEMUFile *f, void *opaque);
int cpu_load(QEMUFile *f, void *opaque, int version_id);
#endif #endif
...@@ -41,9 +41,6 @@ void qemu_system_powerdown(void); ...@@ -41,9 +41,6 @@ void qemu_system_powerdown(void);
#endif #endif
void qemu_system_reset(void); void qemu_system_reset(void);
void cpu_save(QEMUFile *f, void *opaque);
int cpu_load(QEMUFile *f, void *opaque, int version_id);
void do_savevm(const char *name); void do_savevm(const char *name);
void do_loadvm(const char *name); void do_loadvm(const char *name);
void do_delvm(const char *name); void do_delvm(const char *name);
......
...@@ -397,7 +397,7 @@ void cpu_arm_set_cp_io(CPUARMState *env, int cpnum, ...@@ -397,7 +397,7 @@ void cpu_arm_set_cp_io(CPUARMState *env, int cpnum,
#define cpu_signal_handler cpu_arm_signal_handler #define cpu_signal_handler cpu_arm_signal_handler
#define cpu_list arm_cpu_list #define cpu_list arm_cpu_list
#define ARM_CPU_SAVE_VERSION 1 #define CPU_SAVE_VERSION 1
/* MMU modes definitions */ /* MMU modes definitions */
#define MMU_MODE0_SUFFIX _kernel #define MMU_MODE0_SUFFIX _kernel
......
...@@ -120,7 +120,7 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id) ...@@ -120,7 +120,7 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id)
CPUARMState *env = (CPUARMState *)opaque; CPUARMState *env = (CPUARMState *)opaque;
int i; int i;
if (version_id != ARM_CPU_SAVE_VERSION) if (version_id != CPU_SAVE_VERSION)
return -EINVAL; return -EINVAL;
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
......
...@@ -210,6 +210,8 @@ enum { ...@@ -210,6 +210,8 @@ enum {
#define cpu_gen_code cpu_cris_gen_code #define cpu_gen_code cpu_cris_gen_code
#define cpu_signal_handler cpu_cris_signal_handler #define cpu_signal_handler cpu_cris_signal_handler
#define CPU_SAVE_VERSION 1
/* MMU modes definitions */ /* MMU modes definitions */
#define MMU_MODE0_SUFFIX _kernel #define MMU_MODE0_SUFFIX _kernel
#define MMU_MODE1_SUFFIX _user #define MMU_MODE1_SUFFIX _user
......
...@@ -726,6 +726,8 @@ static inline int cpu_get_time_fast(void) ...@@ -726,6 +726,8 @@ static inline int cpu_get_time_fast(void)
#define cpu_signal_handler cpu_x86_signal_handler #define cpu_signal_handler cpu_x86_signal_handler
#define cpu_list x86_cpu_list #define cpu_list x86_cpu_list
#define CPU_SAVE_VERSION 5
/* MMU modes definitions */ /* MMU modes definitions */
#define MMU_MODE0_SUFFIX _kernel #define MMU_MODE0_SUFFIX _kernel
#define MMU_MODE1_SUFFIX _user #define MMU_MODE1_SUFFIX _user
......
...@@ -489,6 +489,8 @@ void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec, ...@@ -489,6 +489,8 @@ void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
#define cpu_signal_handler cpu_mips_signal_handler #define cpu_signal_handler cpu_mips_signal_handler
#define cpu_list mips_cpu_list #define cpu_list mips_cpu_list
#define CPU_SAVE_VERSION 3
/* MMU modes definitions. We carefully match the indices with our /* MMU modes definitions. We carefully match the indices with our
hflags layout. */ hflags layout. */
#define MMU_MODE0_SUFFIX _kernel #define MMU_MODE0_SUFFIX _kernel
......
...@@ -813,6 +813,8 @@ int ppc_dcr_write (ppc_dcr_t *dcr_env, int dcrn, target_ulong val); ...@@ -813,6 +813,8 @@ int ppc_dcr_write (ppc_dcr_t *dcr_env, int dcrn, target_ulong val);
#define cpu_signal_handler cpu_ppc_signal_handler #define cpu_signal_handler cpu_ppc_signal_handler
#define cpu_list ppc_cpu_list #define cpu_list ppc_cpu_list
#define CPU_SAVE_VERSION 3
/* MMU modes definitions */ /* MMU modes definitions */
#define MMU_MODE0_SUFFIX _user #define MMU_MODE0_SUFFIX _user
#define MMU_MODE1_SUFFIX _kernel #define MMU_MODE1_SUFFIX _kernel
......
...@@ -388,6 +388,8 @@ void cpu_check_irqs(CPUSPARCState *env); ...@@ -388,6 +388,8 @@ void cpu_check_irqs(CPUSPARCState *env);
#define cpu_signal_handler cpu_sparc_signal_handler #define cpu_signal_handler cpu_sparc_signal_handler
#define cpu_list sparc_cpu_list #define cpu_list sparc_cpu_list
#define CPU_SAVE_VERSION 4
/* MMU modes definitions */ /* MMU modes definitions */
#define MMU_MODE0_SUFFIX _user #define MMU_MODE0_SUFFIX _user
#define MMU_MODE1_SUFFIX _kernel #define MMU_MODE1_SUFFIX _kernel
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册