mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 10:34:58 -06:00
s390: Use s390_cpu_physical_memory_map for tpi.
Map the I/O interruption code before calling into css. Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
2e788490d8
commit
50c8d9bfc6
4 changed files with 24 additions and 8 deletions
|
@ -619,16 +619,25 @@ int ioinst_handle_tpi(CPUS390XState *env, uint32_t ipb)
|
|||
{
|
||||
uint64_t addr;
|
||||
int lowcore;
|
||||
IOIntCode *int_code;
|
||||
hwaddr len, orig_len;
|
||||
int ret;
|
||||
|
||||
trace_ioinst("tpi");
|
||||
addr = decode_basedisp_s(env, ipb);
|
||||
lowcore = addr ? 0 : 1;
|
||||
if (addr < 8192) {
|
||||
addr += env->psa;
|
||||
} else if ((env->psa <= addr) && (addr < env->psa + 8192)) {
|
||||
addr -= env->psa;
|
||||
len = lowcore ? 8 /* two words */ : 12 /* three words */;
|
||||
orig_len = len;
|
||||
int_code = s390_cpu_physical_memory_map(env, addr, &len, 1);
|
||||
if (!int_code || (len != orig_len)) {
|
||||
program_interrupt(env, PGM_SPECIFICATION, 2);
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
return css_do_tpi(addr, lowcore);
|
||||
ret = css_do_tpi(int_code, lowcore);
|
||||
out:
|
||||
s390_cpu_physical_memory_unmap(env, int_code, len, 1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define SCHM_REG1_RES(_reg) (_reg & 0x000000000ffffffc)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue