mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 10:13:56 -06:00
vfio-ccw: forward halt/clear errors
hsch and csch basically have two parts: execute the command, and perform the halt/clear function. For fully emulated subchannels, it is pretty clear how it will work: check the subchannel state, and actually 'perform the halt/clear function' and set cc 0 if everything looks good. For passthrough subchannels, some of the checking is done within QEMU, but some has to be done within the kernel. QEMU's subchannel state may be such that we can perform the async function, but the kernel may still get a cc != 0 when it is actually executing the instruction. In that case, we need to set the condition actually encountered by the kernel; if we set cc 0 on error, we would actually need to inject an interrupt as well. Signed-off-by: Cornelia Huck <cohuck@redhat.com> Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com> Tested-by: Jared Rossi <jrossi@linux.ibm.com> Message-Id: <20210705163952.736020-2-cohuck@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
935efca6c2
commit
759a5d3be0
2 changed files with 36 additions and 6 deletions
|
@ -199,7 +199,7 @@ again:
|
|||
case 0:
|
||||
case -ENODEV:
|
||||
case -EACCES:
|
||||
return 0;
|
||||
return ret;
|
||||
case -EFAULT:
|
||||
default:
|
||||
sch_gen_unit_exception(sch);
|
||||
|
@ -240,7 +240,7 @@ again:
|
|||
case -EBUSY:
|
||||
case -ENODEV:
|
||||
case -EACCES:
|
||||
return 0;
|
||||
return ret;
|
||||
case -EFAULT:
|
||||
default:
|
||||
sch_gen_unit_exception(sch);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue