[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 11/29] s390x/flic: implement qemu_s390_clear_io_flic(
From: |
Cornelia Huck |
Subject: |
[Qemu-devel] [PULL 11/29] s390x/flic: implement qemu_s390_clear_io_flic() |
Date: |
Fri, 9 Feb 2018 10:25:06 +0100 |
From: David Hildenbrand <address@hidden>
Now that we have access to the io interrupts, we can implement
clear_io_irq() for TCG.
Signed-off-by: David Hildenbrand <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Cornelia Huck <address@hidden>
---
hw/intc/s390_flic.c | 31 +++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c
index 928bdc3037..cb216de9ba 100644
--- a/hw/intc/s390_flic.c
+++ b/hw/intc/s390_flic.c
@@ -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,
--
2.13.6
- [Qemu-devel] [PULL 00/29] s390x: assorted updates, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 02/29] s390x/tcg: deliver multiple interrupts in a row, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 03/29] s390x/flic: simplify flic initialization, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 01/29] Fix configure for s390 qemu on alpine and other busybox environments, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 04/29] s390x/tcg: simplify lookup of flic, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 05/29] s390x/tcg: simplify machine check handling, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 06/29] s390x/flic: factor out injection of floating interrupts, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 08/29] s390x/tcg: tolerate wrong wakeups due to floating interrupts, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 07/29] s390x/flic: no need to call s390_io_interrupt() from flic, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 10/29] s390x/tcg: implement TEST PENDING INTERRUPTION, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 11/29] s390x/flic: implement qemu_s390_clear_io_flic(),
Cornelia Huck <=
- [Qemu-devel] [PULL 12/29] s390x/flic: optimize CPU wakeup for TCG, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 13/29] s390x: fix size + content of STSI blocks, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 09/29] s390x/flic: make floating interrupts on TCG actually floating, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 14/29] s390x/tcg: STSI overhaul, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 17/29] s390x/tcg: cache the qemu flic in a central function, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 18/29] s390x/kvm: cache the kvm flic in a central function, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 15/29] s390x/tcg: remove SMP warning, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 20/29] s390x/sclp: fix event mask handling, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 16/29] configure: s390x supports mttcg now, Cornelia Huck, 2018/02/09
- [Qemu-devel] [PULL 21/29] s390x/tcg: wire up pci instructions, Cornelia Huck, 2018/02/09