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

Re: [Xen-devel] [PATCH v2] xen-pciback: optionally allow interrupt enable flag writes





On 12/18/19 10:49 PM, Marek Marczykowski-Górecki wrote:
---
  drivers/xen/xen-pciback/conf_space.c          | 35 ++++++++
  drivers/xen/xen-pciback/conf_space.h          | 10 +++
  .../xen/xen-pciback/conf_space_capability.c   | 88 +++++++++++++++++++
  drivers/xen/xen-pciback/conf_space_header.c   | 19 ++++
  drivers/xen/xen-pciback/pci_stub.c            | 66 ++++++++++++++
  drivers/xen/xen-pciback/pciback.h             |  1 +
  6 files changed, 219 insertions(+)

This also needs an update to Documentation/ABI/testing/sysfs-driver-pciback.


@@ -64,6 +64,7 @@ static int command_write(struct pci_dev *dev, int offset, u16 
value, void *data)
        int err;
        u16 val;
        struct pci_cmd_info *cmd = data;
+       u16 cap_value;

What is this for?


dev_data = pci_get_drvdata(dev);
        if (!pci_is_enabled(dev) && is_enable_cmd(value)) {
@@ -117,6 +118,24 @@ static int command_write(struct pci_dev *dev, int offset, 
u16 value, void *data)
                pci_clear_mwi(dev);
        }
+ if (dev_data && dev_data->allow_interrupt_control) {
+               if (!(cmd->val & PCI_COMMAND_INTX_DISABLE) &&
+                   (value & PCI_COMMAND_INTX_DISABLE)) {
+                       pci_intx(dev, 0);
+               } else if ((cmd->val & PCI_COMMAND_INTX_DISABLE) &&
+                   !(value & PCI_COMMAND_INTX_DISABLE)) {
+                       /* Do not allow enabling INTx together with MSI or 
MSI-X. */
+                       switch (xen_pcibk_get_interrupt_type(dev)) {
+                               case INTERRUPT_TYPE_NONE:
+                               case INTERRUPT_TYPE_INTX:
+                                       pci_intx(dev, 1);
+                                       break;
+                               default:
+                                       return PCIBIOS_SET_FAILED;
+                       }
+               }


Perhaps this is slightly easier to read:

if (cmd->val ^ val)  &  PCI_COMMAND_INTX_DISABLE) {
        if (value & PCI_COMMAND_INTX_DISABLE) {
                pci_intx(dev, 0);
        } else {
                /* Do not allow enabling INTx together with MSI or MSI-X. */
            switch (xen_pcibk_get_interrupt_type(dev)) {
                case INTERRUPT_TYPE_NONE:
                case INTERRUPT_TYPE_INTX:
                    pci_intx(dev, 1);
                    break;
                default:
                    return PCIBIOS_SET_FAILED;
            }
       }
}

And also, if INTERRUPT_TYPE_INTX, aren't you already enabled?


-boris


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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