On 12.12.2017 10:13, Cornelia Huck wrote: > On Mon, 11 Dec 2017 21:32:58 +0100 > David Hildenbrand <da...@redhat.com> wrote: > >> On 11.12.2017 19:01, Cornelia Huck wrote: >>> On Mon, 11 Dec 2017 14:47:34 +0100 >>> David Hildenbrand <da...@redhat.com> wrote: >>> >>>> Use s390_cpu_virt_mem_write() so we can actually revert what we did >>>> (re-inject the dequeued IO interrupt). >>>> >>>> Signed-off-by: David Hildenbrand <da...@redhat.com> >>>> --- >>>> target/s390x/helper.h | 1 + >>>> target/s390x/insn-data.def | 1 + >>>> target/s390x/misc_helper.c | 53 >>>> ++++++++++++++++++++++++++++++++++++++++++++++ >>>> target/s390x/translate.c | 8 +++++++ >>>> 4 files changed, 63 insertions(+) >>>> >>> >>>> +uint32_t HELPER(tpi)(CPUS390XState *env, uint64_t addr) >>>> +{ >>>> + const uintptr_t ra = GETPC(); >>>> + S390CPU *cpu = s390_env_get_cpu(env); >>>> + QEMUS390FLICState *flic = QEMU_S390_FLIC(s390_get_flic()); >>>> + QEMUS390FlicIO *io = NULL; >>>> + LowCore *lowcore; >>>> + >>>> + if (addr & 0x3) { >>>> + s390_program_interrupt(env, PGM_SPECIFICATION, 4, ra); >>>> + } >>>> + >>>> + qemu_mutex_lock_iothread(); >>>> + io = qemu_s390_flic_dequeue_io(flic, env->cregs[6]); >>>> + if (!io) { >>>> + qemu_mutex_unlock_iothread(); >>>> + return 0; >>>> + } >>>> + >>>> + if (addr) { >>>> + struct { >>>> + uint16_t id; >>>> + uint16_t nr; >>>> + uint32_t parm; >>>> + } tmp = { >>>> + .id = cpu_to_be16(io->id), >>>> + .nr = cpu_to_be16(io->nr), >>>> + .parm = cpu_to_be32(io->parm), >>>> + }; >>> >>> That's a two-word interruption code; can you call this something better >>> than 'tmp'? >> >> IMHO from the context we have here it should be pretty clear what is >> happening. I mean we are defining and initializing the temporary data >> structure. >> >> But I can change the name if you can come up with a catchy variable name. :) >> > > int_code? >
makes the line exceed 80c. I'll use intc. Thanks! -- Thanks, David / dhildenb