mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
target/i386: use multiple CPU AddressSpaces
This speeds up SMM switches. Later on it may remove the need to take the BQL, and it may also allow to reuse code between TCG and KVM. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
c8bc83a4dd
commit
f8c45c6550
5 changed files with 47 additions and 55 deletions
|
@ -1403,89 +1403,89 @@ uint8_t x86_ldub_phys(CPUState *cs, hwaddr addr)
|
|||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
CPUX86State *env = &cpu->env;
|
||||
MemTxAttrs attrs = cpu_get_mem_attrs(env);
|
||||
AddressSpace *as = cpu_addressspace(cs, attrs);
|
||||
|
||||
return address_space_ldub(cs->as, addr,
|
||||
cpu_get_mem_attrs(env),
|
||||
NULL);
|
||||
return address_space_ldub(as, addr, attrs, NULL);
|
||||
}
|
||||
|
||||
uint32_t x86_lduw_phys(CPUState *cs, hwaddr addr)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
CPUX86State *env = &cpu->env;
|
||||
MemTxAttrs attrs = cpu_get_mem_attrs(env);
|
||||
AddressSpace *as = cpu_addressspace(cs, attrs);
|
||||
|
||||
return address_space_lduw(cs->as, addr,
|
||||
cpu_get_mem_attrs(env),
|
||||
NULL);
|
||||
return address_space_lduw(as, addr, attrs, NULL);
|
||||
}
|
||||
|
||||
uint32_t x86_ldl_phys(CPUState *cs, hwaddr addr)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
CPUX86State *env = &cpu->env;
|
||||
MemTxAttrs attrs = cpu_get_mem_attrs(env);
|
||||
AddressSpace *as = cpu_addressspace(cs, attrs);
|
||||
|
||||
return address_space_ldl(cs->as, addr,
|
||||
cpu_get_mem_attrs(env),
|
||||
NULL);
|
||||
return address_space_ldl(as, addr, attrs, NULL);
|
||||
}
|
||||
|
||||
uint64_t x86_ldq_phys(CPUState *cs, hwaddr addr)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
CPUX86State *env = &cpu->env;
|
||||
MemTxAttrs attrs = cpu_get_mem_attrs(env);
|
||||
AddressSpace *as = cpu_addressspace(cs, attrs);
|
||||
|
||||
return address_space_ldq(cs->as, addr,
|
||||
cpu_get_mem_attrs(env),
|
||||
NULL);
|
||||
return address_space_ldq(as, addr, attrs, NULL);
|
||||
}
|
||||
|
||||
void x86_stb_phys(CPUState *cs, hwaddr addr, uint8_t val)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
CPUX86State *env = &cpu->env;
|
||||
MemTxAttrs attrs = cpu_get_mem_attrs(env);
|
||||
AddressSpace *as = cpu_addressspace(cs, attrs);
|
||||
|
||||
address_space_stb(cs->as, addr, val,
|
||||
cpu_get_mem_attrs(env),
|
||||
NULL);
|
||||
address_space_stb(as, addr, val, attrs, NULL);
|
||||
}
|
||||
|
||||
void x86_stl_phys_notdirty(CPUState *cs, hwaddr addr, uint32_t val)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
CPUX86State *env = &cpu->env;
|
||||
MemTxAttrs attrs = cpu_get_mem_attrs(env);
|
||||
AddressSpace *as = cpu_addressspace(cs, attrs);
|
||||
|
||||
address_space_stl_notdirty(cs->as, addr, val,
|
||||
cpu_get_mem_attrs(env),
|
||||
NULL);
|
||||
address_space_stl_notdirty(as, addr, val, attrs, NULL);
|
||||
}
|
||||
|
||||
void x86_stw_phys(CPUState *cs, hwaddr addr, uint32_t val)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
CPUX86State *env = &cpu->env;
|
||||
MemTxAttrs attrs = cpu_get_mem_attrs(env);
|
||||
AddressSpace *as = cpu_addressspace(cs, attrs);
|
||||
|
||||
address_space_stw(cs->as, addr, val,
|
||||
cpu_get_mem_attrs(env),
|
||||
NULL);
|
||||
address_space_stw(as, addr, val, attrs, NULL);
|
||||
}
|
||||
|
||||
void x86_stl_phys(CPUState *cs, hwaddr addr, uint32_t val)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
CPUX86State *env = &cpu->env;
|
||||
MemTxAttrs attrs = cpu_get_mem_attrs(env);
|
||||
AddressSpace *as = cpu_addressspace(cs, attrs);
|
||||
|
||||
address_space_stl(cs->as, addr, val,
|
||||
cpu_get_mem_attrs(env),
|
||||
NULL);
|
||||
address_space_stl(as, addr, val, attrs, NULL);
|
||||
}
|
||||
|
||||
void x86_stq_phys(CPUState *cs, hwaddr addr, uint64_t val)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
CPUX86State *env = &cpu->env;
|
||||
MemTxAttrs attrs = cpu_get_mem_attrs(env);
|
||||
AddressSpace *as = cpu_addressspace(cs, attrs);
|
||||
|
||||
address_space_stq(cs->as, addr, val,
|
||||
cpu_get_mem_attrs(env),
|
||||
NULL);
|
||||
address_space_stq(as, addr, val, attrs, NULL);
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue