diff options
author | Avi Kivity <avi@redhat.com> | 2009-12-20 12:22:03 +0200 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2009-12-20 12:22:03 +0200 |
commit | 5d594a6c22d4ecbcc8ebdaf3b537173116663c19 (patch) | |
tree | 9d428505772eb0046127669ed249e0c7ec3a30d9 /hw | |
parent | Remove pcbios subdirectory (diff) | |
parent | Revert "pci: interrupt disable bit support" (diff) | |
download | qemu-kvm-5d594a6c22d4ecbcc8ebdaf3b537173116663c19.tar.gz qemu-kvm-5d594a6c22d4ecbcc8ebdaf3b537173116663c19.tar.bz2 qemu-kvm-5d594a6c22d4ecbcc8ebdaf3b537173116663c19.zip |
Merge commit '686a3c3dc235df2492e754423799d1abe4f6d9e2' into stable-0.12-merge
* commit '686a3c3dc235df2492e754423799d1abe4f6d9e2':
Revert "pci: interrupt disable bit support"
target-ppc: fix ppc32 kvm build
S390: Bail out without KVM
S390: Don't tell guest we're updating config space
add default virtcon initialization
S390: Loop through virtio console devices
target-s390: Fail on unknown instructions
osdep: Fix runtime failure on older Linux kernels
Fix a make -j race
target-alpha: Fix generic ctz64.
s390: Fix buggy assignment
target-mips: fix user-mode emulation startup
Conflicts:
hw/pci.c
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/pci.c | 29 | ||||
-rw-r--r-- | hw/pci.h | 1 | ||||
-rw-r--r-- | hw/s390-virtio-bus.c | 2 | ||||
-rw-r--r-- | hw/s390-virtio.c | 15 |
4 files changed, 16 insertions, 31 deletions
@@ -571,8 +571,7 @@ static void pci_init_wmask(PCIDevice *dev) dev->wmask[PCI_CACHE_LINE_SIZE] = 0xff; dev->wmask[PCI_INTERRUPT_LINE] = 0xff; pci_set_word(dev->wmask + PCI_COMMAND, - PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | - PCI_COMMAND_INTX_DISABLE); + PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER); memset(dev->wmask + PCI_CONFIG_HEADER_SIZE, 0xff, config_size - PCI_CONFIG_HEADER_SIZE); @@ -997,25 +996,6 @@ static void pci_update_mappings(PCIDevice *d) } } -static inline int pci_irq_disabled(PCIDevice *d) -{ - return pci_get_word(d->config + PCI_COMMAND) & PCI_COMMAND_INTX_DISABLE; -} - -/* Called after interrupt disabled field update in config space, - * assert/deassert interrupts if necessary. - * Gets original interrupt disable bit value (before update). */ -static void pci_update_irq_disabled(PCIDevice *d, int was_irq_disabled) -{ - int i, disabled = pci_irq_disabled(d); - if (disabled == was_irq_disabled) - return; - for (i = 0; i < PCI_NUM_PINS; ++i) { - int state = pci_irq_state(d, i); - pci_change_irq_level(d, i, disabled ? -state : state); - } -} - static uint32_t pci_read_config(PCIDevice *d, uint32_t address, int len) { @@ -1070,7 +1050,7 @@ void pci_default_cap_write_config(PCIDevice *pci_dev, void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int l) { - int i, was_irq_disabled = pci_irq_disabled(d); + int i; uint32_t config_size = pci_config_size(d); if (pci_access_cap_config(d, addr, l)) { @@ -1095,9 +1075,6 @@ void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int l) ranges_overlap(addr, l, PCI_ROM_ADDRESS1, 4) || range_covers_byte(addr, l, PCI_COMMAND)) pci_update_mappings(d); - - if (range_covers_byte(addr, l, PCI_COMMAND)) - pci_update_irq_disabled(d, was_irq_disabled); } /***********************************************************/ @@ -1119,8 +1096,6 @@ static void pci_set_irq(void *opaque, int irq_num, int level) pci_set_irq_state(pci_dev, irq_num, level); pci_update_irq_status(pci_dev); - if (pci_irq_disabled(pci_dev)) - return; pci_change_irq_level(pci_dev, irq_num, change); } @@ -112,7 +112,6 @@ typedef struct PCIIORegion { #define PCI_COMMAND_IO 0x1 /* Enable response in I/O space */ #define PCI_COMMAND_MEMORY 0x2 /* Enable response in Memory space */ #define PCI_COMMAND_MASTER 0x4 /* Enable bus master */ -#define PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */ #define PCI_STATUS 0x06 /* 16 bits */ #define PCI_STATUS_INTERRUPT 0x08 #define PCI_REVISION_ID 0x08 /* 8 bits */ diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c index 493e4dae4..dc154edb8 100644 --- a/hw/s390-virtio-bus.c +++ b/hw/s390-virtio-bus.c @@ -307,7 +307,7 @@ static void virtio_s390_notify(void *opaque, uint16_t vector) uint64_t token = s390_virtio_device_vq_token(dev, vector); /* XXX kvm dependency! */ - kvm_s390_virtio_irq(s390_cpu_addr2state(0), 1, token); + kvm_s390_virtio_irq(s390_cpu_addr2state(0), 0, token); } /**************** S390 Virtio Bus Device Descriptions *******************/ diff --git a/hw/s390-virtio.c b/hw/s390-virtio.c index b56788652..0fa6ba68c 100644 --- a/hw/s390-virtio.c +++ b/hw/s390-virtio.c @@ -142,6 +142,13 @@ static void s390_init(ram_addr_t ram_size, ram_addr_t initrd_size = 0; int i; + /* XXX we only work on KVM for now */ + + if (!kvm_enabled()) { + fprintf(stderr, "The S390 target only works with KVM enabled\n"); + exit(1); + } + /* get a BUS */ s390_bus = s390_virtio_bus_init(&ram_size); @@ -201,7 +208,11 @@ static void s390_init(ram_addr_t ram_size, } /* Create VirtIO console */ - qdev_init_nofail(qdev_create((BusState *)s390_bus, "virtio-console-s390")); + for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) { + if (virtcon_hds[i]) { + qdev_init_nofail(qdev_create((BusState *)s390_bus, "virtio-console-s390")); + } + } /* Create VirtIO network adapters */ for(i = 0; i < nb_nics; i++) { @@ -209,7 +220,7 @@ static void s390_init(ram_addr_t ram_size, DeviceState *dev; if (!nd->model) { - nd->model = (char*)"virtio"; + nd->model = qemu_strdup("virtio"); } if (strcmp(nd->model, "virtio")) { |