In reply to -
http://lists.xen.org/archives/html/xen-devel/2016-06/msg00622.html

HI, I am working with Jurgen on the issue, as per Jan's request I tried to
write explicitly only latency timer to be written -
bool force_write = false;
if ((dev_data->permissive || xen_pcibk_permissive) &&
              offset == PCI_CACHE_LINE_SIZE && size == 4)
             force_write = true;
...

if ((force_write || !handled) && !err) {...}

But then it exposed another issue, the command register field seems not to
be restored also
because I think the bits which are to be restored are not
in PCI_COMMAND_GUEST mask.

The only hack which always works for me is force write even if the
confpsace fields filter doens't allow it -

+       int remainder = size;
+
        if (unlikely(verbose_request))
                printk(KERN_DEBUG
                       DRV_NAME ": %s: write request %d bytes at 0x%x =
%x\n",
@@ -252,10 +254,11 @@ int xen_pcibk_config_write(struct pci_dev *dev, int
offset, int size, u32 value)
                         * special helpers to work correctly.
                         */
                        handled = 1;
+                       remainder -= field->size
                }
        }

-       if (!handled && !err) {
+       if ((remainder || !handled) && !err) {


Thanks.

Andrey Grodzovsky.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

Reply via email to