WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [linux-2.6.18-xen] pciback: Fix SRIOV VF passthru

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [linux-2.6.18-xen] pciback: Fix SRIOV VF passthru
From: "Xen patchbot-linux-2.6.18-xen" <patchbot-linux-2.6.18-xen@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 26 Feb 2010 09:25:03 -0800
Delivery-date: Fri, 26 Feb 2010 09:25:08 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1267204545 0
# Node ID 693c40564c8de65e32f48168bd8733918f661d7e
# Parent  efae51e0fa91a9ef3f0497dcba19e7ade60397c5
pciback: Fix SRIOV VF passthru

Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 drivers/xen/pciback/conf_space_header.c |   57 +++++++++++++++++++-------------
 1 files changed, 34 insertions(+), 23 deletions(-)

diff -r efae51e0fa91 -r 693c40564c8d drivers/xen/pciback/conf_space_header.c
--- a/drivers/xen/pciback/conf_space_header.c   Wed Feb 24 11:05:02 2010 +0000
+++ b/drivers/xen/pciback/conf_space_header.c   Fri Feb 26 17:15:45 2010 +0000
@@ -73,17 +73,7 @@ static int rom_write(struct pci_dev *dev
        /* A write to obtain the length must happen as a 32-bit write.
         * This does not (yet) support writing individual bytes
         */
-       if (value == ~PCI_ROM_ADDRESS_ENABLE)
-               bar->which = 1;
-       else {
-               u32 tmpval;
-               pci_read_config_dword(dev, offset, &tmpval);
-               if (tmpval != bar->val && value == bar->val) {
-                       /* Allow restoration of bar value. */
-                       pci_write_config_dword(dev, offset, bar->val);
-               }
-               bar->which = 0;
-       }
+       bar->which = (value == ~PCI_ROM_ADDRESS_ENABLE);
 
        /* Do we need to support enabling/disabling the rom address here? */
 
@@ -107,17 +97,7 @@ static int bar_write(struct pci_dev *dev
        /* A write to obtain the length must happen as a 32-bit write.
         * This does not (yet) support writing individual bytes
         */
-       if (value == ~0)
-               bar->which = 1;
-       else {
-               u32 tmpval;
-               pci_read_config_dword(dev, offset, &tmpval);
-               if (tmpval != bar->val && value == bar->val) {
-                       /* Allow restoration of bar value. */
-                       pci_write_config_dword(dev, offset, bar->val);
-               }
-               bar->which = 0;
-       }
+       bar->which = (value == ~0);
 
        return 0;
 }
@@ -125,6 +105,10 @@ static int bar_read(struct pci_dev *dev,
 static int bar_read(struct pci_dev *dev, int offset, u32 * value, void *data)
 {
        struct pci_bar_info *bar = data;
+       int idx = (offset - 0x10) >> 2;
+
+       if (idx > PCI_STD_RESOURCE_END )
+               idx = PCI_ROM_RESOURCE;
 
        if (unlikely(!bar)) {
                printk(KERN_WARNING "pciback: driver data not found for %s\n",
@@ -132,7 +116,8 @@ static int bar_read(struct pci_dev *dev,
                return XEN_PCI_ERR_op_failed;
        }
 
-       *value = bar->which ? bar->len_val : bar->val;
+       *value = bar->which ? ~(pci_resource_len(dev, idx)-1) : 
pci_resource_start(dev, idx);
+       *value |= pci_resource_flags(dev, idx) & 0xf;
 
        return 0;
 }
@@ -193,6 +178,22 @@ static int interrupt_read(struct pci_dev
        return 0;
 }
 
+static int vendor_read(struct pci_dev *dev, int offset, u16 * value,
+                      void *data)
+{
+       *value = dev->vendor;
+
+       return 0;
+}
+
+static int device_read(struct pci_dev *dev, int offset, u16 * value,
+                      void *data)
+{
+       *value = dev->device;
+
+       return 0;
+}
+
 static int bist_write(struct pci_dev *dev, int offset, u8 value, void *data)
 {
        u8 cur_value;
@@ -211,6 +212,16 @@ static int bist_write(struct pci_dev *de
 }
 
 static const struct config_field header_common[] = {
+       {
+        .offset    = PCI_VENDOR_ID,
+        .size      = 2,
+        .u.w.read  = vendor_read
+       },
+       {
+        .offset    = PCI_DEVICE_ID,
+        .size      = 2,
+        .u.w.read  = device_read
+       },
        {
         .offset    = PCI_COMMAND,
         .size      = 2,

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [linux-2.6.18-xen] pciback: Fix SRIOV VF passthru, Xen patchbot-linux-2.6.18-xen <=