From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from felloff.net ([199.191.58.38]) by pp; Sat Feb 21 06:51:47 EST 2015 Message-ID: <21f8ac56c3ec66454834bd0d850220e3@felloff.net> List-ID: <9front.9front.org> X-Glyph: ➈ X-Bullshit: transactional distributed general-purpose API Date: Sat, 21 Feb 2015 12:51:29 +0100 From: cinap_lenrek@felloff.net To: 9front@9front.org Subject: Re: [9front] 9front on Xen 4.4 HVM In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit well, that sounds like a interrupt problem indeed. when you send packets, all the driver does is to put packets in transmit ring and optionally kick the card with some register that it should start transmitting. but receiving works by the card issuing a interrupt and then the driver looks in the receive ring if there are new packets from the card. if interrupt couldnt be enabled (because if broken mp tables), then we wont receive anything. but sending might still work because it doesnt need an interrupt. the relation with mp is that mp systems use the apic interrupt controller instead of the legacy pic controller (it is mandatory as you need to use the apic to bootstrap the other processors). enabling interrupt on pic is easy. you read the irq register from the pci config space (that the bios programmed for you)... sometimes, pci interrupt router needs to be programmed. apic is a bit more complicated than pic because there can be multiple apic controllers (and multiple processors/lapic's) and we require tables (from bios) to find the mapping from pci bus interrupt lines to the apics (which can then be programmed to send interrupts to the lapics/processors). and then theres msi interrupts that *some* devices support that do not require any tables. you program register in pci config space for the device and you'r done. this also works only with apic. when you specify *acpi= in plan9.ini, then the kernel will use the acpi tables instead of the mp tables. when you use *nomp=, then we will use legacy pic interrupt controller and only one cpu can be used (this is also what happens when we cannot find mp table). -- cinap