From: BALATON Zoltan <balaton@eik.bme.hu>
To: Bernhard Beschow <shentey@gmail.com>
Cc: qemu-devel@nongnu.org, Peter Maydell <peter.maydell@linaro.org>,
philmd@linaro.org, Jiaxun Yang <jiaxun.yang@flygoat.com>,
Akihiko Odaki <akihiko.odaki@daynix.com>
Subject: Re: [PATCH 2/2] hw/isa/vt82c686.c: Embed i8259 irq in device state instead of allocating
Date: Wed, 3 Jul 2024 02:09:45 +0200 (CEST) [thread overview]
Message-ID: <cf46b29f-b36f-37b8-373f-72ad487ee749@eik.bme.hu> (raw)
In-Reply-To: <00311AC8-D02C-4C3A-85A7-8FB3B51DDE9C@gmail.com>
On Tue, 2 Jul 2024, Bernhard Beschow wrote:
> Am 2. Juli 2024 18:42:23 UTC schrieb Bernhard Beschow <shentey@gmail.com>:
>> Am 1. Juli 2024 12:58:15 UTC schrieb Peter Maydell <peter.maydell@linaro.org>:
>>> On Sat, 29 Jun 2024 at 21:01, BALATON Zoltan <balaton@eik.bme.hu> wrote:
>>>>
>>>> To avoid a warning about unfreed qemu_irq embed the i8259 irq in the
>>>> device state instead of allocating it.
>>>>
>>>> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
>>>> ---
>>>> hw/isa/vt82c686.c | 7 ++++---
>>>> 1 file changed, 4 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c
>>>> index 8582ac0322..834051abeb 100644
>>>> --- a/hw/isa/vt82c686.c
>>>> +++ b/hw/isa/vt82c686.c
>>>> @@ -592,6 +592,8 @@ OBJECT_DECLARE_SIMPLE_TYPE(ViaISAState, VIA_ISA)
>>>>
>>>> struct ViaISAState {
>>>> PCIDevice dev;
>>>> +
>>>> + IRQState i8259_irq;
>>>> qemu_irq cpu_intr;
>>>> qemu_irq *isa_irqs_in;
>>>> uint16_t irq_state[ISA_NUM_IRQS];
>>>> @@ -715,13 +717,12 @@ static void via_isa_realize(PCIDevice *d, Error **errp)
>>>> ViaISAState *s = VIA_ISA(d);
>>>> DeviceState *dev = DEVICE(d);
>>>> PCIBus *pci_bus = pci_get_bus(d);
>>>> - qemu_irq *isa_irq;
>>>> ISABus *isa_bus;
>>>> int i;
>>>>
>>>> qdev_init_gpio_out(dev, &s->cpu_intr, 1);
>>>> qdev_init_gpio_in_named(dev, via_isa_pirq, "pirq", PCI_NUM_PINS);
>>>> - isa_irq = qemu_allocate_irqs(via_isa_request_i8259_irq, s, 1);
>>>> + qemu_init_irq(&s->i8259_irq, via_isa_request_i8259_irq, s, 0);
>>>> isa_bus = isa_bus_new(dev, pci_address_space(d), pci_address_space_io(d),
>>>> errp);
>>>
>>> So if I understand correctly, this IRQ line isn't visible
>>> from outside this chip,
>>
>> Actally it is, in the form of the INTR pin. Assuming similar naming
The INTR pin corresponds to qemu_irq cpu_intr not the i8259_irq.
>> conventions in vt82xx and piix, one can confirm this by consulting the
>> piix4 datasheet, "Figure 5. Interrupt Controller Block Diagram".
>> Moreover, the pegasos2 schematics (linked in the QEMU documentation)
>> suggest that this pin is actually used there, although not modeled in
>> QEMU.
>
> Well, QEMU does actually wire the intr pin in the pegasos2 board code,
> except that it isn't a named gpio like in piix4. If we allow this pin to
I could make that named to make it clearer, now it's the only output gpio
so did not name it as usually devices that only have one output don't use
named gpios for that.
> be wired before the south bridge's realize we might be able to eliminate
> the "intermediate irq forwarder" as Phil used to name it, resulting in
> less and more efficient code. This solution would basically follow the
> pattern I outlined under below link.
I think the problem here is that i8259 does not provide an output gpio for
this interrupt that the VT82xx could pass on but instead i8259_init()
needs a qemu_irq to be passed rhat the i8259 model will set. This seems to
be a legacy init function so the fix may be to Qdev-ify i8259 and add an
output irq to it then its users could instantiate and connect its IRQs as
usual and we don't need to create a qemu_irq to pass it to i8259_init().
Regards,
BALATON Zoltan
> Best regards,
> Bernhard
>
>> Compare this to how the "intr" pin is exposed by the piix4 device model and wired in the Malta board.
>>
>>> we're just trying to wire together
>>> two internal components of the chip? If so, I agree that
>>> this seems a better way than creating a named GPIO that
>>> we then have to document as a "not really an external
>>> connection, don't try to use this" line. (We've done that
>>> before I think in other devices, and it works but it's
>>> a bit odd-looking.)
>>>
>>> That said, I do notice that the via_isa_request_i8259_irq()
>>> function doesn't do anything except pass the level onto
>>> another qemu_irq, so I think the theoretical ideal would be
>>> if we could arrange to plumb things directly through rather
>>> than needing this extra qemu_irq and function. There's
>>> probably a reason (order of device creation/connection?)
>>> that doesn't work though.
>>
>> I think there could be a general pattern of device creation/connection which I've outlined here: https://lore.kernel.org/qemu-devel/0FFB5FD2-08CE-4CEC-9001-E7AC24407A44@gmail.com/
>>
>> Best regards,
>> Bernhard
>>
>>>
>>> -- PMM
>>>
>
>
next prev parent reply other threads:[~2024-07-03 0:10 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-29 20:01 [PATCH 0/2] Solve vt82c686 qemu_irq leak BALATON Zoltan
2024-06-29 20:01 ` [PATCH 1/2] hw: Move declaration of IRQState to header and add init function BALATON Zoltan
2024-07-01 12:52 ` Peter Maydell
2024-06-29 20:01 ` [PATCH 2/2] hw/isa/vt82c686.c: Embed i8259 irq in device state instead of allocating BALATON Zoltan
2024-07-01 12:58 ` Peter Maydell
2024-07-01 18:27 ` BALATON Zoltan
2024-07-01 21:13 ` Mark Cave-Ayland
2024-07-02 18:42 ` Bernhard Beschow
2024-07-02 21:17 ` Bernhard Beschow
2024-07-03 0:09 ` BALATON Zoltan [this message]
2024-07-03 7:15 ` Bernhard Beschow
2024-07-03 11:13 ` BALATON Zoltan
2024-07-04 21:06 ` Bernhard Beschow
2024-07-02 18:44 ` Bernhard Beschow
2024-09-10 7:10 ` [PATCH 0/2] Solve vt82c686 qemu_irq leak Michael S. Tsirkin
2024-09-13 13:00 ` BALATON Zoltan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cf46b29f-b36f-37b8-373f-72ad487ee749@eik.bme.hu \
--to=balaton@eik.bme.hu \
--cc=akihiko.odaki@daynix.com \
--cc=jiaxun.yang@flygoat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=shentey@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).