patch listed as missing
thibaut noah
thibaut.noah at gmail.com
Mon Feb 22 10:42:47 UTC 2016
2016-02-21 9:38 GMT+01:00 Heinz Diehl <htd+ml at fritha.org>:
> Here's the same patch ported to 4.4.2, avoiding the level 2 fuzz.
> It applies cleanly:
>
> [root at 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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.fedoraproject.org/pipermail/users/attachments/20160222/3b8cb622/attachment-0001.html>
More information about the users
mailing list