mirror of
https://github.com/qemu/qemu.git
synced 2024-11-26 04:13:39 +08:00
s390x/css: handle format-0 TIC CCW correctly
For TIC CCW, bit positions 8-32 of the format-1 CCW must contain zeros; otherwise, a program-check condition is generated. For format-0 TIC CCWs, bits 32-63 are ignored. To convert TIC from format-0 CCW to format-1 CCW correctly, let's clear bits 8-32 to guarantee compatibility. Reviewed-by: Pierre Morel <pmorel@linux.vnet.ibm.com> Signed-off-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
This commit is contained in:
parent
f738f296ea
commit
9f94f84ce7
@ -368,13 +368,16 @@ static CCW1 copy_ccw_from_guest(hwaddr addr, bool fmt1)
|
||||
ret.cda = be32_to_cpu(tmp1.cda);
|
||||
} else {
|
||||
cpu_physical_memory_read(addr, &tmp0, sizeof(tmp0));
|
||||
ret.cmd_code = tmp0.cmd_code;
|
||||
ret.flags = tmp0.flags;
|
||||
ret.count = be16_to_cpu(tmp0.count);
|
||||
ret.cda = be16_to_cpu(tmp0.cda1) | (tmp0.cda0 << 16);
|
||||
if ((ret.cmd_code & 0x0f) == CCW_CMD_TIC) {
|
||||
ret.cmd_code &= 0x0f;
|
||||
if ((tmp0.cmd_code & 0x0f) == CCW_CMD_TIC) {
|
||||
ret.cmd_code = CCW_CMD_TIC;
|
||||
ret.flags = 0;
|
||||
ret.count = 0;
|
||||
} else {
|
||||
ret.cmd_code = tmp0.cmd_code;
|
||||
ret.flags = tmp0.flags;
|
||||
ret.count = be16_to_cpu(tmp0.count);
|
||||
}
|
||||
ret.cda = be16_to_cpu(tmp0.cda1) | (tmp0.cda0 << 16);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user