[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC 10/15] s390-bios: Support for running format-0/1 c
From: |
Christian Borntraeger |
Subject: |
Re: [Qemu-devel] [RFC 10/15] s390-bios: Support for running format-0/1 channel programs |
Date: |
Mon, 9 Jul 2018 12:51:52 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 |
On 07/05/2018 07:25 PM, Jason J. Herne wrote:
Instead of doing this
> +void await_io_int(uint16_t sch_no)
> +{
> + /*
> + * wait_psw and ctl6 must be static to avoid stack allocation as gcc
> cannot
> + * align stack variables. The stctg, lctlg and lpswe instructions require
> + * that their operands be aligned on an 8-byte boundary.
> + */
> + static uint64_t ctl6 __attribute__((__aligned__(8)));
> + static PSW wait_psw;
> +
> + /* PSW to load when I/O interrupt happens */
> + lowcore->io_new_psw.mask = PSW_MASK_ZMODE;
> + lowcore->io_new_psw.addr = (uint64_t)&&IOIntWakeup; /* Wake-up address */
> +
> + /* Enable io interrupts subclass mask */
> + asm volatile("stctg 6,6,%0" : "=S" (ctl6) : : "memory");
> + ctl6 |= 0x00000000FF000000;
> + asm volatile("lctlg 6,6,%0" : : "S" (ctl6));
> +
> + /* Set wait psw enabled for io interrupt */
> + wait_psw.mask = (PSW_MASK_ZMODE | PSW_MASK_IOINT | PSW_MASK_WAIT);
> + asm volatile("lpswe %0" : : "Q" (wait_psw) : "cc");
> +
> + panic("await_io_int: lpswe failed!!\n");
> +
> +IOIntWakeup:
> + /* Should never happen - all other subchannels are disabled by default */
> + IPL_assert(lowcore->subchannel_nr == sch_no,
> + "Interrupt from unexpected device");
> +
> + /* Disable all subclasses of I/O interrupts for this cpu */
> + asm volatile("stctg 6,6,%0" : "=S" (ctl6) : : "memory");
> + ctl6 &= ~(0x00000000FF000000);
> + asm volatile("lctlg 6,6,%0" : : "S" (ctl6));
> +}
Can you please add something like consume_sclp_interrupt in start.S?
Jumping inside a function from an interrupt can mess up the stack
and possibly other things as gcc does not expect this. (you do a
longjmp without doing any precaution)
This might explain why you needed the static hack for the variables.
- Re: [Qemu-devel] [qemu-s390x] [RFC 10/15] s390-bios: Support for running format-0/1 channel programs, (continued)
- Re: [Qemu-devel] [RFC 10/15] s390-bios: Support for running format-0/1 channel programs, Cornelia Huck, 2018/07/06
- Re: [Qemu-devel] [qemu-s390x] [RFC 10/15] s390-bios: Support for running format-0/1 channel programs, Halil Pasic, 2018/07/06
- Re: [Qemu-devel] [qemu-s390x] [RFC 10/15] s390-bios: Support for running format-0/1 channel programs, Cornelia Huck, 2018/07/06
- Re: [Qemu-devel] [qemu-s390x] [RFC 10/15] s390-bios: Support for running format-0/1 channel programs, Halil Pasic, 2018/07/06
- Re: [Qemu-devel] [qemu-s390x] [RFC 10/15] s390-bios: Support for running format-0/1 channel programs, Cornelia Huck, 2018/07/06
- Re: [Qemu-devel] [qemu-s390x] [RFC 10/15] s390-bios: Support for running format-0/1 channel programs, Halil Pasic, 2018/07/06
- Re: [Qemu-devel] [qemu-s390x] [RFC 10/15] s390-bios: Support for running format-0/1 channel programs, Jason J. Herne, 2018/07/06
- Re: [Qemu-devel] [RFC 10/15] s390-bios: Support for running format-0/1 channel programs, Jason J. Herne, 2018/07/06
Re: [Qemu-devel] [RFC 10/15] s390-bios: Support for running format-0/1 channel programs, Christian Borntraeger, 2018/07/09
Re: [Qemu-devel] [RFC 10/15] s390-bios: Support for running format-0/1 channel programs,
Christian Borntraeger <=
[Qemu-devel] [RFC 04/15] s390-bios: Extend find_dev() for non-virtio devices, Jason J. Herne, 2018/07/05
[Qemu-devel] [RFC 13/15] s390-bios: Add channel command codes/structs needed for dasd-ipl, Jason J. Herne, 2018/07/05
[Qemu-devel] [RFC 09/15] s390-bios: ptr2u32 and u32toptr, Jason J. Herne, 2018/07/05
[Qemu-devel] [RFC 15/15] s390-bios: Use sense ccw to ensure consistent device state at boot time, Jason J. Herne, 2018/07/05
[Qemu-devel] [RFC 05/15] s390-bios: Factor finding boot device out of virtio code path, Jason J. Herne, 2018/07/05
[Qemu-devel] [RFC 12/15] s390-bios: Use control unit type to determine boot method, Jason J. Herne, 2018/07/05