[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 2/2] ioemu: Enable guest OS to program D0-D3hot states of an assigned device



Yuji Shimada writes ("[Xen-devel] [PATCH 2/2] ioemu: Enable guest OS to program 
D0-D3hot states of an assigned device"):
> This patch enables guest OS to program D0-D3hot states of assigned
> device.

I applied this patch but unfortunately it broke the automatic test
(and thus the staging propagation) because our automatic test system
has a very old version of libpci.  I have applied a band-aid - see
below - but would you please review it and consider whether a
different fix would be correct ?  For example, we might copy the
definitions of PCI_ERR_* from the libpci headers into pass-through.h
protected by an #ifdef, or something.

Also, this logic is very very strange:

> +    int aer_size = 0x2c;
> +
> +    for (i=0; i < aer_size; i+=4)
> +    {
> +        switch (i) {
> +        /* after reset, following register values should be restored.
> +         * So, save them.
> +         */
> +        case PCI_ERR_UNCOR_MASK:
> +        case PCI_ERR_UNCOR_SEVER:
> +        case PCI_ERR_COR_MASK:
> +        case PCI_ERR_CAP:
> +            *(uint32_t*)(d->config + (aer_base + i))
> +                 = pci_read_long(ptdev->pci_dev, (aer_base + i));
> +            break;
> +        default:
> +            break;
> +        }
> +    }

What purpose does the loop serve ?  Is there an ordering constraint ?
There are two copies of this construct, too - one in the save and one
in the restore.  That duplication is rather unfortunate.

Thanks,
Ian.

commit b80fc65b715099ee28465f6571eb5242588ef246
Author: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Date:   Fri Feb 6 16:16:06 2009 +0000

    hw/pass-through.c: workaround for old libpci
    
    Old versions of libpci (including the ones on the automatic tests
    which control Xen staging propagation) do not define
    PCI_LIB_VERSION or the PCI_ERR_{UNCOR_MASK,...} constants.
    
    This means that change 8c771eb6294afc5b3754a9e3de51568d4e5986c2 breaks
    the build.  In this changeset I apply what is intended to be a
    workaround for this problem but it may not be completely correct; this
    is therefore perhaps an interim fix.
    
    The potential problem is that the save/restore of some PCI passthrough
    error handling registers (across suspend/resume) may not work properly
    with old versions of libpci.  However non-passthrough and non-suspect
    use cases should now be fine.
    
    Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>

diff --git a/hw/pass-through.c b/hw/pass-through.c
index 8dfae3c..29714c7 100644
--- a/hw/pass-through.c
+++ b/hw/pass-through.c
@@ -1503,7 +1503,7 @@ exit:
 
 static void pt_libpci_fixup(struct pci_dev *dev)
 {
-#if PCI_LIB_VERSION < 0x030100
+#if !defined(PCI_LIB_VERSION) || PCI_LIB_VERSION < 0x030100
     int i;
     FILE *fp;
     char path[PATH_MAX], buf[256];
@@ -1850,6 +1850,7 @@ static void pt_aer_reg_save(struct pt_dev *ptdev)
     /* Root Port and Root Complex Event Collector need size expansion */
     int aer_size = 0x2c;
 
+#ifdef PCI_ERR_UNCOR_MASK
     for (i=0; i < aer_size; i+=4)
     {
         switch (i) {
@@ -1867,6 +1868,7 @@ static void pt_aer_reg_save(struct pt_dev *ptdev)
             break;
         }
     }
+#endif
 }
 
 /* restore AER register */
@@ -1879,6 +1881,7 @@ static void pt_aer_reg_restore(struct pt_dev *ptdev)
     /* Root Port and Root Complex Event Collector need size expansion */
     int aer_size = 0x2c;
 
+#ifdef PCI_ERR_UNCOR_MASK
     for (i=0; i < aer_size; i+=4)
     {
         switch (i) {
@@ -1899,6 +1902,7 @@ static void pt_aer_reg_restore(struct pt_dev *ptdev)
             break;
         }
     }
+#endif
 }
 
 /* reset Interrupt and I/O resource  */

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.