lkml.org 
[lkml]   [2009]   [Aug]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [regression, bisected] fails to boot on Dell Optiplex 760 with VT-d enabled
    * Faidon Liambotis (paravoid@debian.org) wrote:
    > I am experiencin a bug on an Dell Optiplex 760 with a configuration that
    > has an Intel Core2 Q9550 CPU and with an up-to-date BIOS, version A03.
    >
    > When "VT for Direct I/O" is enabled in the BIOS, v2.6.30 boots and works
    > perfectly, while v2.6.31-rc1..rc6 fail (both of them x86-64).

    AFAIK, this platform is broken when VT-d is enabled.
    Can you add this patch to a broken kernel and retest?
    Please boot with 'debug' on the kernel command line.

    drivers/pci/dmar.c | 19 ++++++++++++-------
    1 files changed, 12 insertions(+), 7 deletions(-)

    diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c
    index 7b287cb..40f497b 100644
    --- a/drivers/pci/dmar.c
    +++ b/drivers/pci/dmar.c
    @@ -631,6 +631,18 @@ int alloc_iommu(struct dmar_drhd_unit *drhd)
    }
    iommu->cap = dmar_readq(iommu->reg + DMAR_CAP_REG);
    iommu->ecap = dmar_readq(iommu->reg + DMAR_ECAP_REG);
    + ver = readl(iommu->reg + DMAR_VER_REG);
    + printk(KERN_DEBUG "IOMMU %llx: ver %d:%d cap %llx ecap %llx\n",
    + (unsigned long long)drhd->reg_base_addr,
    + DMAR_VER_MAJOR(ver), DMAR_VER_MINOR(ver),
    + (unsigned long long)iommu->cap,
    + (unsigned long long)iommu->ecap);
    +
    + if (ver == (u32)-1 || iommu->cap == (u64)-1 || iommu->ecap == (u64)-1) {
    + printk(KERN_ERR "IOMMU: BIOS or hardware problem, disabling "
    + "VT-d\n");
    + goto error;
    + }

    #ifdef CONFIG_DMAR
    agaw = iommu_calculate_agaw(iommu);
    @@ -664,13 +676,6 @@ int alloc_iommu(struct dmar_drhd_unit *drhd)
    }
    }

    - ver = readl(iommu->reg + DMAR_VER_REG);
    - pr_debug("IOMMU %llx: ver %d:%d cap %llx ecap %llx\n",
    - (unsigned long long)drhd->reg_base_addr,
    - DMAR_VER_MAJOR(ver), DMAR_VER_MINOR(ver),
    - (unsigned long long)iommu->cap,
    - (unsigned long long)iommu->ecap);
    -
    spin_lock_init(&iommu->register_lock);

    drhd->iommu = iommu;

    \
     
     \ /
      Last update: 2009-08-18 01:15    [W:0.028 / U:32.164 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site