2016-02-21 9:38 GMT+01:00 Heinz Diehl <htd...@fritha.org>: > Here's the same patch ported to 4.4.2, avoiding the level 2 fuzz. > It applies cleanly: > > [root@chiara linux-4.4.2]# cat quirk.diff | patch -p2 > patching file drivers/pci/quirks.c > > > diff -urN a/linux-4.4.2/drivers/pci/quirks.c > b/linux-4.4.2/drivers/pci/quirks.c > --- a/linux-4.4.2/drivers/pci/quirks.c 2016-02-17 21:31:25.000000000 +0100 > +++ b/linux-4.4.2/drivers/pci/quirks.c 2016-02-21 09:30:52.154070792 +0100 > @@ -3659,6 +3659,108 @@ > > DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ADAPTEC2, 0x0285, > quirk_fixed_dma_alias); > > +static bool acs_on_downstream; > +static bool acs_on_multifunction; > + > +#define NUM_ACS_IDS 16 > +struct acs_on_id { > + unsigned short vendor; > + unsigned short device; > +}; > +static struct acs_on_id acs_on_ids[NUM_ACS_IDS]; > +static u8 max_acs_id; > + > +static __init int pcie_acs_override_setup(char *p) > +{ > + if (!p) > + return -EINVAL; > + > + while (*p) { > + if (!strncmp(p, "downstream", 10)) > + acs_on_downstream = true; > + if (!strncmp(p, "multifunction", 13)) > + acs_on_multifunction = true; > + if (!strncmp(p, "id:", 3)) { > + char opt[5]; > + int ret; > + long val; > + > + if (max_acs_id >= NUM_ACS_IDS - 1) { > + pr_warn("Out of PCIe ACS override slots (%d)\n", > + NUM_ACS_IDS); > + goto next; > + } > + > + p += 3; > + snprintf(opt, 5, "%s", p); > + ret = kstrtol(opt, 16, &val); > + if (ret) { > + pr_warn("PCIe ACS ID parse error %d\n", ret); > + goto next; > + } > + acs_on_ids[max_acs_id].vendor = val; > + > + p += strcspn(p, ":"); > + if (*p != ':') { > + pr_warn("PCIe ACS invalid ID\n"); > + goto next; > + } > + > + p++; > + snprintf(opt, 5, "%s", p); > + ret = kstrtol(opt, 16, &val); > + if (ret) { > + pr_warn("PCIe ACS ID parse error %d\n", ret); > + goto next; > + } > + acs_on_ids[max_acs_id].device = val; > + max_acs_id++; > + } > +next: > + p += strcspn(p, ","); > + if (*p == ',') > + p++; > + } > + > + if (acs_on_downstream || acs_on_multifunction || max_acs_id) > + pr_warn("Warning: PCIe ACS overrides enabled; This may allow > non-IOMMU protected peer-to-peer DMA\n"); > + > + return 0; > +} > +early_param("pcie_acs_override", pcie_acs_override_setup); > + > +static int pcie_acs_overrides(struct pci_dev *dev, u16 acs_flags) > +{ > + int i; > + > + /* Never override ACS for legacy devices or devices with ACS caps */ > + if (!pci_is_pcie(dev) || > + pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS)) > + return -ENOTTY; > + > + for (i = 0; i < max_acs_id; i++) > + if (acs_on_ids[i].vendor == dev->vendor && > + acs_on_ids[i].device == dev->device) > + return 1; > + > + switch (pci_pcie_type(dev)) { > + case PCI_EXP_TYPE_DOWNSTREAM: > + case PCI_EXP_TYPE_ROOT_PORT: > + if (acs_on_downstream) > + return 1; > + break; > + case PCI_EXP_TYPE_ENDPOINT: > + case PCI_EXP_TYPE_UPSTREAM: > + case PCI_EXP_TYPE_LEG_END: > + case PCI_EXP_TYPE_RC_END: > + if (acs_on_multifunction && dev->multifunction) > + return 1; > + } > + > + return -ENOTTY; > +} > + > + > /* > * A few PCIe-to-PCI bridges fail to expose a PCIe capability, resulting > in > * using the wrong DMA alias for the device. Some of these devices can be > @@ -3964,6 +4066,7 @@ > { PCI_VENDOR_ID_INTEL, 0x15b8, pci_quirk_mf_endpoint_acs }, > /* Intel PCH root ports */ > { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_intel_pch_acs }, > + { PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides }, > { 0x19a2, 0x710, pci_quirk_mf_endpoint_acs }, /* Emulex BE3-R */ > { 0x10df, 0x720, pci_quirk_mf_endpoint_acs }, /* Emulex Skyhawk-R > */ > { 0 } >
Hey mate, applying the patch at root directory of kernel 4.2.2 (downloaded from kernel.org) cat acs_override.patch | patch -p2 patching file drivers/pci/quirks.c HUNK #2 FAILED at 4066 Here is a paste of the reject file : cat drivers/pci/quirks.c.rej --- drivers/pci/quirks.c 2016-02-17 21:31:25.000000000 +0100 +++ drivers/pci/quirks.c 2016-02-21 09:30:52.154070792 +0100 @@ -4066,6 +4168,7 @@ { PCI_VENDOR_ID_INTEL, 0x15b8, pci_quirk_mf_endpoint_acs }, /* Intel PCH root ports */ { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_intel_pch_acs }, + { PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides }, { 0x19a2, 0x710, pci_quirk_mf_endpoint_acs }, /* Emulex BE3-R */ { 0x10df, 0x720, pci_quirk_mf_endpoint_acs }, /* Emulex Skyhawk-R */ { 0 } Not appying cleanly here, did i miss something?
-- users mailing list users@lists.fedoraproject.org To unsubscribe or change subscription options: https://admin.fedoraproject.org/mailman/listinfo/users Fedora Code of Conduct: http://fedoraproject.org/code-of-conduct Guidelines: http://fedoraproject.org/wiki/Mailing_list_guidelines Have a question? Ask away: http://ask.fedoraproject.org