22 May, 2011

1 commit


10 May, 2011

2 commits


12 Apr, 2011

1 commit


11 Apr, 2011

2 commits


07 Apr, 2011

6 commits

  • The old code only flushed a DTE or a domain TLB before it is
    actually used by the IOMMU driver. While this is efficient
    and works when done right it is more likely to introduce new
    bugs when changing code (which happened in the past).
    This patch adds code to flush all DTEs and all domain TLBs
    in each IOMMU right after it is enabled (at boot and after
    resume). This reduces the complexity of the driver and makes
    it less likely to introduce stale-TLB bugs in the future.

    Signed-off-by: Joerg Roedel

    Joerg Roedel
     
  • This function operates on a struct device, so give it a name
    that represents that. As a side effect a new function is
    introduced which operates on am iommu and a device-id. It
    will be used again in a later patch.

    Signed-off-by: Joerg Roedel

    Joerg Roedel
     
  • This patch improved the handling of commands when the IOMMU
    command buffer is nearly full. In this case it issues an
    completion wait command and waits until the IOMMU has
    processed it before continuing queuing new commands.

    Signed-off-by: Joerg Roedel

    Joerg Roedel
     
  • These functions all operate on protection domains and not on
    singe IOMMUs. Represent that in their name.

    Signed-off-by: Joerg Roedel

    Joerg Roedel
     
  • The logic to reset the command buffer caused more problems
    than it actually helped. The logic jumped in when the IOMMU
    hardware doesn't execute commands anymore but the reasons
    for this are usually not fixed by just resetting the command
    buffer. So the code can be removed to reduce complexity.

    Signed-off-by: Joerg Roedel

    Joerg Roedel
     
  • This patch cleans up the implementation of completion-wait
    command sending. It also switches the completion indicator
    from the MMIO bit to a memory store which can be checked
    without IOMMU locking.
    As a side effect this patch makes the __iommu_queue_command
    function obsolete and so it is removed too.

    Signed-off-by: Joerg Roedel

    Joerg Roedel
     

06 Apr, 2011

3 commits


02 Nov, 2010

1 commit

  • "gadget", "through", "command", "maintain", "maintain", "controller", "address",
    "between", "initiali[zs]e", "instead", "function", "select", "already",
    "equal", "access", "management", "hierarchy", "registration", "interest",
    "relative", "memory", "offset", "already",

    Signed-off-by: Uwe Kleine-König
    Signed-off-by: Jiri Kosina

    Uwe Kleine-König
     

13 Oct, 2010

1 commit


23 Sep, 2010

1 commit

  • In the __unmap_single function the dma_addr is rounded down
    to a page boundary before the dma pages are unmapped. The
    address is later also used to flush the TLB entries for that
    mapping. But without the offset into the dma page the amount
    of pages to flush might be miscalculated in the TLB flushing
    path. This patch fixes this bug by using the original
    address to flush the TLB.

    Cc: stable@kernel.org
    Signed-off-by: Joerg Roedel

    Joerg Roedel
     

27 Jul, 2010

1 commit


19 Jul, 2010

1 commit


01 Jun, 2010

1 commit


27 May, 2010

1 commit

  • Add a spin_unlock missing on the error path. The locks and unlocks are
    balanced in other functions, so it seems that the same should be the case
    here.

    The semantic match that finds this problem is as follows:
    (http://coccinelle.lip6.fr/)

    //
    @@
    expression E1;
    @@

    * spin_lock(E1,...);

    * spin_unlock(E1,...);
    //

    Cc: stable@kernel.org
    Signed-off-by: Julia Lawall
    Signed-off-by: Joerg Roedel

    Julia Lawall
     

11 May, 2010

1 commit


13 Apr, 2010

1 commit


07 Apr, 2010

2 commits


30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

08 Mar, 2010

7 commits


01 Mar, 2010

3 commits

  • After a guest is shutdown, assigned devices are not properly
    returned to the pt domain. This can leave the device using
    stale cached IOMMU data, and result in a non-functional
    device after it's re-bound to the host driver. For example,
    I see this upon rebinding:

    AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0x000000007e2a8000 flags=0x0050]
    AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0x000000007e2a8040 flags=0x0050]
    AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0x000000007e2a8080 flags=0x0050]
    AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0x000000007e2a80c0 flags=0x0050]
    0000:02:00.0: eth2: Detected Hardware Unit Hang:
    ...

    The amd_iommu_destroy_domain() function calls do_detach()
    which doesn't reattach the pt domain to the device.
    Use __detach_device() instead.

    Cc: stable@kernel.org
    Signed-off-by: Chris Wright
    Signed-off-by: Joerg Roedel

    Chris Wright
     
  • This patch introduces a mutex to lock page table updates in
    the IOMMU-API path. We can't use the spin_lock here because
    this patch might sleep.

    Signed-off-by: Joerg Roedel

    Joerg Roedel
     
  • dev was tested just above, so drop the second test.

    Signed-off-by: Julia Lawall
    Signed-off-by: Joerg Roedel

    Julia Lawall
     

23 Jan, 2010

3 commits