lkml.org 
[lkml]   [2012]   [Apr]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patches in this message
    /
    SubjectRe: [ 117/175] iommu/amd: Make sure IOMMU interrupts are re-enabled on resume
    From
    Date
    On Fri, 2012-03-30 at 12:50 -0700, Greg KH wrote:
    > 3.3-stable review patch. If anyone has any objections, please let me know.
    >
    > ------------------
    >
    > From: Joerg Roedel <joerg.roedel@amd.com>
    >
    > commit 9ddd592a191b32f2ee6c4b6ed2bd52665c3a49f5 upstream.
    >
    > Unfortunatly the interrupts for the event log and the
    > peripheral page-faults are only enabled at boot but not
    > re-enabled at resume. Fix that.
    [...]

    It looks like this should be applicable to 3.0 and 3.2 as well, but only
    for the event log. I'm attaching my (untested) backports for
    consideration.

    Ben.

    --
    Ben Hutchings
    Reality is just a crutch for people who can't handle science fiction.
    From ed3845ba84e5dbe3593dddf06b6377960f95712d Mon Sep 17 00:00:00 2001
    From: Joerg Roedel <joerg.roedel@amd.com>
    Date: Thu, 15 Mar 2012 16:29:47 +0100
    Subject: [PATCH] iommu/amd: Make sure IOMMU interrupts are re-enabled on
    resume

    commit 9ddd592a191b32f2ee6c4b6ed2bd52665c3a49f5 upstream.

    Unfortunatly the interrupts for the event log and the
    peripheral page-faults are only enabled at boot but not
    re-enabled at resume. Fix that.

    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    [bwh: Backport to 3.0:
    - Drop change to PPR log which was added in 3.3
    - Source is under arch/x86/kernel]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    arch/x86/kernel/amd_iommu_init.c | 24 +++++++++++++++++-------
    1 file changed, 17 insertions(+), 7 deletions(-)

    diff --git a/arch/x86/kernel/amd_iommu_init.c b/arch/x86/kernel/amd_iommu_init.c
    index bfc8453..33df6e8 100644
    --- a/arch/x86/kernel/amd_iommu_init.c
    +++ b/arch/x86/kernel/amd_iommu_init.c
    @@ -1031,8 +1031,9 @@ static int iommu_setup_msi(struct amd_iommu *iommu)
    {
    int r;

    - if (pci_enable_msi(iommu->dev))
    - return 1;
    + r = pci_enable_msi(iommu->dev);
    + if (r)
    + return r;

    r = request_threaded_irq(iommu->dev->irq,
    amd_iommu_int_handler,
    @@ -1042,24 +1043,33 @@ static int iommu_setup_msi(struct amd_iommu *iommu)

    if (r) {
    pci_disable_msi(iommu->dev);
    - return 1;
    + return r;
    }

    iommu->int_enabled = true;
    - iommu_feature_enable(iommu, CONTROL_EVT_INT_EN);

    return 0;
    }

    static int iommu_init_msi(struct amd_iommu *iommu)
    {
    + int ret;
    +
    if (iommu->int_enabled)
    - return 0;
    + goto enable_faults;

    if (pci_find_capability(iommu->dev, PCI_CAP_ID_MSI))
    - return iommu_setup_msi(iommu);
    + ret = iommu_setup_msi(iommu);
    + else
    + ret = -ENODEV;

    - return 1;
    + if (ret)
    + return ret;
    +
    +enable_faults:
    + iommu_feature_enable(iommu, CONTROL_EVT_INT_EN);
    +
    + return 0;
    }

    /****************************************************************************
    --
    1.7.9.5
    From ce1ae4a46ead4899939002d48e23678601ec6969 Mon Sep 17 00:00:00 2001
    From: Joerg Roedel <joerg.roedel@amd.com>
    Date: Thu, 15 Mar 2012 16:29:47 +0100
    Subject: [PATCH] iommu/amd: Make sure IOMMU interrupts are re-enabled on
    resume

    commit 9ddd592a191b32f2ee6c4b6ed2bd52665c3a49f5 upstream.

    Unfortunatly the interrupts for the event log and the
    peripheral page-faults are only enabled at boot but not
    re-enabled at resume. Fix that.

    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    [bwh: Backport to 3.2: drop change to PPR log which was added in 3.3]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/iommu/amd_iommu_init.c | 24 +++++++++++++++++-------
    1 file changed, 17 insertions(+), 7 deletions(-)

    diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
    index 5c74179..20d5852 100644
    --- a/drivers/iommu/amd_iommu_init.c
    +++ b/drivers/iommu/amd_iommu_init.c
    @@ -1033,8 +1033,9 @@ static int iommu_setup_msi(struct amd_iommu *iommu)
    {
    int r;

    - if (pci_enable_msi(iommu->dev))
    - return 1;
    + r = pci_enable_msi(iommu->dev);
    + if (r)
    + return r;

    r = request_threaded_irq(iommu->dev->irq,
    amd_iommu_int_handler,
    @@ -1044,24 +1045,33 @@ static int iommu_setup_msi(struct amd_iommu *iommu)

    if (r) {
    pci_disable_msi(iommu->dev);
    - return 1;
    + return r;
    }

    iommu->int_enabled = true;
    - iommu_feature_enable(iommu, CONTROL_EVT_INT_EN);

    return 0;
    }

    static int iommu_init_msi(struct amd_iommu *iommu)
    {
    + int ret;
    +
    if (iommu->int_enabled)
    - return 0;
    + goto enable_faults;

    if (pci_find_capability(iommu->dev, PCI_CAP_ID_MSI))
    - return iommu_setup_msi(iommu);
    + ret = iommu_setup_msi(iommu);
    + else
    + ret = -ENODEV;

    - return 1;
    + if (ret)
    + return ret;
    +
    +enable_faults:
    + iommu_feature_enable(iommu, CONTROL_EVT_INT_EN);
    +
    + return 0;
    }

    /****************************************************************************
    --
    1.7.9.5
    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2012-04-03 05:31    [W:0.030 / U:0.196 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site