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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user