qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 01/19] xen-hvm: Add trace to ioreq
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 02/19] i440fx: make types configurable at run-time Stefano Stabellini
                   ` (19 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell; +Cc: xen-devel, qemu-devel, Don Slutz, Stefano Stabellini

From: Don Slutz <dslutz@verizon.com>

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Don Slutz <dslutz@verizon.com>
---
 trace-events |    7 +++++++
 xen-hvm.c    |   21 +++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/trace-events b/trace-events
index 0a82f0c..985b041 100644
--- a/trace-events
+++ b/trace-events
@@ -936,6 +936,13 @@ xen_map_portio_range(uint32_t id, uint64_t start_addr, uint64_t end_addr) "id: %
 xen_unmap_portio_range(uint32_t id, uint64_t start_addr, uint64_t end_addr) "id: %u start: %#"PRIx64" end: %#"PRIx64
 xen_map_pcidev(uint32_t id, uint8_t bus, uint8_t dev, uint8_t func) "id: %u bdf: %02x.%02x.%02x"
 xen_unmap_pcidev(uint32_t id, uint8_t bus, uint8_t dev, uint8_t func) "id: %u bdf: %02x.%02x.%02x"
+handle_ioreq(void *req, uint32_t type, uint32_t dir, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p type=%d dir=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
+handle_ioreq_read(void *req, uint32_t type, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p read type=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
+handle_ioreq_write(void *req, uint32_t type, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p write type=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
+cpu_ioreq_pio(void *req, uint32_t dir, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p pio dir=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
+cpu_ioreq_pio_read_reg(void *req, uint64_t data, uint64_t addr, uint32_t size) "I/O=%p pio read reg data=%#"PRIx64" port=%#"PRIx64" size=%d"
+cpu_ioreq_pio_write_reg(void *req, uint64_t data, uint64_t addr, uint32_t size) "I/O=%p pio write reg data=%#"PRIx64" port=%#"PRIx64" size=%d"
+cpu_ioreq_move(void *req, uint32_t dir, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p copy dir=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
 
 # xen-mapcache.c
 xen_map_cache(uint64_t phys_addr) "want %#"PRIx64
diff --git a/xen-hvm.c b/xen-hvm.c
index 0408462..d17d3f3 100644
--- a/xen-hvm.c
+++ b/xen-hvm.c
@@ -814,9 +814,14 @@ static void cpu_ioreq_pio(ioreq_t *req)
 {
     uint32_t i;
 
+    trace_cpu_ioreq_pio(req, req->dir, req->df, req->data_is_ptr, req->addr,
+                         req->data, req->count, req->size);
+
     if (req->dir == IOREQ_READ) {
         if (!req->data_is_ptr) {
             req->data = do_inp(req->addr, req->size);
+            trace_cpu_ioreq_pio_read_reg(req, req->data, req->addr,
+                                         req->size);
         } else {
             uint32_t tmp;
 
@@ -827,6 +832,8 @@ static void cpu_ioreq_pio(ioreq_t *req)
         }
     } else if (req->dir == IOREQ_WRITE) {
         if (!req->data_is_ptr) {
+            trace_cpu_ioreq_pio_write_reg(req, req->data, req->addr,
+                                          req->size);
             do_outp(req->addr, req->size, req->data);
         } else {
             for (i = 0; i < req->count; i++) {
@@ -843,6 +850,9 @@ static void cpu_ioreq_move(ioreq_t *req)
 {
     uint32_t i;
 
+    trace_cpu_ioreq_move(req, req->dir, req->df, req->data_is_ptr, req->addr,
+                         req->data, req->count, req->size);
+
     if (!req->data_is_ptr) {
         if (req->dir == IOREQ_READ) {
             for (i = 0; i < req->count; i++) {
@@ -915,11 +925,18 @@ static void handle_vmport_ioreq(XenIOState *state, ioreq_t *req)
 
 static void handle_ioreq(XenIOState *state, ioreq_t *req)
 {
+    trace_handle_ioreq(req, req->type, req->dir, req->df, req->data_is_ptr,
+                       req->addr, req->data, req->count, req->size);
+
     if (!req->data_is_ptr && (req->dir == IOREQ_WRITE) &&
             (req->size < sizeof (target_ulong))) {
         req->data &= ((target_ulong) 1 << (8 * req->size)) - 1;
     }
 
+    if (req->dir == IOREQ_WRITE)
+        trace_handle_ioreq_write(req, req->type, req->df, req->data_is_ptr,
+                                 req->addr, req->data, req->count, req->size);
+
     switch (req->type) {
         case IOREQ_TYPE_PIO:
             cpu_ioreq_pio(req);
@@ -959,6 +976,10 @@ static void handle_ioreq(XenIOState *state, ioreq_t *req)
         default:
             hw_error("Invalid ioreq type 0x%x\n", req->type);
     }
+    if (req->dir == IOREQ_READ) {
+        trace_handle_ioreq_read(req, req->type, req->df, req->data_is_ptr,
+                                req->addr, req->data, req->count, req->size);
+    }
 }
 
 static int handle_buffered_iopage(XenIOState *state)
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 02/19] i440fx: make types configurable at run-time
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 01/19] xen-hvm: Add trace to ioreq Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 03/19] pc_init1: pass parameters just with types Stefano Stabellini
                   ` (18 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell
  Cc: Tiejun Chen, xen-devel, Michael S. Tsirkin, qemu-devel,
	Stefano Stabellini

From: "Michael S. Tsirkin" <mst@redhat.com>

IGD passthrough wants to supply a different pci and
host devices, inheriting i440fx devices. Make types
configurable.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 hw/i386/pc_piix.c    |    4 +++-
 hw/pci-host/piix.c   |    9 ++++-----
 include/hw/i386/pc.h |    6 +++++-
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index b82921d..aaf7cfb 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -196,7 +196,9 @@ static void pc_init1(MachineState *machine)
     }
 
     if (pci_enabled) {
-        pci_bus = i440fx_init(&i440fx_state, &piix3_devfn, &isa_bus, gsi,
+        pci_bus = i440fx_init(TYPE_I440FX_PCI_HOST_BRIDGE,
+                              TYPE_I440FX_PCI_DEVICE,
+                              &i440fx_state, &piix3_devfn, &isa_bus, gsi,
                               system_memory, system_io, machine->ram_size,
                               pcms->below_4g_mem_size,
                               pcms->above_4g_mem_size,
diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
index 1cb25f3..e19badb 100644
--- a/hw/pci-host/piix.c
+++ b/hw/pci-host/piix.c
@@ -40,7 +40,6 @@
  * http://download.intel.com/design/chipsets/datashts/29054901.pdf
  */
 
-#define TYPE_I440FX_PCI_HOST_BRIDGE "i440FX-pcihost"
 #define I440FX_PCI_HOST_BRIDGE(obj) \
     OBJECT_CHECK(I440FXState, (obj), TYPE_I440FX_PCI_HOST_BRIDGE)
 
@@ -95,7 +94,6 @@ typedef struct PIIX3State {
 #define PIIX3_PCI_DEVICE(obj) \
     OBJECT_CHECK(PIIX3State, (obj), TYPE_PIIX3_PCI_DEVICE)
 
-#define TYPE_I440FX_PCI_DEVICE "i440FX"
 #define I440FX_PCI_DEVICE(obj) \
     OBJECT_CHECK(PCII440FXState, (obj), TYPE_I440FX_PCI_DEVICE)
 
@@ -305,7 +303,8 @@ static void i440fx_realize(PCIDevice *dev, Error **errp)
     dev->config[I440FX_SMRAM] = 0x02;
 }
 
-PCIBus *i440fx_init(PCII440FXState **pi440fx_state,
+PCIBus *i440fx_init(const char *host_type, const char *pci_type,
+                    PCII440FXState **pi440fx_state,
                     int *piix3_devfn,
                     ISABus **isa_bus, qemu_irq *pic,
                     MemoryRegion *address_space_mem,
@@ -325,7 +324,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state,
     unsigned i;
     I440FXState *i440fx;
 
-    dev = qdev_create(NULL, TYPE_I440FX_PCI_HOST_BRIDGE);
+    dev = qdev_create(NULL, host_type);
     s = PCI_HOST_BRIDGE(dev);
     b = pci_bus_new(dev, NULL, pci_address_space,
                     address_space_io, 0, TYPE_PCI_BUS);
@@ -333,7 +332,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state,
     object_property_add_child(qdev_get_machine(), "i440fx", OBJECT(dev), NULL);
     qdev_init_nofail(dev);
 
-    d = pci_create_simple(b, 0, TYPE_I440FX_PCI_DEVICE);
+    d = pci_create_simple(b, 0, pci_type);
     *pi440fx_state = I440FX_PCI_DEVICE(d);
     f = *pi440fx_state;
     f->system_memory = address_space_mem;
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index d0cad87..6edacbd 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -219,7 +219,11 @@ extern int no_hpet;
 struct PCII440FXState;
 typedef struct PCII440FXState PCII440FXState;
 
-PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix_devfn,
+#define TYPE_I440FX_PCI_HOST_BRIDGE "i440FX-pcihost"
+#define TYPE_I440FX_PCI_DEVICE "i440FX"
+
+PCIBus *i440fx_init(const char *host_type, const char *pci_type,
+                    PCII440FXState **pi440fx_state, int *piix_devfn,
                     ISABus **isa_bus, qemu_irq *pic,
                     MemoryRegion *address_space_mem,
                     MemoryRegion *address_space_io,
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
@ 2015-09-08 17:21 Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 01/19] xen-hvm: Add trace to ioreq Stefano Stabellini
                   ` (20 more replies)
  0 siblings, 21 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell; +Cc: xen-devel, qemu-devel, Stefano Stabellini

The following changes since commit 8611280505119e296757a60711a881341603fa5a:

  target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)

are available in the git repository at:

  git://xenbits.xen.org/people/sstabellini/qemu-dm.git tags/xen-2015-09-08-tag

for you to fetch changes up to ba2250ad148997b1352aba976aac66b55410e7e4:

  xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings. (2015-09-08 15:21:56 +0000)

----------------------------------------------------------------
Xen branch xen-2015-09-08

----------------------------------------------------------------
Don Slutz (1):
      xen-hvm: Add trace to ioreq

Jan Beulich (1):
      xen/HVM: atomically access pointers in bufioreq handling

Konrad Rzeszutek Wilk (7):
      xen-hvm: When using xc_domain_add_to_physmap also include errno when reporting
      xen/pt: Update comments with proper function name.
      xen/pt: Make xen_pt_msi_set_enable static
      xen/pt: xen_host_pci_config_read returns -errno, not -1 on failure
      xen: use errno instead of rc for xc_domain_add_to_physmap
      xen/pt/msi: Add the register value when printing logging and error messages
      xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings.

Michael S. Tsirkin (1):
      i440fx: make types configurable at run-time

Tiejun Chen (9):
      pc_init1: pass parameters just with types
      piix: create host bridge to passthrough
      hw/pci-assign: split pci-assign.c
      xen, gfx passthrough: basic graphics passthrough support
      xen, gfx passthrough: retrieve VGA BIOS to work
      igd gfx passthrough: create a isa bridge
      xen, gfx passthrough: register a isa bridge
      xen, gfx passthrough: register host bridge specific to passthrough
      xen, gfx passthrough: add opregion mapping

 configure                     |   28 +++++
 hw/core/machine.c             |   20 +++
 hw/i386/Makefile.objs         |    1 +
 hw/i386/kvm/pci-assign.c      |   82 ++-----------
 hw/i386/pc_piix.c             |  139 ++++++++++++++++++++-
 hw/i386/pci-assign-load-rom.c |   93 ++++++++++++++
 hw/pci-host/piix.c            |   91 +++++++++++++-
 hw/xen/Makefile.objs          |    1 +
 hw/xen/xen-host-pci-device.c  |    5 +
 hw/xen/xen-host-pci-device.h  |    1 +
 hw/xen/xen_pt.c               |   42 ++++++-
 hw/xen/xen_pt.h               |   22 +++-
 hw/xen/xen_pt_config_init.c   |   59 ++++++++-
 hw/xen/xen_pt_graphics.c      |  272 +++++++++++++++++++++++++++++++++++++++++
 hw/xen/xen_pt_msi.c           |    2 +-
 include/hw/boards.h           |    1 +
 include/hw/i386/pc.h          |    9 +-
 include/hw/pci/pci-assign.h   |   27 ++++
 include/hw/xen/xen_common.h   |   34 +++++-
 qemu-options.hx               |    3 +
 trace-events                  |    7 ++
 vl.c                          |   10 ++
 xen-hvm.c                     |   55 +++++++--
 23 files changed, 891 insertions(+), 113 deletions(-)
 create mode 100644 hw/i386/pci-assign-load-rom.c
 create mode 100644 hw/xen/xen_pt_graphics.c
 create mode 100644 include/hw/pci/pci-assign.h

^ permalink raw reply	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 03/19] pc_init1: pass parameters just with types
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 01/19] xen-hvm: Add trace to ioreq Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 02/19] i440fx: make types configurable at run-time Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 04/19] piix: create host bridge to passthrough Stefano Stabellini
                   ` (17 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell; +Cc: Tiejun Chen, xen-devel, qemu-devel, Stefano Stabellini

From: Tiejun Chen <tiejun.chen@intel.com>

Pass types to configure pc_init1().

Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/i386/pc_piix.c |   14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index aaf7cfb..626a19f 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -76,7 +76,8 @@ static bool has_reserved_memory = true;
 static bool kvmclock_enabled = true;
 
 /* PC hardware initialisation */
-static void pc_init1(MachineState *machine)
+static void pc_init1(MachineState *machine,
+                     const char *host_type, const char *pci_type)
 {
     PCMachineState *pcms = PC_MACHINE(machine);
     MemoryRegion *system_memory = get_system_memory();
@@ -196,8 +197,8 @@ static void pc_init1(MachineState *machine)
     }
 
     if (pci_enabled) {
-        pci_bus = i440fx_init(TYPE_I440FX_PCI_HOST_BRIDGE,
-                              TYPE_I440FX_PCI_DEVICE,
+        pci_bus = i440fx_init(host_type,
+                              pci_type,
                               &i440fx_state, &piix3_devfn, &isa_bus, gsi,
                               system_memory, system_io, machine->ram_size,
                               pcms->below_4g_mem_size,
@@ -416,7 +417,7 @@ static void pc_init_isa(MachineState *machine)
     }
     x86_cpu_compat_kvm_no_autoenable(FEAT_KVM, 1 << KVM_FEATURE_PV_EOI);
     enable_compat_apic_id_mode();
-    pc_init1(machine);
+    pc_init1(machine, TYPE_I440FX_PCI_HOST_BRIDGE, TYPE_I440FX_PCI_DEVICE);
 }
 
 #ifdef CONFIG_XEN
@@ -424,7 +425,7 @@ static void pc_xen_hvm_init(MachineState *machine)
 {
     PCIBus *bus;
 
-    pc_init1(machine);
+    pc_init1(machine, TYPE_I440FX_PCI_HOST_BRIDGE, TYPE_I440FX_PCI_DEVICE);
 
     bus = pci_find_primary_bus();
     if (bus != NULL) {
@@ -440,7 +441,8 @@ static void pc_xen_hvm_init(MachineState *machine)
         if (compat) { \
             compat(machine); \
         } \
-        pc_init1(machine); \
+        pc_init1(machine, TYPE_I440FX_PCI_HOST_BRIDGE, \
+                 TYPE_I440FX_PCI_DEVICE); \
     } \
     DEFINE_PC_MACHINE(suffix, name, pc_init_##suffix, optionfn)
 
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 04/19] piix: create host bridge to passthrough
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (2 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 03/19] pc_init1: pass parameters just with types Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 05/19] hw/pci-assign: split pci-assign.c Stefano Stabellini
                   ` (16 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell; +Cc: Tiejun Chen, xen-devel, qemu-devel, Stefano Stabellini

From: Tiejun Chen <tiejun.chen@intel.com>

Implement a pci host bridge specific to passthrough. Actually
this just inherits the standard one. And we also just expose
a minimal real host bridge pci configuration subset.

Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/pci-host/piix.c   |   82 ++++++++++++++++++++++++++++++++++++++++++++++++++
 include/hw/i386/pc.h |    2 ++
 2 files changed, 84 insertions(+)

diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
index e19badb..58a33fb 100644
--- a/hw/pci-host/piix.c
+++ b/hw/pci-host/piix.c
@@ -739,6 +739,87 @@ static const TypeInfo i440fx_info = {
     .class_init    = i440fx_class_init,
 };
 
+/* IGD Passthrough Host Bridge. */
+typedef struct {
+    uint8_t offset;
+    uint8_t len;
+} IGDHostInfo;
+
+/* Here we just expose minimal host bridge offset subset. */
+static const IGDHostInfo igd_host_bridge_infos[] = {
+    {0x08, 2},  /* revision id */
+    {0x2c, 2},  /* sybsystem vendor id */
+    {0x2e, 2},  /* sybsystem id */
+    {0x50, 2},  /* SNB: processor graphics control register */
+    {0x52, 2},  /* processor graphics control register */
+    {0xa4, 4},  /* SNB: graphics base of stolen memory */
+    {0xa8, 4},  /* SNB: base of GTT stolen memory */
+};
+
+static int host_pci_config_read(int pos, int len, uint32_t val)
+{
+    char path[PATH_MAX];
+    int config_fd;
+    ssize_t size = sizeof(path);
+    /* Access real host bridge. */
+    int rc = snprintf(path, size, "/sys/bus/pci/devices/%04x:%02x:%02x.%d/%s",
+                      0, 0, 0, 0, "config");
+
+    if (rc >= size || rc < 0) {
+        return -ENODEV;
+    }
+
+    config_fd = open(path, O_RDWR);
+    if (config_fd < 0) {
+        return -ENODEV;
+    }
+
+    do {
+        rc = pread(config_fd, (uint8_t *)&val, len, pos);
+    } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
+    if (rc != len) {
+        return -errno;
+    }
+
+    return 0;
+}
+
+static int igd_pt_i440fx_initfn(struct PCIDevice *pci_dev)
+{
+    uint32_t val = 0;
+    int rc, i, num;
+    int pos, len;
+
+    num = ARRAY_SIZE(igd_host_bridge_infos);
+    for (i = 0; i < num; i++) {
+        pos = igd_host_bridge_infos[i].offset;
+        len = igd_host_bridge_infos[i].len;
+        rc = host_pci_config_read(pos, len, val);
+        if (rc) {
+            return -ENODEV;
+        }
+        pci_default_write_config(pci_dev, pos, val, len);
+    }
+
+    return 0;
+}
+
+static void igd_passthrough_i440fx_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+    PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
+
+    k->init = igd_pt_i440fx_initfn;
+    dc->desc = "IGD Passthrough Host bridge";
+}
+
+static const TypeInfo igd_passthrough_i440fx_info = {
+    .name          = TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE,
+    .parent        = TYPE_I440FX_PCI_DEVICE,
+    .instance_size = sizeof(PCII440FXState),
+    .class_init    = igd_passthrough_i440fx_class_init,
+};
+
 static const char *i440fx_pcihost_root_bus_path(PCIHostState *host_bridge,
                                                 PCIBus *rootbus)
 {
@@ -780,6 +861,7 @@ static const TypeInfo i440fx_pcihost_info = {
 static void i440fx_register_types(void)
 {
     type_register_static(&i440fx_info);
+    type_register_static(&igd_passthrough_i440fx_info);
     type_register_static(&piix3_pci_type_info);
     type_register_static(&piix3_info);
     type_register_static(&piix3_xen_info);
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 6edacbd..5cda2a3 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -222,6 +222,8 @@ typedef struct PCII440FXState PCII440FXState;
 #define TYPE_I440FX_PCI_HOST_BRIDGE "i440FX-pcihost"
 #define TYPE_I440FX_PCI_DEVICE "i440FX"
 
+#define TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE "igd-passthrough-i440FX"
+
 PCIBus *i440fx_init(const char *host_type, const char *pci_type,
                     PCII440FXState **pi440fx_state, int *piix_devfn,
                     ISABus **isa_bus, qemu_irq *pic,
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 05/19] hw/pci-assign: split pci-assign.c
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (3 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 04/19] piix: create host bridge to passthrough Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 06/19] xen, gfx passthrough: basic graphics passthrough support Stefano Stabellini
                   ` (15 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell; +Cc: Tiejun Chen, xen-devel, qemu-devel, Stefano Stabellini

From: Tiejun Chen <tiejun.chen@intel.com>

We will try to reuse assign_dev_load_option_rom in xen side, and
especially its a good beginning to unify pci assign codes both on
kvm and xen in the future.

Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/i386/Makefile.objs         |    1 +
 hw/i386/kvm/pci-assign.c      |   82 ++++--------------------------------
 hw/i386/pci-assign-load-rom.c |   93 +++++++++++++++++++++++++++++++++++++++++
 include/hw/pci/pci-assign.h   |   27 ++++++++++++
 4 files changed, 128 insertions(+), 75 deletions(-)
 create mode 100644 hw/i386/pci-assign-load-rom.c
 create mode 100644 include/hw/pci/pci-assign.h

diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
index ebd1015..c250deb 100644
--- a/hw/i386/Makefile.objs
+++ b/hw/i386/Makefile.objs
@@ -7,6 +7,7 @@ obj-$(CONFIG_XEN) += ../xenpv/ xen/
 
 obj-y += kvmvapic.o
 obj-y += acpi-build.o
+obj-y += pci-assign-load-rom.o
 
 gen-hex-y += hw/i386/acpi-dsdt.hex
 gen-hex-y += hw/i386/q35-acpi-dsdt.hex
diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c
index 74d22f4..b1beaa6 100644
--- a/hw/i386/kvm/pci-assign.c
+++ b/hw/i386/kvm/pci-assign.c
@@ -37,6 +37,7 @@
 #include "hw/pci/pci.h"
 #include "hw/pci/msi.h"
 #include "kvm_i386.h"
+#include "hw/pci/pci-assign.h"
 
 #define MSIX_PAGE_SIZE 0x1000
 
@@ -48,17 +49,6 @@
 #define IORESOURCE_PREFETCH 0x00002000  /* No side effects */
 #define IORESOURCE_MEM_64   0x00100000
 
-//#define DEVICE_ASSIGNMENT_DEBUG
-
-#ifdef DEVICE_ASSIGNMENT_DEBUG
-#define DEBUG(fmt, ...)                                       \
-    do {                                                      \
-        fprintf(stderr, "%s: " fmt, __func__ , __VA_ARGS__);  \
-    } while (0)
-#else
-#define DEBUG(fmt, ...)
-#endif
-
 typedef struct PCIRegion {
     int type;           /* Memory or port I/O */
     int valid;
@@ -1896,73 +1886,15 @@ static void assign_register_types(void)
 
 type_init(assign_register_types)
 
-/*
- * Scan the assigned devices for the devices that have an option ROM, and then
- * load the corresponding ROM data to RAM. If an error occurs while loading an
- * option ROM, we just ignore that option ROM and continue with the next one.
- */
 static void assigned_dev_load_option_rom(AssignedDevice *dev)
 {
-    char name[32], rom_file[64];
-    FILE *fp;
-    uint8_t val;
-    struct stat st;
-    void *ptr;
-
-    /* If loading ROM from file, pci handles it */
-    if (dev->dev.romfile || !dev->dev.rom_bar) {
-        return;
-    }
+    int size = 0;
 
-    snprintf(rom_file, sizeof(rom_file),
-             "/sys/bus/pci/devices/%04x:%02x:%02x.%01x/rom",
-             dev->host.domain, dev->host.bus, dev->host.slot,
-             dev->host.function);
+    pci_assign_dev_load_option_rom(&dev->dev, OBJECT(dev), &size,
+                                   dev->host.domain, dev->host.bus,
+                                   dev->host.slot, dev->host.function);
 
-    if (stat(rom_file, &st)) {
-        return;
-    }
-
-    if (access(rom_file, F_OK)) {
-        error_report("pci-assign: Insufficient privileges for %s", rom_file);
-        return;
-    }
-
-    /* Write "1" to the ROM file to enable it */
-    fp = fopen(rom_file, "r+");
-    if (fp == NULL) {
-        return;
+    if (!size) {
+        error_report("pci-assign: Invalid ROM.");
     }
-    val = 1;
-    if (fwrite(&val, 1, 1, fp) != 1) {
-        goto close_rom;
-    }
-    fseek(fp, 0, SEEK_SET);
-
-    snprintf(name, sizeof(name), "%s.rom",
-            object_get_typename(OBJECT(dev)));
-    memory_region_init_ram(&dev->dev.rom, OBJECT(dev), name, st.st_size,
-                           &error_abort);
-    vmstate_register_ram(&dev->dev.rom, &dev->dev.qdev);
-    ptr = memory_region_get_ram_ptr(&dev->dev.rom);
-    memset(ptr, 0xff, st.st_size);
-
-    if (!fread(ptr, 1, st.st_size, fp)) {
-        error_report("pci-assign: Cannot read from host %s", rom_file);
-        error_printf("Device option ROM contents are probably invalid "
-                     "(check dmesg).\nSkip option ROM probe with rombar=0, "
-                     "or load from file with romfile=\n");
-        goto close_rom;
-    }
-
-    pci_register_bar(&dev->dev, PCI_ROM_SLOT, 0, &dev->dev.rom);
-    dev->dev.has_rom = true;
-close_rom:
-    /* Write "0" to disable ROM */
-    fseek(fp, 0, SEEK_SET);
-    val = 0;
-    if (!fwrite(&val, 1, 1, fp)) {
-        DEBUG("%s\n", "Failed to disable pci-sysfs rom file");
-    }
-    fclose(fp);
 }
diff --git a/hw/i386/pci-assign-load-rom.c b/hw/i386/pci-assign-load-rom.c
new file mode 100644
index 0000000..bad53b7
--- /dev/null
+++ b/hw/i386/pci-assign-load-rom.c
@@ -0,0 +1,93 @@
+/*
+ * This is splited from hw/i386/kvm/pci-assign.c
+ */
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/io.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "hw/hw.h"
+#include "hw/i386/pc.h"
+#include "qemu/error-report.h"
+#include "ui/console.h"
+#include "hw/loader.h"
+#include "monitor/monitor.h"
+#include "qemu/range.h"
+#include "sysemu/sysemu.h"
+#include "hw/pci/pci.h"
+#include "hw/pci/pci-assign.h"
+
+/*
+ * Scan the assigned devices for the devices that have an option ROM, and then
+ * load the corresponding ROM data to RAM. If an error occurs while loading an
+ * option ROM, we just ignore that option ROM and continue with the next one.
+ */
+void *pci_assign_dev_load_option_rom(PCIDevice *dev, struct Object *owner,
+                                     int *size, unsigned int domain,
+                                     unsigned int bus, unsigned int slot,
+                                     unsigned int function)
+{
+    char name[32], rom_file[64];
+    FILE *fp;
+    uint8_t val;
+    struct stat st;
+    void *ptr = NULL;
+
+    /* If loading ROM from file, pci handles it */
+    if (dev->romfile || !dev->rom_bar) {
+        return NULL;
+    }
+
+    snprintf(rom_file, sizeof(rom_file),
+             "/sys/bus/pci/devices/%04x:%02x:%02x.%01x/rom",
+             domain, bus, slot, function);
+
+    if (stat(rom_file, &st)) {
+        return NULL;
+    }
+
+    if (access(rom_file, F_OK)) {
+        error_report("pci-assign: Insufficient privileges for %s", rom_file);
+        return NULL;
+    }
+
+    /* Write "1" to the ROM file to enable it */
+    fp = fopen(rom_file, "r+");
+    if (fp == NULL) {
+        return NULL;
+    }
+    val = 1;
+    if (fwrite(&val, 1, 1, fp) != 1) {
+        goto close_rom;
+    }
+    fseek(fp, 0, SEEK_SET);
+
+    snprintf(name, sizeof(name), "%s.rom", object_get_typename(owner));
+    memory_region_init_ram(&dev->rom, owner, name, st.st_size, &error_abort);
+    vmstate_register_ram(&dev->rom, &dev->qdev);
+    ptr = memory_region_get_ram_ptr(&dev->rom);
+    memset(ptr, 0xff, st.st_size);
+
+    if (!fread(ptr, 1, st.st_size, fp)) {
+        error_report("pci-assign: Cannot read from host %s", rom_file);
+        error_printf("Device option ROM contents are probably invalid "
+                     "(check dmesg).\nSkip option ROM probe with rombar=0, "
+                     "or load from file with romfile=\n");
+        goto close_rom;
+    }
+
+    pci_register_bar(dev, PCI_ROM_SLOT, 0, &dev->rom);
+    dev->has_rom = true;
+    *size = st.st_size;
+close_rom:
+    /* Write "0" to disable ROM */
+    fseek(fp, 0, SEEK_SET);
+    val = 0;
+    if (!fwrite(&val, 1, 1, fp)) {
+        DEBUG("%s\n", "Failed to disable pci-sysfs rom file");
+    }
+    fclose(fp);
+
+    return ptr;
+}
diff --git a/include/hw/pci/pci-assign.h b/include/hw/pci/pci-assign.h
new file mode 100644
index 0000000..55f42c5
--- /dev/null
+++ b/include/hw/pci/pci-assign.h
@@ -0,0 +1,27 @@
+/*
+ * This work is licensed under the terms of the GNU GPL, version 2.  See
+ * the COPYING file in the top-level directory.
+ *
+ * Just split from hw/i386/kvm/pci-assign.c.
+ */
+#ifndef PCI_ASSIGN_H
+#define PCI_ASSIGN_H
+
+#include "hw/pci/pci.h"
+
+//#define DEVICE_ASSIGNMENT_DEBUG
+
+#ifdef DEVICE_ASSIGNMENT_DEBUG
+#define DEBUG(fmt, ...)                                       \
+    do {                                                      \
+        fprintf(stderr, "%s: " fmt, __func__ , __VA_ARGS__);  \
+    } while (0)
+#else
+#define DEBUG(fmt, ...)
+#endif
+
+void *pci_assign_dev_load_option_rom(PCIDevice *dev, struct Object *owner,
+                                     int *size, unsigned int domain,
+                                     unsigned int bus, unsigned int slot,
+                                     unsigned int function);
+#endif /* PCI_ASSIGN_H */
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 06/19] xen, gfx passthrough: basic graphics passthrough support
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (4 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 05/19] hw/pci-assign: split pci-assign.c Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 07/19] xen, gfx passthrough: retrieve VGA BIOS to work Stefano Stabellini
                   ` (14 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell
  Cc: Yang Zhang, Tiejun Chen, xen-devel, qemu-devel,
	Stefano Stabellini

From: Tiejun Chen <tiejun.chen@intel.com>

basic gfx passthrough support:
- add a vga type for gfx passthrough
- register/unregister legacy VGA I/O ports and MMIOs for passthrough GFX

Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
Signed-off-by: Yang Zhang <yang.z.zhang@Intel.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 hw/core/machine.c            |   20 ++++++++
 hw/xen/Makefile.objs         |    1 +
 hw/xen/xen-host-pci-device.c |    5 ++
 hw/xen/xen-host-pci-device.h |    1 +
 hw/xen/xen_pt.c              |    4 ++
 hw/xen/xen_pt.h              |   10 +++-
 hw/xen/xen_pt_graphics.c     |  111 ++++++++++++++++++++++++++++++++++++++++++
 include/hw/boards.h          |    1 +
 qemu-options.hx              |    3 ++
 vl.c                         |   10 ++++
 10 files changed, 165 insertions(+), 1 deletion(-)
 create mode 100644 hw/xen/xen_pt_graphics.c

diff --git a/hw/core/machine.c b/hw/core/machine.c
index ac4654e..51ed6b2 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -226,6 +226,20 @@ static void machine_set_usb(Object *obj, bool value, Error **errp)
     ms->usb_disabled = !value;
 }
 
+static bool machine_get_igd_gfx_passthru(Object *obj, Error **errp)
+{
+    MachineState *ms = MACHINE(obj);
+
+    return ms->igd_gfx_passthru;
+}
+
+static void machine_set_igd_gfx_passthru(Object *obj, bool value, Error **errp)
+{
+    MachineState *ms = MACHINE(obj);
+
+    ms->igd_gfx_passthru = value;
+}
+
 static char *machine_get_firmware(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
@@ -388,6 +402,12 @@ static void machine_initfn(Object *obj)
     object_property_set_description(obj, "usb",
                                     "Set on/off to enable/disable usb",
                                     NULL);
+    object_property_add_bool(obj, "igd-passthru",
+                             machine_get_igd_gfx_passthru,
+                             machine_set_igd_gfx_passthru, NULL);
+    object_property_set_description(obj, "igd-passthru",
+                                    "Set on/off to enable/disable igd passthrou",
+                                    NULL);
     object_property_add_str(obj, "firmware",
                             machine_get_firmware,
                             machine_set_firmware, NULL);
diff --git a/hw/xen/Makefile.objs b/hw/xen/Makefile.objs
index a0ca0aa..a9ad7e7 100644
--- a/hw/xen/Makefile.objs
+++ b/hw/xen/Makefile.objs
@@ -3,3 +3,4 @@ common-obj-$(CONFIG_XEN_BACKEND) += xen_backend.o xen_devconfig.o
 
 obj-$(CONFIG_XEN_PCI_PASSTHROUGH) += xen-host-pci-device.o
 obj-$(CONFIG_XEN_PCI_PASSTHROUGH) += xen_pt.o xen_pt_config_init.o xen_pt_msi.o
+obj-$(CONFIG_XEN_PCI_PASSTHROUGH) += xen_pt.o xen_pt_config_init.o xen_pt_msi.o xen_pt_graphics.o
diff --git a/hw/xen/xen-host-pci-device.c b/hw/xen/xen-host-pci-device.c
index 743b37b..a54b7de 100644
--- a/hw/xen/xen-host-pci-device.c
+++ b/hw/xen/xen-host-pci-device.c
@@ -376,6 +376,11 @@ int xen_host_pci_device_get(XenHostPCIDevice *d, uint16_t domain,
         goto error;
     }
     d->irq = v;
+    rc = xen_host_pci_get_hex_value(d, "class", &v);
+    if (rc) {
+        goto error;
+    }
+    d->class_code = v;
     d->is_virtfn = xen_host_pci_dev_is_virtfn(d);
 
     return 0;
diff --git a/hw/xen/xen-host-pci-device.h b/hw/xen/xen-host-pci-device.h
index c2486f0..f1e1c30 100644
--- a/hw/xen/xen-host-pci-device.h
+++ b/hw/xen/xen-host-pci-device.h
@@ -25,6 +25,7 @@ typedef struct XenHostPCIDevice {
 
     uint16_t vendor_id;
     uint16_t device_id;
+    uint32_t class_code;
     int irq;
 
     XenHostPCIIORegion io_regions[PCI_NUM_REGIONS - 1];
diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
index ed5fcae..42380c3 100644
--- a/hw/xen/xen_pt.c
+++ b/hw/xen/xen_pt.c
@@ -502,6 +502,7 @@ static int xen_pt_register_regions(XenPCIPassthroughState *s, uint16_t *cmd)
                    d->rom.size, d->rom.base_addr);
     }
 
+    xen_pt_register_vga_regions(d);
     return 0;
 }
 
@@ -801,6 +802,7 @@ out:
 static void xen_pt_unregister_device(PCIDevice *d)
 {
     XenPCIPassthroughState *s = XEN_PT_DEVICE(d);
+    XenHostPCIDevice *host_dev = &s->real_device;
     uint8_t machine_irq = s->machine_irq;
     uint8_t intx = xen_pt_pci_intx(s);
     int rc;
@@ -844,6 +846,8 @@ static void xen_pt_unregister_device(PCIDevice *d)
     /* delete all emulated config registers */
     xen_pt_config_delete(s);
 
+    xen_pt_unregister_vga_regions(host_dev);
+
     memory_listener_unregister(&s->memory_listener);
     memory_listener_unregister(&s->io_listener);
 
diff --git a/hw/xen/xen_pt.h b/hw/xen/xen_pt.h
index 393f36c..5eb3c52 100644
--- a/hw/xen/xen_pt.h
+++ b/hw/xen/xen_pt.h
@@ -305,5 +305,13 @@ static inline bool xen_pt_has_msix_mapping(XenPCIPassthroughState *s, int bar)
     return s->msix && s->msix->bar_index == bar;
 }
 
-
+extern bool has_igd_gfx_passthru;
+static inline bool is_igd_vga_passthrough(XenHostPCIDevice *dev)
+{
+    return (has_igd_gfx_passthru
+            && ((dev->class_code >> 0x8) == PCI_CLASS_DISPLAY_VGA));
+}
+int xen_pt_register_vga_regions(XenHostPCIDevice *dev);
+int xen_pt_unregister_vga_regions(XenHostPCIDevice *dev);
+int xen_pt_setup_vga(XenPCIPassthroughState *s, XenHostPCIDevice *dev);
 #endif /* !XEN_PT_H */
diff --git a/hw/xen/xen_pt_graphics.c b/hw/xen/xen_pt_graphics.c
new file mode 100644
index 0000000..9b3df81
--- /dev/null
+++ b/hw/xen/xen_pt_graphics.c
@@ -0,0 +1,111 @@
+/*
+ * graphics passthrough
+ */
+#include "xen_pt.h"
+#include "xen-host-pci-device.h"
+#include "hw/xen/xen_backend.h"
+
+typedef struct VGARegion {
+    int type;           /* Memory or port I/O */
+    uint64_t guest_base_addr;
+    uint64_t machine_base_addr;
+    uint64_t size;    /* size of the region */
+    int rc;
+} VGARegion;
+
+#define IORESOURCE_IO           0x00000100
+#define IORESOURCE_MEM          0x00000200
+
+static struct VGARegion vga_args[] = {
+    {
+        .type = IORESOURCE_IO,
+        .guest_base_addr = 0x3B0,
+        .machine_base_addr = 0x3B0,
+        .size = 0xC,
+        .rc = -1,
+    },
+    {
+        .type = IORESOURCE_IO,
+        .guest_base_addr = 0x3C0,
+        .machine_base_addr = 0x3C0,
+        .size = 0x20,
+        .rc = -1,
+    },
+    {
+        .type = IORESOURCE_MEM,
+        .guest_base_addr = 0xa0000 >> XC_PAGE_SHIFT,
+        .machine_base_addr = 0xa0000 >> XC_PAGE_SHIFT,
+        .size = 0x20,
+        .rc = -1,
+    },
+};
+
+/*
+ * register VGA resources for the domain with assigned gfx
+ */
+int xen_pt_register_vga_regions(XenHostPCIDevice *dev)
+{
+    int i = 0;
+
+    if (!is_igd_vga_passthrough(dev)) {
+        return 0;
+    }
+
+    for (i = 0 ; i < ARRAY_SIZE(vga_args); i++) {
+        if (vga_args[i].type == IORESOURCE_IO) {
+            vga_args[i].rc = xc_domain_ioport_mapping(xen_xc, xen_domid,
+                            vga_args[i].guest_base_addr,
+                            vga_args[i].machine_base_addr,
+                            vga_args[i].size, DPCI_ADD_MAPPING);
+        } else {
+            vga_args[i].rc = xc_domain_memory_mapping(xen_xc, xen_domid,
+                            vga_args[i].guest_base_addr,
+                            vga_args[i].machine_base_addr,
+                            vga_args[i].size, DPCI_ADD_MAPPING);
+        }
+
+        if (vga_args[i].rc) {
+            XEN_PT_ERR(NULL, "VGA %s mapping failed! (rc: %i)\n",
+                    vga_args[i].type == IORESOURCE_IO ? "ioport" : "memory",
+                    vga_args[i].rc);
+            return vga_args[i].rc;
+        }
+    }
+
+    return 0;
+}
+
+/*
+ * unregister VGA resources for the domain with assigned gfx
+ */
+int xen_pt_unregister_vga_regions(XenHostPCIDevice *dev)
+{
+    int i = 0;
+
+    if (!is_igd_vga_passthrough(dev)) {
+        return 0;
+    }
+
+    for (i = 0 ; i < ARRAY_SIZE(vga_args); i++) {
+        if (vga_args[i].type == IORESOURCE_IO) {
+            vga_args[i].rc = xc_domain_ioport_mapping(xen_xc, xen_domid,
+                            vga_args[i].guest_base_addr,
+                            vga_args[i].machine_base_addr,
+                            vga_args[i].size, DPCI_REMOVE_MAPPING);
+        } else {
+            vga_args[i].rc = xc_domain_memory_mapping(xen_xc, xen_domid,
+                            vga_args[i].guest_base_addr,
+                            vga_args[i].machine_base_addr,
+                            vga_args[i].size, DPCI_REMOVE_MAPPING);
+        }
+
+        if (vga_args[i].rc) {
+            XEN_PT_ERR(NULL, "VGA %s unmapping failed! (rc: %i)\n",
+                    vga_args[i].type == IORESOURCE_IO ? "ioport" : "memory",
+                    vga_args[i].rc);
+            return vga_args[i].rc;
+        }
+    }
+
+    return 0;
+}
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 3f84afd..566a5ca 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -137,6 +137,7 @@ struct MachineState {
     bool mem_merge;
     bool usb;
     bool usb_disabled;
+    bool igd_gfx_passthru;
     char *firmware;
     bool iommu;
     bool suppress_vmdesc;
diff --git a/qemu-options.hx b/qemu-options.hx
index efce775..b2f9dce 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -38,6 +38,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
     "                dump-guest-core=on|off include guest memory in a core dump (default=on)\n"
     "                mem-merge=on|off controls memory merge support (default: on)\n"
     "                iommu=on|off controls emulated Intel IOMMU (VT-d) support (default=off)\n"
+    "                igd-passthru=on|off controls IGD GFX passthrough support (default=off)\n"
     "                aes-key-wrap=on|off controls support for AES key wrapping (default=on)\n"
     "                dea-key-wrap=on|off controls support for DEA key wrapping (default=on)\n"
     "                suppress-vmdesc=on|off disables self-describing migration (default=off)\n",
@@ -55,6 +56,8 @@ than one accelerator specified, the next one is used if the previous one fails
 to initialize.
 @item kernel_irqchip=on|off
 Enables in-kernel irqchip support for the chosen accelerator when available.
+@item gfx_passthru=on|off
+Enables IGD GFX passthrough support for the chosen machine when available.
 @item vmport=on|off|auto
 Enables emulation of VMWare IO port, for vmmouse etc. auto says to select the
 value based on accel. For accel=xen the default is off otherwise the default
diff --git a/vl.c b/vl.c
index 584ca88..76e0bb2 100644
--- a/vl.c
+++ b/vl.c
@@ -1338,6 +1338,13 @@ static inline void semihosting_arg_fallback(const char *file, const char *cmd)
     }
 }
 
+/* Now we still need this for compatibility with XEN. */
+bool has_igd_gfx_passthru;
+static void igd_gfx_passthru(void)
+{
+    has_igd_gfx_passthru = current_machine->igd_gfx_passthru;
+}
+
 /***********************************************************/
 /* USB devices */
 
@@ -4528,6 +4535,9 @@ int main(int argc, char **argv, char **envp)
             exit(1);
     }
 
+    /* Check if IGD GFX passthrough. */
+    igd_gfx_passthru();
+
     /* init generic devices */
     if (qemu_opts_foreach(qemu_find_opts("device"),
                           device_init_func, NULL, NULL)) {
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 07/19] xen, gfx passthrough: retrieve VGA BIOS to work
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (5 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 06/19] xen, gfx passthrough: basic graphics passthrough support Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 08/19] igd gfx passthrough: create a isa bridge Stefano Stabellini
                   ` (13 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell; +Cc: Tiejun Chen, xen-devel, qemu-devel, Stefano Stabellini

From: Tiejun Chen <tiejun.chen@intel.com>

Now we retrieve VGA bios like kvm stuff in qemu but we need to
fix Device Identification in case if its not matched with the
real IGD device since Seabios is always trying to compare this
ID to work out VGA BIOS.

Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 hw/xen/xen_pt.c          |   10 ++++++
 hw/xen/xen_pt.h          |    5 +++
 hw/xen/xen_pt_graphics.c |   79 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 94 insertions(+)

diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
index 42380c3..15b02cb 100644
--- a/hw/xen/xen_pt.c
+++ b/hw/xen/xen_pt.c
@@ -725,6 +725,16 @@ static int xen_pt_initfn(PCIDevice *d)
     s->memory_listener = xen_pt_memory_listener;
     s->io_listener = xen_pt_io_listener;
 
+    /* Setup VGA bios for passthrough GFX */
+    if ((s->real_device.domain == 0) && (s->real_device.bus == 0) &&
+        (s->real_device.dev == 2) && (s->real_device.func == 0)) {
+        if (xen_pt_setup_vga(s, &s->real_device) < 0) {
+            XEN_PT_ERR(d, "Setup VGA BIOS of passthrough GFX failed!\n");
+            xen_host_pci_device_put(&s->real_device);
+            return -1;
+        }
+    }
+
     /* Handle real device's MMIO/PIO BARs */
     xen_pt_register_regions(s, &cmd);
 
diff --git a/hw/xen/xen_pt.h b/hw/xen/xen_pt.h
index 5eb3c52..a33e95c 100644
--- a/hw/xen/xen_pt.h
+++ b/hw/xen/xen_pt.h
@@ -305,6 +305,11 @@ static inline bool xen_pt_has_msix_mapping(XenPCIPassthroughState *s, int bar)
     return s->msix && s->msix->bar_index == bar;
 }
 
+extern void *pci_assign_dev_load_option_rom(PCIDevice *dev,
+                                            struct Object *owner, int *size,
+                                            unsigned int domain,
+                                            unsigned int bus, unsigned int slot,
+                                            unsigned int function);
 extern bool has_igd_gfx_passthru;
 static inline bool is_igd_vga_passthrough(XenHostPCIDevice *dev)
 {
diff --git a/hw/xen/xen_pt_graphics.c b/hw/xen/xen_pt_graphics.c
index 9b3df81..3232296 100644
--- a/hw/xen/xen_pt_graphics.c
+++ b/hw/xen/xen_pt_graphics.c
@@ -109,3 +109,82 @@ int xen_pt_unregister_vga_regions(XenHostPCIDevice *dev)
 
     return 0;
 }
+
+static void *get_vgabios(XenPCIPassthroughState *s, int *size,
+                       XenHostPCIDevice *dev)
+{
+    return pci_assign_dev_load_option_rom(&s->dev, OBJECT(&s->dev), size,
+                                          dev->domain, dev->bus,
+                                          dev->dev, dev->func);
+}
+
+/* Refer to Seabios. */
+struct rom_header {
+    uint16_t signature;
+    uint8_t size;
+    uint8_t initVector[4];
+    uint8_t reserved[17];
+    uint16_t pcioffset;
+    uint16_t pnpoffset;
+} __attribute__((packed));
+
+struct pci_data {
+    uint32_t signature;
+    uint16_t vendor;
+    uint16_t device;
+    uint16_t vitaldata;
+    uint16_t dlen;
+    uint8_t drevision;
+    uint8_t class_lo;
+    uint16_t class_hi;
+    uint16_t ilen;
+    uint16_t irevision;
+    uint8_t type;
+    uint8_t indicator;
+    uint16_t reserved;
+} __attribute__((packed));
+
+int xen_pt_setup_vga(XenPCIPassthroughState *s, XenHostPCIDevice *dev)
+{
+    unsigned char *bios = NULL;
+    struct rom_header *rom;
+    int bios_size;
+    char *c = NULL;
+    char checksum = 0;
+    uint32_t len = 0;
+    struct pci_data *pd = NULL;
+
+    if (!is_igd_vga_passthrough(dev)) {
+        return -1;
+    }
+
+    bios = get_vgabios(s, &bios_size, dev);
+    if (!bios) {
+        XEN_PT_ERR(&s->dev, "VGA: Can't getting VBIOS!\n");
+        return -1;
+    }
+
+    /* Currently we fixed this address as a primary. */
+    rom = (struct rom_header *)bios;
+    pd = (void *)(bios + (unsigned char)rom->pcioffset);
+
+    /* We may need to fixup Device Identification. */
+    if (pd->device != s->real_device.device_id) {
+        pd->device = s->real_device.device_id;
+
+        len = rom->size * 512;
+        /* Then adjust the bios checksum */
+        for (c = (char *)bios; c < ((char *)bios + len); c++) {
+            checksum += *c;
+        }
+        if (checksum) {
+            bios[len - 1] -= checksum;
+            XEN_PT_LOG(&s->dev, "vga bios checksum is adjusted %x!\n",
+                       checksum);
+        }
+    }
+
+    /* Currently we fixed this address as a primary for legacy BIOS. */
+    cpu_physical_memory_rw(0xc0000, bios, bios_size, 1);
+    return 0;
+}
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 08/19] igd gfx passthrough: create a isa bridge
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (6 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 07/19] xen, gfx passthrough: retrieve VGA BIOS to work Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 09/19] xen, gfx passthrough: register " Stefano Stabellini
                   ` (12 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell; +Cc: Tiejun Chen, xen-devel, qemu-devel, Stefano Stabellini

From: Tiejun Chen <tiejun.chen@intel.com>

Currently IGD drivers always need to access PCH by 1f.0. But we
don't want to poke that directly to get ID, and although in real
world different GPU should have different PCH. But actually the
different PCH DIDs likely map to different PCH SKUs. We do the
same thing for the GPU. For PCH, the different SKUs are going to
be all the same silicon design and implementation, just different
features turn on and off with fuses. The SW interfaces should be
consistent across all SKUs in a given family (eg LPT). But just
same features may not be supported.

Most of these different PCH features probably don't matter to the
Gfx driver, but obviously any difference in display port connections
will so it should be fine with any PCH in case of passthrough.

So currently use one PCH version, 0x8c4e, to cover all HSW(Haswell)
scenarios, 0x9cc3 for BDW(Broadwell).

Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/i386/pc_piix.c    |  112 ++++++++++++++++++++++++++++++++++++++++++++++++++
 include/hw/i386/pc.h |    1 +
 2 files changed, 113 insertions(+)

diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 626a19f..301a675 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -882,6 +882,118 @@ static void pc_i440fx_0_10_machine_options(MachineClass *m)
 DEFINE_I440FX_MACHINE(v0_10, "pc-0.10", pc_compat_0_13,
                       pc_i440fx_0_10_machine_options);
 
+typedef struct {
+    uint16_t gpu_device_id;
+    uint16_t pch_device_id;
+    uint8_t pch_revision_id;
+} IGDDeviceIDInfo;
+
+/* In real world different GPU should have different PCH. But actually
+ * the different PCH DIDs likely map to different PCH SKUs. We do the
+ * same thing for the GPU. For PCH, the different SKUs are going to be
+ * all the same silicon design and implementation, just different
+ * features turn on and off with fuses. The SW interfaces should be
+ * consistent across all SKUs in a given family (eg LPT). But just same
+ * features may not be supported.
+ *
+ * Most of these different PCH features probably don't matter to the
+ * Gfx driver, but obviously any difference in display port connections
+ * will so it should be fine with any PCH in case of passthrough.
+ *
+ * So currently use one PCH version, 0x8c4e, to cover all HSW(Haswell)
+ * scenarios, 0x9cc3 for BDW(Broadwell).
+ */
+static const IGDDeviceIDInfo igd_combo_id_infos[] = {
+    /* HSW Classic */
+    {0x0402, 0x8c4e, 0x04}, /* HSWGT1D, HSWD_w7 */
+    {0x0406, 0x8c4e, 0x04}, /* HSWGT1M, HSWM_w7 */
+    {0x0412, 0x8c4e, 0x04}, /* HSWGT2D, HSWD_w7 */
+    {0x0416, 0x8c4e, 0x04}, /* HSWGT2M, HSWM_w7 */
+    {0x041E, 0x8c4e, 0x04}, /* HSWGT15D, HSWD_w7 */
+    /* HSW ULT */
+    {0x0A06, 0x8c4e, 0x04}, /* HSWGT1UT, HSWM_w7 */
+    {0x0A16, 0x8c4e, 0x04}, /* HSWGT2UT, HSWM_w7 */
+    {0x0A26, 0x8c4e, 0x06}, /* HSWGT3UT, HSWM_w7 */
+    {0x0A2E, 0x8c4e, 0x04}, /* HSWGT3UT28W, HSWM_w7 */
+    {0x0A1E, 0x8c4e, 0x04}, /* HSWGT2UX, HSWM_w7 */
+    {0x0A0E, 0x8c4e, 0x04}, /* HSWGT1ULX, HSWM_w7 */
+    /* HSW CRW */
+    {0x0D26, 0x8c4e, 0x04}, /* HSWGT3CW, HSWM_w7 */
+    {0x0D22, 0x8c4e, 0x04}, /* HSWGT3CWDT, HSWD_w7 */
+    /* HSW Server */
+    {0x041A, 0x8c4e, 0x04}, /* HSWSVGT2, HSWD_w7 */
+    /* HSW SRVR */
+    {0x040A, 0x8c4e, 0x04}, /* HSWSVGT1, HSWD_w7 */
+    /* BSW */
+    {0x1606, 0x9cc3, 0x03}, /* BDWULTGT1, BDWM_w7 */
+    {0x1616, 0x9cc3, 0x03}, /* BDWULTGT2, BDWM_w7 */
+    {0x1626, 0x9cc3, 0x03}, /* BDWULTGT3, BDWM_w7 */
+    {0x160E, 0x9cc3, 0x03}, /* BDWULXGT1, BDWM_w7 */
+    {0x161E, 0x9cc3, 0x03}, /* BDWULXGT2, BDWM_w7 */
+    {0x1602, 0x9cc3, 0x03}, /* BDWHALOGT1, BDWM_w7 */
+    {0x1612, 0x9cc3, 0x03}, /* BDWHALOGT2, BDWM_w7 */
+    {0x1622, 0x9cc3, 0x03}, /* BDWHALOGT3, BDWM_w7 */
+    {0x162B, 0x9cc3, 0x03}, /* BDWHALO28W, BDWM_w7 */
+    {0x162A, 0x9cc3, 0x03}, /* BDWGT3WRKS, BDWM_w7 */
+    {0x162D, 0x9cc3, 0x03}, /* BDWGT3SRVR, BDWM_w7 */
+};
+
+static void isa_bridge_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+    PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
+
+    dc->desc        = "ISA bridge faked to support IGD PT";
+    k->vendor_id    = PCI_VENDOR_ID_INTEL;
+    k->class_id     = PCI_CLASS_BRIDGE_ISA;
+};
+
+static TypeInfo isa_bridge_info = {
+    .name          = "igd-passthrough-isa-bridge",
+    .parent        = TYPE_PCI_DEVICE,
+    .instance_size = sizeof(PCIDevice),
+    .class_init = isa_bridge_class_init,
+};
+
+static void pt_graphics_register_types(void)
+{
+    type_register_static(&isa_bridge_info);
+}
+type_init(pt_graphics_register_types)
+
+void igd_passthrough_isa_bridge_create(PCIBus *bus, uint16_t gpu_dev_id)
+{
+    struct PCIDevice *bridge_dev;
+    int i, num;
+    uint16_t pch_dev_id = 0xffff;
+    uint8_t pch_rev_id;
+
+    num = ARRAY_SIZE(igd_combo_id_infos);
+    for (i = 0; i < num; i++) {
+        if (gpu_dev_id == igd_combo_id_infos[i].gpu_device_id) {
+            pch_dev_id = igd_combo_id_infos[i].pch_device_id;
+            pch_rev_id = igd_combo_id_infos[i].pch_revision_id;
+        }
+    }
+
+    if (pch_dev_id == 0xffff) {
+        return;
+    }
+
+    /* Currently IGD drivers always need to access PCH by 1f.0. */
+    bridge_dev = pci_create_simple(bus, PCI_DEVFN(0x1f, 0),
+                                   "igd-passthrough-isa-bridge");
+
+    /*
+     * Note that vendor id is always PCI_VENDOR_ID_INTEL.
+     */
+    if (!bridge_dev) {
+        fprintf(stderr, "set igd-passthrough-isa-bridge failed!\n");
+        return;
+    }
+    pci_config_set_device_id(bridge_dev->config, pch_dev_id);
+    pci_config_set_revision(bridge_dev->config, pch_rev_id);
+}
 
 static void isapc_machine_options(MachineClass *m)
 {
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 5cda2a3..0639e46 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -726,4 +726,5 @@ bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
     (m)->compat_props = props; \
 } while (0)
 
+extern void igd_passthrough_isa_bridge_create(PCIBus *bus, uint16_t gpu_dev_id);
 #endif
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 09/19] xen, gfx passthrough: register a isa bridge
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (7 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 08/19] igd gfx passthrough: create a isa bridge Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 10/19] xen, gfx passthrough: register host bridge specific to passthrough Stefano Stabellini
                   ` (11 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell; +Cc: Tiejun Chen, xen-devel, qemu-devel, Stefano Stabellini

From: Tiejun Chen <tiejun.chen@intel.com>

Currently we just register this isa bridge when we use IGD
passthrough in Xen side.

Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 hw/xen/xen_pt.c |   22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
index 15b02cb..d67bccf 100644
--- a/hw/xen/xen_pt.c
+++ b/hw/xen/xen_pt.c
@@ -56,6 +56,7 @@
 
 #include "hw/pci/pci.h"
 #include "hw/xen/xen.h"
+#include "hw/i386/pc.h"
 #include "hw/xen/xen_backend.h"
 #include "xen_pt.h"
 #include "qemu/range.h"
@@ -684,6 +685,17 @@ static const MemoryListener xen_pt_io_listener = {
     .priority = 10,
 };
 
+static void
+xen_igd_passthrough_isa_bridge_create(XenPCIPassthroughState *s,
+                                      XenHostPCIDevice *dev)
+{
+    uint16_t gpu_dev_id;
+    PCIDevice *d = &s->dev;
+
+    gpu_dev_id = dev->device_id;
+    igd_passthrough_isa_bridge_create(d->bus, gpu_dev_id);
+}
+
 /* init */
 
 static int xen_pt_initfn(PCIDevice *d)
@@ -728,11 +740,21 @@ static int xen_pt_initfn(PCIDevice *d)
     /* Setup VGA bios for passthrough GFX */
     if ((s->real_device.domain == 0) && (s->real_device.bus == 0) &&
         (s->real_device.dev == 2) && (s->real_device.func == 0)) {
+        if (!is_igd_vga_passthrough(&s->real_device)) {
+            XEN_PT_ERR(d, "Need to enable igd-passthru if you're trying"
+                       " to passthrough IGD GFX.\n");
+            xen_host_pci_device_put(&s->real_device);
+            return -1;
+        }
+
         if (xen_pt_setup_vga(s, &s->real_device) < 0) {
             XEN_PT_ERR(d, "Setup VGA BIOS of passthrough GFX failed!\n");
             xen_host_pci_device_put(&s->real_device);
             return -1;
         }
+
+        /* Register ISA bridge for passthrough GFX. */
+        xen_igd_passthrough_isa_bridge_create(s, &s->real_device);
     }
 
     /* Handle real device's MMIO/PIO BARs */
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 10/19] xen, gfx passthrough: register host bridge specific to passthrough
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (8 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 09/19] xen, gfx passthrough: register " Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 11/19] xen, gfx passthrough: add opregion mapping Stefano Stabellini
                   ` (10 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell; +Cc: Tiejun Chen, xen-devel, qemu-devel, Stefano Stabellini

From: Tiejun Chen <tiejun.chen@intel.com>

Just register that pci host bridge specific to passthrough.

Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 hw/i386/pc_piix.c |   15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 301a675..edef0cc 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -50,7 +50,8 @@
 #include "cpu.h"
 #include "qemu/error-report.h"
 #ifdef CONFIG_XEN
-#  include <xen/hvm/hvm_info_table.h>
+#include <xen/hvm/hvm_info_table.h>
+#include "hw/xen/xen_pt.h"
 #endif
 #include "migration/migration.h"
 
@@ -421,11 +422,21 @@ static void pc_init_isa(MachineState *machine)
 }
 
 #ifdef CONFIG_XEN
+static void pc_xen_hvm_init_pci(MachineState *machine)
+{
+    const char *pci_type = has_igd_gfx_passthru ?
+                TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE : TYPE_I440FX_PCI_DEVICE;
+
+    pc_init1(machine,
+             TYPE_I440FX_PCI_HOST_BRIDGE,
+             pci_type);
+}
+
 static void pc_xen_hvm_init(MachineState *machine)
 {
     PCIBus *bus;
 
-    pc_init1(machine, TYPE_I440FX_PCI_HOST_BRIDGE, TYPE_I440FX_PCI_DEVICE);
+    pc_xen_hvm_init_pci(machine);
 
     bus = pci_find_primary_bus();
     if (bus != NULL) {
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 11/19] xen, gfx passthrough: add opregion mapping
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (9 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 10/19] xen, gfx passthrough: register host bridge specific to passthrough Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 12/19] xen-hvm: When using xc_domain_add_to_physmap also include errno when reporting Stefano Stabellini
                   ` (9 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell
  Cc: Yang Zhang, Tiejun Chen, xen-devel, qemu-devel,
	Stefano Stabellini

From: Tiejun Chen <tiejun.chen@intel.com>

The OpRegion shouldn't be mapped 1:1 because the address in the host
can't be used in the guest directly.

This patch traps read and write access to the opregion of the Intel
GPU config space (offset 0xfc).

The original patch is from Jean Guyader <jean.guyader@eu.citrix.com>

Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
Signed-off-by: Yang Zhang <yang.z.zhang@Intel.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 hw/xen/xen_pt.h             |    6 +++-
 hw/xen/xen_pt_config_init.c |   51 +++++++++++++++++++++++++--
 hw/xen/xen_pt_graphics.c    |   82 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 136 insertions(+), 3 deletions(-)

diff --git a/hw/xen/xen_pt.h b/hw/xen/xen_pt.h
index a33e95c..e89d231 100644
--- a/hw/xen/xen_pt.h
+++ b/hw/xen/xen_pt.h
@@ -40,6 +40,9 @@ typedef struct XenPCIPassthroughState XenPCIPassthroughState;
 #define XEN_PT_DEVICE(obj) \
     OBJECT_CHECK(XenPCIPassthroughState, (obj), TYPE_XEN_PT_DEVICE)
 
+uint32_t igd_read_opregion(XenPCIPassthroughState *s);
+void igd_write_opregion(XenPCIPassthroughState *s, uint32_t val);
+
 /* function type for config reg */
 typedef int (*xen_pt_conf_reg_init)
     (XenPCIPassthroughState *, XenPTRegInfo *, uint32_t real_offset,
@@ -66,8 +69,9 @@ typedef int (*xen_pt_conf_byte_read)
 #define XEN_PT_BAR_ALLF 0xFFFFFFFF
 #define XEN_PT_BAR_UNMAPPED (-1)
 
-#define PCI_CAP_MAX 48
+#define XEN_PCI_CAP_MAX 48
 
+#define XEN_PCI_INTEL_OPREGION 0xfc
 
 typedef enum {
     XEN_PT_GRP_TYPE_HARDWIRED = 0,  /* 0 Hardwired reg group */
diff --git a/hw/xen/xen_pt_config_init.c b/hw/xen/xen_pt_config_init.c
index dd37be3..9fb3670 100644
--- a/hw/xen/xen_pt_config_init.c
+++ b/hw/xen/xen_pt_config_init.c
@@ -552,6 +552,22 @@ static int xen_pt_exp_rom_bar_reg_write(XenPCIPassthroughState *s,
     return 0;
 }
 
+static int xen_pt_intel_opregion_read(XenPCIPassthroughState *s,
+                                      XenPTReg *cfg_entry,
+                                      uint32_t *value, uint32_t valid_mask)
+{
+    *value = igd_read_opregion(s);
+    return 0;
+}
+
+static int xen_pt_intel_opregion_write(XenPCIPassthroughState *s,
+                                       XenPTReg *cfg_entry, uint32_t *value,
+                                       uint32_t dev_value, uint32_t valid_mask)
+{
+    igd_write_opregion(s, *value);
+    return 0;
+}
+
 /* Header Type0 reg static information table */
 static XenPTRegInfo xen_pt_emu_reg_header0[] = {
     /* Vendor ID reg */
@@ -1492,6 +1508,19 @@ static XenPTRegInfo xen_pt_emu_reg_msix[] = {
     },
 };
 
+static XenPTRegInfo xen_pt_emu_reg_igd_opregion[] = {
+    /* Intel IGFX OpRegion reg */
+    {
+        .offset     = 0x0,
+        .size       = 4,
+        .init_val   = 0,
+        .u.dw.read   = xen_pt_intel_opregion_read,
+        .u.dw.write  = xen_pt_intel_opregion_write,
+    },
+    {
+        .size = 0,
+    },
+};
 
 /****************************
  * Capabilities
@@ -1729,6 +1758,14 @@ static const XenPTRegGroupInfo xen_pt_emu_reg_grps[] = {
         .size_init   = xen_pt_msix_size_init,
         .emu_regs = xen_pt_emu_reg_msix,
     },
+    /* Intel IGD Opregion group */
+    {
+        .grp_id      = XEN_PCI_INTEL_OPREGION,
+        .grp_type    = XEN_PT_GRP_TYPE_EMU,
+        .grp_size    = 0x4,
+        .size_init   = xen_pt_reg_grp_size_init,
+        .emu_regs    = xen_pt_emu_reg_igd_opregion,
+    },
     {
         .grp_size = 0,
     },
@@ -1779,7 +1816,7 @@ out:
 static uint8_t find_cap_offset(XenPCIPassthroughState *s, uint8_t cap)
 {
     uint8_t id;
-    unsigned max_cap = PCI_CAP_MAX;
+    unsigned max_cap = XEN_PCI_CAP_MAX;
     uint8_t pos = PCI_CAPABILITY_LIST;
     uint8_t status = 0;
 
@@ -1858,7 +1895,8 @@ int xen_pt_config_init(XenPCIPassthroughState *s)
         uint32_t reg_grp_offset = 0;
         XenPTRegGroup *reg_grp_entry = NULL;
 
-        if (xen_pt_emu_reg_grps[i].grp_id != 0xFF) {
+        if (xen_pt_emu_reg_grps[i].grp_id != 0xFF
+            && xen_pt_emu_reg_grps[i].grp_id != XEN_PCI_INTEL_OPREGION) {
             if (xen_pt_hide_dev_cap(&s->real_device,
                                     xen_pt_emu_reg_grps[i].grp_id)) {
                 continue;
@@ -1871,6 +1909,15 @@ int xen_pt_config_init(XenPCIPassthroughState *s)
             }
         }
 
+        /*
+         * By default we will trap up to 0x40 in the cfg space.
+         * If an intel device is pass through we need to trap 0xfc,
+         * therefore the size should be 0xff.
+         */
+        if (xen_pt_emu_reg_grps[i].grp_id == XEN_PCI_INTEL_OPREGION) {
+            reg_grp_offset = XEN_PCI_INTEL_OPREGION;
+        }
+
         reg_grp_entry = g_new0(XenPTRegGroup, 1);
         QLIST_INIT(&reg_grp_entry->reg_tbl_list);
         QLIST_INSERT_HEAD(&s->reg_grps, reg_grp_entry, entries);
diff --git a/hw/xen/xen_pt_graphics.c b/hw/xen/xen_pt_graphics.c
index 3232296..df6069b 100644
--- a/hw/xen/xen_pt_graphics.c
+++ b/hw/xen/xen_pt_graphics.c
@@ -5,6 +5,11 @@
 #include "xen-host-pci-device.h"
 #include "hw/xen/xen_backend.h"
 
+static unsigned long igd_guest_opregion;
+static unsigned long igd_host_opregion;
+
+#define XEN_PCI_INTEL_OPREGION_MASK 0xfff
+
 typedef struct VGARegion {
     int type;           /* Memory or port I/O */
     uint64_t guest_base_addr;
@@ -81,6 +86,7 @@ int xen_pt_register_vga_regions(XenHostPCIDevice *dev)
 int xen_pt_unregister_vga_regions(XenHostPCIDevice *dev)
 {
     int i = 0;
+    int ret = 0;
 
     if (!is_igd_vga_passthrough(dev)) {
         return 0;
@@ -107,6 +113,17 @@ int xen_pt_unregister_vga_regions(XenHostPCIDevice *dev)
         }
     }
 
+    if (igd_guest_opregion) {
+        ret = xc_domain_memory_mapping(xen_xc, xen_domid,
+                (unsigned long)(igd_guest_opregion >> XC_PAGE_SHIFT),
+                (unsigned long)(igd_host_opregion >> XC_PAGE_SHIFT),
+                3,
+                DPCI_REMOVE_MAPPING);
+        if (ret) {
+            return ret;
+        }
+    }
+
     return 0;
 }
 
@@ -188,3 +205,68 @@ int xen_pt_setup_vga(XenPCIPassthroughState *s, XenHostPCIDevice *dev)
     cpu_physical_memory_rw(0xc0000, bios, bios_size, 1);
     return 0;
 }
+
+uint32_t igd_read_opregion(XenPCIPassthroughState *s)
+{
+    uint32_t val = 0;
+
+    if (!igd_guest_opregion) {
+        return val;
+    }
+
+    val = igd_guest_opregion;
+
+    XEN_PT_LOG(&s->dev, "Read opregion val=%x\n", val);
+    return val;
+}
+
+#define XEN_PCI_INTEL_OPREGION_PAGES 0x3
+#define XEN_PCI_INTEL_OPREGION_ENABLE_ACCESSED 0x1
+void igd_write_opregion(XenPCIPassthroughState *s, uint32_t val)
+{
+    int ret;
+
+    if (igd_guest_opregion) {
+        XEN_PT_LOG(&s->dev, "opregion register already been set, ignoring %x\n",
+                   val);
+        return;
+    }
+
+    /* We just work with LE. */
+    xen_host_pci_get_block(&s->real_device, XEN_PCI_INTEL_OPREGION,
+            (uint8_t *)&igd_host_opregion, 4);
+    igd_guest_opregion = (unsigned long)(val & ~XEN_PCI_INTEL_OPREGION_MASK)
+                            | (igd_host_opregion & XEN_PCI_INTEL_OPREGION_MASK);
+
+    ret = xc_domain_iomem_permission(xen_xc, xen_domid,
+            (unsigned long)(igd_host_opregion >> XC_PAGE_SHIFT),
+            XEN_PCI_INTEL_OPREGION_PAGES,
+            XEN_PCI_INTEL_OPREGION_ENABLE_ACCESSED);
+
+    if (ret) {
+        XEN_PT_ERR(&s->dev, "[%d]:Can't enable to access IGD host opregion:"
+                    " 0x%lx.\n", ret,
+                    (unsigned long)(igd_host_opregion >> XC_PAGE_SHIFT)),
+        igd_guest_opregion = 0;
+        return;
+    }
+
+    ret = xc_domain_memory_mapping(xen_xc, xen_domid,
+            (unsigned long)(igd_guest_opregion >> XC_PAGE_SHIFT),
+            (unsigned long)(igd_host_opregion >> XC_PAGE_SHIFT),
+            XEN_PCI_INTEL_OPREGION_PAGES,
+            DPCI_ADD_MAPPING);
+
+    if (ret) {
+        XEN_PT_ERR(&s->dev, "[%d]:Can't map IGD host opregion:0x%lx to"
+                    " guest opregion:0x%lx.\n", ret,
+                    (unsigned long)(igd_host_opregion >> XC_PAGE_SHIFT),
+                    (unsigned long)(igd_guest_opregion >> XC_PAGE_SHIFT));
+        igd_guest_opregion = 0;
+        return;
+    }
+
+    XEN_PT_LOG(&s->dev, "Map OpRegion: 0x%lx -> 0x%lx\n",
+                    (unsigned long)(igd_host_opregion >> XC_PAGE_SHIFT),
+                    (unsigned long)(igd_guest_opregion >> XC_PAGE_SHIFT));
+}
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 12/19] xen-hvm: When using xc_domain_add_to_physmap also include errno when reporting
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (10 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 11/19] xen, gfx passthrough: add opregion mapping Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 13/19] xen/HVM: atomically access pointers in bufioreq handling Stefano Stabellini
                   ` (8 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell
  Cc: xen-devel, qemu-devel, Konrad Rzeszutek Wilk, Stefano Stabellini

From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

.errors - as it will most likely have the proper error value.

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 xen-hvm.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/xen-hvm.c b/xen-hvm.c
index d17d3f3..0f81f7f 100644
--- a/xen-hvm.c
+++ b/xen-hvm.c
@@ -348,7 +348,7 @@ go_physmap:
         rc = xc_domain_add_to_physmap(xen_xc, xen_domid, XENMAPSPACE_gmfn, idx, gpfn);
         if (rc) {
             DPRINTF("add_to_physmap MFN %"PRI_xen_pfn" to PFN %"
-                    PRI_xen_pfn" failed: %d\n", idx, gpfn, rc);
+                    PRI_xen_pfn" failed: %d (errno: %d)\n", idx, gpfn, rc, errno);
             return -rc;
         }
     }
@@ -425,7 +425,7 @@ static int xen_remove_from_physmap(XenIOState *state,
         rc = xc_domain_add_to_physmap(xen_xc, xen_domid, XENMAPSPACE_gmfn, idx, gpfn);
         if (rc) {
             fprintf(stderr, "add_to_physmap MFN %"PRI_xen_pfn" to PFN %"
-                    PRI_xen_pfn" failed: %d\n", idx, gpfn, rc);
+                    PRI_xen_pfn" failed: %d (errno: %d)\n", idx, gpfn, rc, errno);
             return -rc;
         }
     }
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 13/19] xen/HVM: atomically access pointers in bufioreq handling
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (11 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 12/19] xen-hvm: When using xc_domain_add_to_physmap also include errno when reporting Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 14/19] xen/pt: Update comments with proper function name Stefano Stabellini
                   ` (7 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell; +Cc: xen-devel, qemu-devel, Jan Beulich, Stefano Stabellini

From: Jan Beulich <JBeulich@suse.com>

The number of slots per page being 511 (i.e. not a power of two) means
that the (32-bit) read and write indexes going beyond 2^32 will likely
disturb operation. The hypervisor side gets I/O req server creation
extended so we can indicate that we're using suitable atomic accesses
where needed, allowing it to atomically canonicalize both pointers when
both have gone through at least one cycle.

The Xen side counterpart (which is not a functional prereq to this
change, albeit a build one) went in already (commit b7007bc6f9).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 configure                   |   27 +++++++++++++++++++++++++++
 include/hw/xen/xen_common.h |   12 +++++++++++-
 xen-hvm.c                   |   26 ++++++++++++++++++--------
 3 files changed, 56 insertions(+), 9 deletions(-)

diff --git a/configure b/configure
index d854936..5618bf1 100755
--- a/configure
+++ b/configure
@@ -1889,6 +1889,33 @@ int main(void) {
   xc_gnttab_open(NULL, 0);
   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
+  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
+  return 0;
+}
+EOF
+      compile_prog "" "$xen_libs"
+    then
+    xen_ctrl_version=460
+    xen=yes
+
+  # Xen 4.5
+  elif
+      cat > $TMPC <<EOF &&
+#include <xenctrl.h>
+#include <xenstore.h>
+#include <stdint.h>
+#include <xen/hvm/hvm_info_table.h>
+#if !defined(HVM_MAX_VCPUS)
+# error HVM_MAX_VCPUS not defined
+#endif
+int main(void) {
+  xc_interface *xc;
+  xs_daemon_open();
+  xc = xc_interface_open(0, 0, 0);
+  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
+  xc_gnttab_open(NULL, 0);
+  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
+  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
   xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
   return 0;
 }
diff --git a/include/hw/xen/xen_common.h b/include/hw/xen/xen_common.h
index ed5fd3e..19d0bca 100644
--- a/include/hw/xen/xen_common.h
+++ b/include/hw/xen/xen_common.h
@@ -186,6 +186,15 @@ static inline int xen_get_vmport_regs_pfn(XenXC xc, domid_t dom,
 }
 #endif
 
+/* Xen before 4.6 */
+#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 460
+
+#ifndef HVM_IOREQSRV_BUFIOREQ_ATOMIC
+#define HVM_IOREQSRV_BUFIOREQ_ATOMIC 2
+#endif
+
+#endif
+
 /* Xen before 4.5 */
 #if CONFIG_XEN_CTRL_INTERFACE_VERSION < 450
 
@@ -370,7 +379,8 @@ static inline void xen_unmap_pcidev(XenXC xc, domid_t dom,
 static inline int xen_create_ioreq_server(XenXC xc, domid_t dom,
                                           ioservid_t *ioservid)
 {
-    int rc = xc_hvm_create_ioreq_server(xc, dom, 1, ioservid);
+    int rc = xc_hvm_create_ioreq_server(xc, dom, HVM_IOREQSRV_BUFIOREQ_ATOMIC,
+                                        ioservid);
 
     if (rc == 0) {
         trace_xen_ioreq_server_create(*ioservid);
diff --git a/xen-hvm.c b/xen-hvm.c
index 0f81f7f..cbd0a79 100644
--- a/xen-hvm.c
+++ b/xen-hvm.c
@@ -984,19 +984,30 @@ static void handle_ioreq(XenIOState *state, ioreq_t *req)
 
 static int handle_buffered_iopage(XenIOState *state)
 {
+    buffered_iopage_t *buf_page = state->buffered_io_page;
     buf_ioreq_t *buf_req = NULL;
     ioreq_t req;
     int qw;
 
-    if (!state->buffered_io_page) {
+    if (!buf_page) {
         return 0;
     }
 
     memset(&req, 0x00, sizeof(req));
 
-    while (state->buffered_io_page->read_pointer != state->buffered_io_page->write_pointer) {
-        buf_req = &state->buffered_io_page->buf_ioreq[
-            state->buffered_io_page->read_pointer % IOREQ_BUFFER_SLOT_NUM];
+    for (;;) {
+        uint32_t rdptr = buf_page->read_pointer, wrptr;
+
+        xen_rmb();
+        wrptr = buf_page->write_pointer;
+        xen_rmb();
+        if (rdptr != buf_page->read_pointer) {
+            continue;
+        }
+        if (rdptr == wrptr) {
+            break;
+        }
+        buf_req = &buf_page->buf_ioreq[rdptr % IOREQ_BUFFER_SLOT_NUM];
         req.size = 1UL << buf_req->size;
         req.count = 1;
         req.addr = buf_req->addr;
@@ -1008,15 +1019,14 @@ static int handle_buffered_iopage(XenIOState *state)
         req.data_is_ptr = 0;
         qw = (req.size == 8);
         if (qw) {
-            buf_req = &state->buffered_io_page->buf_ioreq[
-                (state->buffered_io_page->read_pointer + 1) % IOREQ_BUFFER_SLOT_NUM];
+            buf_req = &buf_page->buf_ioreq[(rdptr + 1) %
+                                           IOREQ_BUFFER_SLOT_NUM];
             req.data |= ((uint64_t)buf_req->data) << 32;
         }
 
         handle_ioreq(state, &req);
 
-        xen_mb();
-        state->buffered_io_page->read_pointer += qw ? 2 : 1;
+        atomic_add(&buf_page->read_pointer, qw + 1);
     }
 
     return req.count;
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 14/19] xen/pt: Update comments with proper function name.
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (12 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 13/19] xen/HVM: atomically access pointers in bufioreq handling Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 15/19] xen/pt: Make xen_pt_msi_set_enable static Stefano Stabellini
                   ` (6 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell
  Cc: xen-devel, qemu-devel, Konrad Rzeszutek Wilk, Stefano Stabellini

From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

It has changed but the comments still refer to the old names.

Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 hw/xen/xen_pt.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
index d67bccf..ba043e6 100644
--- a/hw/xen/xen_pt.c
+++ b/hw/xen/xen_pt.c
@@ -379,7 +379,7 @@ static void xen_pt_pci_write_config(PCIDevice *d, uint32_t addr,
         }
     }
 
-    /* need to shift back before passing them to xen_host_pci_device */
+    /* need to shift back before passing them to xen_host_pci_set_block. */
     val >>= (addr & 3) << 3;
 
     memory_region_transaction_commit();
@@ -407,7 +407,7 @@ out:
                                     (uint8_t *)&val + index, len);
 
         if (rc < 0) {
-            XEN_PT_ERR(d, "pci_write_block failed. return value: %d.\n", rc);
+            XEN_PT_ERR(d, "xen_host_pci_set_block failed. return value: %d.\n", rc);
         }
     }
 }
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 15/19] xen/pt: Make xen_pt_msi_set_enable static
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (13 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 14/19] xen/pt: Update comments with proper function name Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 16/19] xen/pt: xen_host_pci_config_read returns -errno, not -1 on failure Stefano Stabellini
                   ` (5 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell
  Cc: xen-devel, qemu-devel, Konrad Rzeszutek Wilk, Stefano Stabellini

From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

As we do not use it outside our code.

Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 hw/xen/xen_pt.h     |    1 -
 hw/xen/xen_pt_msi.c |    2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/hw/xen/xen_pt.h b/hw/xen/xen_pt.h
index e89d231..6763abc 100644
--- a/hw/xen/xen_pt.h
+++ b/hw/xen/xen_pt.h
@@ -293,7 +293,6 @@ static inline uint8_t xen_pt_pci_intx(XenPCIPassthroughState *s)
 }
 
 /* MSI/MSI-X */
-int xen_pt_msi_set_enable(XenPCIPassthroughState *s, bool en);
 int xen_pt_msi_setup(XenPCIPassthroughState *s);
 int xen_pt_msi_update(XenPCIPassthroughState *d);
 void xen_pt_msi_disable(XenPCIPassthroughState *s);
diff --git a/hw/xen/xen_pt_msi.c b/hw/xen/xen_pt_msi.c
index 263e051..5822df5 100644
--- a/hw/xen/xen_pt_msi.c
+++ b/hw/xen/xen_pt_msi.c
@@ -220,7 +220,7 @@ static int msi_msix_disable(XenPCIPassthroughState *s,
  * MSI virtualization functions
  */
 
-int xen_pt_msi_set_enable(XenPCIPassthroughState *s, bool enable)
+static int xen_pt_msi_set_enable(XenPCIPassthroughState *s, bool enable)
 {
     XEN_PT_LOG(&s->dev, "%s MSI.\n", enable ? "enabling" : "disabling");
 
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 16/19] xen/pt: xen_host_pci_config_read returns -errno, not -1 on failure
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (14 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 15/19] xen/pt: Make xen_pt_msi_set_enable static Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 17/19] xen: use errno instead of rc for xc_domain_add_to_physmap Stefano Stabellini
                   ` (4 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell
  Cc: xen-devel, qemu-devel, Konrad Rzeszutek Wilk, Stefano Stabellini

From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

However the init routines assume that on errors the return
code is -1 (as the libxc API is) - while those xen_host_* routines follow
another paradigm - negative errno on return, 0 on success.

Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 hw/xen/xen_pt.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
index ba043e6..3b1544c 100644
--- a/hw/xen/xen_pt.c
+++ b/hw/xen/xen_pt.c
@@ -729,7 +729,7 @@ static int xen_pt_initfn(PCIDevice *d)
 
     /* Initialize virtualized PCI configuration (Extended 256 Bytes) */
     if (xen_host_pci_get_block(&s->real_device, 0, d->config,
-                               PCI_CONFIG_SPACE_SIZE) == -1) {
+                               PCI_CONFIG_SPACE_SIZE) < 0) {
         xen_host_pci_device_put(&s->real_device);
         return -1;
     }
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 17/19] xen: use errno instead of rc for xc_domain_add_to_physmap
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (15 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 16/19] xen/pt: xen_host_pci_config_read returns -errno, not -1 on failure Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 18/19] xen/pt/msi: Add the register value when printing logging and error messages Stefano Stabellini
                   ` (3 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell
  Cc: xen-devel, qemu-devel, Konrad Rzeszutek Wilk, Stefano Stabellini

From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

In Xen 4.6 commit cd2f100f0f61b3f333d52d1737dd73f02daee592
"libxc: Fix do_memory_op to return negative value on errors"
made the libxc API less odd-ball: On errors, return value is
-1 and error code is in errno. On success the return value
is either 0 or an positive value.

Since we could be running with an old toolstack in which the
Exx value is in rc or the newer, we add an wrapper around
the xc_domain_add_to_physmap (called xen_xc_domain_add_to_physmap)
which will always return the EXX.

Xen 4.6 did not change the libxc functions mentioned (same parameters)
so we piggyback on the fact that Xen 4.6 has a new function:
commit 504ed2053362381ac01b98db9313454488b7db40 "tools/libxc: Expose
new hypercall xc_reserved_device_memory_map" and check for that.

Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Suggested-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 configure                   |    1 +
 include/hw/xen/xen_common.h |   22 ++++++++++++++++++++++
 xen-hvm.c                   |    4 ++--
 3 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/configure b/configure
index 5618bf1..5c06663 100755
--- a/configure
+++ b/configure
@@ -1890,6 +1890,7 @@ int main(void) {
   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
+  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
   return 0;
 }
 EOF
diff --git a/include/hw/xen/xen_common.h b/include/hw/xen/xen_common.h
index 19d0bca..d7fa6a4 100644
--- a/include/hw/xen/xen_common.h
+++ b/include/hw/xen/xen_common.h
@@ -417,4 +417,26 @@ static inline int xen_set_ioreq_server_state(XenXC xc, domid_t dom,
 
 #endif
 
+#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 460
+static inline int xen_xc_domain_add_to_physmap(XenXC xch, uint32_t domid,
+                                               unsigned int space,
+                                               unsigned long idx,
+                                               xen_pfn_t gpfn)
+{
+    return xc_domain_add_to_physmap(xch, domid, space, idx, gpfn);
+}
+#else
+static inline int xen_xc_domain_add_to_physmap(XenXC xch, uint32_t domid,
+                                               unsigned int space,
+                                               unsigned long idx,
+                                               xen_pfn_t gpfn)
+{
+    /* In Xen 4.6 rc is -1 and errno contains the error value. */
+    int rc = xc_domain_add_to_physmap(xch, domid, space, idx, gpfn);
+    if (rc == -1)
+        return errno;
+    return rc;
+}
+#endif
+
 #endif /* QEMU_HW_XEN_COMMON_H */
diff --git a/xen-hvm.c b/xen-hvm.c
index cbd0a79..3371c4e 100644
--- a/xen-hvm.c
+++ b/xen-hvm.c
@@ -345,7 +345,7 @@ go_physmap:
         unsigned long idx = pfn + i;
         xen_pfn_t gpfn = start_gpfn + i;
 
-        rc = xc_domain_add_to_physmap(xen_xc, xen_domid, XENMAPSPACE_gmfn, idx, gpfn);
+        rc = xen_xc_domain_add_to_physmap(xen_xc, xen_domid, XENMAPSPACE_gmfn, idx, gpfn);
         if (rc) {
             DPRINTF("add_to_physmap MFN %"PRI_xen_pfn" to PFN %"
                     PRI_xen_pfn" failed: %d (errno: %d)\n", idx, gpfn, rc, errno);
@@ -422,7 +422,7 @@ static int xen_remove_from_physmap(XenIOState *state,
         xen_pfn_t idx = start_addr + i;
         xen_pfn_t gpfn = phys_offset + i;
 
-        rc = xc_domain_add_to_physmap(xen_xc, xen_domid, XENMAPSPACE_gmfn, idx, gpfn);
+        rc = xen_xc_domain_add_to_physmap(xen_xc, xen_domid, XENMAPSPACE_gmfn, idx, gpfn);
         if (rc) {
             fprintf(stderr, "add_to_physmap MFN %"PRI_xen_pfn" to PFN %"
                     PRI_xen_pfn" failed: %d (errno: %d)\n", idx, gpfn, rc, errno);
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 18/19] xen/pt/msi: Add the register value when printing logging and error messages
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (16 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 17/19] xen: use errno instead of rc for xc_domain_add_to_physmap Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 17:21 ` [Qemu-devel] [PULL 19/19] xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings Stefano Stabellini
                   ` (2 subsequent siblings)
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell
  Cc: xen-devel, qemu-devel, Konrad Rzeszutek Wilk, Stefano Stabellini

From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

We would like to know what the MSI register value is to help
in troubleshooting in the field. As such modify the logging
logic to include such details in xen_pt_msgctrl_reg_write.

Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 hw/xen/xen_pt_config_init.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/hw/xen/xen_pt_config_init.c b/hw/xen/xen_pt_config_init.c
index 9fb3670..56c84e1 100644
--- a/hw/xen/xen_pt_config_init.c
+++ b/hw/xen/xen_pt_config_init.c
@@ -1102,7 +1102,7 @@ static int xen_pt_msgctrl_reg_write(XenPCIPassthroughState *s,
         /* setup MSI pirq for the first time */
         if (!msi->initialized) {
             /* Init physical one */
-            XEN_PT_LOG(&s->dev, "setup MSI\n");
+            XEN_PT_LOG(&s->dev, "setup MSI (register: %x).\n", *val);
             if (xen_pt_msi_setup(s)) {
                 /* We do not broadcast the error to the framework code, so
                  * that MSI errors are contained in MSI emulation code and
@@ -1110,12 +1110,12 @@ static int xen_pt_msgctrl_reg_write(XenPCIPassthroughState *s,
                  * Guest MSI would be actually not working.
                  */
                 *val &= ~PCI_MSI_FLAGS_ENABLE;
-                XEN_PT_WARN(&s->dev, "Can not map MSI.\n");
+                XEN_PT_WARN(&s->dev, "Can not map MSI (register: %x)!\n", *val);
                 return 0;
             }
             if (xen_pt_msi_update(s)) {
                 *val &= ~PCI_MSI_FLAGS_ENABLE;
-                XEN_PT_WARN(&s->dev, "Can not bind MSI\n");
+                XEN_PT_WARN(&s->dev, "Can not bind MSI (register: %x)!\n", *val);
                 return 0;
             }
             msi->initialized = true;
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* [Qemu-devel] [PULL 19/19] xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings.
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (17 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 18/19] xen/pt/msi: Add the register value when printing logging and error messages Stefano Stabellini
@ 2015-09-08 17:21 ` Stefano Stabellini
  2015-09-08 19:12 ` [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Peter Maydell
  2015-09-21  1:16 ` [Qemu-devel] [Xen-devel] " Chen, Tiejun
  20 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-08 17:21 UTC (permalink / raw)
  To: peter.maydell
  Cc: xen-devel, qemu-devel, Konrad Rzeszutek Wilk, Stefano Stabellini

From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

If XEN_PT_LOGGING_ENABLED is enabled the XEN_PT_LOG macros start
using the first argument. Which means if within the function there
is only one user of the argument ('d') and XEN_PT_LOGGING_ENABLED
is not set, we get compiler warnings. This is not the case now
but with the "xen/pt: Use xen_host_pci_get_[byte|word] instead of dev.config"
we will hit - so this sync up the function to the rest of them.

Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 hw/xen/xen_pt_config_init.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/xen/xen_pt_config_init.c b/hw/xen/xen_pt_config_init.c
index 56c84e1..7b5e65f 100644
--- a/hw/xen/xen_pt_config_init.c
+++ b/hw/xen/xen_pt_config_init.c
@@ -1434,7 +1434,7 @@ static int xen_pt_msixctrl_reg_init(XenPCIPassthroughState *s,
     reg_field = pci_get_word(d->config + real_offset);
 
     if (reg_field & PCI_MSIX_FLAGS_ENABLE) {
-        XEN_PT_LOG(d, "MSIX already enabled, disabling it first\n");
+        XEN_PT_LOG(&s->dev, "MSIX already enabled, disabling it first\n");
         xen_host_pci_set_word(&s->real_device, real_offset,
                               reg_field & ~PCI_MSIX_FLAGS_ENABLE);
     }
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (18 preceding siblings ...)
  2015-09-08 17:21 ` [Qemu-devel] [PULL 19/19] xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings Stefano Stabellini
@ 2015-09-08 19:12 ` Peter Maydell
  2015-09-09 13:06   ` Stefano Stabellini
  2015-09-21  1:16 ` [Qemu-devel] [Xen-devel] " Chen, Tiejun
  20 siblings, 1 reply; 51+ messages in thread
From: Peter Maydell @ 2015-09-08 19:12 UTC (permalink / raw)
  To: Stefano Stabellini; +Cc: xen-devel@lists.xensource.com Devel, QEMU Developers

On 8 September 2015 at 18:21, Stefano Stabellini
<stefano.stabellini@eu.citrix.com> wrote:
> The following changes since commit 8611280505119e296757a60711a881341603fa5a:
>
>   target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)
>
> are available in the git repository at:
>
>   git://xenbits.xen.org/people/sstabellini/qemu-dm.git tags/xen-2015-09-08-tag
>
> for you to fetch changes up to ba2250ad148997b1352aba976aac66b55410e7e4:
>
>   xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings. (2015-09-08 15:21:56 +0000)
>
> ----------------------------------------------------------------
> Xen branch xen-2015-09-08
>
> ----------------------------------------------------------------

Hi. I'm afraid this fails to build on OSX (and probably Windows too,
though that build hasn't run yet):

  CC    i386-softmmu/hw/i386/pci-assign-load-rom.o
/Users/pm215/src/qemu/hw/i386/pci-assign-load-rom.c:6:10: fatal error:
      'sys/io.h' file not found
#include <sys/io.h>
         ^
  CC    alpha-softmmu/hw/alpha/pci.o
1 error generated.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-08 19:12 ` [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Peter Maydell
@ 2015-09-09 13:06   ` Stefano Stabellini
  2015-09-09 16:10     ` Stefano Stabellini
                       ` (2 more replies)
  0 siblings, 3 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-09 13:06 UTC (permalink / raw)
  To: tiejun.chen
  Cc: peter.maydell, xen-devel@lists.xensource.com Devel,
	QEMU Developers, Stefano Stabellini

On Tue, 8 Sep 2015, Peter Maydell wrote:
> On 8 September 2015 at 18:21, Stefano Stabellini
> <stefano.stabellini@eu.citrix.com> wrote:
> > The following changes since commit 8611280505119e296757a60711a881341603fa5a:
> >
> >   target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)
> >
> > are available in the git repository at:
> >
> >   git://xenbits.xen.org/people/sstabellini/qemu-dm.git tags/xen-2015-09-08-tag
> >
> > for you to fetch changes up to ba2250ad148997b1352aba976aac66b55410e7e4:
> >
> >   xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings. (2015-09-08 15:21:56 +0000)
> >
> > ----------------------------------------------------------------
> > Xen branch xen-2015-09-08
> >
> > ----------------------------------------------------------------
> 
> Hi. I'm afraid this fails to build on OSX (and probably Windows too,
> though that build hasn't run yet):
> 
>   CC    i386-softmmu/hw/i386/pci-assign-load-rom.o
> /Users/pm215/src/qemu/hw/i386/pci-assign-load-rom.c:6:10: fatal error:
>       'sys/io.h' file not found
> #include <sys/io.h>
>          ^
>   CC    alpha-softmmu/hw/alpha/pci.o
> 1 error generated.

Tiejun,

this is caused by 33d33242b7d802e6c994f3d56ecba96a66465dc3,
"hw/pci-assign: split pci-assign.c". Could you please double-check
non-Linux builds?


I suspect that the fix would be quite small, but I don't have an OSX or
a Windows build environment to try it.

Speak about build environments, Peter, would you care to share your
scripts and setup so that I can run similar tests in the future on my
own?  I have no OSX machines so I tried to do a Windows
cross-compile, following http://wiki.qemu.org/Hosts/W32 on Debian 7, but
I failed very early with an "ERROR: zlib check failed".

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-09 13:06   ` Stefano Stabellini
@ 2015-09-09 16:10     ` Stefano Stabellini
  2015-09-09 17:33       ` Peter Maydell
  2015-09-10  1:21       ` Chen, Tiejun
  2015-09-09 17:21     ` Peter Maydell
  2015-09-10  1:12     ` Chen, Tiejun
  2 siblings, 2 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-09 16:10 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: tiejun.chen, xen-devel@lists.xensource.com Devel, QEMU Developers,
	peter.maydell

On Wed, 9 Sep 2015, Stefano Stabellini wrote:
> On Tue, 8 Sep 2015, Peter Maydell wrote:
> > On 8 September 2015 at 18:21, Stefano Stabellini
> > <stefano.stabellini@eu.citrix.com> wrote:
> > > The following changes since commit 8611280505119e296757a60711a881341603fa5a:
> > >
> > >   target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)
> > >
> > > are available in the git repository at:
> > >
> > >   git://xenbits.xen.org/people/sstabellini/qemu-dm.git tags/xen-2015-09-08-tag
> > >
> > > for you to fetch changes up to ba2250ad148997b1352aba976aac66b55410e7e4:
> > >
> > >   xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings. (2015-09-08 15:21:56 +0000)
> > >
> > > ----------------------------------------------------------------
> > > Xen branch xen-2015-09-08
> > >
> > > ----------------------------------------------------------------
> > 
> > Hi. I'm afraid this fails to build on OSX (and probably Windows too,
> > though that build hasn't run yet):
> > 
> >   CC    i386-softmmu/hw/i386/pci-assign-load-rom.o
> > /Users/pm215/src/qemu/hw/i386/pci-assign-load-rom.c:6:10: fatal error:
> >       'sys/io.h' file not found
> > #include <sys/io.h>
> >          ^
> >   CC    alpha-softmmu/hw/alpha/pci.o
> > 1 error generated.
> 
> Tiejun,
> 
> this is caused by 33d33242b7d802e6c994f3d56ecba96a66465dc3,
> "hw/pci-assign: split pci-assign.c". Could you please double-check
> non-Linux builds?

I found another issue introduced by the gfx passthrough series on
Windows:

../hw/pci-host/piix.o: In function `host_pci_config_read':
/root/qemu/hw/pci-host/piix.c:778: undefined reference to `_pread'

It is introduced by:

commit fdb70721ba0496a767137e5505dd27627d19c4a8
Author: Tiejun Chen <tiejun.chen@intel.com>
Date:   Wed Jul 15 13:37:43 2015 +0800

    piix: create host bridge to passthrough


You might have to replace the pread call with lseek and read.

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-09 13:06   ` Stefano Stabellini
  2015-09-09 16:10     ` Stefano Stabellini
@ 2015-09-09 17:21     ` Peter Maydell
  2015-09-10  1:12     ` Chen, Tiejun
  2 siblings, 0 replies; 51+ messages in thread
From: Peter Maydell @ 2015-09-09 17:21 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Tiejun Chen, xen-devel@lists.xensource.com Devel, QEMU Developers

On 9 September 2015 at 14:06, Stefano Stabellini
<stefano.stabellini@eu.citrix.com> wrote:
> Speak about build environments, Peter, would you care to share your
> scripts and setup so that I can run similar tests in the future on my
> own?  I have no OSX machines so I tried to do a Windows
> cross-compile, following http://wiki.qemu.org/Hosts/W32 on Debian 7, but
> I failed very early with an "ERROR: zlib check failed".

My build scripts are at
https://git.linaro.org/people/peter.maydell/misc-scripts.git
(in particular pull-buildtest runs the test and remake-merge-builds
does the one-time configure-each-build-tree setup.) But they're really
just doing a make/make check. I don't have scripts for getting the
cross-compile environment set up in the first place, I'm afraid.

Your error message means you're missing the zlib cross library.
Fedora provides packaged versions of all the cross libs, but for
Debian you have to download them from the upstream websites and
stick them in a directory somewhere.

My (Ubuntu-based) instructions from last time somebody asked:
https://lists.gnu.org/archive/html/qemu-devel/2015-04/msg00688.html

thanks
-- PMM

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-09 16:10     ` Stefano Stabellini
@ 2015-09-09 17:33       ` Peter Maydell
  2015-09-10  1:21       ` Chen, Tiejun
  1 sibling, 0 replies; 51+ messages in thread
From: Peter Maydell @ 2015-09-09 17:33 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Tiejun Chen, xen-devel@lists.xensource.com Devel, QEMU Developers

On 9 September 2015 at 17:10, Stefano Stabellini
<stefano.stabellini@eu.citrix.com> wrote:
> I found another issue introduced by the gfx passthrough series on
> Windows:
>
> ../hw/pci-host/piix.o: In function `host_pci_config_read':
> /root/qemu/hw/pci-host/piix.c:778: undefined reference to `_pread'
>
> It is introduced by:
>
> commit fdb70721ba0496a767137e5505dd27627d19c4a8
> Author: Tiejun Chen <tiejun.chen@intel.com>
> Date:   Wed Jul 15 13:37:43 2015 +0800
>
>     piix: create host bridge to passthrough
>
>
> You might have to replace the pread call with lseek and read.

Will passthrough even work on Windows and OSX hosts?
Consider whether we should be building this code on those
hosts at all...

thanks
-- PMM

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-09 13:06   ` Stefano Stabellini
  2015-09-09 16:10     ` Stefano Stabellini
  2015-09-09 17:21     ` Peter Maydell
@ 2015-09-10  1:12     ` Chen, Tiejun
  2015-09-10  8:59       ` Peter Maydell
  2 siblings, 1 reply; 51+ messages in thread
From: Chen, Tiejun @ 2015-09-10  1:12 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: peter.maydell, xen-devel@lists.xensource.com Devel,
	QEMU Developers

On 9/9/2015 9:06 PM, Stefano Stabellini wrote:
> On Tue, 8 Sep 2015, Peter Maydell wrote:
>> On 8 September 2015 at 18:21, Stefano Stabellini
>> <stefano.stabellini@eu.citrix.com> wrote:
>> > The following changes since commit 8611280505119e296757a60711a881341603fa5a:
>> >
>> >   target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)
>> >
>> > are available in the git repository at:
>> >
>> >   git://xenbits.xen.org/people/sstabellini/qemu-dm.git tags/xen-2015-09-08-tag
>> >
>> > for you to fetch changes up to ba2250ad148997b1352aba976aac66b55410e7e4:
>> >
>> >   xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings. (2015-09-08 15:21:56 +0000)
>> >
>> > ----------------------------------------------------------------
>> > Xen branch xen-2015-09-08
>> >
>> > ----------------------------------------------------------------
>>
>> Hi. I'm afraid this fails to build on OSX (and probably Windows too,
>> though that build hasn't run yet):
>>
>>   CC    i386-softmmu/hw/i386/pci-assign-load-rom.o
>> /Users/pm215/src/qemu/hw/i386/pci-assign-load-rom.c:6:10: fatal error:
>>       'sys/io.h' file not found
>> #include <sys/io.h>
>>          ^
>>   CC    alpha-softmmu/hw/alpha/pci.o
>> 1 error generated.
>
> Tiejun,
>
> this is caused by 33d33242b7d802e6c994f3d56ecba96a66465dc3,
> "hw/pci-assign: split pci-assign.c". Could you please double-check
> non-Linux builds?

Its interesting.

As you see this short log, "hw/pci-assign: split pci-assign.c", so this 
means I just extract something from the original 
hw/i386/kvm/pci-assign.c, and here so I just keep those original head 
files residing hw/i386/kvm/pci-assign.c, and I didn't introduce anything 
new.

So its very probably that you still can't compile successfully even 
without my commit on OSX/Windows, right? I think Peter may be right,

"Will passthrough even work on Windows and OSX hosts?
Consider whether we should be building this code on those
hosts at all..."

I prefer this isn't what we did previously.

>
>
> I suspect that the fix would be quite small, but I don't have an OSX or
> a Windows build environment to try it.

I haven't a this build environment as well. But I think right now you 
can remove "#include <sys/io.h>" to fix this simply since looks this is 
redundant actually.

     hw/i386/pci-assign: remove one head file

     This is redundant actually but really break OS/Windows build.

     Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>

diff --git a/hw/i386/pci-assign-load-rom.c b/hw/i386/pci-assign-load-rom.c
index bad53b7..1f0d4ef 100644
--- a/hw/i386/pci-assign-load-rom.c
+++ b/hw/i386/pci-assign-load-rom.c
@@ -3,7 +3,6 @@
   */
  #include <stdio.h>
  #include <unistd.h>
-#include <sys/io.h>
  #include <sys/mman.h>
  #include <sys/types.h>
  #include <sys/stat.h>


At least I can build this under Linux,

./configure --target-list=x86_64-softmmu && make

Thanks
Tiejun

>
> Speak about build environments, Peter, would you care to share your
> scripts and setup so that I can run similar tests in the future on my
> own?  I have no OSX machines so I tried to do a Windows
> cross-compile, following http://wiki.qemu.org/Hosts/W32 on Debian 7, but
> I failed very early with an "ERROR: zlib check failed".
>

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-09 16:10     ` Stefano Stabellini
  2015-09-09 17:33       ` Peter Maydell
@ 2015-09-10  1:21       ` Chen, Tiejun
  2015-09-10  8:57         ` Peter Maydell
  1 sibling, 1 reply; 51+ messages in thread
From: Chen, Tiejun @ 2015-09-10  1:21 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: peter.maydell, xen-devel@lists.xensource.com Devel,
	QEMU Developers

On 9/10/2015 12:10 AM, Stefano Stabellini wrote:
> On Wed, 9 Sep 2015, Stefano Stabellini wrote:
>> On Tue, 8 Sep 2015, Peter Maydell wrote:
>> > On 8 September 2015 at 18:21, Stefano Stabellini
>> > <stefano.stabellini@eu.citrix.com> wrote:
>> > > The following changes since commit 8611280505119e296757a60711a881341603fa5a:
>> > >
>> > >   target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)
>> > >
>> > > are available in the git repository at:
>> > >
>> > >   git://xenbits.xen.org/people/sstabellini/qemu-dm.git tags/xen-2015-09-08-tag
>> > >
>> > > for you to fetch changes up to ba2250ad148997b1352aba976aac66b55410e7e4:
>> > >
>> > >   xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings. (2015-09-08 15:21:56 +0000)
>> > >
>> > > ----------------------------------------------------------------
>> > > Xen branch xen-2015-09-08
>> > >
>> > > ----------------------------------------------------------------
>> >
>> > Hi. I'm afraid this fails to build on OSX (and probably Windows too,
>> > though that build hasn't run yet):
>> >
>> >   CC    i386-softmmu/hw/i386/pci-assign-load-rom.o
>> > /Users/pm215/src/qemu/hw/i386/pci-assign-load-rom.c:6:10: fatal error:
>> >       'sys/io.h' file not found
>> > #include <sys/io.h>
>> >          ^
>> >   CC    alpha-softmmu/hw/alpha/pci.o
>> > 1 error generated.
>>
>> Tiejun,
>>
>> this is caused by 33d33242b7d802e6c994f3d56ecba96a66465dc3,
>> "hw/pci-assign: split pci-assign.c". Could you please double-check
>> non-Linux builds?
>
> I found another issue introduced by the gfx passthrough series on
> Windows:
>
> ../hw/pci-host/piix.o: In function `host_pci_config_read':
> /root/qemu/hw/pci-host/piix.c:778: undefined reference to `_pread'
>
> It is introduced by:
>
> commit fdb70721ba0496a767137e5505dd27627d19c4a8
> Author: Tiejun Chen <tiejun.chen@intel.com>
> Date:   Wed Jul 15 13:37:43 2015 +0800
>
>      piix: create host bridge to passthrough
>
>
> You might have to replace the pread call with lseek and read.
>

This is also surprising to me. Just see xen_host_pci_config_xxxx() 
inside /hw/xen/xen-host-pci-device.c, there are so many this pread 
usage(). So I really don't understand what's difference between these 
two files.	

Thanks
Tiejun

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10  1:21       ` Chen, Tiejun
@ 2015-09-10  8:57         ` Peter Maydell
  2015-09-10  9:32           ` Chen, Tiejun
  0 siblings, 1 reply; 51+ messages in thread
From: Peter Maydell @ 2015-09-10  8:57 UTC (permalink / raw)
  To: Chen, Tiejun
  Cc: xen-devel@lists.xensource.com Devel, QEMU Developers,
	Stefano Stabellini

On 10 September 2015 at 02:21, Chen, Tiejun <tiejun.chen@intel.com> wrote:
> On 9/10/2015 12:10 AM, Stefano Stabellini wrote:
>> I found another issue introduced by the gfx passthrough series on
>> Windows:
>>
>> ../hw/pci-host/piix.o: In function `host_pci_config_read':
>> /root/qemu/hw/pci-host/piix.c:778: undefined reference to `_pread'
>>
>> It is introduced by:
>>
>> commit fdb70721ba0496a767137e5505dd27627d19c4a8
>> Author: Tiejun Chen <tiejun.chen@intel.com>
>> Date:   Wed Jul 15 13:37:43 2015 +0800
>>
>>      piix: create host bridge to passthrough
>>
>>
>> You might have to replace the pread call with lseek and read.
>>
>
> This is also surprising to me. Just see xen_host_pci_config_xxxx() inside
> /hw/xen/xen-host-pci-device.c, there are so many this pread usage(). So I
> really don't understand what's difference between these two files.

xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
was set by configure. That won't be the case on OSX or Windows, where
the Xen headers don't exist.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10  1:12     ` Chen, Tiejun
@ 2015-09-10  8:59       ` Peter Maydell
  2015-09-10  9:20         ` Chen, Tiejun
  0 siblings, 1 reply; 51+ messages in thread
From: Peter Maydell @ 2015-09-10  8:59 UTC (permalink / raw)
  To: Chen, Tiejun
  Cc: xen-devel@lists.xensource.com Devel, QEMU Developers,
	Stefano Stabellini

On 10 September 2015 at 02:12, Chen, Tiejun <tiejun.chen@intel.com> wrote:
> On 9/9/2015 9:06 PM, Stefano Stabellini wrote:
>>
>> On Tue, 8 Sep 2015, Peter Maydell wrote:
>>>
>>> On 8 September 2015 at 18:21, Stefano Stabellini
>>> <stefano.stabellini@eu.citrix.com> wrote:
>>> > The following changes since commit
>>> > 8611280505119e296757a60711a881341603fa5a:
>>> >
>>> >   target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)
>>> >
>>> > are available in the git repository at:
>>> >
>>> >   git://xenbits.xen.org/people/sstabellini/qemu-dm.git
>>> > tags/xen-2015-09-08-tag
>>> >
>>> > for you to fetch changes up to
>>> > ba2250ad148997b1352aba976aac66b55410e7e4:
>>> >
>>> >   xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings.
>>> > (2015-09-08 15:21:56 +0000)
>>> >
>>> > ----------------------------------------------------------------
>>> > Xen branch xen-2015-09-08
>>> >
>>> > ----------------------------------------------------------------
>>>
>>> Hi. I'm afraid this fails to build on OSX (and probably Windows too,
>>> though that build hasn't run yet):
>>>
>>>   CC    i386-softmmu/hw/i386/pci-assign-load-rom.o
>>> /Users/pm215/src/qemu/hw/i386/pci-assign-load-rom.c:6:10: fatal error:
>>>       'sys/io.h' file not found
>>> #include <sys/io.h>
>>>          ^
>>>   CC    alpha-softmmu/hw/alpha/pci.o
>>> 1 error generated.
>>
>>
>> Tiejun,
>>
>> this is caused by 33d33242b7d802e6c994f3d56ecba96a66465dc3,
>> "hw/pci-assign: split pci-assign.c". Could you please double-check
>> non-Linux builds?
>
>
> Its interesting.
>
> As you see this short log, "hw/pci-assign: split pci-assign.c", so this
> means I just extract something from the original hw/i386/kvm/pci-assign.c,
> and here so I just keep those original head files residing
> hw/i386/kvm/pci-assign.c, and I didn't introduce anything new.

hw/i386/kvm/pci-assign.c is only built if configure set CONFIG_KVM,
which it won't do on Windows or OSX builds.

It sounds like your patch has incorrectly moved code out of files
which are compiled only if KVM is present, or only if we're doing
Xen PCI passthrough, and into compiled-for-everything files.

> So its very probably that you still can't compile successfully even without
> my commit on OSX/Windows, right?

OSX and Windows build fine on master at the moment; I check this
for every pull request.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10  8:59       ` Peter Maydell
@ 2015-09-10  9:20         ` Chen, Tiejun
  2015-09-10  9:59           ` Stefano Stabellini
  0 siblings, 1 reply; 51+ messages in thread
From: Chen, Tiejun @ 2015-09-10  9:20 UTC (permalink / raw)
  To: Peter Maydell
  Cc: xen-devel@lists.xensource.com Devel, QEMU Developers,
	Stefano Stabellini

>> As you see this short log, "hw/pci-assign: split pci-assign.c", so this
>> means I just extract something from the original hw/i386/kvm/pci-assign.c,
>> and here so I just keep those original head files residing
>> hw/i386/kvm/pci-assign.c, and I didn't introduce anything new.
>
> hw/i386/kvm/pci-assign.c is only built if configure set CONFIG_KVM,
> which it won't do on Windows or OSX builds.
>
> It sounds like your patch has incorrectly moved code out of files
> which are compiled only if KVM is present, or only if we're doing
> Xen PCI passthrough, and into compiled-for-everything files.
>

Yes, we want to share this chunk of codes between Xen and Kvm. Just to 
this error, could we remove #include <sys/io.h>? As I mentioned I still 
can compile this file without this head file.

Thanks
Tiejun

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10  8:57         ` Peter Maydell
@ 2015-09-10  9:32           ` Chen, Tiejun
  2015-09-10  9:42             ` Stefano Stabellini
  0 siblings, 1 reply; 51+ messages in thread
From: Chen, Tiejun @ 2015-09-10  9:32 UTC (permalink / raw)
  To: Peter Maydell
  Cc: xen-devel@lists.xensource.com Devel, QEMU Developers,
	Stefano Stabellini

> xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> was set by configure. That won't be the case on OSX or Windows, where
> the Xen headers don't exist.
>

Okay. This actually shouldn't be enabled on Windows so what about this?

diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
index 58a33fb..9a1fcb9 100644
--- a/hw/pci-host/piix.c
+++ b/hw/pci-host/piix.c
@@ -739,6 +739,7 @@ static const TypeInfo i440fx_info = {
      .class_init    = i440fx_class_init,
  };

+#ifndef _WIN32
  /* IGD Passthrough Host Bridge. */
  typedef struct {
      uint8_t offset;
@@ -819,6 +820,7 @@ static const TypeInfo igd_passthrough_i440fx_info = {
      .instance_size = sizeof(PCII440FXState),
      .class_init    = igd_passthrough_i440fx_class_init,
  };
+#endif

  static const char *i440fx_pcihost_root_bus_path(PCIHostState *host_bridge,
                                                  PCIBus *rootbus)
@@ -861,7 +863,9 @@ static const TypeInfo i440fx_pcihost_info = {
  static void i440fx_register_types(void)
  {
      type_register_static(&i440fx_info);
+#ifndef _WIN32
      type_register_static(&igd_passthrough_i440fx_info);
+#endif
      type_register_static(&piix3_pci_type_info);
      type_register_static(&piix3_info);
      type_register_static(&piix3_xen_info);

Thanks
Tiejun

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10  9:32           ` Chen, Tiejun
@ 2015-09-10  9:42             ` Stefano Stabellini
  2015-09-10 10:29               ` Stefano Stabellini
  0 siblings, 1 reply; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-10  9:42 UTC (permalink / raw)
  To: Chen, Tiejun
  Cc: Peter Maydell, xen-devel@lists.xensource.com Devel,
	QEMU Developers, Stefano Stabellini

On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > was set by configure. That won't be the case on OSX or Windows, where
> > the Xen headers don't exist.
> > 
> 
> Okay. This actually shouldn't be enabled on Windows so what about this?

I think it would be nicer to replace the pread than introducing ifdefs.


> diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> index 58a33fb..9a1fcb9 100644
> --- a/hw/pci-host/piix.c
> +++ b/hw/pci-host/piix.c
> @@ -739,6 +739,7 @@ static const TypeInfo i440fx_info = {
>      .class_init    = i440fx_class_init,
>  };
> 
> +#ifndef _WIN32
>  /* IGD Passthrough Host Bridge. */
>  typedef struct {
>      uint8_t offset;
> @@ -819,6 +820,7 @@ static const TypeInfo igd_passthrough_i440fx_info = {
>      .instance_size = sizeof(PCII440FXState),
>      .class_init    = igd_passthrough_i440fx_class_init,
>  };
> +#endif
> 
>  static const char *i440fx_pcihost_root_bus_path(PCIHostState *host_bridge,
>                                                  PCIBus *rootbus)
> @@ -861,7 +863,9 @@ static const TypeInfo i440fx_pcihost_info = {
>  static void i440fx_register_types(void)
>  {
>      type_register_static(&i440fx_info);
> +#ifndef _WIN32
>      type_register_static(&igd_passthrough_i440fx_info);
> +#endif
>      type_register_static(&piix3_pci_type_info);
>      type_register_static(&piix3_info);
>      type_register_static(&piix3_xen_info);
> 
> Thanks
> Tiejun
> 

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10  9:20         ` Chen, Tiejun
@ 2015-09-10  9:59           ` Stefano Stabellini
  0 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-10  9:59 UTC (permalink / raw)
  To: Chen, Tiejun
  Cc: Peter Maydell, xen-devel@lists.xensource.com Devel,
	QEMU Developers, Stefano Stabellini

On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > As you see this short log, "hw/pci-assign: split pci-assign.c", so this
> > > means I just extract something from the original hw/i386/kvm/pci-assign.c,
> > > and here so I just keep those original head files residing
> > > hw/i386/kvm/pci-assign.c, and I didn't introduce anything new.
> > 
> > hw/i386/kvm/pci-assign.c is only built if configure set CONFIG_KVM,
> > which it won't do on Windows or OSX builds.
> > 
> > It sounds like your patch has incorrectly moved code out of files
> > which are compiled only if KVM is present, or only if we're doing
> > Xen PCI passthrough, and into compiled-for-everything files.
> > 
> 
> Yes, we want to share this chunk of codes between Xen and Kvm. Just to this
> error, could we remove #include <sys/io.h>? As I mentioned I still can compile
> this file without this head file.

And #include <sys/mman.h>, but it does seem to still work on Linux after
removing them

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10  9:42             ` Stefano Stabellini
@ 2015-09-10 10:29               ` Stefano Stabellini
  2015-09-10 10:46                 ` Michael S. Tsirkin
  2015-09-14  9:57                 ` Paolo Bonzini
  0 siblings, 2 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-10 10:29 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Chen, Tiejun, xen-devel@lists.xensource.com Devel, mst,
	QEMU Developers, Peter Maydell

CC Michael

On Thu, 10 Sep 2015, Stefano Stabellini wrote:
> On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > > was set by configure. That won't be the case on OSX or Windows, where
> > > the Xen headers don't exist.
> > > 
> > 
> > Okay. This actually shouldn't be enabled on Windows so what about this?
> 
> I think it would be nicer to replace the pread than introducing ifdefs.

Something like:

---
Replace pread with read to avoid build breakages on Windows

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
index 58a33fb..9a40429 100644
--- a/hw/pci-host/piix.c
+++ b/hw/pci-host/piix.c
@@ -774,8 +774,11 @@ static int host_pci_config_read(int pos, int len, uint32_t val)
         return -ENODEV;
     }
 
+    if (lseek(config_fd, pos, SEEK_SET) != pos) {
+        return -errno;
+    }
     do {
-        rc = pread(config_fd, (uint8_t *)&val, len, pos);
+        rc = read(config_fd, (uint8_t *)&val, len);
     } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
     if (rc != len) {
         return -errno;

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10 10:29               ` Stefano Stabellini
@ 2015-09-10 10:46                 ` Michael S. Tsirkin
  2015-09-10 11:26                   ` Stefano Stabellini
  2015-09-14  9:57                 ` Paolo Bonzini
  1 sibling, 1 reply; 51+ messages in thread
From: Michael S. Tsirkin @ 2015-09-10 10:46 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Chen, Tiejun, xen-devel@lists.xensource.com Devel,
	QEMU Developers, Peter Maydell

On Thu, Sep 10, 2015 at 11:29:18AM +0100, Stefano Stabellini wrote:
> CC Michael
> 
> On Thu, 10 Sep 2015, Stefano Stabellini wrote:
> > On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > > > was set by configure. That won't be the case on OSX or Windows, where
> > > > the Xen headers don't exist.
> > > > 
> > > 
> > > Okay. This actually shouldn't be enabled on Windows so what about this?
> > 
> > I think it would be nicer to replace the pread than introducing ifdefs.
> 
> Something like:
> 
> ---
> Replace pread with read to avoid build breakages on Windows
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

I'd prefer a wrapper that does the right thing.
No sense in doubling the # of system calls for everyone.

> 
> diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> index 58a33fb..9a40429 100644
> --- a/hw/pci-host/piix.c
> +++ b/hw/pci-host/piix.c
> @@ -774,8 +774,11 @@ static int host_pci_config_read(int pos, int len, uint32_t val)
>          return -ENODEV;
>      }
>  
> +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> +        return -errno;
> +    }
>      do {
> -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> +        rc = read(config_fd, (uint8_t *)&val, len);
>      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
>      if (rc != len) {
>          return -errno;

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10 10:46                 ` Michael S. Tsirkin
@ 2015-09-10 11:26                   ` Stefano Stabellini
  2015-09-10 12:00                     ` Michael S. Tsirkin
  0 siblings, 1 reply; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-10 11:26 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Peter Maydell, Chen, Tiejun, xen-devel@lists.xensource.com Devel,
	QEMU Developers, Stefano Stabellini

On Thu, 10 Sep 2015, Michael S. Tsirkin wrote:
> On Thu, Sep 10, 2015 at 11:29:18AM +0100, Stefano Stabellini wrote:
> > CC Michael
> > 
> > On Thu, 10 Sep 2015, Stefano Stabellini wrote:
> > > On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > > > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > > > > was set by configure. That won't be the case on OSX or Windows, where
> > > > > the Xen headers don't exist.
> > > > > 
> > > > 
> > > > Okay. This actually shouldn't be enabled on Windows so what about this?
> > > 
> > > I think it would be nicer to replace the pread than introducing ifdefs.
> > 
> > Something like:
> > 
> > ---
> > Replace pread with read to avoid build breakages on Windows
> > 
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> 
> I'd prefer a wrapper that does the right thing.
> No sense in doubling the # of system calls for everyone.

If this was done on an hot path I would agree with you, but it is just
one call at initialization time (igd_pt_i440fx_initfn).


> > diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> > index 58a33fb..9a40429 100644
> > --- a/hw/pci-host/piix.c
> > +++ b/hw/pci-host/piix.c
> > @@ -774,8 +774,11 @@ static int host_pci_config_read(int pos, int len, uint32_t val)
> >          return -ENODEV;
> >      }
> >  
> > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> > +        return -errno;
> > +    }
> >      do {
> > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> > +        rc = read(config_fd, (uint8_t *)&val, len);
> >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
> >      if (rc != len) {
> >          return -errno;
> 

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10 11:26                   ` Stefano Stabellini
@ 2015-09-10 12:00                     ` Michael S. Tsirkin
  2015-09-10 12:00                       ` Stefano Stabellini
  0 siblings, 1 reply; 51+ messages in thread
From: Michael S. Tsirkin @ 2015-09-10 12:00 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Chen, Tiejun, xen-devel@lists.xensource.com Devel,
	QEMU Developers, Peter Maydell

On Thu, Sep 10, 2015 at 12:26:21PM +0100, Stefano Stabellini wrote:
> On Thu, 10 Sep 2015, Michael S. Tsirkin wrote:
> > On Thu, Sep 10, 2015 at 11:29:18AM +0100, Stefano Stabellini wrote:
> > > CC Michael
> > > 
> > > On Thu, 10 Sep 2015, Stefano Stabellini wrote:
> > > > On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > > > > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > > > > > was set by configure. That won't be the case on OSX or Windows, where
> > > > > > the Xen headers don't exist.
> > > > > > 
> > > > > 
> > > > > Okay. This actually shouldn't be enabled on Windows so what about this?
> > > > 
> > > > I think it would be nicer to replace the pread than introducing ifdefs.
> > > 
> > > Something like:
> > > 
> > > ---
> > > Replace pread with read to avoid build breakages on Windows
> > > 
> > > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > 
> > I'd prefer a wrapper that does the right thing.
> > No sense in doubling the # of system calls for everyone.
> 
> If this was done on an hot path I would agree with you, but it is just
> one call at initialization time (igd_pt_i440fx_initfn).

I missed this fact. OK then.

> 
> > > diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> > > index 58a33fb..9a40429 100644
> > > --- a/hw/pci-host/piix.c
> > > +++ b/hw/pci-host/piix.c
> > > @@ -774,8 +774,11 @@ static int host_pci_config_read(int pos, int len, uint32_t val)
> > >          return -ENODEV;
> > >      }
> > >  
> > > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> > > +        return -errno;
> > > +    }
> > >      do {
> > > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> > > +        rc = read(config_fd, (uint8_t *)&val, len);
> > >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
> > >      if (rc != len) {
> > >          return -errno;
> > 

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10 12:00                     ` Michael S. Tsirkin
@ 2015-09-10 12:00                       ` Stefano Stabellini
  2015-09-10 12:13                         ` Michael S. Tsirkin
  0 siblings, 1 reply; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-10 12:00 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Peter Maydell, Chen, Tiejun, xen-devel@lists.xensource.com Devel,
	QEMU Developers, Stefano Stabellini

On Thu, 10 Sep 2015, Michael S. Tsirkin wrote:
> On Thu, Sep 10, 2015 at 12:26:21PM +0100, Stefano Stabellini wrote:
> > On Thu, 10 Sep 2015, Michael S. Tsirkin wrote:
> > > On Thu, Sep 10, 2015 at 11:29:18AM +0100, Stefano Stabellini wrote:
> > > > CC Michael
> > > > 
> > > > On Thu, 10 Sep 2015, Stefano Stabellini wrote:
> > > > > On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > > > > > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > > > > > > was set by configure. That won't be the case on OSX or Windows, where
> > > > > > > the Xen headers don't exist.
> > > > > > > 
> > > > > > 
> > > > > > Okay. This actually shouldn't be enabled on Windows so what about this?
> > > > > 
> > > > > I think it would be nicer to replace the pread than introducing ifdefs.
> > > > 
> > > > Something like:
> > > > 
> > > > ---
> > > > Replace pread with read to avoid build breakages on Windows
> > > > 
> > > > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > > 
> > > I'd prefer a wrapper that does the right thing.
> > > No sense in doubling the # of system calls for everyone.
> > 
> > If this was done on an hot path I would agree with you, but it is just
> > one call at initialization time (igd_pt_i440fx_initfn).
> 
> I missed this fact. OK then.

Thanks! I'll fold it the offending patch
(http://marc.info/?l=qemu-devel&m=144174596628052&w=2) and resend.


> > > > diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> > > > index 58a33fb..9a40429 100644
> > > > --- a/hw/pci-host/piix.c
> > > > +++ b/hw/pci-host/piix.c
> > > > @@ -774,8 +774,11 @@ static int host_pci_config_read(int pos, int len, uint32_t val)
> > > >          return -ENODEV;
> > > >      }
> > > >  
> > > > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> > > > +        return -errno;
> > > > +    }
> > > >      do {
> > > > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> > > > +        rc = read(config_fd, (uint8_t *)&val, len);
> > > >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
> > > >      if (rc != len) {
> > > >          return -errno;
> > > 
> 

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10 12:00                       ` Stefano Stabellini
@ 2015-09-10 12:13                         ` Michael S. Tsirkin
  2015-09-11  0:40                           ` Chen, Tiejun
  0 siblings, 1 reply; 51+ messages in thread
From: Michael S. Tsirkin @ 2015-09-10 12:13 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Chen, Tiejun, xen-devel@lists.xensource.com Devel,
	QEMU Developers, Peter Maydell

On Thu, Sep 10, 2015 at 01:00:35PM +0100, Stefano Stabellini wrote:
> On Thu, 10 Sep 2015, Michael S. Tsirkin wrote:
> > On Thu, Sep 10, 2015 at 12:26:21PM +0100, Stefano Stabellini wrote:
> > > On Thu, 10 Sep 2015, Michael S. Tsirkin wrote:
> > > > On Thu, Sep 10, 2015 at 11:29:18AM +0100, Stefano Stabellini wrote:
> > > > > CC Michael
> > > > > 
> > > > > On Thu, 10 Sep 2015, Stefano Stabellini wrote:
> > > > > > On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > > > > > > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > > > > > > > was set by configure. That won't be the case on OSX or Windows, where
> > > > > > > > the Xen headers don't exist.
> > > > > > > > 
> > > > > > > 
> > > > > > > Okay. This actually shouldn't be enabled on Windows so what about this?
> > > > > > 
> > > > > > I think it would be nicer to replace the pread than introducing ifdefs.
> > > > > 
> > > > > Something like:
> > > > > 
> > > > > ---
> > > > > Replace pread with read to avoid build breakages on Windows
> > > > > 
> > > > > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > > > 
> > > > I'd prefer a wrapper that does the right thing.
> > > > No sense in doubling the # of system calls for everyone.
> > > 
> > > If this was done on an hot path I would agree with you, but it is just
> > > one call at initialization time (igd_pt_i440fx_initfn).
> > 
> > I missed this fact. OK then.
> 
> Thanks! I'll fold it the offending patch
> (http://marc.info/?l=qemu-devel&m=144174596628052&w=2) and resend.
> 

Reviewed-by: Michael S. Tsirkin <mst@redhat.com>


> > > > > diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> > > > > index 58a33fb..9a40429 100644
> > > > > --- a/hw/pci-host/piix.c
> > > > > +++ b/hw/pci-host/piix.c
> > > > > @@ -774,8 +774,11 @@ static int host_pci_config_read(int pos, int len, uint32_t val)
> > > > >          return -ENODEV;
> > > > >      }
> > > > >  
> > > > > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> > > > > +        return -errno;
> > > > > +    }
> > > > >      do {
> > > > > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> > > > > +        rc = read(config_fd, (uint8_t *)&val, len);
> > > > >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
> > > > >      if (rc != len) {
> > > > >          return -errno;
> > > > 
> > 

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10 12:13                         ` Michael S. Tsirkin
@ 2015-09-11  0:40                           ` Chen, Tiejun
  0 siblings, 0 replies; 51+ messages in thread
From: Chen, Tiejun @ 2015-09-11  0:40 UTC (permalink / raw)
  To: Michael S. Tsirkin, Stefano Stabellini
  Cc: Peter Maydell, xen-devel@lists.xensource.com Devel,
	QEMU Developers

>> Thanks! I'll fold it the offending patch
>> (http://marc.info/?l=qemu-devel&m=144174596628052&w=2) and resend.
>>
>
> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
>

Michale and Stefano,

Thanks a lot :)

Tiejun

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-10 10:29               ` Stefano Stabellini
  2015-09-10 10:46                 ` Michael S. Tsirkin
@ 2015-09-14  9:57                 ` Paolo Bonzini
  2015-09-15  9:55                   ` Stefano Stabellini
  1 sibling, 1 reply; 51+ messages in thread
From: Paolo Bonzini @ 2015-09-14  9:57 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Peter Maydell, Chen, Tiejun, xen-devel@lists.xensource.com Devel,
	QEMU Developers, mst



On 10/09/2015 12:29, Stefano Stabellini wrote:
> +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> +        return -errno;
> +    }
>      do {
> -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> +        rc = read(config_fd, (uint8_t *)&val, len);
>      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));

This leaks config_fd.

Paolo

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-14  9:57                 ` Paolo Bonzini
@ 2015-09-15  9:55                   ` Stefano Stabellini
  2015-09-15 11:00                     ` Paolo Bonzini
  0 siblings, 1 reply; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-15  9:55 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Peter Maydell, xen-devel@lists.xensource.com Devel, mst,
	Stefano Stabellini, QEMU Developers, Chen, Tiejun

On Mon, 14 Sep 2015, Paolo Bonzini wrote:
> On 10/09/2015 12:29, Stefano Stabellini wrote:
> > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> > +        return -errno;
> > +    }
> >      do {
> > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> > +        rc = read(config_fd, (uint8_t *)&val, len);
> >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
> 
> This leaks config_fd.

I don't follow, it leaks config_fd where?

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-15  9:55                   ` Stefano Stabellini
@ 2015-09-15 11:00                     ` Paolo Bonzini
  2015-09-16  1:11                       ` Chen, Tiejun
  0 siblings, 1 reply; 51+ messages in thread
From: Paolo Bonzini @ 2015-09-15 11:00 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Peter Maydell, Chen, Tiejun, xen-devel@lists.xensource.com Devel,
	QEMU Developers, mst



On 15/09/2015 11:55, Stefano Stabellini wrote:
> On Mon, 14 Sep 2015, Paolo Bonzini wrote:
>> > On 10/09/2015 12:29, Stefano Stabellini wrote:
>>> > > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
>>> > > +        return -errno;
>>> > > +    }
>>> > >      do {
>>> > > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
>>> > > +        rc = read(config_fd, (uint8_t *)&val, len);
>>> > >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
>> > 
>> > This leaks config_fd.
> I don't follow, it leaks config_fd where?

Where lseek returns -errno (and IIRC in other places in the same function).

Paolo

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-15 11:00                     ` Paolo Bonzini
@ 2015-09-16  1:11                       ` Chen, Tiejun
  2015-09-17 11:47                         ` Stefano Stabellini
  0 siblings, 1 reply; 51+ messages in thread
From: Chen, Tiejun @ 2015-09-16  1:11 UTC (permalink / raw)
  To: Paolo Bonzini, Stefano Stabellini
  Cc: Peter Maydell, xen-devel@lists.xensource.com Devel,
	QEMU Developers, mst

On 9/15/2015 7:00 PM, Paolo Bonzini wrote:
>
>
> On 15/09/2015 11:55, Stefano Stabellini wrote:
>> On Mon, 14 Sep 2015, Paolo Bonzini wrote:
>>> > On 10/09/2015 12:29, Stefano Stabellini wrote:
>>>> > > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
>>>> > > +        return -errno;
>>>> > > +    }
>>>> > >      do {
>>>> > > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
>>>> > > +        rc = read(config_fd, (uint8_t *)&val, len);
>>>> > >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
>>> >
>>> > This leaks config_fd.
>> I don't follow, it leaks config_fd where?
>
> Where lseek returns -errno (and IIRC in other places in the same function).

Do you mean we need this change?

diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
index 1fb71c8..7d44228 100644
--- a/hw/pci-host/piix.c
+++ b/hw/pci-host/piix.c
@@ -775,15 +775,18 @@ static int host_pci_config_read(int pos, int len, 
uint32_t val)
      }

      if (lseek(config_fd, pos, SEEK_SET) != pos) {
+        close(config_fd);
          return -errno;
      }
      do {
          rc = read(config_fd, (uint8_t *)&val, len);
      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
      if (rc != len) {
+        close(config_fd);
          return -errno;
      }

+    close(config_fd);
      return 0;
  }


Thanks
Tiejun

^ permalink raw reply related	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-16  1:11                       ` Chen, Tiejun
@ 2015-09-17 11:47                         ` Stefano Stabellini
  0 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-17 11:47 UTC (permalink / raw)
  To: Chen, Tiejun
  Cc: Peter Maydell, xen-devel@lists.xensource.com Devel, mst,
	Stefano Stabellini, QEMU Developers, Paolo Bonzini

On Wed, 16 Sep 2015, Chen, Tiejun wrote:
> On 9/15/2015 7:00 PM, Paolo Bonzini wrote:
> > 
> > 
> > On 15/09/2015 11:55, Stefano Stabellini wrote:
> > > On Mon, 14 Sep 2015, Paolo Bonzini wrote:
> > > > > On 10/09/2015 12:29, Stefano Stabellini wrote:
> > > > > > > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> > > > > > > +        return -errno;
> > > > > > > +    }
> > > > > > >      do {
> > > > > > > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> > > > > > > +        rc = read(config_fd, (uint8_t *)&val, len);
> > > > > > >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
> > > > >
> > > > > This leaks config_fd.
> > > I don't follow, it leaks config_fd where?
> > 
> > Where lseek returns -errno (and IIRC in other places in the same function).
> 
> Do you mean we need this change?

Yes, please send out a separate patch. Add my Acked-by.


> diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> index 1fb71c8..7d44228 100644
> --- a/hw/pci-host/piix.c
> +++ b/hw/pci-host/piix.c
> @@ -775,15 +775,18 @@ static int host_pci_config_read(int pos, int len,
> uint32_t val)
>      }
> 
>      if (lseek(config_fd, pos, SEEK_SET) != pos) {
> +        close(config_fd);
>          return -errno;
>      }
>      do {
>          rc = read(config_fd, (uint8_t *)&val, len);
>      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
>      if (rc != len) {
> +        close(config_fd);
>          return -errno;
>      }
> 
> +    close(config_fd);
>      return 0;
>  }
> 
> 
> Thanks
> Tiejun
> 

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [Xen-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
                   ` (19 preceding siblings ...)
  2015-09-08 19:12 ` [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Peter Maydell
@ 2015-09-21  1:16 ` Chen, Tiejun
  2015-09-21 16:03   ` Stefano Stabellini
  20 siblings, 1 reply; 51+ messages in thread
From: Chen, Tiejun @ 2015-09-21  1:16 UTC (permalink / raw)
  To: Stefano Stabellini, peter.maydell; +Cc: xen-devel, qemu-devel

Stefano,

I have two questions,

#1. Which qemu version is this igd stuff going into? 2.6?
#2. Is this igd stuff going into qemu-xen inside xen? Any plan to go 
into xen 4.6?

Thanks
Tiejun

On 9/9/2015 1:21 AM, Stefano Stabellini wrote:
> The following changes since commit 8611280505119e296757a60711a881341603fa5a:
>
>    target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)
>
> are available in the git repository at:
>
>    git://xenbits.xen.org/people/sstabellini/qemu-dm.git tags/xen-2015-09-08-tag
>
> for you to fetch changes up to ba2250ad148997b1352aba976aac66b55410e7e4:
>
>    xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings. (2015-09-08 15:21:56 +0000)
>
> ----------------------------------------------------------------
> Xen branch xen-2015-09-08
>
> ----------------------------------------------------------------
> Don Slutz (1):
>        xen-hvm: Add trace to ioreq
>
> Jan Beulich (1):
>        xen/HVM: atomically access pointers in bufioreq handling
>
> Konrad Rzeszutek Wilk (7):
>        xen-hvm: When using xc_domain_add_to_physmap also include errno when reporting
>        xen/pt: Update comments with proper function name.
>        xen/pt: Make xen_pt_msi_set_enable static
>        xen/pt: xen_host_pci_config_read returns -errno, not -1 on failure
>        xen: use errno instead of rc for xc_domain_add_to_physmap
>        xen/pt/msi: Add the register value when printing logging and error messages
>        xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings.
>
> Michael S. Tsirkin (1):
>        i440fx: make types configurable at run-time
>
> Tiejun Chen (9):
>        pc_init1: pass parameters just with types
>        piix: create host bridge to passthrough
>        hw/pci-assign: split pci-assign.c
>        xen, gfx passthrough: basic graphics passthrough support
>        xen, gfx passthrough: retrieve VGA BIOS to work
>        igd gfx passthrough: create a isa bridge
>        xen, gfx passthrough: register a isa bridge
>        xen, gfx passthrough: register host bridge specific to passthrough
>        xen, gfx passthrough: add opregion mapping
>
>   configure                     |   28 +++++
>   hw/core/machine.c             |   20 +++
>   hw/i386/Makefile.objs         |    1 +
>   hw/i386/kvm/pci-assign.c      |   82 ++-----------
>   hw/i386/pc_piix.c             |  139 ++++++++++++++++++++-
>   hw/i386/pci-assign-load-rom.c |   93 ++++++++++++++
>   hw/pci-host/piix.c            |   91 +++++++++++++-
>   hw/xen/Makefile.objs          |    1 +
>   hw/xen/xen-host-pci-device.c  |    5 +
>   hw/xen/xen-host-pci-device.h  |    1 +
>   hw/xen/xen_pt.c               |   42 ++++++-
>   hw/xen/xen_pt.h               |   22 +++-
>   hw/xen/xen_pt_config_init.c   |   59 ++++++++-
>   hw/xen/xen_pt_graphics.c      |  272 +++++++++++++++++++++++++++++++++++++++++
>   hw/xen/xen_pt_msi.c           |    2 +-
>   include/hw/boards.h           |    1 +
>   include/hw/i386/pc.h          |    9 +-
>   include/hw/pci/pci-assign.h   |   27 ++++
>   include/hw/xen/xen_common.h   |   34 +++++-
>   qemu-options.hx               |    3 +
>   trace-events                  |    7 ++
>   vl.c                          |   10 ++
>   xen-hvm.c                     |   55 +++++++--
>   23 files changed, 891 insertions(+), 113 deletions(-)
>   create mode 100644 hw/i386/pci-assign-load-rom.c
>   create mode 100644 hw/xen/xen_pt_graphics.c
>   create mode 100644 include/hw/pci/pci-assign.h
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
>

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [Xen-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-21  1:16 ` [Qemu-devel] [Xen-devel] " Chen, Tiejun
@ 2015-09-21 16:03   ` Stefano Stabellini
  2015-09-28  2:01     ` Chen, Tiejun
  0 siblings, 1 reply; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-21 16:03 UTC (permalink / raw)
  To: Chen, Tiejun; +Cc: peter.maydell, xen-devel, qemu-devel, Stefano Stabellini

It is going to be in QEMU 2.5 and qemu-xen 4.7.

On Mon, 21 Sep 2015, Chen, Tiejun wrote:
> Stefano,
> 
> I have two questions,
> 
> #1. Which qemu version is this igd stuff going into? 2.6?
> #2. Is this igd stuff going into qemu-xen inside xen? Any plan to go into xen
> 4.6?
> 
> Thanks
> Tiejun
> 
> On 9/9/2015 1:21 AM, Stefano Stabellini wrote:
> > The following changes since commit 8611280505119e296757a60711a881341603fa5a:
> > 
> >    target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)
> > 
> > are available in the git repository at:
> > 
> >    git://xenbits.xen.org/people/sstabellini/qemu-dm.git
> > tags/xen-2015-09-08-tag
> > 
> > for you to fetch changes up to ba2250ad148997b1352aba976aac66b55410e7e4:
> > 
> >    xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings.
> > (2015-09-08 15:21:56 +0000)
> > 
> > ----------------------------------------------------------------
> > Xen branch xen-2015-09-08
> > 
> > ----------------------------------------------------------------
> > Don Slutz (1):
> >        xen-hvm: Add trace to ioreq
> > 
> > Jan Beulich (1):
> >        xen/HVM: atomically access pointers in bufioreq handling
> > 
> > Konrad Rzeszutek Wilk (7):
> >        xen-hvm: When using xc_domain_add_to_physmap also include errno when
> > reporting
> >        xen/pt: Update comments with proper function name.
> >        xen/pt: Make xen_pt_msi_set_enable static
> >        xen/pt: xen_host_pci_config_read returns -errno, not -1 on failure
> >        xen: use errno instead of rc for xc_domain_add_to_physmap
> >        xen/pt/msi: Add the register value when printing logging and error
> > messages
> >        xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings.
> > 
> > Michael S. Tsirkin (1):
> >        i440fx: make types configurable at run-time
> > 
> > Tiejun Chen (9):
> >        pc_init1: pass parameters just with types
> >        piix: create host bridge to passthrough
> >        hw/pci-assign: split pci-assign.c
> >        xen, gfx passthrough: basic graphics passthrough support
> >        xen, gfx passthrough: retrieve VGA BIOS to work
> >        igd gfx passthrough: create a isa bridge
> >        xen, gfx passthrough: register a isa bridge
> >        xen, gfx passthrough: register host bridge specific to passthrough
> >        xen, gfx passthrough: add opregion mapping
> > 
> >   configure                     |   28 +++++
> >   hw/core/machine.c             |   20 +++
> >   hw/i386/Makefile.objs         |    1 +
> >   hw/i386/kvm/pci-assign.c      |   82 ++-----------
> >   hw/i386/pc_piix.c             |  139 ++++++++++++++++++++-
> >   hw/i386/pci-assign-load-rom.c |   93 ++++++++++++++
> >   hw/pci-host/piix.c            |   91 +++++++++++++-
> >   hw/xen/Makefile.objs          |    1 +
> >   hw/xen/xen-host-pci-device.c  |    5 +
> >   hw/xen/xen-host-pci-device.h  |    1 +
> >   hw/xen/xen_pt.c               |   42 ++++++-
> >   hw/xen/xen_pt.h               |   22 +++-
> >   hw/xen/xen_pt_config_init.c   |   59 ++++++++-
> >   hw/xen/xen_pt_graphics.c      |  272
> > +++++++++++++++++++++++++++++++++++++++++
> >   hw/xen/xen_pt_msi.c           |    2 +-
> >   include/hw/boards.h           |    1 +
> >   include/hw/i386/pc.h          |    9 +-
> >   include/hw/pci/pci-assign.h   |   27 ++++
> >   include/hw/xen/xen_common.h   |   34 +++++-
> >   qemu-options.hx               |    3 +
> >   trace-events                  |    7 ++
> >   vl.c                          |   10 ++
> >   xen-hvm.c                     |   55 +++++++--
> >   23 files changed, 891 insertions(+), 113 deletions(-)
> >   create mode 100644 hw/i386/pci-assign-load-rom.c
> >   create mode 100644 hw/xen/xen_pt_graphics.c
> >   create mode 100644 include/hw/pci/pci-assign.h
> > 
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xen.org
> > http://lists.xen.org/xen-devel
> > 
> 

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [Xen-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-21 16:03   ` Stefano Stabellini
@ 2015-09-28  2:01     ` Chen, Tiejun
  2015-09-28 10:01       ` Stefano Stabellini
  0 siblings, 1 reply; 51+ messages in thread
From: Chen, Tiejun @ 2015-09-28  2:01 UTC (permalink / raw)
  To: Stefano Stabellini, Wang, Yong Y; +Cc: peter.maydell, xen-devel, qemu-devel

On 9/22/2015 12:03 AM, Stefano Stabellini wrote:
> It is going to be in QEMU 2.5 and qemu-xen 4.7.

Thanks for your reply.

Do we have any possibility of just merging this series into qemu-xen 
4.6? We really want to support IGD passthrough on xen 4.6 if possible :)

Thanks
Tiejun

>
> On Mon, 21 Sep 2015, Chen, Tiejun wrote:
>> Stefano,
>>
>> I have two questions,
>>
>> #1. Which qemu version is this igd stuff going into? 2.6?
>> #2. Is this igd stuff going into qemu-xen inside xen? Any plan to go into xen
>> 4.6?
>>
>> Thanks
>> Tiejun
>>
>> On 9/9/2015 1:21 AM, Stefano Stabellini wrote:
>> > The following changes since commit 8611280505119e296757a60711a881341603fa5a:
>> >
>> >    target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)
>> >
>> > are available in the git repository at:
>> >
>> >    git://xenbits.xen.org/people/sstabellini/qemu-dm.git
>> > tags/xen-2015-09-08-tag
>> >
>> > for you to fetch changes up to ba2250ad148997b1352aba976aac66b55410e7e4:
>> >
>> >    xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings.
>> > (2015-09-08 15:21:56 +0000)
>> >
>> > ----------------------------------------------------------------
>> > Xen branch xen-2015-09-08
>> >
>> > ----------------------------------------------------------------
>> > Don Slutz (1):
>> >        xen-hvm: Add trace to ioreq
>> >
>> > Jan Beulich (1):
>> >        xen/HVM: atomically access pointers in bufioreq handling
>> >
>> > Konrad Rzeszutek Wilk (7):
>> >        xen-hvm: When using xc_domain_add_to_physmap also include errno when
>> > reporting
>> >        xen/pt: Update comments with proper function name.
>> >        xen/pt: Make xen_pt_msi_set_enable static
>> >        xen/pt: xen_host_pci_config_read returns -errno, not -1 on failure
>> >        xen: use errno instead of rc for xc_domain_add_to_physmap
>> >        xen/pt/msi: Add the register value when printing logging and error
>> > messages
>> >        xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings.
>> >
>> > Michael S. Tsirkin (1):
>> >        i440fx: make types configurable at run-time
>> >
>> > Tiejun Chen (9):
>> >        pc_init1: pass parameters just with types
>> >        piix: create host bridge to passthrough
>> >        hw/pci-assign: split pci-assign.c
>> >        xen, gfx passthrough: basic graphics passthrough support
>> >        xen, gfx passthrough: retrieve VGA BIOS to work
>> >        igd gfx passthrough: create a isa bridge
>> >        xen, gfx passthrough: register a isa bridge
>> >        xen, gfx passthrough: register host bridge specific to passthrough
>> >        xen, gfx passthrough: add opregion mapping
>> >
>> >   configure                     |   28 +++++
>> >   hw/core/machine.c             |   20 +++
>> >   hw/i386/Makefile.objs         |    1 +
>> >   hw/i386/kvm/pci-assign.c      |   82 ++-----------
>> >   hw/i386/pc_piix.c             |  139 ++++++++++++++++++++-
>> >   hw/i386/pci-assign-load-rom.c |   93 ++++++++++++++
>> >   hw/pci-host/piix.c            |   91 +++++++++++++-
>> >   hw/xen/Makefile.objs          |    1 +
>> >   hw/xen/xen-host-pci-device.c  |    5 +
>> >   hw/xen/xen-host-pci-device.h  |    1 +
>> >   hw/xen/xen_pt.c               |   42 ++++++-
>> >   hw/xen/xen_pt.h               |   22 +++-
>> >   hw/xen/xen_pt_config_init.c   |   59 ++++++++-
>> >   hw/xen/xen_pt_graphics.c      |  272
>> > +++++++++++++++++++++++++++++++++++++++++
>> >   hw/xen/xen_pt_msi.c           |    2 +-
>> >   include/hw/boards.h           |    1 +
>> >   include/hw/i386/pc.h          |    9 +-
>> >   include/hw/pci/pci-assign.h   |   27 ++++
>> >   include/hw/xen/xen_common.h   |   34 +++++-
>> >   qemu-options.hx               |    3 +
>> >   trace-events                  |    7 ++
>> >   vl.c                          |   10 ++
>> >   xen-hvm.c                     |   55 +++++++--
>> >   23 files changed, 891 insertions(+), 113 deletions(-)
>> >   create mode 100644 hw/i386/pci-assign-load-rom.c
>> >   create mode 100644 hw/xen/xen_pt_graphics.c
>> >   create mode 100644 include/hw/pci/pci-assign.h
>> >
>> > _______________________________________________
>> > Xen-devel mailing list
>> > Xen-devel@lists.xen.org
>> > http://lists.xen.org/xen-devel
>> >
>>
>
>

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [Xen-devel] [PULL 0/19] xen-2015-09-08-tag
  2015-09-28  2:01     ` Chen, Tiejun
@ 2015-09-28 10:01       ` Stefano Stabellini
  2015-09-28 17:20         ` Pasi Kärkkäinen
  0 siblings, 1 reply; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-28 10:01 UTC (permalink / raw)
  To: Chen, Tiejun
  Cc: qemu-devel, peter.maydell, xen-devel, Wang, Yong Y,
	Stefano Stabellini

No, unfortunately it is not possible at this stage of the release cycle.
But users can still use QEMU 2.5 (as soon as it is released, which
should be in a couple of months) with Xen 4.6 as there is not a strong
tie between QEMU releases and Xen releases.

On Mon, 28 Sep 2015, Chen, Tiejun wrote:
> On 9/22/2015 12:03 AM, Stefano Stabellini wrote:
> > It is going to be in QEMU 2.5 and qemu-xen 4.7.
> 
> Thanks for your reply.
> 
> Do we have any possibility of just merging this series into qemu-xen 4.6? We
> really want to support IGD passthrough on xen 4.6 if possible :)
> 
> Thanks
> Tiejun
> 
> > 
> > On Mon, 21 Sep 2015, Chen, Tiejun wrote:
> > > Stefano,
> > > 
> > > I have two questions,
> > > 
> > > #1. Which qemu version is this igd stuff going into? 2.6?
> > > #2. Is this igd stuff going into qemu-xen inside xen? Any plan to go into
> > > xen
> > > 4.6?
> > > 
> > > Thanks
> > > Tiejun
> > > 
> > > On 9/9/2015 1:21 AM, Stefano Stabellini wrote:
> > > > The following changes since commit
> > > 8611280505119e296757a60711a881341603fa5a:
> > > >
> > > >    target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)
> > > >
> > > > are available in the git repository at:
> > > >
> > > >    git://xenbits.xen.org/people/sstabellini/qemu-dm.git
> > > > tags/xen-2015-09-08-tag
> > > >
> > > > for you to fetch changes up to ba2250ad148997b1352aba976aac66b55410e7e4:
> > > >
> > > >    xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings.
> > > > (2015-09-08 15:21:56 +0000)
> > > >
> > > > ----------------------------------------------------------------
> > > > Xen branch xen-2015-09-08
> > > >
> > > > ----------------------------------------------------------------
> > > > Don Slutz (1):
> > > >        xen-hvm: Add trace to ioreq
> > > >
> > > > Jan Beulich (1):
> > > >        xen/HVM: atomically access pointers in bufioreq handling
> > > >
> > > > Konrad Rzeszutek Wilk (7):
> > > >        xen-hvm: When using xc_domain_add_to_physmap also include errno
> > > when
> > > > reporting
> > > >        xen/pt: Update comments with proper function name.
> > > >        xen/pt: Make xen_pt_msi_set_enable static
> > > >        xen/pt: xen_host_pci_config_read returns -errno, not -1 on
> > > failure
> > > >        xen: use errno instead of rc for xc_domain_add_to_physmap
> > > >        xen/pt/msi: Add the register value when printing logging and
> > > error
> > > > messages
> > > >        xen/pt: Use XEN_PT_LOG properly to guard against compiler
> > > warnings.
> > > >
> > > > Michael S. Tsirkin (1):
> > > >        i440fx: make types configurable at run-time
> > > >
> > > > Tiejun Chen (9):
> > > >        pc_init1: pass parameters just with types
> > > >        piix: create host bridge to passthrough
> > > >        hw/pci-assign: split pci-assign.c
> > > >        xen, gfx passthrough: basic graphics passthrough support
> > > >        xen, gfx passthrough: retrieve VGA BIOS to work
> > > >        igd gfx passthrough: create a isa bridge
> > > >        xen, gfx passthrough: register a isa bridge
> > > >        xen, gfx passthrough: register host bridge specific to
> > > passthrough
> > > >        xen, gfx passthrough: add opregion mapping
> > > >
> > > >   configure                     |   28 +++++
> > > >   hw/core/machine.c             |   20 +++
> > > >   hw/i386/Makefile.objs         |    1 +
> > > >   hw/i386/kvm/pci-assign.c      |   82 ++-----------
> > > >   hw/i386/pc_piix.c             |  139 ++++++++++++++++++++-
> > > >   hw/i386/pci-assign-load-rom.c |   93 ++++++++++++++
> > > >   hw/pci-host/piix.c            |   91 +++++++++++++-
> > > >   hw/xen/Makefile.objs          |    1 +
> > > >   hw/xen/xen-host-pci-device.c  |    5 +
> > > >   hw/xen/xen-host-pci-device.h  |    1 +
> > > >   hw/xen/xen_pt.c               |   42 ++++++-
> > > >   hw/xen/xen_pt.h               |   22 +++-
> > > >   hw/xen/xen_pt_config_init.c   |   59 ++++++++-
> > > >   hw/xen/xen_pt_graphics.c      |  272
> > > > +++++++++++++++++++++++++++++++++++++++++
> > > >   hw/xen/xen_pt_msi.c           |    2 +-
> > > >   include/hw/boards.h           |    1 +
> > > >   include/hw/i386/pc.h          |    9 +-
> > > >   include/hw/pci/pci-assign.h   |   27 ++++
> > > >   include/hw/xen/xen_common.h   |   34 +++++-
> > > >   qemu-options.hx               |    3 +
> > > >   trace-events                  |    7 ++
> > > >   vl.c                          |   10 ++
> > > >   xen-hvm.c                     |   55 +++++++--
> > > >   23 files changed, 891 insertions(+), 113 deletions(-)
> > > >   create mode 100644 hw/i386/pci-assign-load-rom.c
> > > >   create mode 100644 hw/xen/xen_pt_graphics.c
> > > >   create mode 100644 include/hw/pci/pci-assign.h
> > > >
> > > > _______________________________________________
> > > > Xen-devel mailing list
> > > > Xen-devel@lists.xen.org
> > > > http://lists.xen.org/xen-devel
> > > >
> > > 
> > 
> > 
> 

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [Xen-devel]   [PULL 0/19] xen-2015-09-08-tag
  2015-09-28 10:01       ` Stefano Stabellini
@ 2015-09-28 17:20         ` Pasi Kärkkäinen
  2015-09-29  9:53           ` Stefano Stabellini
  0 siblings, 1 reply; 51+ messages in thread
From: Pasi Kärkkäinen @ 2015-09-28 17:20 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Wang, Yong Y, Chen, Tiejun, xen-devel, qemu-devel, peter.maydell

Hi,

On Mon, Sep 28, 2015 at 11:01:11AM +0100, Stefano Stabellini wrote:
> No, unfortunately it is not possible at this stage of the release cycle.
> But users can still use QEMU 2.5 (as soon as it is released, which
> should be in a couple of months) with Xen 4.6 as there is not a strong
> tie between QEMU releases and Xen releases.
> 

Is backport to qemu-xen-4.6 possible *after* Xen 4.6.0 has been released? So basicly for Xen 4.6.1.

There's value in having this feature available out-of-the-box, with stock Xen, without having to replace qemu with a custom build/version.


Thanks,

-- Pasi

> On Mon, 28 Sep 2015, Chen, Tiejun wrote:
> > On 9/22/2015 12:03 AM, Stefano Stabellini wrote:
> > > It is going to be in QEMU 2.5 and qemu-xen 4.7.
> > 
> > Thanks for your reply.
> > 
> > Do we have any possibility of just merging this series into qemu-xen 4.6? We
> > really want to support IGD passthrough on xen 4.6 if possible :)
> > 
> > Thanks
> > Tiejun
> > 
> > > 
> > > On Mon, 21 Sep 2015, Chen, Tiejun wrote:
> > > > Stefano,
> > > > 
> > > > I have two questions,
> > > > 
> > > > #1. Which qemu version is this igd stuff going into? 2.6?
> > > > #2. Is this igd stuff going into qemu-xen inside xen? Any plan to go into
> > > > xen
> > > > 4.6?
> > > > 
> > > > Thanks
> > > > Tiejun
> > > > 
> > > > On 9/9/2015 1:21 AM, Stefano Stabellini wrote:
> > > > > The following changes since commit
> > > > 8611280505119e296757a60711a881341603fa5a:
> > > > >
> > > > >    target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)
> > > > >
> > > > > are available in the git repository at:
> > > > >
> > > > >    git://xenbits.xen.org/people/sstabellini/qemu-dm.git
> > > > > tags/xen-2015-09-08-tag
> > > > >
> > > > > for you to fetch changes up to ba2250ad148997b1352aba976aac66b55410e7e4:
> > > > >
> > > > >    xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings.
> > > > > (2015-09-08 15:21:56 +0000)
> > > > >
> > > > > ----------------------------------------------------------------
> > > > > Xen branch xen-2015-09-08
> > > > >
> > > > > ----------------------------------------------------------------
> > > > > Don Slutz (1):
> > > > >        xen-hvm: Add trace to ioreq
> > > > >
> > > > > Jan Beulich (1):
> > > > >        xen/HVM: atomically access pointers in bufioreq handling
> > > > >
> > > > > Konrad Rzeszutek Wilk (7):
> > > > >        xen-hvm: When using xc_domain_add_to_physmap also include errno
> > > > when
> > > > > reporting
> > > > >        xen/pt: Update comments with proper function name.
> > > > >        xen/pt: Make xen_pt_msi_set_enable static
> > > > >        xen/pt: xen_host_pci_config_read returns -errno, not -1 on
> > > > failure
> > > > >        xen: use errno instead of rc for xc_domain_add_to_physmap
> > > > >        xen/pt/msi: Add the register value when printing logging and
> > > > error
> > > > > messages
> > > > >        xen/pt: Use XEN_PT_LOG properly to guard against compiler
> > > > warnings.
> > > > >
> > > > > Michael S. Tsirkin (1):
> > > > >        i440fx: make types configurable at run-time
> > > > >
> > > > > Tiejun Chen (9):
> > > > >        pc_init1: pass parameters just with types
> > > > >        piix: create host bridge to passthrough
> > > > >        hw/pci-assign: split pci-assign.c
> > > > >        xen, gfx passthrough: basic graphics passthrough support
> > > > >        xen, gfx passthrough: retrieve VGA BIOS to work
> > > > >        igd gfx passthrough: create a isa bridge
> > > > >        xen, gfx passthrough: register a isa bridge
> > > > >        xen, gfx passthrough: register host bridge specific to
> > > > passthrough
> > > > >        xen, gfx passthrough: add opregion mapping
> > > > >
> > > > >   configure                     |   28 +++++
> > > > >   hw/core/machine.c             |   20 +++
> > > > >   hw/i386/Makefile.objs         |    1 +
> > > > >   hw/i386/kvm/pci-assign.c      |   82 ++-----------
> > > > >   hw/i386/pc_piix.c             |  139 ++++++++++++++++++++-
> > > > >   hw/i386/pci-assign-load-rom.c |   93 ++++++++++++++
> > > > >   hw/pci-host/piix.c            |   91 +++++++++++++-
> > > > >   hw/xen/Makefile.objs          |    1 +
> > > > >   hw/xen/xen-host-pci-device.c  |    5 +
> > > > >   hw/xen/xen-host-pci-device.h  |    1 +
> > > > >   hw/xen/xen_pt.c               |   42 ++++++-
> > > > >   hw/xen/xen_pt.h               |   22 +++-
> > > > >   hw/xen/xen_pt_config_init.c   |   59 ++++++++-
> > > > >   hw/xen/xen_pt_graphics.c      |  272
> > > > > +++++++++++++++++++++++++++++++++++++++++
> > > > >   hw/xen/xen_pt_msi.c           |    2 +-
> > > > >   include/hw/boards.h           |    1 +
> > > > >   include/hw/i386/pc.h          |    9 +-
> > > > >   include/hw/pci/pci-assign.h   |   27 ++++
> > > > >   include/hw/xen/xen_common.h   |   34 +++++-
> > > > >   qemu-options.hx               |    3 +
> > > > >   trace-events                  |    7 ++
> > > > >   vl.c                          |   10 ++
> > > > >   xen-hvm.c                     |   55 +++++++--
> > > > >   23 files changed, 891 insertions(+), 113 deletions(-)
> > > > >   create mode 100644 hw/i386/pci-assign-load-rom.c
> > > > >   create mode 100644 hw/xen/xen_pt_graphics.c
> > > > >   create mode 100644 include/hw/pci/pci-assign.h
> > > > >
> > > > > _______________________________________________
> > > > > Xen-devel mailing list
> > > > > Xen-devel@lists.xen.org
> > > > > http://lists.xen.org/xen-devel
> > > > >
> > > > 
> > > 
> > > 
> > 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 51+ messages in thread

* Re: [Qemu-devel] [Xen-devel]   [PULL 0/19] xen-2015-09-08-tag
  2015-09-28 17:20         ` Pasi Kärkkäinen
@ 2015-09-29  9:53           ` Stefano Stabellini
  0 siblings, 0 replies; 51+ messages in thread
From: Stefano Stabellini @ 2015-09-29  9:53 UTC (permalink / raw)
  To: Pasi Kärkkäinen
  Cc: peter.maydell, xen-devel, Stefano Stabellini, Wang, Yong Y,
	qemu-devel, Chen, Tiejun

[-- Attachment #1: Type: text/plain, Size: 6086 bytes --]

On Mon, 28 Sep 2015, Pasi Kärkkäinen wrote:
> Hi,
> 
> On Mon, Sep 28, 2015 at 11:01:11AM +0100, Stefano Stabellini wrote:
> > No, unfortunately it is not possible at this stage of the release cycle.
> > But users can still use QEMU 2.5 (as soon as it is released, which
> > should be in a couple of months) with Xen 4.6 as there is not a strong
> > tie between QEMU releases and Xen releases.
> > 
> 
> Is backport to qemu-xen-4.6 possible *after* Xen 4.6.0 has been released? So basicly for Xen 4.6.1.

I don't think so, this is not backport material (which is basically only
fixes).


> There's value in having this feature available out-of-the-box, with stock Xen, without having to replace qemu with a custom build/version.

Of course, and it will be, in Xen 4.7.


> Thanks,
> 
> -- Pasi
> 
> > On Mon, 28 Sep 2015, Chen, Tiejun wrote:
> > > On 9/22/2015 12:03 AM, Stefano Stabellini wrote:
> > > > It is going to be in QEMU 2.5 and qemu-xen 4.7.
> > > 
> > > Thanks for your reply.
> > > 
> > > Do we have any possibility of just merging this series into qemu-xen 4.6? We
> > > really want to support IGD passthrough on xen 4.6 if possible :)
> > > 
> > > Thanks
> > > Tiejun
> > > 
> > > > 
> > > > On Mon, 21 Sep 2015, Chen, Tiejun wrote:
> > > > > Stefano,
> > > > > 
> > > > > I have two questions,
> > > > > 
> > > > > #1. Which qemu version is this igd stuff going into? 2.6?
> > > > > #2. Is this igd stuff going into qemu-xen inside xen? Any plan to go into
> > > > > xen
> > > > > 4.6?
> > > > > 
> > > > > Thanks
> > > > > Tiejun
> > > > > 
> > > > > On 9/9/2015 1:21 AM, Stefano Stabellini wrote:
> > > > > > The following changes since commit
> > > > > 8611280505119e296757a60711a881341603fa5a:
> > > > > >
> > > > > >    target-microblaze: Use setcond for pcmp* (2015-09-08 08:49:33 +0200)
> > > > > >
> > > > > > are available in the git repository at:
> > > > > >
> > > > > >    git://xenbits.xen.org/people/sstabellini/qemu-dm.git
> > > > > > tags/xen-2015-09-08-tag
> > > > > >
> > > > > > for you to fetch changes up to ba2250ad148997b1352aba976aac66b55410e7e4:
> > > > > >
> > > > > >    xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings.
> > > > > > (2015-09-08 15:21:56 +0000)
> > > > > >
> > > > > > ----------------------------------------------------------------
> > > > > > Xen branch xen-2015-09-08
> > > > > >
> > > > > > ----------------------------------------------------------------
> > > > > > Don Slutz (1):
> > > > > >        xen-hvm: Add trace to ioreq
> > > > > >
> > > > > > Jan Beulich (1):
> > > > > >        xen/HVM: atomically access pointers in bufioreq handling
> > > > > >
> > > > > > Konrad Rzeszutek Wilk (7):
> > > > > >        xen-hvm: When using xc_domain_add_to_physmap also include errno
> > > > > when
> > > > > > reporting
> > > > > >        xen/pt: Update comments with proper function name.
> > > > > >        xen/pt: Make xen_pt_msi_set_enable static
> > > > > >        xen/pt: xen_host_pci_config_read returns -errno, not -1 on
> > > > > failure
> > > > > >        xen: use errno instead of rc for xc_domain_add_to_physmap
> > > > > >        xen/pt/msi: Add the register value when printing logging and
> > > > > error
> > > > > > messages
> > > > > >        xen/pt: Use XEN_PT_LOG properly to guard against compiler
> > > > > warnings.
> > > > > >
> > > > > > Michael S. Tsirkin (1):
> > > > > >        i440fx: make types configurable at run-time
> > > > > >
> > > > > > Tiejun Chen (9):
> > > > > >        pc_init1: pass parameters just with types
> > > > > >        piix: create host bridge to passthrough
> > > > > >        hw/pci-assign: split pci-assign.c
> > > > > >        xen, gfx passthrough: basic graphics passthrough support
> > > > > >        xen, gfx passthrough: retrieve VGA BIOS to work
> > > > > >        igd gfx passthrough: create a isa bridge
> > > > > >        xen, gfx passthrough: register a isa bridge
> > > > > >        xen, gfx passthrough: register host bridge specific to
> > > > > passthrough
> > > > > >        xen, gfx passthrough: add opregion mapping
> > > > > >
> > > > > >   configure                     |   28 +++++
> > > > > >   hw/core/machine.c             |   20 +++
> > > > > >   hw/i386/Makefile.objs         |    1 +
> > > > > >   hw/i386/kvm/pci-assign.c      |   82 ++-----------
> > > > > >   hw/i386/pc_piix.c             |  139 ++++++++++++++++++++-
> > > > > >   hw/i386/pci-assign-load-rom.c |   93 ++++++++++++++
> > > > > >   hw/pci-host/piix.c            |   91 +++++++++++++-
> > > > > >   hw/xen/Makefile.objs          |    1 +
> > > > > >   hw/xen/xen-host-pci-device.c  |    5 +
> > > > > >   hw/xen/xen-host-pci-device.h  |    1 +
> > > > > >   hw/xen/xen_pt.c               |   42 ++++++-
> > > > > >   hw/xen/xen_pt.h               |   22 +++-
> > > > > >   hw/xen/xen_pt_config_init.c   |   59 ++++++++-
> > > > > >   hw/xen/xen_pt_graphics.c      |  272
> > > > > > +++++++++++++++++++++++++++++++++++++++++
> > > > > >   hw/xen/xen_pt_msi.c           |    2 +-
> > > > > >   include/hw/boards.h           |    1 +
> > > > > >   include/hw/i386/pc.h          |    9 +-
> > > > > >   include/hw/pci/pci-assign.h   |   27 ++++
> > > > > >   include/hw/xen/xen_common.h   |   34 +++++-
> > > > > >   qemu-options.hx               |    3 +
> > > > > >   trace-events                  |    7 ++
> > > > > >   vl.c                          |   10 ++
> > > > > >   xen-hvm.c                     |   55 +++++++--
> > > > > >   23 files changed, 891 insertions(+), 113 deletions(-)
> > > > > >   create mode 100644 hw/i386/pci-assign-load-rom.c
> > > > > >   create mode 100644 hw/xen/xen_pt_graphics.c
> > > > > >   create mode 100644 include/hw/pci/pci-assign.h
> > > > > >
> > > > > > _______________________________________________
> > > > > > Xen-devel mailing list
> > > > > > Xen-devel@lists.xen.org
> > > > > > http://lists.xen.org/xen-devel
> > > > > >
> > > > > 
> > > > 
> > > > 
> > > 
> > 
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xen.org
> > http://lists.xen.org/xen-devel
> 

^ permalink raw reply	[flat|nested] 51+ messages in thread

end of thread, other threads:[~2015-09-29  9:56 UTC | newest]

Thread overview: 51+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-08 17:21 [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 01/19] xen-hvm: Add trace to ioreq Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 02/19] i440fx: make types configurable at run-time Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 03/19] pc_init1: pass parameters just with types Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 04/19] piix: create host bridge to passthrough Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 05/19] hw/pci-assign: split pci-assign.c Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 06/19] xen, gfx passthrough: basic graphics passthrough support Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 07/19] xen, gfx passthrough: retrieve VGA BIOS to work Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 08/19] igd gfx passthrough: create a isa bridge Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 09/19] xen, gfx passthrough: register " Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 10/19] xen, gfx passthrough: register host bridge specific to passthrough Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 11/19] xen, gfx passthrough: add opregion mapping Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 12/19] xen-hvm: When using xc_domain_add_to_physmap also include errno when reporting Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 13/19] xen/HVM: atomically access pointers in bufioreq handling Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 14/19] xen/pt: Update comments with proper function name Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 15/19] xen/pt: Make xen_pt_msi_set_enable static Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 16/19] xen/pt: xen_host_pci_config_read returns -errno, not -1 on failure Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 17/19] xen: use errno instead of rc for xc_domain_add_to_physmap Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 18/19] xen/pt/msi: Add the register value when printing logging and error messages Stefano Stabellini
2015-09-08 17:21 ` [Qemu-devel] [PULL 19/19] xen/pt: Use XEN_PT_LOG properly to guard against compiler warnings Stefano Stabellini
2015-09-08 19:12 ` [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag Peter Maydell
2015-09-09 13:06   ` Stefano Stabellini
2015-09-09 16:10     ` Stefano Stabellini
2015-09-09 17:33       ` Peter Maydell
2015-09-10  1:21       ` Chen, Tiejun
2015-09-10  8:57         ` Peter Maydell
2015-09-10  9:32           ` Chen, Tiejun
2015-09-10  9:42             ` Stefano Stabellini
2015-09-10 10:29               ` Stefano Stabellini
2015-09-10 10:46                 ` Michael S. Tsirkin
2015-09-10 11:26                   ` Stefano Stabellini
2015-09-10 12:00                     ` Michael S. Tsirkin
2015-09-10 12:00                       ` Stefano Stabellini
2015-09-10 12:13                         ` Michael S. Tsirkin
2015-09-11  0:40                           ` Chen, Tiejun
2015-09-14  9:57                 ` Paolo Bonzini
2015-09-15  9:55                   ` Stefano Stabellini
2015-09-15 11:00                     ` Paolo Bonzini
2015-09-16  1:11                       ` Chen, Tiejun
2015-09-17 11:47                         ` Stefano Stabellini
2015-09-09 17:21     ` Peter Maydell
2015-09-10  1:12     ` Chen, Tiejun
2015-09-10  8:59       ` Peter Maydell
2015-09-10  9:20         ` Chen, Tiejun
2015-09-10  9:59           ` Stefano Stabellini
2015-09-21  1:16 ` [Qemu-devel] [Xen-devel] " Chen, Tiejun
2015-09-21 16:03   ` Stefano Stabellini
2015-09-28  2:01     ` Chen, Tiejun
2015-09-28 10:01       ` Stefano Stabellini
2015-09-28 17:20         ` Pasi Kärkkäinen
2015-09-29  9:53           ` Stefano Stabellini

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).