mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
s390x/css: Refactor IRB construction
Currently, all subchannel types have "sense data" copied into the IRB.ECW space, and a couple flags enabled in the IRB.SCSW and IRB.ESW. But for passthrough (vfio-ccw) subchannels, this data isn't populated in the first place, so enabling those flags leads to unexpected behavior if the guest tries to process the sense data (zeros) in the IRB.ECW. Let's add a subchannel callback that builds these portions of the IRB, and move the existing code into a routine for those virtual subchannels. The passthrough subchannels will be able to piggy-back onto this later. Signed-off-by: Eric Farman <farman@linux.ibm.com> Message-Id: <20210617232537.1337506-4-farman@linux.ibm.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
parent
1b01dedaed
commit
0599a046ac
4 changed files with 33 additions and 16 deletions
|
@ -138,6 +138,7 @@ struct SubchDev {
|
|||
int (*ccw_cb) (SubchDev *, CCW1);
|
||||
void (*disable_cb)(SubchDev *);
|
||||
IOInstEnding (*do_subchannel_work) (SubchDev *);
|
||||
void (*irb_cb)(SubchDev *, IRB *);
|
||||
SenseId id;
|
||||
void *driver_data;
|
||||
};
|
||||
|
@ -215,6 +216,7 @@ void css_clear_sei_pending(void);
|
|||
IOInstEnding s390_ccw_cmd_request(SubchDev *sch);
|
||||
IOInstEnding do_subchannel_work_virtual(SubchDev *sub);
|
||||
IOInstEnding do_subchannel_work_passthrough(SubchDev *sub);
|
||||
void build_irb_virtual(SubchDev *sch, IRB *irb);
|
||||
|
||||
int s390_ccw_halt(SubchDev *sch);
|
||||
int s390_ccw_clear(SubchDev *sch);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue