* [Qemu-devel] [PATCH 0/2] Disentagle ISA IRQs @ 2009-08-09 16:44 Avi Kivity 2009-08-09 16:44 ` [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly Avi Kivity 2009-08-09 16:44 ` [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus Avi Kivity 0 siblings, 2 replies; 31+ messages in thread From: Avi Kivity @ 2009-08-09 16:44 UTC (permalink / raw) To: Anthony Liguori; +Cc: qemu-devel Currently ISA IRQs are delivered directly to the PIC, which reroutes them to the IOAPIC as well. This patchset introduces ISA IRQs, which are routed both to the PIC and the IOAPIC. As a side effect, IOAPIC lines 16-23 are enabled; it also becomes easier to add IOAPICs. Avi Kivity (2): Route PC irqs to ISA bus instead of i8259 directly Route IOAPIC interrupts via ISA bus hw/i8259.c | 13 ------------- hw/ioapic.c | 6 ++++-- hw/pc.c | 54 +++++++++++++++++++++++++++++++++++------------------- hw/pc.h | 4 +--- 4 files changed, 40 insertions(+), 37 deletions(-) ^ permalink raw reply [flat|nested] 31+ messages in thread
* [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly 2009-08-09 16:44 [Qemu-devel] [PATCH 0/2] Disentagle ISA IRQs Avi Kivity @ 2009-08-09 16:44 ` Avi Kivity 2009-08-10 8:34 ` Gerd Hoffmann 2009-08-10 9:04 ` Alexander Graf 2009-08-09 16:44 ` [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus Avi Kivity 1 sibling, 2 replies; 31+ messages in thread From: Avi Kivity @ 2009-08-09 16:44 UTC (permalink / raw) To: Anthony Liguori; +Cc: qemu-devel A PC has its motherboard IRQ lines connected to both the PIC and IOAPIC. Currently, qemu routes IRQs to the PIC which then calls the IOAPIC, an incestuous arrangement. In order to clean this up, create a new ISA IRQ abstraction, and have devices raise ISA IRQs (which in turn raise the i8259 IRQs as usual). Signed-off-by: Avi Kivity <avi@redhat.com> --- hw/pc.c | 44 ++++++++++++++++++++++++++++++-------------- 1 files changed, 30 insertions(+), 14 deletions(-) diff --git a/hw/pc.c b/hw/pc.c index bc9e646..a6be4a8 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -87,6 +87,17 @@ static void option_rom_setup_reset(target_phys_addr_t addr, unsigned size) qemu_register_reset(option_rom_reset, rrd); } +typedef struct isa_irq_state { + qemu_irq *i8259; +} IsaIrqState; + +static void isa_irq_handler(void *opaque, int n, int level) +{ + IsaIrqState *isa = (IsaIrqState *)opaque; + + qemu_set_irq(isa->i8259[n], level); +} + static void ioport80_write(void *opaque, uint32_t addr, uint32_t data) { } @@ -1119,7 +1130,9 @@ static void pc_init1(ram_addr_t ram_size, int piix3_devfn = -1; CPUState *env; qemu_irq *cpu_irq; + qemu_irq *isa_irq; qemu_irq *i8259; + IsaIrqState *isa_irq_state; DriveInfo *dinfo; BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; BlockDriverState *fd[MAX_FD]; @@ -1264,10 +1277,13 @@ static void pc_init1(ram_addr_t ram_size, cpu_irq = qemu_allocate_irqs(pic_irq_request, NULL, 1); i8259 = i8259_init(cpu_irq[0]); - ferr_irq = i8259[13]; + isa_irq_state = qemu_mallocz(sizeof(*isa_irq_state)); + isa_irq_state->i8259 = i8259; + isa_irq = qemu_allocate_irqs(isa_irq_handler, isa_irq_state, 16); + ferr_irq = isa_irq[13]; if (pci_enabled) { - pci_bus = i440fx_init(&i440fx_state, i8259); + pci_bus = i440fx_init(&i440fx_state, isa_irq); piix3_devfn = piix3_init(pci_bus, -1); } else { pci_bus = NULL; @@ -1297,7 +1313,7 @@ static void pc_init1(ram_addr_t ram_size, } } - rtc_state = rtc_init(0x70, i8259[8], 2000); + rtc_state = rtc_init(0x70, isa_irq[8], 2000); qemu_register_boot_set(pc_boot_set, rtc_state); @@ -1307,10 +1323,10 @@ static void pc_init1(ram_addr_t ram_size, if (pci_enabled) { ioapic = ioapic_init(); } - pit = pit_init(0x40, i8259[0]); + pit = pit_init(0x40, isa_irq[0]); pcspk_init(pit); if (!no_hpet) { - hpet_init(i8259); + hpet_init(isa_irq); } if (pci_enabled) { pic_set_alt_irq_func(isa_pic, ioapic_set_irq, ioapic); @@ -1318,14 +1334,14 @@ static void pc_init1(ram_addr_t ram_size, for(i = 0; i < MAX_SERIAL_PORTS; i++) { if (serial_hds[i]) { - serial_init(serial_io[i], i8259[serial_irq[i]], 115200, + serial_init(serial_io[i], isa_irq[serial_irq[i]], 115200, serial_hds[i]); } } for(i = 0; i < MAX_PARALLEL_PORTS; i++) { if (parallel_hds[i]) { - parallel_init(parallel_io[i], i8259[parallel_irq[i]], + parallel_init(parallel_io[i], isa_irq[parallel_irq[i]], parallel_hds[i]); } } @@ -1336,7 +1352,7 @@ static void pc_init1(ram_addr_t ram_size, NICInfo *nd = &nd_table[i]; if (!pci_enabled || (nd->model && strcmp(nd->model, "ne2k_isa") == 0)) - pc_init_ne2k_isa(nd, i8259); + pc_init_ne2k_isa(nd, isa_irq); else pci_nic_init(nd, "ne2k_pci", NULL); } @@ -1354,25 +1370,25 @@ static void pc_init1(ram_addr_t ram_size, } if (pci_enabled) { - pci_piix3_ide_init(pci_bus, hd, piix3_devfn + 1, i8259); + pci_piix3_ide_init(pci_bus, hd, piix3_devfn + 1, isa_irq); } else { for(i = 0; i < MAX_IDE_BUS; i++) { - isa_ide_init(ide_iobase[i], ide_iobase2[i], i8259[ide_irq[i]], + isa_ide_init(ide_iobase[i], ide_iobase2[i], isa_irq[ide_irq[i]], hd[MAX_IDE_DEVS * i], hd[MAX_IDE_DEVS * i + 1]); } } - i8042_init(i8259[1], i8259[12], 0x60); + i8042_init(isa_irq[1], isa_irq[12], 0x60); DMA_init(0); #ifdef HAS_AUDIO - audio_init(pci_enabled ? pci_bus : NULL, i8259); + audio_init(pci_enabled ? pci_bus : NULL, isa_irq); #endif for(i = 0; i < MAX_FD; i++) { dinfo = drive_get(IF_FLOPPY, 0, i); fd[i] = dinfo ? dinfo->bdrv : NULL; } - floppy_controller = fdctrl_init(i8259[6], 2, 0, 0x3f0, fd); + floppy_controller = fdctrl_init(isa_irq[6], 2, 0, 0x3f0, fd); cmos_init(below_4g_mem_size, above_4g_mem_size, boot_device, hd); @@ -1385,7 +1401,7 @@ static void pc_init1(ram_addr_t ram_size, i2c_bus *smbus; /* TODO: Populate SPD eeprom data. */ - smbus = piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100, i8259[9]); + smbus = piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100, isa_irq[9]); for (i = 0; i < 8; i++) { DeviceState *eeprom; eeprom = qdev_create((BusState *)smbus, "smbus-eeprom"); -- 1.6.2.5 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly 2009-08-09 16:44 ` [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly Avi Kivity @ 2009-08-10 8:34 ` Gerd Hoffmann 2009-08-10 8:46 ` Avi Kivity 2009-08-10 9:04 ` Alexander Graf 1 sibling, 1 reply; 31+ messages in thread From: Gerd Hoffmann @ 2009-08-10 8:34 UTC (permalink / raw) To: Avi Kivity; +Cc: qemu-devel On 08/09/09 18:44, Avi Kivity wrote: > A PC has its motherboard IRQ lines connected to both the PIC and IOAPIC. > Currently, qemu routes IRQs to the PIC which then calls the IOAPIC, an > incestuous arrangement. In order to clean this up, create a new ISA IRQ > abstraction, and have devices raise ISA IRQs (which in turn raise the i8259 > IRQs as usual). There are isa-bus qdev patches in anthonys patch queue. I think it makes sense to do this cleanup on top of the isa-bus patches. Maybe it makes sense to integrate it more, i.e. have the irqs as element in IsaBus ... cheers, Gerd ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly 2009-08-10 8:34 ` Gerd Hoffmann @ 2009-08-10 8:46 ` Avi Kivity 0 siblings, 0 replies; 31+ messages in thread From: Avi Kivity @ 2009-08-10 8:46 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: qemu-devel On 08/10/2009 11:34 AM, Gerd Hoffmann wrote: > On 08/09/09 18:44, Avi Kivity wrote: >> A PC has its motherboard IRQ lines connected to both the PIC and IOAPIC. >> Currently, qemu routes IRQs to the PIC which then calls the IOAPIC, an >> incestuous arrangement. In order to clean this up, create a new ISA IRQ >> abstraction, and have devices raise ISA IRQs (which in turn raise the >> i8259 >> IRQs as usual). > > There are isa-bus qdev patches in anthonys patch queue. I think it > makes sense to do this cleanup on top of the isa-bus patches. Maybe > it makes sense to integrate it more, i.e. have the irqs as element in > IsaBus ... > One thing at a time. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly 2009-08-09 16:44 ` [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly Avi Kivity 2009-08-10 8:34 ` Gerd Hoffmann @ 2009-08-10 9:04 ` Alexander Graf 2009-08-10 9:43 ` Avi Kivity 2009-08-10 9:45 ` Stefan Assmann 1 sibling, 2 replies; 31+ messages in thread From: Alexander Graf @ 2009-08-10 9:04 UTC (permalink / raw) To: Avi Kivity; +Cc: sassmann, qemu-devel@nongnu.org, Olaf Dabrunz Am 09.08.2009 um 18:44 schrieb Avi Kivity <avi@redhat.com>: > A PC has its motherboard IRQ lines connected to both the PIC and > IOAPIC. > Currently, qemu routes IRQs to the PIC which then calls the IOAPIC, an > incestuous arrangement. In order to clean this up, create a new ISA > IRQ > abstraction, and have devices raise ISA IRQs (which in turn raise > the i8259 > IRQs as usual). Is this really true? From my understanding the PIC in modern systems is emulated through the IOAPIC, which is the reason we have legacy interrupts. Copying the boot interrupt experts... Alex ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly 2009-08-10 9:04 ` Alexander Graf @ 2009-08-10 9:43 ` Avi Kivity 2009-08-10 9:45 ` Stefan Assmann 1 sibling, 0 replies; 31+ messages in thread From: Avi Kivity @ 2009-08-10 9:43 UTC (permalink / raw) To: Alexander Graf; +Cc: sassmann, qemu-devel@nongnu.org, Olaf Dabrunz On 08/10/2009 12:04 PM, Alexander Graf wrote: > > Am 09.08.2009 um 18:44 schrieb Avi Kivity <avi@redhat.com>: > >> A PC has its motherboard IRQ lines connected to both the PIC and IOAPIC. >> Currently, qemu routes IRQs to the PIC which then calls the IOAPIC, an >> incestuous arrangement. In order to clean this up, create a new ISA IRQ >> abstraction, and have devices raise ISA IRQs (which in turn raise the >> i8259 >> IRQs as usual). > > Is this really true? From my understanding the PIC in modern systems > is emulated through the IOAPIC, which is the reason we have legacy > interrupts. > For the PC emulated by qemu, it is certainly true. I don't know for sure about modern PCs, but I bet they do respond to the PIC io ports. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly 2009-08-10 9:04 ` Alexander Graf 2009-08-10 9:43 ` Avi Kivity @ 2009-08-10 9:45 ` Stefan Assmann 2009-08-10 9:52 ` Avi Kivity 2009-08-10 13:14 ` Olaf Dabrunz 1 sibling, 2 replies; 31+ messages in thread From: Stefan Assmann @ 2009-08-10 9:45 UTC (permalink / raw) To: Alexander Graf; +Cc: Olaf Dabrunz, Avi Kivity, qemu-devel@nongnu.org On 10.08.2009 11:04, Alexander Graf wrote: > > Am 09.08.2009 um 18:44 schrieb Avi Kivity <avi@redhat.com>: > >> A PC has its motherboard IRQ lines connected to both the PIC and IOAPIC. >> Currently, qemu routes IRQs to the PIC which then calls the IOAPIC, an >> incestuous arrangement. In order to clean this up, create a new ISA IRQ >> abstraction, and have devices raise ISA IRQs (which in turn raise the >> i8259 >> IRQs as usual). > > Is this really true? From my understanding the PIC in modern systems is > emulated through the IOAPIC, which is the reason we have legacy interrupts. While not sure how the hardware implementation is done in detail I can confirm that the IRQs indeed end up at both PIC and IO-APIC0 if the device is connected to the southbridge directly. If that's not the case for example a PCI bus connected via PCIe that sports it's own IO-APIC then IRQs are forwarded (over PCIe) from the IO-APIC to the southbridge (PIC). In any case, to come closer to the real hardware having an abstraction that receives IRQs from devices and delivers them to the appropriate interrupt controller(s) seems to be a valid step IMHO. Does qemu support multiple IO-APICs? I guess not so no need for boot interrupts. (If yes then there would be the question how close you really want to be to existing hardware.) Stefan -- Stefan Assmann | Red Hat GmbH Software Engineer | Otto-Hahn-Strasse 20, 85609 Dornach | HR: Amtsgericht Muenchen HRB 153243 | GF: Brendan Lane, Charlie Peters, sassmann at redhat.com | Michael Cunningham, Charles Cachera ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly 2009-08-10 9:45 ` Stefan Assmann @ 2009-08-10 9:52 ` Avi Kivity 2009-08-10 13:20 ` Olaf Dabrunz 2009-08-10 13:14 ` Olaf Dabrunz 1 sibling, 1 reply; 31+ messages in thread From: Avi Kivity @ 2009-08-10 9:52 UTC (permalink / raw) To: Stefan Assmann; +Cc: Olaf Dabrunz, Alexander Graf, qemu-devel@nongnu.org On 08/10/2009 12:45 PM, Stefan Assmann wrote: > Does qemu support multiple IO-APICs? I guess not so no need for boot > interrupts. (If yes then there would be the question how close you > really want to be to existing hardware.) Not at present. We've considered adding IOAPICs to reduce interrupt sharing, but MSI solves the problem much more neatly. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly 2009-08-10 9:52 ` Avi Kivity @ 2009-08-10 13:20 ` Olaf Dabrunz 0 siblings, 0 replies; 31+ messages in thread From: Olaf Dabrunz @ 2009-08-10 13:20 UTC (permalink / raw) To: Avi Kivity Cc: Olaf Dabrunz, Alexander Graf, Stefan Assmann, qemu-devel@nongnu.org On 10-Aug-09, Avi Kivity wrote: > On 08/10/2009 12:45 PM, Stefan Assmann wrote: >> Does qemu support multiple IO-APICs? I guess not so no need for boot >> interrupts. (If yes then there would be the question how close you >> really want to be to existing hardware.) > > > Not at present. We've considered adding IOAPICs to reduce interrupt > sharing, but MSI solves the problem much more neatly. Yes, all modern operating systems that come to my mind support MSIs, so as long as you do not want to run some old system, this is ok. I also guess that you do not try to emulate one of the chipsets that has a broken MSI implementation. -- Olaf Dabrunz (Olaf.Dabrunz <at> gmx.net) ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly 2009-08-10 9:45 ` Stefan Assmann 2009-08-10 9:52 ` Avi Kivity @ 2009-08-10 13:14 ` Olaf Dabrunz 1 sibling, 0 replies; 31+ messages in thread From: Olaf Dabrunz @ 2009-08-10 13:14 UTC (permalink / raw) To: Stefan Assmann Cc: qemu-devel@nongnu.org, Olaf Dabrunz, Alexander Graf, Avi Kivity On 10-Aug-09, Stefan Assmann wrote: > On 10.08.2009 11:04, Alexander Graf wrote: >> >> Am 09.08.2009 um 18:44 schrieb Avi Kivity <avi@redhat.com>: >> >>> A PC has its motherboard IRQ lines connected to both the PIC and IOAPIC. >>> Currently, qemu routes IRQs to the PIC which then calls the IOAPIC, an >>> incestuous arrangement. In order to clean this up, create a new ISA IRQ >>> abstraction, and have devices raise ISA IRQs (which in turn raise the >>> i8259 >>> IRQs as usual). >> >> Is this really true? From my understanding the PIC in modern systems is >> emulated through the IOAPIC, which is the reason we have legacy interrupts. > > While not sure how the hardware implementation is done in detail I can > confirm that the IRQs indeed end up at both PIC and IO-APIC0 if the > device is connected to the southbridge directly. If that's not the case > for example a PCI bus connected via PCIe that sports it's own IO-APIC > then IRQs are forwarded (over PCIe) from the IO-APIC to the southbridge > (PIC). To be exact, IRQs on modern PCs are routed to both an IO-APIC and the PIC via wires and some routing mechanism. (Support for the PIC is required by ACPI.) The routing mechanism to the PIC does _not_ involve an IO-APIC. It is implementation-specific to the chipset and the board, and operating systems get routing info from the ACPI tables (delivered by the BIOS). The routing to the PIC is set up by the BIOS, which knows how to program the chipset-specific routing registers. The IO-APICs are standard components that are programmed by the operating system. They do not have any "forwarding to the PIC" component. The intention is that there are no implementation-specific differences between them (except for number of lines, the generation of the IO-APIC spec and slight differences in the hardware implementation). They are supposed to be programmable by the OS in a standard way. That is why they cannot be part of a scheme that routes IRQs to the PIC. Now that being said, there are mechanisms like boot interrupts that on some chipsets activate forwarding of interrupts to the PIC, when the corresponding "line" in a (secondary) IO-APIC is disabled. This means that the IO-APIC state is "sampled" by some logic to select forwarding to the PIC. The IO-APIC itself is not part of this mechanism, it is just "being watched". > In any case, to come closer to the real hardware having an abstraction > that receives IRQs from devices and delivers them to the appropriate > interrupt controller(s) seems to be a valid step IMHO. > > Does qemu support multiple IO-APICs? I guess not so no need for boot > interrupts. (If yes then there would be the question how close you > really want to be to existing hardware.) > > Stefan -- Olaf Dabrunz (Olaf.Dabrunz <at> gmx.net) ^ permalink raw reply [flat|nested] 31+ messages in thread
* [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-09 16:44 [Qemu-devel] [PATCH 0/2] Disentagle ISA IRQs Avi Kivity 2009-08-09 16:44 ` [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly Avi Kivity @ 2009-08-09 16:44 ` Avi Kivity 2009-08-10 8:38 ` Gerd Hoffmann 2009-08-26 16:03 ` Gerd Hoffmann 1 sibling, 2 replies; 31+ messages in thread From: Avi Kivity @ 2009-08-09 16:44 UTC (permalink / raw) To: Anthony Liguori; +Cc: qemu-devel Instead of calling the IOAPIC from the PIC, raise IOAPIC irqs via the ISA bus. As a side effect, IOAPIC lines 16-23 are enabled. Signed-off-by: Avi Kivity <avi@redhat.com> --- hw/i8259.c | 13 ------------- hw/ioapic.c | 6 ++++-- hw/pc.c | 16 ++++++++-------- hw/pc.h | 4 +--- 4 files changed, 13 insertions(+), 26 deletions(-) diff --git a/hw/i8259.c b/hw/i8259.c index 0b9fab5..74acc39 100644 --- a/hw/i8259.c +++ b/hw/i8259.c @@ -60,9 +60,6 @@ struct PicState2 { PicState pics[2]; qemu_irq parent_irq; void *irq_request_opaque; - /* IOAPIC callback support */ - SetIRQFunc *alt_irq_func; - void *alt_irq_opaque; }; #if defined(DEBUG_PIC) || defined (DEBUG_IRQ_COUNT) @@ -203,9 +200,6 @@ static void i8259_set_irq(void *opaque, int irq, int level) } #endif pic_set_irq1(&s->pics[irq >> 3], irq & 7, level); - /* used for IOAPIC irqs */ - if (s->alt_irq_func) - s->alt_irq_func(s->alt_irq_opaque, irq, level); pic_update_irq(s); } @@ -562,10 +556,3 @@ qemu_irq *i8259_init(qemu_irq parent_irq) isa_pic = s; return qemu_allocate_irqs(i8259_set_irq, s, 16); } - -void pic_set_alt_irq_func(PicState2 *s, SetIRQFunc *alt_irq_func, - void *alt_irq_opaque) -{ - s->alt_irq_func = alt_irq_func; - s->alt_irq_opaque = alt_irq_opaque; -} diff --git a/hw/ioapic.c b/hw/ioapic.c index a5cdd5d..998894d 100644 --- a/hw/ioapic.c +++ b/hw/ioapic.c @@ -241,9 +241,10 @@ static CPUWriteMemoryFunc *ioapic_mem_write[3] = { ioapic_mem_writel, }; -IOAPICState *ioapic_init(void) +qemu_irq *ioapic_init(void) { IOAPICState *s; + qemu_irq *irq; int io_memory; s = qemu_mallocz(sizeof(IOAPICState)); @@ -255,6 +256,7 @@ IOAPICState *ioapic_init(void) register_savevm("ioapic", 0, 1, ioapic_save, ioapic_load, s); qemu_register_reset(ioapic_reset, s); + irq = qemu_allocate_irqs(ioapic_set_irq, s, IOAPIC_NUM_PINS); - return s; + return irq; } diff --git a/hw/pc.c b/hw/pc.c index a6be4a8..5182a57 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -60,7 +60,6 @@ static fdctrl_t *floppy_controller; static RTCState *rtc_state; static PITState *pit; -static IOAPICState *ioapic; static PCIDevice *i440fx_state; typedef struct rom_reset_data { @@ -89,14 +88,18 @@ static void option_rom_setup_reset(target_phys_addr_t addr, unsigned size) typedef struct isa_irq_state { qemu_irq *i8259; + qemu_irq *ioapic; } IsaIrqState; static void isa_irq_handler(void *opaque, int n, int level) { IsaIrqState *isa = (IsaIrqState *)opaque; - qemu_set_irq(isa->i8259[n], level); -} + if (n < 16) { + qemu_set_irq(isa->i8259[n], level); + } + qemu_set_irq(isa->ioapic[n], level); +}; static void ioport80_write(void *opaque, uint32_t addr, uint32_t data) { @@ -1279,7 +1282,7 @@ static void pc_init1(ram_addr_t ram_size, i8259 = i8259_init(cpu_irq[0]); isa_irq_state = qemu_mallocz(sizeof(*isa_irq_state)); isa_irq_state->i8259 = i8259; - isa_irq = qemu_allocate_irqs(isa_irq_handler, isa_irq_state, 16); + isa_irq = qemu_allocate_irqs(isa_irq_handler, isa_irq_state, 24); ferr_irq = isa_irq[13]; if (pci_enabled) { @@ -1321,16 +1324,13 @@ static void pc_init1(ram_addr_t ram_size, register_ioport_write(0x92, 1, 1, ioport92_write, NULL); if (pci_enabled) { - ioapic = ioapic_init(); + isa_irq_state->ioapic = ioapic_init(); } pit = pit_init(0x40, isa_irq[0]); pcspk_init(pit); if (!no_hpet) { hpet_init(isa_irq); } - if (pci_enabled) { - pic_set_alt_irq_func(isa_pic, ioapic_set_irq, ioapic); - } for(i = 0; i < MAX_SERIAL_PORTS; i++) { if (serial_hds[i]) { diff --git a/hw/pc.h b/hw/pc.h index 9fbae20..043c216 100644 --- a/hw/pc.h +++ b/hw/pc.h @@ -32,8 +32,6 @@ extern PicState2 *isa_pic; void pic_set_irq(int irq, int level); void pic_set_irq_new(void *opaque, int irq, int level); qemu_irq *i8259_init(qemu_irq parent_irq); -void pic_set_alt_irq_func(PicState2 *s, SetIRQFunc *alt_irq_func, - void *alt_irq_opaque); int pic_read_irq(PicState2 *s); void pic_update_irq(PicState2 *s); uint32_t pic_intack_read(PicState2 *s); @@ -50,7 +48,7 @@ int apic_init(CPUState *env); int apic_accept_pic_intr(CPUState *env); void apic_deliver_pic_intr(CPUState *env, int level); int apic_get_interrupt(CPUState *env); -IOAPICState *ioapic_init(void); +qemu_irq *ioapic_init(void); void ioapic_set_irq(void *opaque, int vector, int level); void apic_reset_irq_delivered(void); int apic_get_irq_delivered(void); -- 1.6.2.5 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-09 16:44 ` [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus Avi Kivity @ 2009-08-10 8:38 ` Gerd Hoffmann 2009-08-26 16:03 ` Gerd Hoffmann 1 sibling, 0 replies; 31+ messages in thread From: Gerd Hoffmann @ 2009-08-10 8:38 UTC (permalink / raw) To: Avi Kivity; +Cc: qemu-devel Hi, > typedef struct isa_irq_state { > qemu_irq *i8259; > + qemu_irq *ioapic; > } IsaIrqState; Well. Now it would probably better named "pc_irq_state". While that cleanup certainly makes sense it isn't a isa-bus thing any more. cheers, Gerd ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-09 16:44 ` [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus Avi Kivity 2009-08-10 8:38 ` Gerd Hoffmann @ 2009-08-26 16:03 ` Gerd Hoffmann 2009-08-26 16:06 ` Avi Kivity 1 sibling, 1 reply; 31+ messages in thread From: Gerd Hoffmann @ 2009-08-26 16:03 UTC (permalink / raw) To: Avi Kivity; +Cc: qemu-devel On 08/09/09 18:44, Avi Kivity wrote: > Instead of calling the IOAPIC from the PIC, raise IOAPIC irqs via the ISA bus. > As a side effect, IOAPIC lines 16-23 are enabled. Now we probably need some acpi magic to tell the guest OS that there are a few more IRQ lines? cheers, Gerd ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-26 16:03 ` Gerd Hoffmann @ 2009-08-26 16:06 ` Avi Kivity 2009-08-26 16:30 ` Gerd Hoffmann 2009-08-28 2:20 ` Beth Kon 0 siblings, 2 replies; 31+ messages in thread From: Avi Kivity @ 2009-08-26 16:06 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: qemu-devel On 08/26/2009 07:03 PM, Gerd Hoffmann wrote: > On 08/09/09 18:44, Avi Kivity wrote: >> Instead of calling the IOAPIC from the PIC, raise IOAPIC irqs via the >> ISA bus. >> As a side effect, IOAPIC lines 16-23 are enabled. > > Now we probably need some acpi magic to tell the guest OS that there > are a few more IRQ lines? > I wanted to route the PCI IRQs to those lines (and have eight links instead of four). Now I don't think it's worthwhile, as every guest that is interesting from a performance point of view has MSI support. So I think we should just leave these lines as is, terminated with a 4.7K resistor to avoid picking up noise. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-26 16:06 ` Avi Kivity @ 2009-08-26 16:30 ` Gerd Hoffmann 2009-08-26 19:09 ` Gleb Natapov 2009-08-27 4:53 ` [Qemu-devel] " Avi Kivity 2009-08-28 2:20 ` Beth Kon 1 sibling, 2 replies; 31+ messages in thread From: Gerd Hoffmann @ 2009-08-26 16:30 UTC (permalink / raw) To: Avi Kivity; +Cc: qemu-devel On 08/26/09 18:06, Avi Kivity wrote: > On 08/26/2009 07:03 PM, Gerd Hoffmann wrote: >> Now we probably need some acpi magic to tell the guest OS that there >> are a few more IRQ lines? > > I wanted to route the PCI IRQs to those lines (and have eight links > instead of four). Right now we have IRQs 5,10,11 for PCI. Having one more IRQ (so we have one for each link) would be useful IMHO. eight links + eight irqs would be even more useful. What needs to be done for that? BTW: Seems linux doesn't use IRQ 5 even with lots of PCI devices, instead it makes them share 10+11 ... > Now I don't think it's worthwhile, as every guest that > is interesting from a performance point of view has MSI support. Not all emulated devices have MSI support though ... > So I think we should just leave these lines as is, terminated with a > 4.7K resistor to avoid picking up noise. Oh, nice, didn't know kvm has virtual resistor support. cheers, Gerd ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-26 16:30 ` Gerd Hoffmann @ 2009-08-26 19:09 ` Gleb Natapov 2009-08-27 7:40 ` Gerd Hoffmann 2009-08-27 4:53 ` [Qemu-devel] " Avi Kivity 1 sibling, 1 reply; 31+ messages in thread From: Gleb Natapov @ 2009-08-26 19:09 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: Avi Kivity, qemu-devel On Wed, Aug 26, 2009 at 06:30:54PM +0200, Gerd Hoffmann wrote: > On 08/26/09 18:06, Avi Kivity wrote: > >On 08/26/2009 07:03 PM, Gerd Hoffmann wrote: > >>Now we probably need some acpi magic to tell the guest OS that there > >>are a few more IRQ lines? > > > >I wanted to route the PCI IRQs to those lines (and have eight links > >instead of four). > > Right now we have IRQs 5,10,11 for PCI. Having one more IRQ (so we > have one for each link) would be useful IMHO. eight links + eight > irqs would be even more useful. What needs to be done for that? > Current code uses piix3 irq router to route pci interrupts to pic _and_ ioapic and piix3 irq router supports only 16 interrupts. -- Gleb. ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-26 19:09 ` Gleb Natapov @ 2009-08-27 7:40 ` Gerd Hoffmann 2009-08-27 7:57 ` Gleb Natapov 0 siblings, 1 reply; 31+ messages in thread From: Gerd Hoffmann @ 2009-08-27 7:40 UTC (permalink / raw) To: Gleb Natapov; +Cc: Avi Kivity, qemu-devel On 08/26/09 21:09, Gleb Natapov wrote: > On Wed, Aug 26, 2009 at 06:30:54PM +0200, Gerd Hoffmann wrote: >> Right now we have IRQs 5,10,11 for PCI. Having one more IRQ (so we >> have one for each link) would be useful IMHO. eight links + eight >> irqs would be even more useful. What needs to be done for that? >> > Current code uses piix3 irq router to route pci interrupts to pic _and_ > ioapic and piix3 irq router supports only 16 interrupts. That means? We could add four more PCI links which have IRQs routed through another IRQ router chip and link them to ioapic lines 17-23 that way? Or does it mean we must emulate a more recent chipset? cheers, Gerd ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-27 7:40 ` Gerd Hoffmann @ 2009-08-27 7:57 ` Gleb Natapov 2009-08-27 8:18 ` Jamie Lokier 0 siblings, 1 reply; 31+ messages in thread From: Gleb Natapov @ 2009-08-27 7:57 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: Avi Kivity, qemu-devel On Thu, Aug 27, 2009 at 09:40:06AM +0200, Gerd Hoffmann wrote: > On 08/26/09 21:09, Gleb Natapov wrote: > >On Wed, Aug 26, 2009 at 06:30:54PM +0200, Gerd Hoffmann wrote: > >>Right now we have IRQs 5,10,11 for PCI. Having one more IRQ (so we > >>have one for each link) would be useful IMHO. eight links + eight > >>irqs would be even more useful. What needs to be done for that? > >> > >Current code uses piix3 irq router to route pci interrupts to pic _and_ > >ioapic and piix3 irq router supports only 16 interrupts. > > That means? We could add four more PCI links which have IRQs routed That means changing acpi/bios is unfortunately not enough. > through another IRQ router chip and link them to ioapic lines 17-23 > that way? Something like that. We can invent our own irq router and write driver for it in DSDT. > Or does it mean we must emulate a more recent chipset? > That too will work. -- Gleb. ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-27 7:57 ` Gleb Natapov @ 2009-08-27 8:18 ` Jamie Lokier 2009-08-27 8:24 ` Gleb Natapov 2009-08-27 8:55 ` Gerd Hoffmann 0 siblings, 2 replies; 31+ messages in thread From: Jamie Lokier @ 2009-08-27 8:18 UTC (permalink / raw) To: Gleb Natapov; +Cc: qemu-devel, Gerd Hoffmann, Avi Kivity Gleb Natapov wrote: > On Thu, Aug 27, 2009 at 09:40:06AM +0200, Gerd Hoffmann wrote: > > Or does it mean we must emulate a more recent chipset? > > > That too will work. Note that if you change the chipset, it'll break some existing Windows VMs. I had this problem when porting a Windows Server 2003 VM from Virtual PC to QEMU: Virtual PC emulates a PIIX4, while QEMU provides a PIIX3 (even though there's a PIIX4 in the source code, it's not used for PC emulation). The ported image would not boot because of the change of chipset, until I patched the registry to accomodate the change. It will be the same the other way: When some Windows VMs see a change from PIIX3 to a later chipset, they will not boot. Some Windows VMs don't care as much. XP seems to be more like Linux, in that it adapts to different devices at boot time. -- Jamie > > -- > Gleb. > > ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-27 8:18 ` Jamie Lokier @ 2009-08-27 8:24 ` Gleb Natapov 2009-08-27 8:55 ` Gerd Hoffmann 1 sibling, 0 replies; 31+ messages in thread From: Gleb Natapov @ 2009-08-27 8:24 UTC (permalink / raw) To: Jamie Lokier; +Cc: qemu-devel, Gerd Hoffmann, Avi Kivity On Thu, Aug 27, 2009 at 09:18:32AM +0100, Jamie Lokier wrote: > Gleb Natapov wrote: > > On Thu, Aug 27, 2009 at 09:40:06AM +0200, Gerd Hoffmann wrote: > > > Or does it mean we must emulate a more recent chipset? > > > > > That too will work. > > > Note that if you change the chipset, it'll break some existing Windows VMs. > I don't think it worth changing chipset just to solve irq routing problem. And PIIX4 is the same as PIIX3 in regards to pci irq routing. > I had this problem when porting a Windows Server 2003 VM from Virtual > PC to QEMU: Virtual PC emulates a PIIX4, while QEMU provides a PIIX3 > (even though there's a PIIX4 in the source code, it's not used for PC > emulation). The ported image would not boot because of the change of > chipset, until I patched the registry to accomodate the change. > > It will be the same the other way: When some Windows VMs see a change > from PIIX3 to a later chipset, they will not boot. > > Some Windows VMs don't care as much. XP seems to be more like Linux, > in that it adapts to different devices at boot time. > > -- Jamie > > > > > > > > -- > > Gleb. > > > > -- Gleb. ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-27 8:18 ` Jamie Lokier 2009-08-27 8:24 ` Gleb Natapov @ 2009-08-27 8:55 ` Gerd Hoffmann 2009-08-27 10:35 ` Isaku Yamahata 2009-08-27 21:07 ` [Qemu-devel] " Bjørn Mork 1 sibling, 2 replies; 31+ messages in thread From: Gerd Hoffmann @ 2009-08-27 8:55 UTC (permalink / raw) To: Jamie Lokier; +Cc: qemu-devel, Gleb Natapov, Avi Kivity On 08/27/09 10:18, Jamie Lokier wrote: > Gleb Natapov wrote: >> On Thu, Aug 27, 2009 at 09:40:06AM +0200, Gerd Hoffmann wrote: >>> Or does it mean we must emulate a more recent chipset? >>> >> That too will work. > > > Note that if you change the chipset, it'll break some existing Windows VMs. I think we would rather *add* a new machine type with a new chipset, not *replace* the piix3. IIRC someone is already working on emulation something more recent (ICH9?) to get some modern stuff, so that will probably get us some more ioapic lines. > I had this problem when porting a Windows Server 2003 VM from Virtual > PC to QEMU: Virtual PC emulates a PIIX4, while QEMU provides a PIIX3 > (even though there's a PIIX4 in the source code, it's not used for PC > emulation). The ported image would not boot because of the change of > chipset, until I patched the registry to accomodate the change. Any hints where do dig in the registy? I have a dead notebook with xp (disk still ok), trying to boot the disk image in kvm, and of course it doesn't work due to the hardware being different. Googleing the STOP code printed on the blue screen hinted that xp fails to access the hard drive ... It is a 5-year old intel laptop, so it probably is something like moving from ICH6 to PIIX3 ... thanks, Gerd ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-27 8:55 ` Gerd Hoffmann @ 2009-08-27 10:35 ` Isaku Yamahata 2009-08-27 21:07 ` [Qemu-devel] " Bjørn Mork 1 sibling, 0 replies; 31+ messages in thread From: Isaku Yamahata @ 2009-08-27 10:35 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: qemu-devel, Gleb Natapov, Avi Kivity On Thu, Aug 27, 2009 at 10:55:54AM +0200, Gerd Hoffmann wrote: > On 08/27/09 10:18, Jamie Lokier wrote: > >Gleb Natapov wrote: > >>On Thu, Aug 27, 2009 at 09:40:06AM +0200, Gerd Hoffmann wrote: > >>> Or does it mean we must emulate a more recent chipset? > >>> > >>That too will work. > > > > > >Note that if you change the chipset, it'll break some existing Windows VMs. > > I think we would rather *add* a new machine type with a new chipset, not > *replace* the piix3. IIRC someone is already working on emulation > something more recent (ICH9?) to get some modern stuff, so that will > probably get us some more ioapic lines. Yes, I'm working on q35 (gmch, ich9) chipset emulators. I'm planning to post the (unfinished) updated patches soon for review once I finish debugging MMCONFIG access. I also wanted IOAPIC and more IRQs as ich9 supports 8 IRQs (IRQ A-H). Possibly I will switch from q35 to x58(ICH10) for PCIe hotplug however I don't have x58 based real machine at hand... -- yamahata ^ permalink raw reply [flat|nested] 31+ messages in thread
* [Qemu-devel] Re: [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-27 8:55 ` Gerd Hoffmann 2009-08-27 10:35 ` Isaku Yamahata @ 2009-08-27 21:07 ` Bjørn Mork 1 sibling, 0 replies; 31+ messages in thread From: Bjørn Mork @ 2009-08-27 21:07 UTC (permalink / raw) To: qemu-devel Gerd Hoffmann <kraxel@redhat.com> writes: > Any hints where do dig in the registy? I have a dead notebook with xp > (disk still ok), trying to boot the disk image in kvm, and of course > it doesn't work due to the hardware being different. Googleing the > STOP code printed on the blue screen hinted that xp fails to access > the hard drive ... Is this the info you are looking for? http://support.microsoft.com/kb/314082 I recently went through this, using chntpw to edit the registry on the disk image and eventually getting it to boot. Also had to add the intelide.sys driver as my image lacked this for some reason. Bjørn ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-26 16:30 ` Gerd Hoffmann 2009-08-26 19:09 ` Gleb Natapov @ 2009-08-27 4:53 ` Avi Kivity 2009-08-27 7:35 ` Gerd Hoffmann 1 sibling, 1 reply; 31+ messages in thread From: Avi Kivity @ 2009-08-27 4:53 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: qemu-devel On 08/26/2009 07:30 PM, Gerd Hoffmann wrote: > On 08/26/09 18:06, Avi Kivity wrote: >> On 08/26/2009 07:03 PM, Gerd Hoffmann wrote: >>> Now we probably need some acpi magic to tell the guest OS that there >>> are a few more IRQ lines? >> >> I wanted to route the PCI IRQs to those lines (and have eight links >> instead of four). > > Right now we have IRQs 5,10,11 for PCI. Having one more IRQ (so we > have one for each link) would be useful IMHO. eight links + eight > irqs would be even more useful. What needs to be done for that? > > BTW: Seems linux doesn't use IRQ 5 even with lots of PCI devices, > instead it makes them share 10+11 ... We could change the defaults to include 5, but maybe it makes more sense to fix Linux to distribute active PCI IRQs across the resources it has at its disposal. > >> Now I don't think it's worthwhile, as every guest that >> is interesting from a performance point of view has MSI support. > > Not all emulated devices have MSI support though ... They'll be slow regardless. I should be easy to support msi on e1000 though. -- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain. ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-27 4:53 ` [Qemu-devel] " Avi Kivity @ 2009-08-27 7:35 ` Gerd Hoffmann 2009-08-27 7:57 ` Avi Kivity 0 siblings, 1 reply; 31+ messages in thread From: Gerd Hoffmann @ 2009-08-27 7:35 UTC (permalink / raw) To: Avi Kivity; +Cc: qemu-devel >> BTW: Seems linux doesn't use IRQ 5 even with lots of PCI devices, >> instead it makes them share 10+11 ... > > We could change the defaults to include 5, but maybe it makes more sense > to fix Linux to distribute active PCI IRQs across the resources it has > at its disposal. i.e. Linux decides to stick with the defaults (starred) here ... ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11) ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11) ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11) ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11) ... instead of trying to minimize IRQ sharing by using IRQ 5? > They'll be slow regardless. I should be easy to support msi on e1000 > though. What is needed on the guest side? Looks like even 2.6.30 doesn't use MSI for virtio-net ... cheers, Gerd ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-27 7:35 ` Gerd Hoffmann @ 2009-08-27 7:57 ` Avi Kivity 2009-08-27 8:13 ` Gerd Hoffmann 0 siblings, 1 reply; 31+ messages in thread From: Avi Kivity @ 2009-08-27 7:57 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: qemu-devel On 08/27/2009 10:35 AM, Gerd Hoffmann wrote: >>> BTW: Seems linux doesn't use IRQ 5 even with lots of PCI devices, >>> instead it makes them share 10+11 ... >> >> We could change the defaults to include 5, but maybe it makes more sense >> to fix Linux to distribute active PCI IRQs across the resources it has >> at its disposal. > > i.e. Linux decides to stick with the defaults (starred) here ... > > ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] > ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11) > ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11) > ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11) > ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11) > > ... instead of trying to minimize IRQ sharing by using IRQ 5? Yes. And if it turns out you have two active devices and 6 inactive devices, move the two active devices to private lines and pile up the inactive ones on the leftover. > >> They'll be slow regardless. I should be easy to support msi on e1000 >> though. > > What is needed on the guest side? Looks like even 2.6.30 doesn't use > MSI for virtio-net ... virtio msi support was merged in 2.6.31. For e1000, guest support is presumably there, just need to wire it into the device. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-27 7:57 ` Avi Kivity @ 2009-08-27 8:13 ` Gerd Hoffmann 2009-08-27 8:26 ` Avi Kivity 0 siblings, 1 reply; 31+ messages in thread From: Gerd Hoffmann @ 2009-08-27 8:13 UTC (permalink / raw) To: Avi Kivity; +Cc: qemu-devel On 08/27/09 09:57, Avi Kivity wrote: >> What is needed on the guest side? Looks like even 2.6.30 doesn't use >> MSI for virtio-net ... > > virtio msi support was merged in 2.6.31. For e1000, guest support is > presumably there, just need to wire it into the device. lspci shows MSI (not MSI-X) capability for the e1000 in my laptop. It is not enabled. dmesg has this line though: 0000:02:00.0: 0000:02:00.0: Failed to initialize MSI interrupts. Falling back to legacy interrupts. so the driver at least tried to enable MSI ... cheers Gerd ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-27 8:13 ` Gerd Hoffmann @ 2009-08-27 8:26 ` Avi Kivity 0 siblings, 0 replies; 31+ messages in thread From: Avi Kivity @ 2009-08-27 8:26 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: qemu-devel On 08/27/2009 11:13 AM, Gerd Hoffmann wrote: > On 08/27/09 09:57, Avi Kivity wrote: >>> What is needed on the guest side? Looks like even 2.6.30 doesn't use >>> MSI for virtio-net ... >> >> virtio msi support was merged in 2.6.31. For e1000, guest support is >> presumably there, just need to wire it into the device. > > lspci shows MSI (not MSI-X) capability for the e1000 in my laptop. It > is not enabled. dmesg has this line though: > > 0000:02:00.0: 0000:02:00.0: Failed to initialize MSI interrupts. > Falling back to legacy interrupts. > > so the driver at least tried to enable MSI ... You probably need chipset support. I recommend drop that laptop and running exclusively in VMs. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-26 16:06 ` Avi Kivity 2009-08-26 16:30 ` Gerd Hoffmann @ 2009-08-28 2:20 ` Beth Kon 2009-08-29 17:47 ` Avi Kivity 1 sibling, 1 reply; 31+ messages in thread From: Beth Kon @ 2009-08-28 2:20 UTC (permalink / raw) To: Avi Kivity; +Cc: Gerd Hoffmann, qemu-devel Avi Kivity wrote: > On 08/26/2009 07:03 PM, Gerd Hoffmann wrote: >> On 08/09/09 18:44, Avi Kivity wrote: >>> Instead of calling the IOAPIC from the PIC, raise IOAPIC irqs via >>> the ISA bus. >>> As a side effect, IOAPIC lines 16-23 are enabled. >> >> Now we probably need some acpi magic to tell the guest OS that there >> are a few more IRQ lines? >> > > I wanted to route the PCI IRQs to those lines (and have eight links > instead of four). Now I don't think it's worthwhile, as every guest > that is interesting from a performance point of view has MSI support. > > So I think we should just leave these lines as is, terminated with a > 4.7K resistor to avoid picking up noise. > I was thinking of the HPET advertising one or more of these new ioapic interrupts so that it could support non-legacy operation. It can't at the moment because there are no interrupt lines available. I haven't looked into the details of what would remain to be done to make this happen, but does it sound reasonable? Sounds like at a minimum acpi needs some work. ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-28 2:20 ` Beth Kon @ 2009-08-29 17:47 ` Avi Kivity 2009-08-30 2:09 ` Beth Kon 0 siblings, 1 reply; 31+ messages in thread From: Avi Kivity @ 2009-08-29 17:47 UTC (permalink / raw) To: Beth Kon; +Cc: Gerd Hoffmann, qemu-devel On 08/28/2009 05:20 AM, Beth Kon wrote: > I was thinking of the HPET advertising one or more of these new ioapic > interrupts so that it could support non-legacy operation. It can't at > the moment because there are no interrupt lines available. I haven't > looked into the details of what would remain to be done to make this > happen, but does it sound reasonable? Sounds like at a minimum acpi > needs some work. What does non-legacy HPET buy us? -- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain. ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus 2009-08-29 17:47 ` Avi Kivity @ 2009-08-30 2:09 ` Beth Kon 0 siblings, 0 replies; 31+ messages in thread From: Beth Kon @ 2009-08-30 2:09 UTC (permalink / raw) To: Avi Kivity; +Cc: Andriy Gapon, Gerd Hoffmann, qemu-devel Avi Kivity wrote: > On 08/28/2009 05:20 AM, Beth Kon wrote: >> I was thinking of the HPET advertising one or more of these new >> ioapic interrupts so that it could support non-legacy operation. It >> can't at the moment because there are no interrupt lines available. I >> haven't looked into the details of what would remain to be done to >> make this happen, but does it sound reasonable? Sounds like at a >> minimum acpi needs some work. > > What does non-legacy HPET buy us? > Actually, it looks like not much. I was thinking about users of /dev/hpet, but there really don't seem to be any. I found posts talking about deprecating the hpet ioctl interface due to availability of POSIX timers, so it doesn't look like anything is on the horizon. Right now, linux has no HPET requirements that aren't handled by timers 0 and 1 that are currently implemented for qemu/kvm, and as far as I can tell, Windows has no such need either. But, to be precise, even if the HPET runs in legacy mode, the standard hardware implementation as I understand it has a third timer available that is not involved with legacy operation. Because there were no spare interrupts around, I recently submitted patches to remove that third timer (that doesn't appear to be used anywhere). When I saw the possible availability of more APIC interrupt lines, I thought about using that for at least this third timer. The above thoughts came about after Andriy Gapon brought up some issues with available HPET interrupts. Andriy, do you have anything to add here about potential use of a third timer or non-legacy mode? Right now I'm inclined to think there isn't much use, and limiting HPET to legacy mode would be fine. ^ permalink raw reply [flat|nested] 31+ messages in thread
end of thread, other threads:[~2009-08-30 2:09 UTC | newest] Thread overview: 31+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-08-09 16:44 [Qemu-devel] [PATCH 0/2] Disentagle ISA IRQs Avi Kivity 2009-08-09 16:44 ` [Qemu-devel] [PATCH 1/2] Route PC irqs to ISA bus instead of i8259 directly Avi Kivity 2009-08-10 8:34 ` Gerd Hoffmann 2009-08-10 8:46 ` Avi Kivity 2009-08-10 9:04 ` Alexander Graf 2009-08-10 9:43 ` Avi Kivity 2009-08-10 9:45 ` Stefan Assmann 2009-08-10 9:52 ` Avi Kivity 2009-08-10 13:20 ` Olaf Dabrunz 2009-08-10 13:14 ` Olaf Dabrunz 2009-08-09 16:44 ` [Qemu-devel] [PATCH 2/2] Route IOAPIC interrupts via ISA bus Avi Kivity 2009-08-10 8:38 ` Gerd Hoffmann 2009-08-26 16:03 ` Gerd Hoffmann 2009-08-26 16:06 ` Avi Kivity 2009-08-26 16:30 ` Gerd Hoffmann 2009-08-26 19:09 ` Gleb Natapov 2009-08-27 7:40 ` Gerd Hoffmann 2009-08-27 7:57 ` Gleb Natapov 2009-08-27 8:18 ` Jamie Lokier 2009-08-27 8:24 ` Gleb Natapov 2009-08-27 8:55 ` Gerd Hoffmann 2009-08-27 10:35 ` Isaku Yamahata 2009-08-27 21:07 ` [Qemu-devel] " Bjørn Mork 2009-08-27 4:53 ` [Qemu-devel] " Avi Kivity 2009-08-27 7:35 ` Gerd Hoffmann 2009-08-27 7:57 ` Avi Kivity 2009-08-27 8:13 ` Gerd Hoffmann 2009-08-27 8:26 ` Avi Kivity 2009-08-28 2:20 ` Beth Kon 2009-08-29 17:47 ` Avi Kivity 2009-08-30 2:09 ` Beth Kon
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).