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,
|
||||
uint16_t subchannel_nr)
|
||||
{
|
||||
/* Fixme TCG */
|
||||
return -ENOSYS;
|
||||
QEMUS390FLICState *flic = QEMU_S390_FLIC(fs);
|
||||
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,
|
||||
|
Loading…
Reference in New Issue
Block a user