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