lkml.org 
[lkml]   [2012]   [Feb]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 13/13] PCI: Disable mem in the ioapic removing path
    Date
    For physical hot plug should be ok, but for remove/rescan path will need us
    to disable that.

    otherwise rescan mmio resource for pci ioapic device will not be sized and
    allocated, aka skiped.
    For ioapic_probe:pci_enable_device will not enable the device correctly, and
    will bail out early.

    So we can just disable mmio for all removing case. that will hurt real hotplug
    path.

    Signed-off-by: <yinghai@kernel.org>
    Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
    ---
    drivers/pci/ioapic.c | 13 +++++++++++++
    1 files changed, 13 insertions(+), 0 deletions(-)

    diff --git a/drivers/pci/ioapic.c b/drivers/pci/ioapic.c
    index 4183a5c..0b2c210 100644
    --- a/drivers/pci/ioapic.c
    +++ b/drivers/pci/ioapic.c
    @@ -88,6 +88,17 @@ exit_free:
    return -ENODEV;
    }

    +static void pci_disable_device_mem(struct pci_dev *dev)
    +{
    + u16 pci_command;
    +
    + pci_read_config_word(dev, PCI_COMMAND, &pci_command);
    + if (pci_command & PCI_COMMAND_MEMORY) {
    + pci_command &= ~PCI_COMMAND_MEMORY;
    + pci_write_config_word(dev, PCI_COMMAND, pci_command);
    + }
    +}
    +
    static void __devexit ioapic_remove(struct pci_dev *dev)
    {
    struct ioapic *ioapic = pci_get_drvdata(dev);
    @@ -95,6 +106,8 @@ static void __devexit ioapic_remove(struct pci_dev *dev)
    acpi_unregister_ioapic(ioapic->handle, ioapic->gsi_base);
    pci_release_region(dev, 0);
    pci_disable_device(dev);
    + /* need to disable it, otherwise remove/rescan will not work */
    + pci_disable_device_mem(dev);
    kfree(ioapic);
    }

    --
    1.7.7


    \
     
     \ /
      Last update: 2012-02-24 04:55    [W:0.023 / U:62.300 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site