mirror of https://github.com/xqemu/xqemu.git
s390x/flic: implement qemu_s390_clear_io_flic()
Now that we have access to the io interrupts, we can implement clear_io_irq() for TCG. Signed-off-by: David Hildenbrand <david@redhat.com> Message-Id: <20180129125623.21729-11-david@redhat.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
parent
6a253de395
commit
6e0d8175d6
|
@ -79,8 +79,35 @@ static void qemu_s390_release_adapter_routes(S390FLICState *fs,
|
||||||
static int qemu_s390_clear_io_flic(S390FLICState *fs, uint16_t subchannel_id,
|
static int qemu_s390_clear_io_flic(S390FLICState *fs, uint16_t subchannel_id,
|
||||||
uint16_t subchannel_nr)
|
uint16_t subchannel_nr)
|
||||||
{
|
{
|
||||||
/* Fixme TCG */
|
QEMUS390FLICState *flic = QEMU_S390_FLIC(fs);
|
||||||
return -ENOSYS;
|
QEMUS390FlicIO *cur, *next;
|
||||||
|
uint8_t isc;
|
||||||
|
|
||||||
|
g_assert(qemu_mutex_iothread_locked());
|
||||||
|
if (!(flic->pending & FLIC_PENDING_IO)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* check all iscs */
|
||||||
|
for (isc = 0; isc < 8; isc++) {
|
||||||
|
if (QLIST_EMPTY(&flic->io[isc])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* search and delete any matching one */
|
||||||
|
QLIST_FOREACH_SAFE(cur, &flic->io[isc], next, next) {
|
||||||
|
if (cur->id == subchannel_id && cur->nr == subchannel_nr) {
|
||||||
|
QLIST_REMOVE(cur, next);
|
||||||
|
g_free(cur);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* update our indicator bit */
|
||||||
|
if (QLIST_EMPTY(&flic->io[isc])) {
|
||||||
|
flic->pending &= ~ISC_TO_PENDING_IO(isc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int qemu_s390_modify_ais_mode(S390FLICState *fs, uint8_t isc,
|
static int qemu_s390_modify_ais_mode(S390FLICState *fs, uint8_t isc,
|
||||||
|
|
Loading…
Reference in New Issue