cpu: Turn cpu_paging_enabled() into a CPUState hook
Relocate assignment of x86 get_arch_id to have all hooks in one place. Reviewed-by: Jens Freimann <jfrei@linux.vnet.ibm.com> Reviewed-by: Luiz Capitulino <lcapitulino@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
		
							parent
							
								
									c51a944b75
								
							
						
					
					
						commit
						444d559078
					
				| 
						 | 
				
			
			@ -48,6 +48,7 @@ typedef struct CPUState CPUState;
 | 
			
		|||
 * @reset: Callback to reset the #CPUState to its initial state.
 | 
			
		||||
 * @do_interrupt: Callback for interrupt handling.
 | 
			
		||||
 * @get_arch_id: Callback for getting architecture-dependent CPU ID.
 | 
			
		||||
 * @get_paging_enabled: Callback for inquiring whether paging is enabled.
 | 
			
		||||
 * @vmsd: State description for migration.
 | 
			
		||||
 *
 | 
			
		||||
 * Represents a CPU family or model.
 | 
			
		||||
| 
						 | 
				
			
			@ -62,6 +63,7 @@ typedef struct CPUClass {
 | 
			
		|||
    void (*reset)(CPUState *cpu);
 | 
			
		||||
    void (*do_interrupt)(CPUState *cpu);
 | 
			
		||||
    int64_t (*get_arch_id)(CPUState *cpu);
 | 
			
		||||
    bool (*get_paging_enabled)(const CPUState *cpu);
 | 
			
		||||
 | 
			
		||||
    const struct VMStateDescription *vmsd;
 | 
			
		||||
    int (*write_elf64_note)(WriteCoreDumpFunction f, CPUState *cpu,
 | 
			
		||||
| 
						 | 
				
			
			@ -137,6 +139,14 @@ struct CPUState {
 | 
			
		|||
    uint32_t halted; /* used by alpha, cris, ppc TCG */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * cpu_paging_enabled:
 | 
			
		||||
 * @cpu: The CPU whose state is to be inspected.
 | 
			
		||||
 *
 | 
			
		||||
 * Returns: %true if paging is enabled, %false otherwise.
 | 
			
		||||
 */
 | 
			
		||||
bool cpu_paging_enabled(const CPUState *cpu);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * cpu_write_elf64_note:
 | 
			
		||||
 * @f: pointer to a function that writes memory to a file
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,6 @@ typedef struct MemoryMappingList {
 | 
			
		|||
} MemoryMappingList;
 | 
			
		||||
 | 
			
		||||
int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env);
 | 
			
		||||
bool cpu_paging_enabled(CPUArchState *env);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * add or merge the memory region [phys_addr, phys_addr + length) into the
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,9 +25,3 @@ int cpu_get_memory_mapping(MemoryMappingList *list,
 | 
			
		|||
{
 | 
			
		||||
    return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cpu_paging_enabled(CPUArchState *env)
 | 
			
		||||
{
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -170,7 +170,7 @@ static CPUArchState *find_paging_enabled_cpu(CPUArchState *start_cpu)
 | 
			
		|||
    CPUArchState *env;
 | 
			
		||||
 | 
			
		||||
    for (env = start_cpu; env != NULL; env = env->next_cpu) {
 | 
			
		||||
        if (cpu_paging_enabled(env)) {
 | 
			
		||||
        if (cpu_paging_enabled(ENV_GET_CPU(env))) {
 | 
			
		||||
            return env;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										13
									
								
								qom/cpu.c
								
								
								
								
							
							
						
						
									
										13
									
								
								qom/cpu.c
								
								
								
								
							| 
						 | 
				
			
			@ -50,6 +50,18 @@ bool cpu_exists(int64_t id)
 | 
			
		|||
    return data.found;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cpu_paging_enabled(const CPUState *cpu)
 | 
			
		||||
{
 | 
			
		||||
    CPUClass *cc = CPU_GET_CLASS(cpu);
 | 
			
		||||
 | 
			
		||||
    return cc->get_paging_enabled(cpu);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool cpu_common_get_paging_enabled(const CPUState *cpu)
 | 
			
		||||
{
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* CPU hot-plug notifiers */
 | 
			
		||||
static NotifierList cpu_added_notifiers =
 | 
			
		||||
    NOTIFIER_LIST_INITIALIZER(cpu_add_notifiers);
 | 
			
		||||
| 
						 | 
				
			
			@ -176,6 +188,7 @@ static void cpu_class_init(ObjectClass *klass, void *data)
 | 
			
		|||
    k->class_by_name = cpu_common_class_by_name;
 | 
			
		||||
    k->reset = cpu_common_reset;
 | 
			
		||||
    k->get_arch_id = cpu_common_get_arch_id;
 | 
			
		||||
    k->get_paging_enabled = cpu_common_get_paging_enabled;
 | 
			
		||||
    k->write_elf32_qemunote = cpu_common_write_elf32_qemunote;
 | 
			
		||||
    k->write_elf32_note = cpu_common_write_elf32_note;
 | 
			
		||||
    k->write_elf64_qemunote = cpu_common_write_elf64_qemunote;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -241,7 +241,7 @@ static void walk_pml4e(MemoryMappingList *list,
 | 
			
		|||
 | 
			
		||||
int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env)
 | 
			
		||||
{
 | 
			
		||||
    if (!cpu_paging_enabled(env)) {
 | 
			
		||||
    if (!cpu_paging_enabled(ENV_GET_CPU(env))) {
 | 
			
		||||
        /* paging is disabled */
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -273,7 +273,3 @@ int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env)
 | 
			
		|||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cpu_paging_enabled(CPUArchState *env)
 | 
			
		||||
{
 | 
			
		||||
    return env->cr[0] & CR0_PG_MASK;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2505,6 +2505,13 @@ static int64_t x86_cpu_get_arch_id(CPUState *cs)
 | 
			
		|||
    return env->cpuid_apic_id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool x86_cpu_get_paging_enabled(const CPUState *cs)
 | 
			
		||||
{
 | 
			
		||||
    X86CPU *cpu = X86_CPU(cs);
 | 
			
		||||
 | 
			
		||||
    return cpu->env.cr[0] & CR0_PG_MASK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
 | 
			
		||||
{
 | 
			
		||||
    X86CPUClass *xcc = X86_CPU_CLASS(oc);
 | 
			
		||||
| 
						 | 
				
			
			@ -2519,6 +2526,8 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
 | 
			
		|||
    cc->reset = x86_cpu_reset;
 | 
			
		||||
 | 
			
		||||
    cc->do_interrupt = x86_cpu_do_interrupt;
 | 
			
		||||
    cc->get_arch_id = x86_cpu_get_arch_id;
 | 
			
		||||
    cc->get_paging_enabled = x86_cpu_get_paging_enabled;
 | 
			
		||||
#ifndef CONFIG_USER_ONLY
 | 
			
		||||
    cc->write_elf64_note = x86_cpu_write_elf64_note;
 | 
			
		||||
    cc->write_elf64_qemunote = x86_cpu_write_elf64_qemunote;
 | 
			
		||||
| 
						 | 
				
			
			@ -2526,8 +2535,6 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
 | 
			
		|||
    cc->write_elf32_qemunote = x86_cpu_write_elf32_qemunote;
 | 
			
		||||
#endif
 | 
			
		||||
    cpu_class_set_vmsd(cc, &vmstate_x86_cpu);
 | 
			
		||||
 | 
			
		||||
    cc->get_arch_id = x86_cpu_get_arch_id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const TypeInfo x86_cpu_type_info = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue