lkml.org 
[lkml]   [2017]   [Oct]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 175/192] PCI: Support PCIe devices with short cfg_size
    3.16.49-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: "Jason S. McMullan" <jason.mcmullan@netronome.com>

    commit c20aecf6963d1273d8f6d61c042b4845441ca592 upstream.

    If a device quirk modifies the pci_dev->cfg_size to be less than
    PCI_CFG_SPACE_EXP_SIZE (4096), but greater than PCI_CFG_SPACE_SIZE (256),
    the PCI sysfs interface truncates the readable size to PCI_CFG_SPACE_SIZE.

    Allow sysfs access to config space up to cfg_size, even if the device
    doesn't support the entire 4096-byte PCIe config space.

    Note that pci_read_config() and pci_write_config() limit access to
    dev->cfg_size even though pcie_config_attr contains 4096 (the maximum
    size).

    Signed-off-by: Jason S. McMullan <jason.mcmullan@netronome.com>
    [simon: edited changelog]
    Signed-off-by: Simon Horman <simon.horman@netronome.com>
    [bhelgaas: more changelog edits]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/pci/pci-sysfs.c | 18 +++++++++---------
    1 file changed, 9 insertions(+), 9 deletions(-)

    --- a/drivers/pci/pci-sysfs.c
    +++ b/drivers/pci/pci-sysfs.c
    @@ -1367,10 +1367,10 @@ int __must_check pci_create_sysfs_dev_fi
    if (!sysfs_initialized)
    return -EACCES;

    - if (pdev->cfg_size < PCI_CFG_SPACE_EXP_SIZE)
    - retval = sysfs_create_bin_file(&pdev->dev.kobj, &pci_config_attr);
    - else
    + if (pdev->cfg_size > PCI_CFG_SPACE_SIZE)
    retval = sysfs_create_bin_file(&pdev->dev.kobj, &pcie_config_attr);
    + else
    + retval = sysfs_create_bin_file(&pdev->dev.kobj, &pci_config_attr);
    if (retval)
    goto err;

    @@ -1422,10 +1422,10 @@ err_rom_file:
    err_resource_files:
    pci_remove_resource_files(pdev);
    err_config_file:
    - if (pdev->cfg_size < PCI_CFG_SPACE_EXP_SIZE)
    - sysfs_remove_bin_file(&pdev->dev.kobj, &pci_config_attr);
    - else
    + if (pdev->cfg_size > PCI_CFG_SPACE_SIZE)
    sysfs_remove_bin_file(&pdev->dev.kobj, &pcie_config_attr);
    + else
    + sysfs_remove_bin_file(&pdev->dev.kobj, &pci_config_attr);
    err:
    return retval;
    }
    @@ -1459,10 +1459,10 @@ void pci_remove_sysfs_dev_files(struct p

    pci_remove_capabilities_sysfs(pdev);

    - if (pdev->cfg_size < PCI_CFG_SPACE_EXP_SIZE)
    - sysfs_remove_bin_file(&pdev->dev.kobj, &pci_config_attr);
    - else
    + if (pdev->cfg_size > PCI_CFG_SPACE_SIZE)
    sysfs_remove_bin_file(&pdev->dev.kobj, &pcie_config_attr);
    + else
    + sysfs_remove_bin_file(&pdev->dev.kobj, &pci_config_attr);

    pci_remove_resource_files(pdev);

    \
     
     \ /
      Last update: 2017-10-09 16:00    [W:5.550 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site