summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* lguest: support emerg_wr in console device in example launcher.Rusty Russell2015-02-111-3/+14
| | | | | | | This is a magic register which causes a character to be outputted: it can be used even before the device is configured. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: remove lguest bus definitions from header.Rusty Russell2015-02-111-47/+2
| | | | Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: remove support for lguest bus in demonstration launcher.Rusty Russell2015-02-111-333/+22
| | | | Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: remove support for lguest bus.Rusty Russell2015-02-112-543/+0
| | | | | | The demonstration launcher now uses PCI entirely. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: define VIRTIO_CONFIG_NO_LEGACY in example launcher.Rusty Russell2015-02-111-0/+1
| | | | | | We only support virtio 1.0 now Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: Convert console device to virtio 1.0 PCI.Rusty Russell2015-02-111-7/+7
| | | | Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: Convert entropy device to virtio 1.0 PCI.Rusty Russell2015-02-111-5/+7
| | | | Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: Convert net device to virtio 1.0 PCI.Rusty Russell2015-02-111-20/+28
| | | | | | | | | The only real change here (other than using the PCI bus) is that we didn't negotiate VIRTIO_NET_F_MRG_RXBUF before, so the format of the packet header changed with virtio 1.0; we need TUNSETVNETHDRSZ on the tun fd to tell it about the extra two bytes. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: Convert block device to virtio 1.0 PCI.Rusty Russell2015-02-111-21/+9
| | | | | | | | | We remove SCSI support (which was removed for 1.0) and VIRTIO_BLK_F_FLUSH feature flag (removed too, since it's compulsory for 1.0). The rest is mainly mechanical. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: add a dummy PCI host bridge.Rusty Russell2015-02-111-0/+14
| | | | | | Otherwise Linux fails to find the bus. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: fix failure to find linux/virtio_types.hRusty Russell2015-02-111-1/+7
| | | | | | | | | | | | We want to use the local kernel headers, but -I../../include/uapi leads us into a world of hurt. Instead we create a dummy include/ dir with symlinks. If we just use #include "../../include/uapi/linux/virtio_blk.h" we get: ../../include/uapi/linux/virtio_blk.h:31:32: fatal error: linux/virtio_types.h: No such file or directory #include <linux/virtio_types.h> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: implement virtio-PCI MMIO accesses.Rusty Russell2015-02-111-2/+490
| | | | | | | | | | For each device, We need to include the vendor capabilities to demark where virtio common, notification and ISR regions are (we put them all in BAR0). We need to handle the switching of the virtqueues using the accessors. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: add PCI config space emulation to example launcher.Rusty Russell2015-02-111-5/+211
| | | | | | | This handles ioport 0xCF8 and 0xCFC accesses, which are used to read/write PCI device config space. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: decode mmio accesses for PCI in example launcher.Rusty Russell2015-02-111-0/+167
| | | | | | | | We don't do anything with them yet (emulate_mmio_write and emulate_mmio_read are stubs), but we decode the instructions and search for the device they're hitting. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: add MMIO region allocator in example launcher.Rusty Russell2015-02-111-5/+23
| | | | | | | | This is where we point our PCI BARs, so that we can intercept MMIO accesses. We tell the kernel about it so any faults in this area are directed to us. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: Override pcibios_enable_irq/pcibios_disable_irq to our stupid PICRusty Russell2015-02-111-0/+24
| | | | | | | This lets us deliver interrupts for our emulated PCI devices using our dumb PIC, and not emulate an 8259 and PCI irq mapping tables or whatever. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: disable ACPI explicitly.Rusty Russell2015-02-111-0/+4
| | | | | | Once we add PCI, it starts trying to manage our interrupts. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: add iomem region, where guest page faults get sent to userspace.Rusty Russell2015-02-115-7/+58
| | | | | | This lets us implement PCI. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: don't disable iospace.Rusty Russell2015-02-111-8/+0
| | | | | | | This no longer speeds up boot (IDE got better, I guess), but it does stop us probing for a PCI bus. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: suppress PS/2 keyboard polling.Rusty Russell2015-02-111-0/+4
| | | | | | | | | While hacking on getting I/O out to the lguest launcher, I noticed that returning 0xFF for the PS/2 keyboard status made it spin for a while thinking there was a key pending. Fix this by returning 1 instead of 0xFF. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: send trap 13 through to userspace.Rusty Russell2015-02-112-90/+192
| | | | | | | | | | | We copy 7 bytes at eip for userspace's instruction decode; we have to carefully handle the case where eip is at the end of a page. We can't leave this to userspace since kernel has all the page table decode logic. The decode logic moves to userspace, basically unchanged. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: add infrastructure to check mappings.Rusty Russell2015-02-112-13/+30
| | | | | | | We normally abort the guest unconditionally when it gives us a bad address, but in the next patch we want to copy some bytes which may not be mapped. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: add infrastructure for userspace to deliver a trap to the guest.Rusty Russell2015-02-112-0/+20
| | | | | | This is required for instruction emulation to move to userspace. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: write more information to userspace about pending traps.Rusty Russell2015-02-116-18/+42
| | | | | | This is preparation for userspace handling MMIO and ioport accesses. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: add operations to get/set a register from the Launcher.Rusty Russell2015-02-115-0/+108
| | | | | | | We use the ptrace API struct, and we currently don't let them set anything but the normal registers (we'd have to filter the others). Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* lguest: have --rng read from /dev/urandom not /dev/random.Rusty Russell2015-02-111-5/+5
| | | | | | Theoretical debates aside, now it boots. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio: don't require a config space on the console device.Rusty Russell2015-02-111-1/+4
| | | | | | Strictly, it's only needed when we have features (size or multiport). Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_pci: use 16-bit accessor for queue_enable.Rusty Russell2015-02-111-2/+2
| | | | | | | | | | | | | | Since PCI is little endian, 8-bit access might work, but the spec section is very clear on this: 4.1.3.1 Driver Requirements: PCI Device Layout The driver MUST access each field using the “natural” access method, i.e. 32-bit accesses for 32-bit fields, 16-bit accesses for 16-bit fields and 8-bit accesses for 8-bit fields. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Acked-by: Michael S. Tsirkin <mst@redhat.com>
* virtio: Don't expose legacy config features when VIRTIO_CONFIG_NO_LEGACY ↵Rusty Russell2015-02-111-0/+2
| | | | | | | | | | defined. The VIRTIO_F_ANY_LAYOUT and VIRTIO_F_NOTIFY_ON_EMPTY features are pre-1.0 only. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Acked-by: Michael S. Tsirkin <mst@redhat.com>
* virtio: Don't expose legacy block features when VIRTIO_BLK_NO_LEGACY defined.Rusty Russell2015-02-111-4/+13
| | | | | | | | This allows modern implementations to ensure they don't use legacy feature bits or SCSI commands (which are not used in v1.0 non-legacy). Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Acked-by: Michael S. Tsirkin <mst@redhat.com>
* virtio: define VIRTIO_PCI_CAP_PCI_CFG in header.Rusty Russell2015-02-111-1/+3
| | | | | | | | | | | | This provides backdoor access to the device MMIOs, and every device should have one. From the virtio 1.0 spec (CS03): 4.1.4.7.1 Device Requirements: PCI configuration access capability The device MUST present at least one VIRTIO_PCI_CAP_PCI_CFG capability. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Acked-by: Michael S. Tsirkin <mst@redhat.com>
* virtio: Avoid possible kernel panic if DEBUG is enabled.Tetsuo Handa2015-02-111-3/+3
| | | | | | | | | | | The virtqueue_add() calls START_USE() upon entry. The virtqueue_kick() is called if vq->num_added == (1 << 16) - 1 before calling END_USE(). The virtqueue_kick_prepare() called via virtqueue_kick() calls START_USE() upon entry, and will call panic() if DEBUG is enabled. Move this virtqueue_kick() call to after END_USE() call. Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio-mmio: Update the device to OASIS spec versionPawel Moll2015-01-232-57/+118
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch add a support for second version of the virtio-mmio device, which follows OASIS "Virtual I/O Device (VIRTIO) Version 1.0" specification. Main changes: 1. The control register symbolic names use the new device/driver nomenclature rather than the old guest/host one. 2. The driver detect the device version (version 1 is the pre-OASIS spec, version 2 is compatible with fist revision of the OASIS spec) and drives the device accordingly. 3. New version uses direct addressing (64 bit address split into two low/high register) instead of the guest page size based one, and addresses each part of the queue (descriptors, available, used) separately. 4. The device activity is now explicitly triggered by writing to the "queue ready" register. 5. Whole 64 bit features are properly handled now (both ways). Signed-off-by: Pawel Moll <pawel.moll@arm.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_pci_modern: drop an unused functionMichael S. Tsirkin2015-01-211-8/+0
| | | | | | | | release function in modern driver is unused: it's a left-over from when each driver had to have its own release. Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
* virtio_pci: add module param to force legacy modeMichael S. Tsirkin2015-01-211-4/+21
| | | | | | | | If set, try legacy interface first, modern one if that fails. Useful to work around device/driver bugs, and for compatibility testing. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_pci: add an option to disable legacy driverMichael S. Tsirkin2015-01-213-1/+31
| | | | | | | | | Useful for testing device virtio 1 compatibility. Based on patch by Rusty - couldn't resist putting that flying car joke in there! Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_pci: drop Kconfig warningsMichael S. Tsirkin2015-01-211-3/+0
| | | | | | | | | The ABI *is* stable, and has been for a while now. Drop Kconfig warning saying that it's not guaranteed to work. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_pci: Kconfig grammar fixMichael S. Tsirkin2015-01-211-1/+1
| | | | | | | This drivers -> this driver. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_rng: drop extra empty lineMichael S. Tsirkin2015-01-211-1/+0
| | | | | | | makes code look a bit prettier. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_ring: coding style fixMichael S. Tsirkin2015-01-211-2/+1
| | | | | | | | | | | Most of our code has struct foo { } Fix one instances where ring is inconsistent. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_blk: coding style fixesMichael S. Tsirkin2015-01-211-4/+2
| | | | | | | | | | | Most of our code has struct foo { } Fix two instances where blk is inconsistent. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_balloon: coding style fixesMichael S. Tsirkin2015-01-212-4/+2
| | | | | | | | | | | Most of our code has struct foo { } Fix two instances where balloon is inconsistent. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_pci_modern: support devices with no configMichael S. Tsirkin2015-01-211-2/+19
| | | | | | | | | Virtio 1.0 spec lists device config as optional. Set get/set callbacks to NULL. Drivers can check that and fail gracefully. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_pci_modern: reduce number of mappingsMichael S. Tsirkin2015-01-212-8/+52
| | | | | | | | | | | We don't know the # of VQs that drivers are going to use so it's hard to predict how much memory we'll need to map. However, the relevant capability does give us an upper limit. If that's below a page, we can reduce the number of required mappings by mapping it all once ahead of the time. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_pci: macros for PCI layout offsetsRusty Russell2015-01-212-6/+90
| | | | | | | QEMU wants it, so why not? Trust, but verify. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
* virtio_pci: modern driverMichael S. Tsirkin2015-01-215-10/+625
| | | | | | | | | | | | | | | | Lightly tested against qemu. One thing *not* implemented here is separate mappings for descriptor/avail/used rings. That's nice to have, will be done later after we have core support. This also exposes the PCI layout to userspace, and adds macros for PCI layout offsets: QEMU wants it, so why not? Trust, but verify. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
* virtio-pci: define layout for virtio 1.0Rusty Russell2015-01-211-0/+62
| | | | | | | | | Based on patches by Michael S. Tsirkin <mst@redhat.com>, but I found it hard to follow so changed to use structures which are more self-documenting. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
* virtio_pci: move probe/remove code to commonMichael S. Tsirkin2015-01-213-72/+77
| | | | | | | | Most of initialization is device-independent. Let's move it to common. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* virtio_pci: drop useless del_vqs callSasha Levin2015-01-211-1/+0
| | | | | | | | | | Device VQs were getting freed twice: once in every device's removal functions, and then again in virtio_pci_legacy_remove(). The ones in devices are called first, so drop the useless second call. Signed-off-by: Sasha Levin <sasha.levin@oracle.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
* s390: add pci_iomap_rangeMichael S. Tsirkin2015-01-212-7/+28
| | | | | | | | | | | | | | | Virtio drivers should map the part of the range they need, not necessarily all of it. To this end, support mapping ranges within BAR on s390. Since multiple ranges can now be mapped within a BAR, we keep track of the number of mappings created, and only clear out the mapping for a BAR when this number reaches 0. Cc: Bjorn Helgaas <bhelgaas@google.com> Cc: linux-pci@vger.kernel.org Tested-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>