09 May, 2007

1 commit


24 Apr, 2007

1 commit

  • Until now, we have always entered the spu page fault handler
    with a mutex for the spu context held. This has multiple
    bad side-effects:
    - it becomes impossible to suspend the context during
    page faults
    - if an spu program attempts to access its own mmio
    areas through DMA, we get an immediate livelock when
    the nopage function tries to acquire the same mutex

    This patch makes the page fault logic operate on a
    struct spu_context instead of a struct spu, and moves it
    from spu_base.c to a new file fault.c inside of spufs.

    We now also need to copy the dar and dsisr contents
    of the last fault into the saved context to have it
    accessible in case we schedule out the context before
    activating the page fault handler.

    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     

10 Mar, 2007

1 commit

  • The SPU code doesn't properly invalidate SPUs SLBs when necessary,
    for example when changing a segment size from the hugetlbfs code. In
    addition, it saves and restores the SLB content on context switches
    which makes it harder to properly handle those invalidations.

    This patch removes the saving & restoring for now, something more
    efficient might be found later on. It also adds a spu_flush_all_slbs(mm)
    that can be used by the core mm code to flush the SLBs of all SPEs that
    are running a given mm at the time of the flush.

    In order to do that, it adds a spinlock to the list of all SPEs and move
    some bits & pieces from spufs to spu_base.c

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     

25 Oct, 2006

1 commit

  • SPRN_SDR1 and the SPE's MFC SDR are hypervisor resources and
    are not accessible from a logical partition. This change adds an
    access wrapper.

    When running on bare H/W, the spufs needs to only set the SPE's MFC SDR
    to the value of the PPE's SPRN_SDR1 once at SPE initialization, so this
    change renames mfc_sdr_set() to mfc_sdr_setup() and moves the
    access of SPRN_SDR1 into the mmio wrapper. It also removes the now
    unneeded member mfc_sdr_RW from struct spu_priv1_collapsed.

    Signed-off-by: Masato Noguchi
    Signed-off-by: Geoff Levand
    Signed-off-by: Arnd Bergmann

    --
    Signed-off-by: Paul Mackerras

    Masato Noguchi
     

21 Jun, 2006

1 commit

  • The SPU context save/restore code is currently built
    for a 4k page size and we provide a _shipped version
    of it since most people don't have the spu toolchain
    that is needed to rebuild that code.

    This patch hardcodes the data structures to a 64k
    page alignment, which also guarantees 4k alignment
    but unfortunately wastes 60k of memory per SPU
    context that is created in the running system.

    We will follow up on this with another patch to
    reduce that overhead or maybe redo the context
    save/restore logic to do this part entirely different,
    but for now it should make experimental systems
    work with either page size.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    arnd@arndb.de
     

09 Jan, 2006

4 commits

  • include/asm-ppc/ had #ifdef __KERNEL__ in all header files that
    are not meant for use by user space, include/asm-powerpc does
    not have this yet.

    This patch gets us a lot closer there. There are a few cases
    where I was not sure, so I left them out. I have verified
    that no CONFIG_* symbols are used outside of __KERNEL__
    any more and that there are no obvious compile errors when
    including any of the headers in user space libraries.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • This adds a scheduler for SPUs to make it possible to use
    more logical SPUs than physical ones are present in the
    system.

    Currently, there is no support for preempting a running
    SPU thread, they have to leave the SPU by either triggering
    an event on the SPU that causes it to return to the
    owning thread or by sending a signal to it.

    This patch also adds operations that enable accessing an SPU
    in either runnable or saved state. We use an RW semaphore
    to protect the state of the SPU from changing underneath
    us, while we are holding it readable. In order to change
    the state, it is acquired writeable and a context save
    or restore is executed before downgrading the semaphore
    to read-only.

    From: Mark Nutter ,
    Uli Weigand
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • This adds the code needed to perform a context switch from
    spufs, following the recommended 76-step sequence.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Mark Nutter
     
  • Add some infrastructure for saving and restoring the context of an
    SPE. This patch creates a new structure that can hold the whole
    state of a physical SPE in memory. It also contains code that
    avoids races during the context switch and the binary code that
    is loaded to the SPU in order to access its registers.

    The actual PPE- and SPE-side context switch code are two separate
    patches.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Mark Nutter